<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6126439941109702145</id><updated>2026-10-06T06:30:20.168-07:00</updated><category term="java"/><category term="stock"/><category term="stockreleaser"/><category term="code"/><category term="linux"/><category term="chrome"/><category term="configure"/><category term="directory layot"/><category term="firefox"/><category term="ie"/><category term="internet explorer"/><category term="main"/><category term="maven"/><category term="new feature"/><category term="openvpn"/><category term="package"/><category term="project structure"/><category term="property release"/><category term="property release builder"/><category term="resources"/><category term="safari"/><category term="selenium 2.0"/><category term="setup"/><category term="sources"/><category term="src"/><category term="target"/><category term="vpn"/><category term="webdriver"/><category term="added"/><category term="builder"/><category term="changed"/><category term="changes"/><category term="check image exists"/><category term="clear input element"/><category term="commit"/><category term="connection"/><category term="count"/><category term="crt"/><category term="design"/><category term="gateway"/><category term="gather"/><category term="history"/><category term="how-to"/><category term="lines"/><category term="multiple releases"/><category term="online"/><category term="project"/><category term="removed"/><category term="shutterstock"/><category term="signature"/><category term="statistic"/><category term="statistics"/><category term="svn"/><category term="test image url"/><category term="web-design"/><category term="джава"/><category term="мавен"/><category term="структура проекта"/><title type='text'>Cyberfall</title><subtitle type='html'>This blog is about my Java experience and about my own project stockreleaser.com. StockReleaser is an online service to create and fill out property releases for stock sites.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-1942661219605144678</id><published>2015-03-11T00:32:00.000-07:00</published><updated>2015-03-11T00:32:27.386-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="multiple releases"/><category scheme="http://www.blogger.com/atom/ns#" term="new feature"/><category scheme="http://www.blogger.com/atom/ns#" term="property release"/><category scheme="http://www.blogger.com/atom/ns#" term="stock"/><category scheme="http://www.blogger.com/atom/ns#" term="stockreleaser"/><title type='text'>[ StockReleaser | Tips ] Multiple releases at once!</title><content type='html'>&lt;div&gt;
The most useful feature of service &lt;a href=&quot;http://stockreleaser.com/&quot;&gt;StockReleaser.com&lt;/a&gt; is multi-release support. This service allows you to build property releases for multiple number of images (arts, photos, pictures) at once. Such feature could really save your time and will make this process faster and easier.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpmj8yvXkSVaGbVG6WMWNvAIMP-HtaNHCKStixyn8BlC0P49YK8-Vbgxfn4nah32qgNoBntsHxngMk99-krangCZTCQ_W-s9ZgMwMcsvCab5ginq1KBhpYIvoyr-rLXdl81QklGNCtQHM/s1600/article.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpmj8yvXkSVaGbVG6WMWNvAIMP-HtaNHCKStixyn8BlC0P49YK8-Vbgxfn4nah32qgNoBntsHxngMk99-krangCZTCQ_W-s9ZgMwMcsvCab5ginq1KBhpYIvoyr-rLXdl81QklGNCtQHM/s1600/article.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To use it, just upload all images which have to be released and add description for them. Then, fill out all Author and Witness fields which are common for all images. For each uploaded image service StockReleaser will create it&#39;s own property release. All common Author and Witness fields will have the same values for different releases, but image-specific fields like image itself and it&#39;s description - will be different. Finally, StockReleaser will pack property releases inside one ZIP-archive.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How to use StockReleaser:&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://cyber-fall.blogspot.ru/2015/02/property-release-builder.html&quot;&gt;http://cyber-fall.blogspot.ru/2015/02/property-release-builder.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Service: &lt;a href=&quot;http://stockreleaser.com/&quot;&gt;http://stockreleaser.com&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Support Team: support@stockreleaser.com&lt;/div&gt;
&lt;div&gt;
Join us on Facebook:&amp;nbsp;&lt;a href=&quot;http://facebook.com/groups/stockreleaser&quot;&gt;http://facebook.com/groups/stockreleaser&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/1942661219605144678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/1942661219605144678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/1942661219605144678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/1942661219605144678'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2015/03/stockreleaser-tips-multiple-releases-at.html' title='[ StockReleaser | Tips ] Multiple releases at once!'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpmj8yvXkSVaGbVG6WMWNvAIMP-HtaNHCKStixyn8BlC0P49YK8-Vbgxfn4nah32qgNoBntsHxngMk99-krangCZTCQ_W-s9ZgMwMcsvCab5ginq1KBhpYIvoyr-rLXdl81QklGNCtQHM/s72-c/article.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-5766562303872264328</id><published>2015-03-05T13:34:00.002-08:00</published><updated>2015-03-11T00:33:19.944-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="online"/><category scheme="http://www.blogger.com/atom/ns#" term="property release builder"/><category scheme="http://www.blogger.com/atom/ns#" term="signature"/><category scheme="http://www.blogger.com/atom/ns#" term="stock"/><category scheme="http://www.blogger.com/atom/ns#" term="stockreleaser"/><title type='text'>[ StockReleaser | Tips ] How to place signatures on property release</title><content type='html'>&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
Most difficult step in filling-in property releases using &lt;a href=&quot;http://stockreleaser.com/&quot; target=&quot;_blank&quot;&gt;StockReleaser&lt;/a&gt;&amp;nbsp;service is to put images with signatures for Owner/Author and Witness on release template. Below, I listed most important requirements for signatures and described how service process them.&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
There are just a few requirements:&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Signature should be written over transparent background&lt;/li&gt;
&lt;li&gt;Signature should be saved as image in PNG file format (.png) with transparent layer support&lt;/li&gt;
&lt;li&gt;Recommended proportions for signature images are: 500x100&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Actual image size doesn&#39;t really matter, because &lt;b&gt;StockReleaser&lt;/b&gt; service proportionally scales images automatically to fit a place. Just make sure that there are no too large indents in your signature image, otherwise image will look too small.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here is an example of signature image:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmE1yMeUb6l2DpT8M59qZPm0zoCNRaVIVyQzHhDRug-5MCJvMxfAoPR7wJdHaHOAtgZG78b3PPaK6GUFFgn0RDHltljkFMTQx2daa8RO3FJHsmNHhuR1Yry1DjACC7GNX5D_tgVdp5aCs/s1600/owner_sign.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmE1yMeUb6l2DpT8M59qZPm0zoCNRaVIVyQzHhDRug-5MCJvMxfAoPR7wJdHaHOAtgZG78b3PPaK6GUFFgn0RDHltljkFMTQx2daa8RO3FJHsmNHhuR1Yry1DjACC7GNX5D_tgVdp5aCs/s1600/owner_sign.png&quot; height=&quot;171&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;-qt-block-indent: 0; -qt-paragraph-type: empty; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
Try to build your own property release easy, fast and effective:&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
&lt;a href=&quot;http://stockreleaser.com/&quot;&gt;http://stockreleaser.com&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Support Team:&lt;br /&gt;
&lt;a href=&quot;mailto:support@stockreleaser.com&quot;&gt;support@stockreleaser.com&lt;/a&gt;&lt;!--EndFragment--&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/5766562303872264328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/5766562303872264328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5766562303872264328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5766562303872264328'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2015/03/stockrelease-tips-how-to-place.html' title='[ StockReleaser | Tips ] How to place signatures on property release'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmE1yMeUb6l2DpT8M59qZPm0zoCNRaVIVyQzHhDRug-5MCJvMxfAoPR7wJdHaHOAtgZG78b3PPaK6GUFFgn0RDHltljkFMTQx2daa8RO3FJHsmNHhuR1Yry1DjACC7GNX5D_tgVdp5aCs/s72-c/owner_sign.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-8515847227509100056</id><published>2015-02-25T10:19:00.000-08:00</published><updated>2015-03-05T13:11:19.419-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="builder"/><category scheme="http://www.blogger.com/atom/ns#" term="new feature"/><category scheme="http://www.blogger.com/atom/ns#" term="property release"/><category scheme="http://www.blogger.com/atom/ns#" term="stock"/><category scheme="http://www.blogger.com/atom/ns#" term="stockreleaser"/><title type='text'>[ StockReleaser ] Owner address now available in PropertyRelease</title><content type='html'>&lt;!--StartFragment--&gt;Today we did another one step to make such process as creating property release easier and faster!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJOHJTBJ4-jT59iNKN4kDW-DnmqJA8VpimmyE2G-a-B-BmoOZaEhhzMwJvAzpkr8BSeMx5VMz6jxH-A_VmBnYSE78fhGlBAmECprGcdRzj3yG_Yj-YjBINEhEEDL0CMsDWlqs6vADWZms/s1600/shot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJOHJTBJ4-jT59iNKN4kDW-DnmqJA8VpimmyE2G-a-B-BmoOZaEhhzMwJvAzpkr8BSeMx5VMz6jxH-A_VmBnYSE78fhGlBAmECprGcdRzj3yG_Yj-YjBINEhEEDL0CMsDWlqs6vADWZms/s1600/shot.png&quot; height=&quot;333&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, StockReleaser allows to fill owner address data in property release template. Such address will be placed in both sections: Photographer/Filmmaker and Ownership. We suppose that author of shot/picture/art and owner is the same person.&lt;br /&gt;
&lt;br /&gt;
Try our service to build your own property release easy and fast:&lt;br /&gt;
&lt;a href=&quot;http://stockreleaser.com/&quot; target=&quot;_blank&quot;&gt;http://stockreleaser.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here you could find tutorial &#39;How to build property release using StockReleaser service&#39;:&lt;br /&gt;
&lt;a href=&quot;http://cyber-fall.blogspot.com/2015/02/property-release-builder.html&quot;&gt;http://cyber-fall.blogspot.com/2015/02/property-release-builder.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And send your feedback to our support team:&lt;br /&gt;
&lt;a href=&quot;mailto:support@stockreleaser.com&quot; target=&quot;_blank&quot;&gt;support@stockreleaser.com&lt;/a&gt;&lt;!--EndFragment--&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/8515847227509100056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/8515847227509100056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/8515847227509100056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/8515847227509100056'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2015/02/stockreleaser-owner-address-now.html' title='[ StockReleaser ] Owner address now available in PropertyRelease'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJOHJTBJ4-jT59iNKN4kDW-DnmqJA8VpimmyE2G-a-B-BmoOZaEhhzMwJvAzpkr8BSeMx5VMz6jxH-A_VmBnYSE78fhGlBAmECprGcdRzj3yG_Yj-YjBINEhEEDL0CMsDWlqs6vADWZms/s72-c/shot.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-4574387531965632138</id><published>2015-02-09T17:12:00.003-08:00</published><updated>2015-03-06T13:39:39.810-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="design"/><category scheme="http://www.blogger.com/atom/ns#" term="property release builder"/><category scheme="http://www.blogger.com/atom/ns#" term="shutterstock"/><category scheme="http://www.blogger.com/atom/ns#" term="stock"/><category scheme="http://www.blogger.com/atom/ns#" term="stockreleaser"/><category scheme="http://www.blogger.com/atom/ns#" term="web-design"/><title type='text'>[ StockReleaser ] Property Release Builder</title><content type='html'>&lt;h2&gt;
What&#39;s the case?&lt;/h2&gt;
It&#39;s always a bit routine to create a new property release file each time when you want to upload your art, picture or photo on stock sites. And one obvious idea comes to your mind: &quot;can&#39;t believe that there is no any service to do this automatically!&quot;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But, there is a one - &lt;b&gt;StockReleaser&lt;/b&gt; [ &lt;a href=&quot;http://stockreleaser.com/&quot; target=&quot;_blank&quot;&gt;http://stockreleaser.com&lt;/a&gt;&amp;nbsp;]&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
How to use it?&lt;/h2&gt;
&lt;div&gt;
This service does all this job easily!&lt;/div&gt;
&lt;div&gt;
All you need is to fill all the fields with appropriate values, upload signs and upload one or several pictures to build release for. Then just push &quot;Build Release&quot; button and wait until building process is finished. Finally, just click on link to download property-release as result file (ZIP file). That&#39;s it! Inside this ZIP file you will find property-release files for each uploaded picture with all filled fields.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Also, watch this guide video on youtube:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://ytimg.googleusercontent.com/vi/8Tns82Hcekg/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/embed/8Tns82Hcekg?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Application design was already modified a little, but general steps are the same.&lt;/div&gt;
&lt;h2&gt;
Property Release fields&lt;/h2&gt;
&lt;div&gt;
Owner fields:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Sign. Drop box field. Picture with owner&#39;s sign on transparent background saved as PNG.&lt;/li&gt;
&lt;li&gt;Name. Text field with owner&#39;s first and last names.&lt;/li&gt;
&lt;li&gt;Phone. Text field with owner&#39;s contact phone number.&lt;/li&gt;
&lt;li&gt;E-mail. Text field with owner&#39;s contact email address.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Witness fields:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Sign. Drop box field. Picture with witness&#39;s sign on transparent background saved as PNG.&lt;/li&gt;
&lt;li&gt;Name. Text field with witness&#39;s first and last names.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Pictures:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Drop box field. Pictures to build release for. This field allows to upload multiple number of pictures. Each picture could optionally have description.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
How it works..&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
This service receives all input data required to fill the property-release template. It converts all text fields to images. Then, it places these images, images with signs and pictures-to-release upon property-release template picture. Finally, it saves result as new picture.&lt;/div&gt;
&lt;div&gt;
StockReleaser allows to upload multiple pictures-to-release per one time. In this case, new property release would be created for each next picture. As result, it will build ZIP file with multiple property-releases inside.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Feedback&lt;/h2&gt;
&lt;div&gt;
If you have some suggestions, feedback or if you find some problems with this service (it doesn&#39;t work correctly, stock site rejected property releases and so on) - send a feedback to developers on this e-mail:&amp;nbsp;&lt;a href=&quot;mailto:support@stockreleaser.com&quot;&gt;support@stockreleaser.com&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/4574387531965632138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/4574387531965632138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/4574387531965632138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/4574387531965632138'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2015/02/property-release-builder.html' title='[ StockReleaser ] Property Release Builder'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/8Tns82Hcekg/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-7881711305386328028</id><published>2013-02-20T09:25:00.001-08:00</published><updated>2013-02-20T09:59:14.189-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="check image exists"/><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="how-to"/><category scheme="http://www.blogger.com/atom/ns#" term="ie"/><category scheme="http://www.blogger.com/atom/ns#" term="internet explorer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="safari"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="test image url"/><category scheme="http://www.blogger.com/atom/ns#" term="webdriver"/><title type='text'>[ Selenium 2.0 | WebDriver | Best practices ] How to check by URL that image exists</title><content type='html'>&lt;br /&gt;
&lt;h3&gt;
Purpose&lt;/h3&gt;
&lt;div&gt;
Check that URL leeds to existent image. For example, when you need to check that image was really uploaded.&lt;/div&gt;
&lt;div&gt;
Actually, you could use such solution to check any URL and it&#39;s response.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Description&lt;/h3&gt;
&lt;div&gt;
The Idea is to send an HTTP request by image-URL and check that response statuse code is OK (200)&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Code sample&lt;/h3&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;// just look at your cookie&#39;s content (e.g. using browser) and import these settings from it&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #134f5c;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;private static final&lt;/span&gt;&lt;/b&gt; String&amp;nbsp;&lt;span style=&quot;color: #990000;&quot;&gt;&lt;b&gt;SESSION_COOKIE_NAME&lt;/b&gt;&lt;/span&gt; = &lt;span style=&quot;color: #38761d;&quot;&gt;&quot;JSESSIONID&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;private static final&lt;/b&gt;&lt;/span&gt; String&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;DOMAIN&lt;/span&gt;&amp;nbsp;&lt;/b&gt;= &lt;span style=&quot;color: #38761d;&quot;&gt;&quot;domain.here.com&quot;&lt;/span&gt;;&lt;br /&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &lt;b style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;private static final&lt;/span&gt;&lt;/b&gt; String&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;COOKIE_PATH&amp;nbsp;&lt;/span&gt;&lt;/b&gt;= &lt;span style=&quot;color: #38761d;&quot;&gt;&quot;/cookie/path/here&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;protected boolean&lt;/span&gt;&lt;/b&gt; isResourceAvailableByUrl(String resourceUrl) {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HttpClient httpClient = &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;new &lt;/b&gt;&lt;/span&gt;DefaultHttpClient();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HttpContext localContext = &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;new &lt;/span&gt;&lt;/b&gt;BasicHttpContext();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicCookieStore cookieStore = &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;new&lt;/span&gt;&lt;/b&gt; BasicCookieStore();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cookieStore.addCookie(getSessionCookie());&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; localContext.setAttribute(ClientContext.&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;COOKIE_STORE&lt;/span&gt;&lt;/b&gt;, cookieStore);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #666666;&quot;&gt;// resourceUrl - is url which leads to image&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HttpGet httpGet = &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; HttpGet(resourceUrl);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt; try&lt;/b&gt;&lt;/span&gt; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HttpResponse httpResponse = httpClient.execute(httpGet, localContext);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; httpResponse.getStatusLine().getStatusCode() == HttpStatus.&lt;span style=&quot;color: #990000;&quot;&gt;&lt;b&gt;SC_OK&lt;/b&gt;&lt;/span&gt;;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;catch&lt;/span&gt; &lt;/b&gt;(IOException e) {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;return false&lt;/b&gt;&lt;/span&gt;;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;protected&lt;/span&gt;&lt;/b&gt; BasicClientCookie getSessionCookie() {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cookie originalCookie = webDriver.manage().getCookieNamed(&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;SESSION_COOKIE_NAME&lt;/span&gt;&lt;/b&gt;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;if&lt;/span&gt;&lt;/b&gt; (originalCookie == &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;return null&lt;/span&gt;&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String cookieName = originalCookie.getName();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String cookieValue = originalCookie.getValue();&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicClientCookie resultCookie = &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;new &lt;/span&gt;&lt;/b&gt;BasicClientCookie(cookieName, cookieValue);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resultCookie.setDomain(&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;DOMAIN&lt;/span&gt;&lt;/b&gt;);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resultCookie.setExpiryDate(originalCookie.getExpiry());&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resultCookie.setPath(&lt;b&gt;&lt;span style=&quot;color: #990000;&quot;&gt;COOKIE_PATH&lt;/span&gt;&lt;/b&gt;);&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #351c75;&quot;&gt;&lt;b&gt;return &lt;/b&gt;&lt;/span&gt;resultCookie;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/7881711305386328028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/7881711305386328028' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7881711305386328028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7881711305386328028'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2013/02/selenium-20-webdriver-best-practices_20.html' title='[ Selenium 2.0 | WebDriver | Best practices ] How to check by URL that image exists'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-7979476217544779668</id><published>2013-02-19T02:50:00.000-08:00</published><updated>2013-02-21T02:52:14.418-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="clear input element"/><category scheme="http://www.blogger.com/atom/ns#" term="firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="ie"/><category scheme="http://www.blogger.com/atom/ns#" term="internet explorer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="safari"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="webdriver"/><title type='text'>[ Selenium 2.0 | WebDriver | Best practices ] Clear input element&#39;s value</title><content type='html'>&lt;br /&gt;
&lt;h3&gt;
Purpose&lt;/h3&gt;
&lt;div&gt;
Clear value of HTML input element.&lt;/div&gt;
&lt;div&gt;
It should work successfully for browsers: Google Chrome, Firefox, IE, Safari.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Code sample&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;protected void&lt;/span&gt;&lt;/b&gt; clearInput(WebElement webElement) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #999999;&quot;&gt;// isIE() - just checks is it IE or not - use your own implementation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;if&lt;/span&gt;&lt;/b&gt; (isIE() &amp;amp;&amp;amp; &lt;span style=&quot;color: #38761d;&quot;&gt;&quot;file&quot;&lt;/span&gt;.equals(webElement.getAttribute(&lt;span style=&quot;color: #38761d;&quot;&gt;&quot;type&quot;&lt;/span&gt;))) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #999999;&quot;&gt;// workaround&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // if IE and input&#39;s type is file - do not try to clear it.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //&amp;nbsp;If you send:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // - empty string - it will find file by empty path&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // - backspace char - it will process like a non-visible char&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // In both cases it will throw a bug.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Just replace it with new value when it is need to.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;else&lt;/span&gt;&lt;/b&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #999999;&quot;&gt;// if you have no StringUtils in project, check value still empty yet&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: #351c75;&quot;&gt;while &lt;/span&gt;&lt;/b&gt;(!StringUtils.isEmpty(webElement.getAttribute(&lt;span style=&quot;color: #38761d;&quot;&gt;&quot;value&quot;&lt;/span&gt;))) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;&quot;\u0008&quot; - is backspace char&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; webElement.sendKeys(&lt;span style=&quot;color: #38761d;&quot;&gt;&quot;\u0008&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Notes&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;As for me, standard webElement.clear() doesn&#39;t work for all browsers. Commonly, it could not clear value and throws bug that element is not able to be clean:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Caused by: org.openqa.selenium.InvalidElementStateException: Element must not be hidden, disabled or read-only&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/7979476217544779668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/7979476217544779668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7979476217544779668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7979476217544779668'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2013/02/selenium-20-webdriver-best-practices.html' title='[ Selenium 2.0 | WebDriver | Best practices ] Clear input element&#39;s value'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-7022354506233959696</id><published>2011-10-22T06:34:00.000-07:00</published><updated>2011-10-22T07:00:38.641-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="added"/><category scheme="http://www.blogger.com/atom/ns#" term="changed"/><category scheme="http://www.blogger.com/atom/ns#" term="changes"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="commit"/><category scheme="http://www.blogger.com/atom/ns#" term="count"/><category scheme="http://www.blogger.com/atom/ns#" term="gather"/><category scheme="http://www.blogger.com/atom/ns#" term="history"/><category scheme="http://www.blogger.com/atom/ns#" term="lines"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="project"/><category scheme="http://www.blogger.com/atom/ns#" term="removed"/><category scheme="http://www.blogger.com/atom/ns#" term="statistic"/><category scheme="http://www.blogger.com/atom/ns#" term="statistics"/><category scheme="http://www.blogger.com/atom/ns#" term="svn"/><title type='text'>[ Tools | Linux | SVN ] Generate statistics about SVN commits for selected period of time.</title><content type='html'>It&#39;s very difficult and routine to gather statistics about how many lines of code were added, removed or changed by SVN commits for selected period of time in past.&lt;br /&gt;
I will explain how you may do it and also will share my shell script to you.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;I&#39;ve tried to find any useful utility or tool, but found nothing in web. My time was ticking out so I decide to solve this task by myself.&lt;br /&gt;
First, I decide to use simple console client for Subversion.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install subversion&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This program have one useful command (execute it in svn directory):&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;svn diff &amp;lt; FROM &amp;gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;&lt;from&gt;&lt;/from&gt;&lt;/span&gt;:&amp;lt; TO &amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It helps you to generate all changes between two different revisions (or dates).&lt;br /&gt;
You may read more details about this command and it&#39;s configurations:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;svn help diff&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
But this function can&#39;t split all changes to different categories such as: added, removed or changed.&lt;br /&gt;
That&#39;s why you need to create your own script to parse it&#39;s results.&lt;br /&gt;
&lt;br /&gt;
Also, you may use my script &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;[ svn_stats.sh ]&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;
All descriptions about how to use it you may read inside comments.&lt;br /&gt;
&lt;br /&gt;
It will generate such files:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;-rw-r--r-- all_changes.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;-rw-r--r-- lines_added.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;-rw-r--r-- lines_removed.log&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you need to count lines, just use this command in directory with these files:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;wc -l ./*&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And it will show you such results:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;309 all_changes.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;300 lines_added.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;2 lines_removed.log&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#39;s it! I hope it will help you!&lt;br /&gt;
P.S.&lt;br /&gt;
If you know more simple solution, PLEASE! Write and describe me about it! :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;svn_stats.sh sources:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# This tool helps to gather information from svn - how many lines were added, changed or removed for selected period of time.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# To use it - execute such command in svn folder which need to be scanned:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh &amp;lt; FROM &amp;gt; &amp;lt; TO &amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Valid values for &amp;lt; FROM &amp;gt; and &amp;lt; TO &amp;gt; arguments&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# REVISION: just number of revision you want to select, e.g. 1095&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# DATE: to select value as date use such syntax: {2011-10-25}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# NOTE:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# &amp;lt; TO &amp;gt; argument is optional. If it was not set then HEAD value will be in use by default.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Examples&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Gather statistics about what changes have been made during september:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh {2011-09-01} {2011-09-31}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Gather statistics about what changes have been made since 1 september till now:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh {2011-09-01}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# or:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh {2011-09-01} HEAD&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Gather statistics about what changes have been made since 1095 revision till now:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh 1095&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Gather statistics about what changes have been made since 1095 revision till 1 september:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# sh svn_stats.sh 1095 {2011-09-01}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# root working directory for this tool&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# You may redefine it to any another folder&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;STAT_PATH=~/.svn_stats&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# this path is used for storing of all information which gathered from svn repository.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;STAT_PATH_CHANGES=$STAT_PATH/changes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# check and prepare stat root directory&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;if [ -d $STAT_PATH ];&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;stat directory: &#39; $STAT_PATH;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;stat directory is not exist and will be created: &#39; $STAT_PATH;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; mkdir $STAT_PATH;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# check and prepare stat directory for changes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;if [ -d $STAT_PATH_CHANGES ];&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;stat directory for changes: &#39; $STAT_PATH_CHANGES;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;stat directory for changes is not exist and will be created: &#39; $STAT_PATH_CHANGES;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; mkdir $STAT_PATH_CHANGES;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# define working paths&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;SVN_PWD=`pwd`&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;SVN_ROOT_PATH_NAME=`basename $SVN_PWD`&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# this path is used for storing of all information which gathered from svn repository.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;SVN_CHANGE_PATH=$STAT_PATH_CHANGES/$SVN_ROOT_PATH_NAME&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# clear if it exists and prepare directory for current svn folder&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;rm -r $SVN_CHANGE_PATH&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;mkdir $SVN_CHANGE_PATH&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# check if TO argument was set and set it to HEAD value if not.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;FROM=$1&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;TO=&#39;&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;if [ -n &quot;$2&quot; ];&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;TO &#39; $2;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; TO=$2;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; echo &#39;TO HEAD&#39;;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; TO=&#39;HEAD&#39;;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# gather common statistics about all changes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;svn diff -x -bw -r $FROM:$TO&amp;gt;$SVN_CHANGE_PATH/all_changes.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# parse to extract only added lines&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;cat $SVN_CHANGE_PATH/all_changes.log | grep &#39;^\+&#39;&amp;gt;$SVN_CHANGE_PATH/lines_added.log&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# parse to extract only removed lines&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;cat $SVN_CHANGE_PATH/all_changes.log | grep &#39;^\-&#39;&amp;gt;$SVN_CHANGE_PATH/lines_removed.log&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/7022354506233959696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/7022354506233959696' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7022354506233959696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/7022354506233959696'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2011/10/tools-linux-svn-generate-statistic.html' title='[ Tools | Linux | SVN ] Generate statistics about SVN commits for selected period of time.'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-1029549809271979135</id><published>2011-10-13T14:01:00.000-07:00</published><updated>2011-10-22T04:52:01.018-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configure"/><category scheme="http://www.blogger.com/atom/ns#" term="connection"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="openvpn"/><category scheme="http://www.blogger.com/atom/ns#" term="setup"/><category scheme="http://www.blogger.com/atom/ns#" term="vpn"/><title type='text'>[ RUS | Manual | Linux | Network ] Настройка утилиты openvpn для создания VPN соединения</title><content type='html'>В этой статье я опишу, как настроить и использовать &lt;i&gt;openvpn &lt;/i&gt;для создания VPN соединения.&lt;br /&gt;
&lt;br /&gt;
Нам понадобится выполнить следующее:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;установить утилиту &lt;i&gt;openvpn&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;подготовить &lt;i&gt;*.crt&lt;/i&gt; файл, содержащий цифровой ключ&lt;/li&gt;
&lt;li&gt;подготовить файл с настройками соединения&lt;/li&gt;
&lt;li&gt;настроить шлюз&lt;/li&gt;
&lt;/ul&gt;
Итак, приступим.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Для начала установим утилиту &lt;i&gt;openvpn&lt;/i&gt;, чтобы использовать ее как VPN клиент:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install openvpn&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Затем подложим файл &lt;i&gt;*.crt&lt;/i&gt; по этому пути:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/etc/openvpn/my.crt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Замечу:&lt;/i&gt;&lt;br /&gt;
Если у вас нет в наличии &lt;i&gt;.crt&lt;/i&gt; файла - вам необходимо получить его у администратора вашего VPN сервера.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим файл с настройками для нашего VPN соединения:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo touch /etc/openvpn/my.conf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Содержимо файла должно быть приблизительно такого вида:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;client&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;dev tun&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;proto tcp&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;remote &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;_ip_или_имя_хоста_vpn_сервера_&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;resolv-retry infinite&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;nobind&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;persist-key&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;persist-tun&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;auth-user-pass&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;ca &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;my.crt&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;verb 3&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mute 20&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Так же, возможно, потребуется настроить шлюз по умолчанию, в случае если возникнет следующая ошибка:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;OpenVPN ROUTE: net_gateway undefined -- unable to get default gateway from system&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Новый дефолтный шлюз можно создать с помощью такой команды:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;route add default gw eth0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь мы настроили все, что нам необходимо и можем открывать VPN соединение.&lt;br /&gt;
Для этого выполним следующие команды:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;cd /etc/openvpn&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo openvpn --config ./my.conf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вам останется только ввести свои авторизационные данные (логин, пароль) и соединение будет благополучно открыто.</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/1029549809271979135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/1029549809271979135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/1029549809271979135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/1029549809271979135'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2011/10/manual-linux-network-openvpn-vpn.html' title='[ RUS | Manual | Linux | Network ] Настройка утилиты openvpn для создания VPN соединения'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-5798241186055638558</id><published>2011-10-11T10:22:00.000-07:00</published><updated>2011-10-13T14:19:37.899-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configure"/><category scheme="http://www.blogger.com/atom/ns#" term="crt"/><category scheme="http://www.blogger.com/atom/ns#" term="gateway"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="openvpn"/><category scheme="http://www.blogger.com/atom/ns#" term="setup"/><category scheme="http://www.blogger.com/atom/ns#" term="vpn"/><title type='text'>[ Manual | Linux | Network ] Setup openvpn utility to connect via VPN</title><content type='html'>This post describes how to setup &lt;i&gt;openvpn &lt;/i&gt;utility to connect via VPN.&lt;br /&gt;
&lt;br /&gt;
You need to:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;install &lt;i&gt;openvpn&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;prepare &lt;i&gt;*.crt&lt;/i&gt; file with digital sign&lt;/li&gt;
&lt;li&gt;prepare configuration file&lt;/li&gt;
&lt;li&gt;setup gateway&lt;/li&gt;
&lt;/ul&gt;
So, let&#39;s start.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;First, install &lt;i&gt;openvpn &lt;/i&gt;utility to use it as vpn client:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install openvpn&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Next, put your &lt;i&gt;*.crt file&lt;/i&gt; here:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/etc/openvpn/my.crt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Note:&lt;/i&gt;&lt;br /&gt;
If you have no valid .crt file - you should ask administrators of vpn server to share it.&lt;br /&gt;
&lt;br /&gt;
Now, create configuration file for your connection.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo touch /etc/openvpn/my.conf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
With such content:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;client&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;dev tun&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;proto tcp&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;remote &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;_put_here_ip_or_hostname_of_vpn_server_&lt;/span&gt;&lt;put_server_host_or_ip_here&gt;&lt;/put_server_host_or_ip_here&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;resolv-retry infinite&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;nobind&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;persist-key&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;persist-tun&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;auth-user-pass&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;ca &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;my.crt&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;verb 3&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mute 20&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Also, you need to set your default gateway, if such error occured:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;OpenVPN ROUTE: net_gateway undefined -- unable to get default gateway from system&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
To add and configure default gateway, execute it:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;route add default gw &lt;gateway_ip_or_hostname&gt; eth0&lt;/gateway_ip_or_hostname&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Finaly, to open VPN connection, execute such command:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;cd /etc/openvpn&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo openvpn --config ./my.conf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
That&#39;s it! You should only input your authorization information (login, password) and connection will be successfully opened.</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/5798241186055638558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/5798241186055638558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5798241186055638558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5798241186055638558'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2011/10/manual-linux-network-setup-openvpn.html' title='[ Manual | Linux | Network ] Setup openvpn utility to connect via VPN'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-6500593742560560950</id><published>2011-10-08T06:24:00.000-07:00</published><updated>2011-10-08T06:27:56.895-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="directory layot"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="main"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="package"/><category scheme="http://www.blogger.com/atom/ns#" term="project structure"/><category scheme="http://www.blogger.com/atom/ns#" term="resources"/><category scheme="http://www.blogger.com/atom/ns#" term="sources"/><category scheme="http://www.blogger.com/atom/ns#" term="src"/><category scheme="http://www.blogger.com/atom/ns#" term="target"/><category scheme="http://www.blogger.com/atom/ns#" term="джава"/><category scheme="http://www.blogger.com/atom/ns#" term="мавен"/><category scheme="http://www.blogger.com/atom/ns#" term="структура проекта"/><title type='text'>[ RUS | Manual | Project ] Project&#39;s directory/package structure</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Структура пакетов и папок в проекте.&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;В первый раз, когда сталкиваешься с задачей создания структуры папок/пакетов внутри своего проекта - долго не можешь понять - зачем создавать такие сложные бессмысленные вложенности, как например &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/java&lt;/span&gt;&#39;, а потом делать еще не менее непонятные вложенности вроде &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com.makeappinc.calculator.context&lt;/span&gt;&#39;. Неужели не проще сразу располагать все свои пакеты и классы/файлы/ресурсы в корневой папке &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src&lt;/span&gt;&#39;? Зачем делать параллельную ветку каталогов &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/resources&lt;/span&gt;&#39;?&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Отвечаю:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Не проще, подобные мелочи сразу избавляют тебя от огромных проблем в будущем. Делай так и будешь счастлив!&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;А сейчас я объясню почему :)&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Для начала давайте взглянем на такую структуру папок:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator/src/main/java/com/makeappinc/calculator/context/&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Не правда ли ужасно? Но не паникуй! Сейчас все станет на свои места :)&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Здесь можно выделить четыре основных логических части:&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator/&lt;/span&gt; - корневой каталог проекта&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/java/ &lt;/span&gt;- структура папок соответствующая соглашению Maven Directories Layout (именно как контейнер java исходников)&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com/makeappinc/calculator/&lt;/span&gt; - путь к корневому каталогу приложения (в данном случае к приложению calculator)&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;context/&lt;/span&gt; - вложенный пакет самого приложения&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Давайте разберемся что же они означают.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Корневой каталог проекта.&lt;/b&gt; [ &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator/ &lt;/span&gt;]&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Это каталог, являющийся корневым каталогом всего проекта. На самом деле, в общем случае он содержит только следующие три элемента:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;target/&lt;/span&gt; (данная папка может появится как результат выполнения сборки проекта Maven&#39;ом)&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;pom.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Мавен ожидает, что каталог &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src&lt;/span&gt;&#39; - это папка, которая содержит абсолютно все данные, относящиеся к исходникам проекта. Поэтому именно внутри нее следует размещать следующие виды данных: исходные коды, ресурсы, настройки, картинки, мета-информацию о проекте или различные дескрипторы.&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;Но в случае с папкой &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;target&lt;/span&gt;&#39; все иначе. Эта папка изначально не существует и является грубо говоря - рабочей папкой Maven&#39;а. Внутри этой папки Maven сохраняет все результаты сборки проекта - как скомпилированные классы (если такие есть), так и различные jar/war/ear/pom файлы (если это требуется).&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Maven Directory Layout.&lt;/b&gt; [&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt; src/main/java/ &lt;/span&gt;]&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Эта часть соответствует соглашениям по структуре папок для Maven&#39;a. Подробней можно ознакомится здесь [ &lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html&quot;&gt;http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html&lt;/a&gt; ]&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Итак, если необходимо разместить исходные коды проекта, то для этого нужно выбрать папку:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/java&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Различные файлы настроек, картинки, xml следует сохранять в этой папке:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/resources&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;А если, к примеру, необходимо создать тесты на java, то их лучше расположить здесь:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/test/java&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;Замечу:&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Это неимоверно удобно, логично и правильно хранить разные виды данных отдельно - в разных частях проекта. Ты всегда знаешь где стоит искать настройки, где лежат только исходные коды на java и тебе абсолютно не важно - знаешь ли ты всю структуру проекта целиком или нет. Так же нет необходимости описывать Maven&#39;у где находятся данные папки с тестами/исходными кодами/ресурсами - он и без тебя уже все это знает! :)&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Корневой каталог приложения.&lt;/b&gt; [ &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com/makeappinc/calculator/&lt;/span&gt; ]&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Лучше всего представить себе, что данная вложенность папок - является неким ID вашего приложения :) Его паспортными данными или серийным номером. Это одна из вещей, которая позволяет вам всегда и везде распознать любые ресурсы вашего приложения. Но самое главное, это дает определенные гарантии, что вы не столкнетесь с разного рода коллизиями имен пакетов, классов или файлов при вгрузке в JVM, потому что данный подход в значительной мере исключает ситуацию существования пакетов в других jar идентичных по названию с вашими пакетами. К примеру, если у вас есть корневой пакет приложения &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src&lt;/span&gt;&#39; внутри которого вы создали класс &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Main.class&lt;/span&gt;&#39;, то в случае, если в JVM будет загружен другой класс &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Main.class&lt;/span&gt;&#39;, относящийся к такому же пакету &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src&lt;/span&gt;&#39;, то произойдет ошибка обращения к классу, т.к. Classloader не поймет, какую из двух одноименных реализаций от него требуют. Все осложняется тем, что java программы практически всегда используют огромное количество сторонних библиотек, влиять на структуру которых нет возможности. Поэтому следует делать все от вас зависящее, чтобы избегать совпадения наименования ваших пакетов с чужими. Именно поэтому, проще всего решить такую проблему путем введения зависимости названия ваших пакетов от лично ваших ID/названия фирмы/имени/nickname&#39;а, а так же от названия самого приложения (т.к. это обеспечит различие названия пакетов уже между вашими проектами).&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Корневой каталог состоит из двух частей:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com.makeappinc&lt;/span&gt; - перевернутое доменное имя вашей компании, брэнда, команды или вас лично, которое явно указывает на вашу организацию или на вашу личность. К примеру, если ваша компания называется &#39;appla&#39; и у нее имеется доменное имя &#39;appla.org&#39;, то эта часть будет выглядеть так: &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;org.appla&lt;/span&gt;&#39;. В другом случае, если у вас есть ник &#39;gadget&#39; и даже если у вас нет какого-либо собственного web-ресурса, вы можете создать такой пакет: &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;org.gadget&lt;/span&gt;&#39;.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator&lt;/span&gt; - просто название вашего приложения&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Вложенный пакет самого приложения.&lt;/b&gt; [ &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;context/&lt;/span&gt; ]&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;Конечно же, в случае если вы пишите простенькое java-приложение вроде &quot;Hello World!&quot;, то нет нужды создавать какие-то дополнительные пакеты. Но это становится абсолютно необходимым при разработке больших приложений. Т.к. зачастую не знаешь во что вырастет твое приложение - крайне рекомендую начинать использовать пакетную структуру приложения сразу же, как только начнете писать свое приложение. Я не стану в этой статье детально объяснять философию создания пакетов в приложении, скажу лишь, что можно создавать любые пакеты взамен или рядом с пакетом из примера &#39;context&#39;, а также вложенные в них, если это вам необходимо.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/6500593742560560950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/6500593742560560950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/6500593742560560950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/6500593742560560950'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2011/10/rus-manual-project-projects.html' title='[ RUS | Manual | Project ] Project&#39;s directory/package structure'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-3608226561604463785</id><published>2011-10-07T07:17:00.000-07:00</published><updated>2011-10-12T03:57:29.374-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="directory layot"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="main"/><category scheme="http://www.blogger.com/atom/ns#" term="maven"/><category scheme="http://www.blogger.com/atom/ns#" term="package"/><category scheme="http://www.blogger.com/atom/ns#" term="project structure"/><category scheme="http://www.blogger.com/atom/ns#" term="resources"/><category scheme="http://www.blogger.com/atom/ns#" term="sources"/><category scheme="http://www.blogger.com/atom/ns#" term="src"/><category scheme="http://www.blogger.com/atom/ns#" term="target"/><title type='text'>[ Manual | Project ] Project&#39;s directory/package structure</title><content type='html'>&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Project&#39;s directory/package structure.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In first time, it is very unclear for developers, why they should create such directories as &#39;&lt;i&gt;src/main/java&#39;&lt;/i&gt;&amp;nbsp;or &#39;&lt;i&gt;src/main/resources&#39;&lt;/i&gt;. Also, if you are new in developing, you will be probably confused&amp;nbsp;in first time&amp;nbsp;when you find such package names as &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com.makeappinc.calculator.context&#39;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
In such moments you want to cry and ask - &quot;&lt;i&gt;Is it really more useful instead of using only &#39;src&#39; directory as root path of project?&lt;/i&gt;&quot;.&lt;br /&gt;
I say, &quot;&lt;i&gt;Yes, it is very useful! Do such and you will be happy!&lt;/i&gt;&quot;.&lt;br /&gt;
Now I will explain why.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;First, lets take a look at this path:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator/src/main/java/com/makeappinc/calculator/context/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Awful? Don&#39;t panic!&lt;br /&gt;
There are four main parts in this path:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator/&lt;/span&gt; - project root path&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/java/&lt;/span&gt; - directory structure according to maven directory layout&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com/makeappinc/calculator/&lt;/span&gt; - root package for current application (e.g. calculator application)&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;context/&lt;/span&gt; - inner application package&lt;br /&gt;
&lt;br /&gt;
Let&#39;s look at them closer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project root path.&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;[ calculator/ ]&lt;/span&gt;&lt;br /&gt;
This path is a root directory of you project. Actualy it will contains by default only these elements:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;target/&lt;/span&gt; (it will be auto-generated by Maven during building of your project, if need to)&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;pom.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
For Maven, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src&lt;/span&gt; directory is a directory &lt;b&gt;which contains all sources&lt;/b&gt; of current project. So, you should place inside all of them: code sources, resources, any meta-data or descriptions.&lt;br /&gt;
But &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;target&lt;/span&gt; directory - is a directory &lt;b&gt;where all build results and releases will be placed&lt;/b&gt; by Maven. So, if you build jar/war/ear, you will find it in &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;target&lt;/span&gt; directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Maven Directory Layout.&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;[ src/main/java/ ]&lt;/span&gt;&lt;br /&gt;
This part of path corresponds to Maven&#39;s conventions. You may find them here [&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html&quot;&gt;http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html&lt;/a&gt;&amp;nbsp;]&lt;br /&gt;
&lt;br /&gt;
So, if you want to place java code sources - you should put them inside this path:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/java&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you have any property files, images or xmls, you should store them here:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/main/resources&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In another case, when you have java test code sources, place them here:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;src/test/java&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Note:&lt;/i&gt;&lt;br /&gt;
It is very useful to store different sorts of data in different paths. You always know, where to search for properties, where to search for sources, no matter - know you all project structure or not. Also, there is no need to define such paths for Maven, It already knows it!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Root application package.&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ com/makeappinc/calculator/ ]&lt;/span&gt;&lt;br /&gt;
This is like a unique application ID or like an application&#39;s passport. It gives some garanties, that there will be no any collisions with package names, classes or files between different jars and libraries. For example, if you have two jars, and both of them contains Main.class in root package, then there will be conflicts during loading of classes in JVM, cause two jars have two different implementations for one class name. So, when package names inside of your application depends of some parameters such as application name or your own name - it makes them more unique and resoulve such collisions.&lt;br /&gt;
&lt;br /&gt;
It consist of:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;com.makeappinc&lt;/span&gt; - reversed domen name of your company, brand, band or any other name which points to your organization or directly to yourself. For example, if your company named as &#39;appla&#39; and it has domen name like &#39;appla.org&#39;, then this part will be &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;org.appla&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&#39;&lt;/span&gt;. In another case, if you have nickname &#39;gadget&#39; and even if you have no any web-resources, you may create such package: &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;org.gadget&lt;/span&gt;&#39;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;calculator&lt;/span&gt; - just name of current application.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Inner application package.&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;[&amp;nbsp;context/&amp;nbsp;]&lt;/span&gt;&lt;br /&gt;
Of course, in simple application, such as &quot;Hello world&quot; application - there is no need to create packages. But it is absolutely useful when you develop large applications. So it&#39;s recommended to start use packages as soon as you start develop your application. I won&#39;t explain details about philosophy of package creating in your project. I can only say that you may create your own unique package instead of &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;context&lt;/span&gt;&#39; and create one more packages if you need to.</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/3608226561604463785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/3608226561604463785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/3608226561604463785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/3608226561604463785'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2011/10/manual-project-projects.html' title='[ Manual | Project ] Project&#39;s directory/package structure'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-5772480199410477438</id><published>2010-08-29T03:17:00.000-07:00</published><updated>2010-08-29T03:26:19.343-07:00</updated><title type='text'>Альтернативный источник энергии</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Проводя свой отпуск, истоптав и преодолев поражающие сознание расстояния, внезапно озадачился :)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Меня вдруг осенило - столько людей ежесекундно обречены давить своими подошвами на тротуары, плитки, аллеи и асфальты.. Огромнейшая, просто умопомрачительная масса народу гарантированно ходит по одним и тем же местам, наступая на чужие следы, где только что, буквально мгновение назад ступала чужая стопа.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;И тут я задумался - какое огромное количество энергии люди тратят каждый день в никуда, сливают прямо в землю, в то время как человечеству все чаще предрекают энергетический кризис и коллапс.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Есть ли возможность создать эффективную систему сбора такой энергии? Покрыть хотя бы основные участки массового скопления людей? Выстлать покрытиями-сборщиками аллеи парков, основных пешеходных маршрутов, переходов. Чтобы каждый шаг вносил свою лепту в кормление общества энергией?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;i&gt;Сделай шаг в светлое будущее!&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;i&gt;А сколько ты сделал шагов? Новый тариф &quot;Легкая прогулка&quot; 5 тыс. шагов в день - скидка 50% на оплату электричества!&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Хотя, возможно это и не целесообразно. Но опубликую на всякий случай - вдруг в этом есть смысл :)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/5772480199410477438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/5772480199410477438' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5772480199410477438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/5772480199410477438'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2010/08/blog-post.html' title='Альтернативный источник энергии'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6126439941109702145.post-8447898493269428215</id><published>2010-04-07T15:24:00.000-07:00</published><updated>2026-10-06T06:30:20.168-07:00</updated><title type='text'>[ AI ] Первая попытка осознания</title><content type='html'>Искусственный Интеллект кажется таким фантастическим и нереальным. Мы, зачастую, произнося это словосочетание, сразу же рисуем себе образы, что же это такое... o_O&lt;br /&gt;
Оооо! Оно саморазвивается!!! Непойми что творится у него в... вообщем в :)&lt;br /&gt;
Так вот постараюсь выразить то, до чего я дошел в своих умозаключениях.&lt;br /&gt;
Сразу говорю, я статьи не читаю и вообще мой доступ к инфе такого рода узок(поэтому буду благодарен публикации).&lt;br /&gt;
Наверняка открытий я не сделаю xD и скорее всего повторю чьи нибудь уже озвученные идеи, при том основополагающие и элементарные. Но меня это к несчастью мало волнует.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
К своему пояснению прилагаю мною нарисованную иллюстрацию мышино-ручной работы и просто шедевр (рис. 1)&lt;br /&gt;
&lt;br /&gt;
Понеслась..&lt;br /&gt;
(Возможно, стереотип, но все же начну с этого)&lt;br /&gt;
Одна из особенностей ИИ - познавать окружающее, основываясь на личный опыт, накопленные знания и руководствуясь логическими цепочками и выкладками, а так же используя анализ.&lt;br /&gt;
&lt;br /&gt;
Что для этого нужно?&lt;br /&gt;
&lt;br /&gt;
Представим себе жизненную ситуацию(рис. 1):&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQwZ9Au5c6Z1WCV4ZAFSaqj31LnY9uuAxpZjIz2gu64o3oyI-1QiN0lrbKBHLgcz8NlsuHs-A0TAAzSGlLBivXyPWyG2690Shf_HXQ7bkV8tG4sBYtDvjFXrI4tjumbL1Y7gFrnp9Sf6E/s1600/pacman.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5457526881790167634&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQwZ9Au5c6Z1WCV4ZAFSaqj31LnY9uuAxpZjIz2gu64o3oyI-1QiN0lrbKBHLgcz8NlsuHs-A0TAAzSGlLBivXyPWyG2690Shf_HXQ7bkV8tG4sBYtDvjFXrI4tjumbL1Y7gFrnp9Sf6E/s320/pacman.jpg&quot; style=&quot;cursor: hand; display: block; height: 278px; margin: 0px auto 10px; text-align: center; width: 320px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Крайне внятный пример :D&lt;br /&gt;
&lt;br /&gt;
У нас есть колодец с водой(мир полный объектов). Есть супер герой пэкмэн(ИИ), который запыхался и хочет пить крайне. Так вот чтобы напиться из этого самого колодца и продолжить драпать от адских монстрил ему необходим механизм(инструмент) по вылову этой живительной влаги. Для этого есть ведро на веревочке, привязанной к крутящемуся бревну. В этом и суть!&lt;br /&gt;
&lt;br /&gt;
Перейдем от аналогии к пациенту.&lt;br /&gt;
ИИ(пока еще глупенький) попадает в среду, полную объектов. Просто пребывая в их окружении он ничего не уяснит.&lt;br /&gt;
Ему необходим инструмент для их познавания. Цель инструмента - выделять объект из общей массы, фокусируя на нем свое внимание, изучать свойства, составлять список методов, которыми возможно воздействовать на объект, результаты воздействия этими методами и прочие характеристики, которые способен узреть на данный момент своего развития. Далее этот же инструмент должен разложить все по полочкам. Т.е. - отнести этот объект к каким либо объектным областям и классифицировать его. Это абстракция, возможно ее можно назвать атмосферой(причину этого термина объясню в последующих сообщениях) или еще как - главное, что это нечто, чему свойственен этот объект. К примеру: Туалету(атмосфера, объектная область) свойственно, что в нем находится унитаз(объект) у которого есть целый ряд свойств и методов. Или же джунглям свойственно, что в них полно обезьян и бананов, которые бесстыдно друг с другом взаимодействуют методами согласно свойствам.&lt;br /&gt;
&lt;br /&gt;
Так вот, как это может выглядеть?&lt;br /&gt;
У нашего ИИ есть, пока еще конечно скудная, но все же, коллекция объектных областей. И, исследуя тот или иной объект, ИИ, посредством инструмента, добавляет:&lt;br /&gt;
1. объект в общую библиотеку объектов, со всеми его характеристиками, изученными на сей момент&lt;br /&gt;
2. ссылку на объект во все атмосферы/объектные области, которые посчитает свойственными объекту.&lt;br /&gt;
&lt;br /&gt;
В чем же роль самого ИИ? Его задача работать с уже сформированной базой знаний и объектов, с этой самой библиотекой, не тратя время и лишние усилия на поиск информации. Его задача так же может быть в постановке приоритетности для инструмента. Т.е. фокусирование и уделение особого внимания тому, что пожелает ИИ.&lt;br /&gt;
&lt;br /&gt;
Тут есть важная особенность и она совершенно естесственна - ИИ сначала нужно будет обучить минимальному количеству знаний. Т.е. задать основополагающие объектные области, быть может составить минимальную библиотеку объектов и прочее.&lt;br /&gt;
&lt;br /&gt;
- КАК? Оно же само должно!!! O.O&lt;br /&gt;
- А вот и нет!&lt;br /&gt;
&lt;br /&gt;
Кем бы стал любой человек, не обучи его в детстве родители основам??? Правильно, Жывотныя! Вспомните процесс познавания мира. Вспомните как часто в детстве возникают вопросы, которые сейчас вам будут казатся простейшими и вообще не понятно, как такое можно не видеть/знать/чувствовать. Только после того, как человек обретает свой минимум необходимых знаний, он может далее самостоятельно, основываясь на свой багаж, познавать остальное.&lt;br /&gt;
&lt;br /&gt;
Таким образом у нас получается 4 части:&lt;br /&gt;
1. Мир полный объектов.&lt;br /&gt;
2. Инструмент для их добычи и классификации&lt;br /&gt;
3. Библиотека знаний/объектов&lt;br /&gt;
4. ИИ, бессовестно и радостно пользующийся библиотекой.&lt;br /&gt;
&lt;br /&gt;
Теперь взглянем что есть что:&lt;br /&gt;
С 1 пунктом все ясно... Тут хоть лапатой черпай - во век не осушишь. Кладезь знаний и истин велика и бездонна(ну вроде как)&lt;br /&gt;
Пункт 2 и 3... Да они уже во всю функционируют!!! Для того, чтобы реализовать эти пункты не надо вообще ничего! Достаточно взять гугл!!! Я уверен самой корпорации Гугл вообще ничто не стоит осуществиить эти функции в полном объеме.&lt;br /&gt;
Остается дело за пунктом 4. Который будет в свою очередь финальным кирпичиком. Что же это может быть?&lt;br /&gt;
А это может быть что угодно! Главная особенность - использовать знания библиотеки и задавать приоритеты последующего поиска объектов и &quot;хода мыслей&quot;. Это может быть система анализа чего либо, да и вообще что угодно!&lt;br /&gt;
&lt;br /&gt;
Тут могут опять возникнуть сомнения, дескать этот ИИ не в силах будет в своих познаниях выйти за границы интернета. Т.е. намек на то, что он способен будет лишь осозновать то, что будет доступно в интернете. Но нужно не забывать, что весь запас знаний интернета будет лишь минимальным знанием, необходимым &quot;ребенку&quot;, чтобы научится исследовать этот мир самостоятельно. А теперь представим, каков потенциал ребенка, у которого такие огромные познания о мире. Познания, которые есть у человечества, но нет ни у одного человека в конкретике..&lt;br /&gt;
&lt;br /&gt;
Собственно эта модель была мною осознана в процессе размышлений над тем, как просиходит умственное развитие человека от рождения и до зрелости. Именно поэтому данный пример является видимо лишь клоном того, как это происходит у людей. Что в свою очередь сразу же накладывает ограничения и минусы - все та же стереотипность мышления(свойственность атмосферам) и прочие отрицательные качества.&lt;br /&gt;
Но быть может в отличие от нас, у ИИ можно будет реализовать и альтернативные способы познания мира? В таком случае у него будет возможность выбора между абсолютно разными принципами логики и логическими цепочками и выкладками.&lt;br /&gt;
&lt;br /&gt;
оужс.. вы таки дочитали.. зачем же себя так мучать? :))</content><link rel='replies' type='application/atom+xml' href='http://cyber-fall.blogspot.com/feeds/8447898493269428215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6126439941109702145/8447898493269428215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/8447898493269428215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6126439941109702145/posts/default/8447898493269428215'/><link rel='alternate' type='text/html' href='http://cyber-fall.blogspot.com/2010/04/ai.html' title='[ AI ] Первая попытка осознания'/><author><name>Gadge+</name><uri>http://www.blogger.com/profile/00589703257934425617</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJ2DIAph3ZIi5veyaCmI2CCyejetIh0nAdqHVFCBy5eanzpDtjffItq6xbBx4Nc91nX1gc69NDm2eYv-1WBBcrDS95XnWXm9bWRRdYRfDgUQV1XKazXN-weJHa_6gHA/s220/avatar_248.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQwZ9Au5c6Z1WCV4ZAFSaqj31LnY9uuAxpZjIz2gu64o3oyI-1QiN0lrbKBHLgcz8NlsuHs-A0TAAzSGlLBivXyPWyG2690Shf_HXQ7bkV8tG4sBYtDvjFXrI4tjumbL1Y7gFrnp9Sf6E/s72-c/pacman.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>