<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ruX&#039;s mind</title>
	<atom:link href="http://rux.pp.ru/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://rux.pp.ru/blog</link>
	<description>Live is a challenge ;-)</description>
	<lastBuildDate>Sat, 12 May 2012 20:54:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Мысли: зимние скафандры</title>
		<link>http://rux.pp.ru/blog/2012.05/spb-winter-in-space-suit/</link>
		<comments>http://rux.pp.ru/blog/2012.05/spb-winter-in-space-suit/#comments</comments>
		<pubDate>Sat, 12 May 2012 20:54:12 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[Питер]]></category>
		<category><![CDATA[погода]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1158</guid>
		<description><![CDATA[
В Питере каждые пол года наступает особое время &#8211; зима. Сначала скрывается солнышко, опускается столбик температуры,  падают пожелтевшие листья. Потихоньку появляются шапки на людях, осенние куртки.
Выпадает снег и люди разбигаются по своим норкам подальше от непогоды. Без лишней надобности не суют свой нос на улицу &#8211; простыть &#8211; элементарно  
И все к этому [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.05%2Fspb-winter-in-space-suit%2F&amp;via=ruxeg&amp;text=%D0%9C%D1%8B%D1%81%D0%BB%D0%B8%3A+%D0%B7%D0%B8%D0%BC%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%B0%D1%84%D0%B0%D0%BD%D0%B4%D1%80%D1%8B&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.05%2Fspb-winter-in-space-suit%2F"  class="twitter-share-button">Tweet</a></div><p><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/05/Icon_space_suit.png" alt="" title="Icon_space_suit" width="95" height="167" class="alignnone size-full wp-image-1165" align="right" halign="5" style="padding: 5px"/></p>
<p>В Питере каждые пол года наступает особое время &#8211; зима. Сначала скрывается солнышко, опускается столбик температуры,  падают пожелтевшие листья. Потихоньку появляются шапки на людях, осенние куртки.</p>
<p>Выпадает снег и люди разбигаются по своим норкам подальше от непогоды. Без лишней надобности не суют свой нос на улицу &#8211; простыть &#8211; элементарно <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>И все к этому привыкли&#8230;!?</h2>
<p><span id="more-1158"></span></p>
<p><span style="color: orange">Летом</span> можно ходить в одной футболке &#8211; и на улице и дома. Для того, чтоб дойти до магазина не нужно одевать зимнюю шубу, валенки. Идя по весенне-летнему городу не приходит мысль &#8220;когда же приедет автобус?&#8221;, &#8220;блин, снег в лицо&#8221;, &#8220;чорд, я замёрз!&#8221;, &#8220;ааа, ветер сдувает&#8221;. Летняя температура в 15-25<sup>o</sup>C &#8211; самая <strong>комфортная</strong> для нас, именно столько градусов мы стараемся поддерживать в своих домах и квартирах вне зависимости от того, что за окном.
</p>
<p><span style="color: #77f">Зимой</span> перемещение по городу напоминает в большей степени эстафету &#8211; люди максимально быстро перемещаются между пунктами А и В, за максимально короткое время и дистанцию. И, конечно, нужно иметь целое зимнее амбурдирование, <strong>как скафандр</strong>, чтобы не замёрзнуть и выжить на улице при -25<sup>o</sup>C. И зимняя одежда и скафандр &#8211; оба призваны защитить человека от аггресивных условий окружающей среды <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<h3>К чему я?</h3>
<p>К тому, что если бы не прогресс и терпение людей, то в Питере не предусмотренно жить природой, по крайней мере зимой. <strong>Выживать</strong> &#8211; можно.</p>
<h3>И?..</h3>
<p>И это нормально. Всё хорошо. Всё так, как должно быть. Кто не понял &#8211; сам виноват <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Большая просьба не перегибать палку и не воспринимать всё абсолютно дословно. Я не говорю что у теплой/жаркой погоды нет минусов. Я понимаю, что люди живут ещё и не при таких температурах, но <em>кто</em> сказал что это нормально?</p>
<p> <strong>Питер &#8211; лучший город!</strong> Я его люблю не смотря на то, что большая часть года &#8211; дискомфортные условия для проживания. </p>
<h4>Чуть-чуть весны</h4>
<div style="margin: auto 0">
<a href="http://rux.pp.ru/blog/wp-content/uploads/2012/05/spb-moscovskaya-spring.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/05/spb-moscovskaya-spring-300x179.jpg" alt="" title="spb-moscovskaya-spring" width="300" height="179" class="alignnone size-medium wp-image-1166" /></a>&nbsp;&nbsp;<a href="http://rux.pp.ru/blog/wp-content/uploads/2012/05/strelka-vasilebskogo-ostrova-spb-spring.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/05/strelka-vasilebskogo-ostrova-spb-spring-300x179.jpg" alt="" title="strelka-vasilebskogo-ostrova-spb-spring" width="300" height="179" class="alignnone size-medium wp-image-1168" /></a>
</div>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1158, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1158_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1158_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.05/spb-winter-in-space-suit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Электроника: импульсный стабилизатор</title>
		<link>http://rux.pp.ru/blog/2012.04/electronics-drop-down-regulator-lm2576-adj/</link>
		<comments>http://rux.pp.ru/blog/2012.04/electronics-drop-down-regulator-lm2576-adj/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 20:55:52 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[lm2576]]></category>
		<category><![CDATA[regulator]]></category>
		<category><![CDATA[voltage]]></category>
		<category><![CDATA[стабилизатор]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1121</guid>
		<description><![CDATA[
Для питания десятка ярких светодиодов потребовалось сделать 2 стабилизатора, каждый на:

Vin = 12V
Vout = 4V
Iload = 0.2A

Сначала попробовал lm317 (линейный стабилизатор) &#8211; можно было жарить блины на ней через десяток секунд)). Резисторы &#8211; тоже не вариант &#8211; даже 5W кирпичи заметно грелись уже при рассеивании 2W. Да и вообще &#8211; зачем в пустую жечь энергию?)

Благо [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.04%2Felectronics-drop-down-regulator-lm2576-adj%2F&amp;via=ruxeg&amp;text=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0%3A+%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D1%8B%D0%B9+%D1%81%D1%82%D0%B0%D0%B1%D0%B8%D0%BB%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.04%2Felectronics-drop-down-regulator-lm2576-adj%2F"  class="twitter-share-button">Tweet</a></div><p><a href="http://rux.pp.ru/blog/2012.04/electronics-drop-down-regulator-lm2576-adj/lm2576-adj-two-voltage-regulators/" rel="attachment wp-att-1122"><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-adj-two-voltage-regulators-300x179.jpg" alt="" title="lm2576-adj-two-voltage-regulators" width="300" height="179" class="alignright size-medium wp-image-1122" /></a>
<p>Для питания десятка ярких светодиодов потребовалось сделать 2 стабилизатора, каждый на:</p>
<ul>
<li>V<sub>in</sub> = <strong>12V</strong></li>
<li>V<sub>out</sub> = <strong>4V</strong></li>
<li>I<sub>load</sub> = <strong>0.2A</strong></li>
</ul>
<p>Сначала попробовал lm317 (линейный стабилизатор) &#8211; можно было жарить блины на ней через десяток секунд)). Резисторы &#8211; тоже не вариант &#8211; даже 5W кирпичи заметно грелись уже при рассеивании 2W. Да и вообще &#8211; зачем в пустую жечь энергию?)</p>
<p><span id="more-1121"></span></p>
<p>Благо <a href="http://hexanaft.ru" target="_blank">Виталик</a>(организатор питерского <a href="http://hackspb.ru/" target="_blank">HackSpace</a>) смог подсказать что выбрать и какие компоненты использовать <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Схема</h2>
<p>Берётся из даташита (<a href="http://www.ti.com/lit/ds/symlink/lm2576.pdf" target="_blank" rel="noref">lm2575.pdf</a>):<br />
<br/><br />
<center><br />
<img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-adjustable-output-voltage.png" alt="" title="lm2576-adjustable-output-voltage" width="557" height="281" class="aligncenter size-full wp-image-1123" style="border-radius: 5px" align="center"/><br />
</center></p>
<h2>Компоненты</h2>
<ul>
<li>C<sub>in</sub> &#8211; <strong>470µF, 16V</strong></li>
<li>C<sub>out</sub> &#8211; <strong>1000µF, 10V</strong></li>
<li>D1 &#8211; <strong>1N5822</strong></li>
<li>L1 &#8211; <strong>100µH, 2.1A</strong> (#101)</li>
<li>R1 &#8211; <strong>1k</strong></li>
<li>R2 &#8211; <strong>2.2k</strong></li>
</ul>
<p>Изменяя соотношение R2/R1 можно получать необходимое напряжение (по формуле выше).<br />
Сделал на тонком фольгированном стеклотекстолите &#8211; не смотря на малое количество деталек, они массивные и как то нужно их удерживать <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Травить не стал &#8211; просто вырезал резаком дорожки (о чем много раз пожалел, пока искал где смыкаются <s>дорожки</s> области). На каждую ушло часа полтора-два.
</p>
<p>Ну.. схемка работает <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Фоточки</h2>
</p>
<p>На память сделал фоточки и устарил под old-school &#8211; такое количество аналоговой обвязки сильно напоминает когда я занимался аналоговой электроникой <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-voltage-regulator-1.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-voltage-regulator-1-300x179.jpg" alt="" title="lm2576-voltage-regulator-1" width="300" height="179" class="alignnone size-medium wp-image-1128" /></a> &nbsp;&nbsp;<a href="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-voltage-regulator-2.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/lm2576-voltage-regulator-2-300x179.jpg" alt="" title="lm2576-voltage-regulator-2" width="300" height="179" class="alignnone size-medium wp-image-1129" /></a></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1121, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1121_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1121_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.04/electronics-drop-down-regulator-lm2576-adj/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android: background 2.0</title>
		<link>http://rux.pp.ru/blog/2012.04/android-modern-stripe-gradient-background/</link>
		<comments>http://rux.pp.ru/blog/2012.04/android-modern-stripe-gradient-background/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 13:04:23 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[drawable]]></category>
		<category><![CDATA[gradient]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[stripe]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1092</guid>
		<description><![CDATA[
Для одного из наших приложений &#8220;Говорящие вещи&#8221; потребовалось сделать яркий, жизнерадостный, но не отвлекающий фон. Мы перебирали несколько разных вариантов с deviantart (где средний фон &#8211; 500кб, OMG), но почему-то смотрелось не очень внушающе(растяжки, отвлекающие цвета).
В интернетах наткнулся на пост товарища @gobozov: Android. Tiled background with diagonal lines, как говорится, inspired by ..  . [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.04%2Fandroid-modern-stripe-gradient-background%2F&amp;via=ruxeg&amp;text=Android%3A+background+2.0&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.04%2Fandroid-modern-stripe-gradient-background%2F"  class="twitter-share-button">Tweet</a></div><p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/04/device-2012-04-10-235057.png" ><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/device-2012-04-10-235057-90x150.png" alt="" title="nice-background" width="90" height="150" class="alignleft size-thumbnail wp-image-1103" style="padding-right: 10px" /></a></p>
<p>Для одного из наших приложений <b>&#8220;Говорящие вещи&#8221;</b> потребовалось сделать яркий, жизнерадостный, но не отвлекающий фон. Мы перебирали несколько разных вариантов с deviantart (где средний фон &#8211; 500кб, <b>OMG</b>), но почему-то смотрелось не очень внушающе(растяжки, отвлекающие цвета).</p>
<p>В интернетах наткнулся на пост товарища <a href="http://twitter.com/gobozov" target="_blank">@gobozov</a>: <a href="http://gobozov.blogspot.com/2011/10/android-tiled-background-with-diagonal.html" target="_blank">Android. Tiled background with diagonal lines</a>, как говорится, <i>inspired by</i> .. <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . В котором был пример стильного фона (stripes + полупрозрачный градиент). Выглядит &#8211; круто.</p>
<p>В его варианте используется tile background как фон Layout + ImageView с градиентом. Я попытался чуть-чуть упростить и уменьшить количество файлов.</p>
<p><span id="more-1092"></span></p>
<h2>Stripes</h2>
<div style="margin-right: 5px; padding:5px; line-height:95px; text-align: center; float: right; width:100px; height: 100px; background:url(http://www.stripemania.com/cache/6-0-45-1-555555-2-8F8F8F-4D4C5A-DDEE1E-DDEE1E-DDEE1E-555555-808080-78D316-78D316-78D316-yes-yes-yes-yes-yes-.png); border-radius: 4px; font-size: 20px; color: white; text-shadow: 1px 1px gray">boo!</div>
<p>Последнее время меня прёт от этих полосочек <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Они способны придать любому приложению/странице эффект Web2.0. Есть множество ресурсов, на которых можно сгенерить эти полосочки: <a href="http://www.stripegenerator.com/" rel="nofollow">stripegenerator.com</a> или <a href="http://www.stripemania.com" rel="nofollow">www.stripemania.com</a></p>
<h2>Фон</h2>
<p><P>Теперь создадим drawable: res/drawable/background.xml состоящий из двух слоёв:</p>
<ol>
<li>Stripe нужно размножить &#8220;замостить&#8221;</li>
<li>Сделать радиальный градиент от от полупрозрачного белого до практически прозрачного белого </li>
</ol>
<div class="codecolorer-container xml twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;layer-list</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bitmap</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:dither</span>=<span style="color: #ff0000;">&quot;true&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:src</span>=<span style="color: #ff0000;">&quot;@drawable/stripe_blue&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:tileMode</span>=<span style="color: #ff0000;">&quot;repeat&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;shape</span> <span style="color: #000066;">android:shape</span>=<span style="color: #ff0000;">&quot;rectangle&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;gradient</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:endColor</span>=<span style="color: #ff0000;">&quot;#4fffffff&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:gradientRadius</span>=<span style="color: #ff0000;">&quot;500&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:startColor</span>=<span style="color: #ff0000;">&quot;#8fffffff&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">android:type</span>=<span style="color: #ff0000;">&quot;radial&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/shape<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/item<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/layer-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div>
<p>
И поставим его в фон корневого Layout:</p>
<div class="codecolorer-container xml twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;LinearLayout</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">android:background</span>=<span style="color: #ff0000;">&quot;@drawable/background&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">android:orientation</span>=<span style="color: #ff0000;">&quot;vertical&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<br />
&nbsp; &nbsp; . . . . . . <br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/LinearLayout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div>
</p>
<h2>Результат</h2>
<p>(сверху ActionBar &#8211; <a href="https://github.com/cyrilmottier/GreenDroid" rel="nofollow" target="_blank">GreenDroid</a>)</p>
<p>
<img src="http://rux.pp.ru/blog/wp-content/uploads/2012/04/device-2012-04-10-235057.png" alt="" title="nice-background" width="480" height="800" class="aligncenter size-full wp-image-1103" /></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1092, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1092_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1092_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.04/android-modern-stripe-gradient-background/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTC Desire: в поисках прошивки</title>
		<link>http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/</link>
		<comments>http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 22:19:43 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[htc desire]]></category>
		<category><![CDATA[sense]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1073</guid>
		<description><![CDATA[Я был уверен, что смог найти &#8220;прошивку моей мечты&#8221;, но всё оказалось сложнее. Со временем количество софта и хранимых данных увеличивалось и всё чаще телефон стал глючить. Причина глюков оказалась вовсе не в софте.
Итак,
Прошивка моей мечты: финальная версия

Все кастомные прошивки достаточно хороши, а их зависания возникают из за карты памяти. Как хорошо что в андроиде [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.03%2Fhtc-desire-best-firmware%2F&amp;via=ruxeg&amp;text=HTC+Desire%3A+%D0%B2+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%D1%85+%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.03%2Fhtc-desire-best-firmware%2F"  class="twitter-share-button">Tweet</a></div><p>Я был уверен, что смог найти <a href="/blog/2012.02/htc-desire-firmware-of-my-dream/">&#8220;прошивку моей мечты&#8221;</a>, но всё оказалось сложнее. Со временем количество софта и хранимых данных увеличивалось и всё чаще телефон стал глючить. Причина глюков оказалась вовсе не в софте.</p>
<p>Итак,</p>
<h2>Прошивка моей мечты: финальная версия</h2>
<p><span id="more-1073"></span></p>
<p>Все кастомные прошивки достаточно хороши, а их зависания возникают из за карты памяти. Как хорошо что в андроиде много от линукса! Мне пришло в голову посмотреть содержимое /var/log/messages при очередном зависоне. Я не ошибся &#8211; графика действительно замирала, а adb shell успешно подсоединялся и я получал свой busybox <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Пробовал ставить другую прошивку &#8211; <a href="http://forum.xda-developers.com/showthread.php?t=1315961URL" target="_blank" rel="nofollow">runnymede AIO</a> 6.0.4.1 (вместо InsertCoin), но результат тот же: через пару недель стал виснуть несколько раз в день.</p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/03/homescreen-w-widgets-and-my-apps.png"><img class="alignright size-medium wp-image-1082" title="Скриншот прошивки runnymede AIO с нашими приложениями" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/homescreen-w-widgets-and-my-apps-180x300.png" alt="" width="180" height="300" /></a></p>
<p>Зависания вполне логичны &#8211; во время активного IO на sd card. Например: при включении интерета(посылается broadcast о включении сети, на который обычно многие приложения реагируют, т.е. запускаются для того чтоб синхронизироваться), при прослушивании подкастов и паралельно запуска, к примеру, браузера, а также при включении телефона (многие приложения имеющие слушающие broadcast от запуска устройства начинают загружаться).</p>
<p>В логах я увидел одно и тоже &#8211; сначала ядро пишет что sd карта не отзывается, потом говорит что перезапускает контроллер, инициализирует и&#8230; и снова карта не отзывается. Судя по всему карта памяти фигеет от такой активной работы с ней и выключается ))</p>
<p>Карта памяти была <a href="http://www.citilink.ru/catalog/gadgets/flashcards/512157/" target="_blank" rel="nofollow">microSDHC KINGMAX 8Гб Class 6</a>.</p>
<p>Настал такой момент, что телефон стал абсолютно <strong>всегда </strong> зависать при включении &#8211; через 10 секунд или через минуту, по-разному. Я очень привык к runnymede AIO, поэтому на всякий случай сделал бэкап(хотя понимал что прошивка уже не работает)</p>
<p>На некоторое время я поставил стоковую рутованную и к ней link2sd. Телефон перестал зависать (т.к. большинство приложений висит на internal flash), но и место вместе с этим доступное место для приложений уменьшалось.</p>
<p>Даже была мысль оставить её, но HTC sense 2.1 и медленее и неудобнее по сравнению с 3.5 &#8211; за то время как я пользовался кастомными прошивками очень привык к ней.</p>
<h3>Class 10!</h3>
<p>Позже нашёл время купить новую флешку &#8211; <a href="http://www.citilink.ru/catalog/583439/?r=il00124946" target="_blank" rel="nofollow">microSDHC APACER 8Гб Class 10, AP8GMCSH10-R</a> , быстренько разбил её на 3 раздела (fat32-6.7Gb, ext4-1Gb, swap-32Mb) с помощью gparted, скопировал содержимое первого раздела из старой.</p>
<p>Был уверен, что придётся ставить заново (уже знал что это будет runnymede AIO), но решил попробовать восстановить ранее не рабочий бэкап.</p>
<p>И о чудо &#8211; заработало! Как надо! После восстановления телефон загрузился с runnymede AIO как ни в чём не бывало!</p>
<p>Всё работает просто на ура. На момент поста я уже неделю пользуюсь этой прошивкой на новой флешке и ещё ни разу не зависло. Всё работает достаточно быстро, sense летает даже по сравнению со стоковой.</p>
<p>К важному вопросу о батарейке:</p>
<ul>
<li>за ночь(8часов idle, wifi включён, но не уверен что используется) &#8211; 25%</li>
<li>при среднем использовании батарейки хватает ровно на день</li>
<li>30 минут яндекс карт съедают 40%</li>
<li>1 час подкастов &#8211; 10%</li>
</ul>
<p>Меня очень устраивает, то что нужно!</p>
<p>Ещё раз обращаю внимание, что прошивка обалденная (у неё даже инсталлер графический &#8211; aroma installer). А ниже несколько скриншотиков :)</p>
<div style="height: 360px; overflow: hidden">

<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/device-2012-02-24-001455/' title='Экран приветствия aroma installer'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/device-2012-02-24-001455-90x150.png" class="attachment-thumbnail" alt="" title="Экран приветствия aroma installer" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/device-2012-02-24-002400/' title='Установка прошивки'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/device-2012-02-24-002400-90x150.png" class="attachment-thumbnail" alt="" title="Установка прошивки" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/device-2012-02-24-002719/' title='Анимация во время загрузки'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/device-2012-02-24-002719-90x150.png" class="attachment-thumbnail" alt="" title="Анимация во время загрузки" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/htc-desire-runnymede-aio-1/' title='Основной экран'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/htc-desire-runnymede-aio-1-90x150.png" class="attachment-thumbnail" alt="" title="Основной экран" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/htc-desire-runnymede-aio-weather/' title='Виджет с погодой на домашнем экране'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/htc-desire-runnymede-aio-weather-90x150.png" class="attachment-thumbnail" alt="" title="Виджет с погодой на домашнем экране" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/desktop-in-motion/' title='Карусель в действии'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/desktop-in-motion-90x150.png" class="attachment-thumbnail" alt="" title="Карусель в действии" /></a>
<a href='http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/homescreen-w-widgets-and-my-apps/' title='Скриншот прошивки runnymede AIO с нашими приложениями'><img width="90" height="150" src="http://rux.pp.ru/blog/wp-content/uploads/2012/03/homescreen-w-widgets-and-my-apps-90x150.png" class="attachment-thumbnail" alt="" title="Скриншот прошивки runnymede AIO с нашими приложениями" /></a>

</div>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1073, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 2"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1073_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1073_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTC Desire: прошивка моей мечты</title>
		<link>http://rux.pp.ru/blog/2012.02/htc-desire-firmware-of-my-dream/</link>
		<comments>http://rux.pp.ru/blog/2012.02/htc-desire-firmware-of-my-dream/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 16:09:04 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app2sd]]></category>
		<category><![CDATA[desire]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[htc]]></category>
		<category><![CDATA[link2sd]]></category>
		<category><![CDATA[mount]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1061</guid>
		<description><![CDATA[
&#8220;Ребята, прошивка здоровенная!! Здоровеннная!&#8221;
UPD: самая здоровенная прошивка моей мечты тут
Полтора года мой HTC Desire радовал буквально всем, кроме батарейки(что свойственно всем андроидам) и объёмом внутренней памяти.
Сначала я терпел, стараясь выбирать только самые нужные мне программы, чистил кеш приложений по утрам, а субботними вечерами удалял приложения, которыми не часто пользуюсь. Время шло, потребности в количестве установленных [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.02%2Fhtc-desire-firmware-of-my-dream%2F&amp;via=ruxeg&amp;text=HTC+Desire%3A+%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B0+%D0%BC%D0%BE%D0%B5%D0%B9+%D0%BC%D0%B5%D1%87%D1%82%D1%8B&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.02%2Fhtc-desire-firmware-of-my-dream%2F"  class="twitter-share-button">Tweet</a></div><p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/02/device-2012-02-22-230246.png"><img class="alignright size-medium wp-image-1069" title="InsertCoin" src="http://rux.pp.ru/blog/wp-content/uploads/2012/02/device-2012-02-22-230246-180x300.png" alt="" width="180" height="300" /></a></p>
<p>&#8220;Ребята, прошивка здоровенная!! Здоровеннная!&#8221;</p>
<p><b>UPD:</b> самая здоровенная <a href="http://rux.pp.ru/blog/2012.03/htc-desire-best-firmware/">прошивка моей мечты тут</a></p>
<p>Полтора года мой HTC Desire радовал буквально всем, кроме батарейки(что свойственно всем андроидам) и объёмом внутренней памяти.</p>
<p>Сначала я терпел, стараясь выбирать только самые нужные мне программы, чистил кеш приложений по утрам, а субботними вечерами удалял приложения, которыми не часто пользуюсь. Время шло, потребности в количестве установленных приложений стали увеличиваться(во многом из за андроид-разработки), а уже установленные приложения даже не думали худеть, напротив &#8211; разбухали с каждым апдейтом. К слову, максимально откладывал приходящие обновления.</p>
<h2>Хватит это терпеть! (ц)</h2>
<p><span id="more-1061"></span></p>
<p>Последней каплей стала необходимость снести приложение для создания mindmap. Потом снести twitter &amp; beyondpod, ага.</p>
<p>Решением проблемы могло стать использование кастомной прошивки, которая имеет app2sd++ feature. Это такая feature когда все приложения ставятся не на внутренний flash телефона, а на карту памяти. Как потом я узнал это не есть хорошо.</p>
<h3>Терминология</h3>
<p>Чтоб читателю было понятнее предмет разговора &#8211; нужно ввести терминологию и основные понятия.</p>
<p>В приложении есть 4 сущности</p>
<ul>
<li><strong>apk </strong>- место, откуда достаются ресурсы</li>
<li><strong>dalvik-cache</strong> &#8211; скомпилированный байткод виртуальной машины dalvik</li>
<li><strong>lib</strong> &#8211; как поняно из названия папка с нативными либами (NDK)</li>
<li><strong>shared_prefs,</strong> <strong>databases </strong>и <strong>cache</strong>- настройки, данные и кеш приложения созданные уже после запуска приложения.</li>
</ul>
<p>Все, кроме apk лежит в папке /data/data/some.package.name/, а apk в /data/app/some.package.name-N.apk.<br />
По сути это и есть android application filesystem layout (незачем переводить)</p>
<h4>Как хранятся файлы приложений?</h4>
<p>До Android 2.1 все выглядило как я написал выше, однако, в версии 2.2 была добавленна возможность переносить apk на sd карту в монтируемый зашифрованный раздел в виде файла.</p>
<p>Но этого оказалось мало &#8211; не все приложения умели так &#8220;переезжать&#8221;, а некоторые вдобавок теряли функциональность (не могли быть запущенны при старте системы, не могли иметь при себе виджет)</p>
<h3>И что делать?</h3>
<p>Многие кастомные прошивки имеют такую фишку, как app2sd++ &#8211; смысл в том, чтоб создать второй раздел ext4 на sd  карте, монтировать её на место /data (где должен быть internal flash).</p>
<p>Отличное решение &#8211; таким образом пространство для приложений ограничивается только размером второго раздела sd карты.</p>
<p>В частности по совету настоящего Гика Кости я поставил ruHD &#8211; это прошивка с htc последним sense, с фунционалом app2sd++. Правда очень понравилась, но версия 3.0 тормозила и постоянно перезагружалась. ruHD 2.x &#8211; терпимо, но чтоб телефон не зависал и не перезагружался им лучше было не пользоваться.</p>
<h2>Почему так столько глюков и мало батарейки?</h2>
<p>Во многом из за моей карты памяти &#8211; class 2. У неё очнь ограниченная пропускная способность, время доступа к памяти, как следствие ОСь просто не ожидает что простая операция чтения скажем dalvik-cache файла займёт время раз в десять больше. Увеличивается CPU wait time (линуксоиды поймут) из за ожидания IO. Кстати это всё можно помониторить &#8211; adb shell top</p>
<p>С батарейкой отдельная тема. Для Андроидов нигогда не будет много батарейки. До прошивки  у меня телефон при следнем использовании в лучшем случае жил день.  С ruHD &#8211; часа 4-5 <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Затраты на протокол sd, на поддержку во включеном состоянии карты памяти &#8211; все это заметно сказывается на батарейке.</p>
<h2>Здоровенная прошивка!</h2>
<p>Я задался себе целью на1ти прошивку, которая не будет форсировать монтирование раздела /data на дополнительный раздел карты памяти (как это делал ruHD). Или как минимум, чтоб это можно было отключить (по сути это обычный скрипт в /etc/init.d).</p>
<p>Перечитал тысячи отзывов пацанов и &#8220;профи&#8221; на 4pda &#8211; понял что там адеквата в лучшем случае 10%. Почитал xda-developers, к своему удивлению обнаружил, что  адеквата там не на много больше. То ли русские набежали с 4pda, то ли распределение фейковых гиков примерно не зависит от места проживания(всем же хочется показать что  имеешь мнение). В итоге среди всего этого треша выделил несколько прошивок,  которые и попробовал. Не буду утомлять &#8211; выбрал<a href="http://insertcoin-roms.org/htc-desire/download" target="_blank"> InsertCoin</a>. Минимум изменений (судя по всему) по сравнению со стоковой htc sense 3.0. Очень порадовало, что по умолчанию прошивка помещает apk на второй раздел sd-карты, а остальные файлы оставляет на internal flash. По сути это уже встроенный app2sd.</p>
<p>Дальше ставится замечательная тузла link2sd &#8211; и ручками выбираются приложения, dalvik-cache который нужно слинковать на второй раздел флешки. Да, это обычный symlink.</p>
<p>Именно это решение мне больше всего подходит, потому что:</p>
<ul>
<li>я пишу под андроид &#8211; мне некогда ждать пока приложение слинкуется на карту памяти (это не большое, но время)</li>
<li>я ставлю много разных приложений на котороткое время (минуты-десятки минут) &#8211; опять же для разработки нужно</li>
<li>постоянный набор софта как ни странно постоянен <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  я знаю чем я пользуюсь и не ищу замену &#8211; поставил и забыл. Это небольшое количество приложений можно самостоятельно слинковать</li>
<li>я сам выбираю (в зависимости от частоты использования) какие приложения должны жить на внутренней памяти, а какие во внешней. Отсюда я могу управлять временем работы батарейки и загрузкой процессора.</li>
</ul>
<p>После двух недель юзания InsertCoin могу сказать что это отличный компромис для меня &#8211; да, иногда может зависнуть и перезагружаться по кругу. Так, я проспал на Android Dev Camp, что символично <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1061, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1061_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1061_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.02/htc-desire-firmware-of-my-dream/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Паттерн MVC</title>
		<link>http://rux.pp.ru/blog/2012.01/pattern-mvc/</link>
		<comments>http://rux.pp.ru/blog/2012.01/pattern-mvc/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 17:53:57 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1049</guid>
		<description><![CDATA[Моя интерпретация широко известного паттерна.

Это классический подход для построения веб-приложений,  который находит применение практически везде
Он говорит от том, что есть 3 основных компонента:

Model &#8211; данные
View &#8211; предстваление
Controller &#8211; бизнес логика


Это такая абстракция, которая позволяет сгруппировать компоненты/классы/функции по выполняемым задачам.

Model
Так, например, модель хранит и получает данные. Не важно откуда. Это может быть база данных, текстовый [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fpattern-mvc%2F&amp;via=ruxeg&amp;text=%D0%9F%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD+MVC&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fpattern-mvc%2F"  class="twitter-share-button">Tweet</a></div><p>Моя интерпретация широко известного паттерна.</p>
<div></div>
<p>Это классический подход для построения веб-приложений,  который находит применение практически везде</p>
<p>Он говорит от том, что есть 3 основных компонента:</p>
<ul>
<li><strong>Model</strong> &#8211; данные</li>
<li><strong>View</strong> &#8211; предстваление</li>
<li><strong>Controller</strong> &#8211; бизнес логика</li>
</ul>
<p><span id="more-1049"></span></p>
<p>Это такая абстракция, которая позволяет сгруппировать компоненты/классы/функции по выполняемым задачам.</p>
<p><br/></p>
<h3>Model</h3>
<p>Так, например, модель хранит и получает данные. <span style="text-decoration: underline;">Не важно откуда</span>. Это может быть база данных, текстовый файл, сервисы гугла или даже термометр на подоконнике. Важно что модель позволяет работать с определённым типом данных.</p>
<p>Важно понимать, что модель <strong>не имеет представления</strong> зачем кому то нужны эти данные. Ей об этом знать <strong>не нужно.</strong></p>
<h3>View</h3>
<p>Представление &#8211; отображение полученной информации. Предствление <span style="text-decoration: underline;">понятия не имеет</span> откуда взялись эти данные, и часто даже не знает что это такое. Зато представление может <strong>показывать </strong>переданные данные, т.е. оно знает как их отображать. Самый простой пример представления &#8211; это то, куда ты смотришь. Это экран, на котором написан этот текст. Представление знает как показать этот текст, но <strong>не знает</strong> откуда этот текст появился. Также представления &#8211; это шаблоны сайтов, формочки в телефоне, графики, каптчи, rss фиды.</p>
<div></div>
<h3>Controller</h3>
<p>Бизнес-логика &#8211; связующее звено. В зависимости от задачи, которая поступила контроллеру он выдёргивает нужные данные из модели и помещает их в нужное представление. Некий <strong>glue</strong>.</p>
<p>Контроллер не знает как получаются данные и каким образом будет отображать предствление, но знает какую модель и какое представление нужно использовать для конкретного запроса. <span style="text-decoration: underline;">Как менеджер</span> <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div></div>
<h2>Например?</h2>
<p>А теперь пример с температурой (нечто дающее информацию о температуре).</p>
<p>У нас есть модель &#8211; это может быть: сервисы яндекса, сохранёная температура в бд или термодатчик подключенный к компу. Каждая модель знает как работать со своим datasource(интернет, подключение к бд, последовательный порт)</p>
<p>У нас есть представление &#8211; это может быть: вывод в консоль, вывод на экран компьютера, зачитывание голосом компьютера или вывод на принтер. Опять же &#8211; на вход одни и те же данные (цифра &#8211; температура), а каждое предстваление знает &#8220;показать&#8221; то, что ему пришло.</p>
<p>И наконец бизнес-логка это всё объединяет &#8211; оно понимает что его спрашивают и дёргает нужную модель, подсовывая данные в нужное представление. Важно, что контроллер <strong>не знает </strong>как были полученны данные и как они будут отображаться.</p>
<h2>Итого</h2>
<p>Если не понятно, перечитай ещё раз, продолжая ассоциативный ряд моих примеров.</p>
<p>Лучше поймёшь только когда напишешь сам <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Вот только тогда наступает полное понимание.</p>
<p>И да, история про MVC это история о <strong>малосвязанности</strong> компонентов. Как ты понял что каждый компонент <span style="text-decoration: underline;">делает только то, что он знает</span>, не лезя в чужое дело.</p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1049, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 5"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1049_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1049_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.01/pattern-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: живые зимние обои 2012</title>
		<link>http://rux.pp.ru/blog/2012.01/android-xmas-live-wallpaper-2012/</link>
		<comments>http://rux.pp.ru/blog/2012.01/android-xmas-live-wallpaper-2012/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 15:29:57 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android market]]></category>
		<category><![CDATA[gimp]]></category>
		<category><![CDATA[htc desire]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[snowflakes]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[wallpaper]]></category>
		<category><![CDATA[winter]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1021</guid>
		<description><![CDATA[
Зима вроде на улице. Как и полагается все &#8211; от муниципальных органов до ларьков создают зимнее/новогоднее настроение своими вывесками, акциями, украшениями и рекламой.
Решил поучаствовать  в этом безумии &#8211; сделал зимние обои для андроида. Была цель &#8211; быстро и просто сделать вброс и посмотреть как на него отреагируют юзеры.
Так и получилось &#8211; первый релиз сделал за [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fandroid-xmas-live-wallpaper-2012%2F&amp;via=ruxeg&amp;text=Android%3A+%D0%B6%D0%B8%D0%B2%D1%8B%D0%B5+%D0%B7%D0%B8%D0%BC%D0%BD%D0%B8%D0%B5+%D0%BE%D0%B1%D0%BE%D0%B8+2012&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fandroid-xmas-live-wallpaper-2012%2F"  class="twitter-share-button">Tweet</a></div><p><a href="https://market.android.com/details?id=ru.ruxlab.xmassnowwallpaper"><img class="size-full wp-image-1023 alignleft" style="margin-left: 10px; margin-right: 10px;" title="Открыть на маркете" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/xmas-promo-180x120.png" alt="" width="180" height="120" /></a></p>
<p>Зима<a href="http://rux.pp.ru/blog/2011.12/fire-winter/"> вроде</a> на улице. Как и полагается все &#8211; от муниципальных органов до ларьков создают зимнее/новогоднее настроение своими вывесками, акциями, украшениями и рекламой.</p>
<p>Решил поучаствовать  в этом безумии &#8211; сделал зимние обои для андроида. Была цель &#8211; быстро и просто сделать вброс и посмотреть как на него отреагируют юзеры.</p>
<p>Так и получилось &#8211; первый релиз сделал за полтора дня (порядка 8 часов ушло от начала разработки, прямо в маршрутке, до паблишинга в маркете). Потом ещё ушло порядка 8 часов на всякие улучшательства.</p>
<p><span id="more-1021"></span></p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-with-time-and-power-widget.png"><img class="alignnone size-medium wp-image-1025" title="home-screen-with-time-and-power-widget" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-with-time-and-power-widget-180x300.png" alt="" width="180" height="300" /></a><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked_screen.png"> <img class="alignnone size-medium wp-image-1026" title="locked_screen" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked_screen-180x300.png" alt="" width="180" height="300" /> </a><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked_screen_2.png"><img class="alignnone size-medium wp-image-1027" title="locked_screen_2" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked_screen_2-180x300.png" alt="" width="180" height="300" /></a></p>
<p>Всё на столько просто, что даже не буду вдаваться в технические  подробности. Достаточно взять за основу пример из документации, немного  физики(спросить <a href="../2011.12/fire-winter/#comment-14589">у знающих людей</a>), найти фришный бэкраунд и обработать их в ГИМПе.</p>
<p><a href="https://market.android.com/details?id=ru.ruxlab.xmassnowwallpaperblue&amp;feature=more_from_developer"><img class="size-full wp-image-1022 alignright" style="margin-left: 8px; margin-right: 8px;" title="Посмотреть синие живые обои на маркете" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/blue-xmas-promo-180x120.png" alt="" width="180" height="120" /></a></p>
<h2>А теперь синенькие!</h2>
<p>31го декабря  запилил версию с синим фоном. На самом то деле опять же в ГИМПе изменил кривую цвета(сделал пресет) и прогнал так всю графику (в том числе для маркета). По времени &#8211; около часа ушло.</p>
<p>Тут я столкнулся с уже известной проблемой: нельзя размещать несколько приложений с одним и тем же packageName. В случае с красными обоями это был<strong> ru.ruxlab.xmaslivewallpaper</strong>. Синие обои точно такие же во всём, как красные за исключением ресурсов. В новых packageName стал <strong>ru.ruxlab.xmaslivewallpaperblue</strong>. При этом все классы остались по-прежнему в пакете <strong>ru.ruxlab.xmaslivewallpaper</strong>(кроме R.java соответственно). В svn пришлось делать copy.</p>
<p>И скриншотики, конечно же ниже:</p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked-screen.png"><img class="alignnone size-medium wp-image-1031" title="locked-screen" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/locked-screen-180x300.png" alt="" width="180" height="300" /></a> <a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-power-control-widget.png"><img class="alignnone size-medium wp-image-1029" title="home-screen-power-control-widget" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-power-control-widget-180x300.png" alt="" width="180" height="300" /></a> <a href="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-htc.png"><img class="alignnone size-medium wp-image-1028" title="home-screen-htc" src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/home-screen-htc-180x300.png" alt="" width="180" height="300" /></a></p>
<h2>Результаты?</h2>
<p>Их нет.</p>
<p>Красные(первые) на момент написания поста имели смешное количество скачиваний &#8211; несколько меньше <strong>500</strong>. И это за 2 недели и с нормальным инфоповодом.</p>
<p>Синие(последние) на момент поста буквально пару дней назад размещенны, там и говорить нечего.</p>
<p>Очень хотел разместить на upload.cnet.com, но эти ребята такие серьёзные, что несколько раз отклонили заявку на регистрацию <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Для меня по-прежнему открыт вопрос как продвигать не специфические приложения (вроде этого бэкграунда).</p>
<p>Продолжаю экспериментировать с названием и первыми строчками описания. Пытаюсь понять как маркет предлагает &#8220;похожие&#8221; приложения, как ранжирует выдачу. Например добавление слова FREE как я понял только портит выдачу (менее релевантно получается, т.е. лучше &#8220;Xmas live wallpaper 2012&#8243;, чем &#8220;Xmas live wallpaper 2012 FREE&#8221;).</p>
<h2>С новым годом!</h2>
<p>Новогоднего вам настроения!</p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1021, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1021_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1021_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.01/android-xmas-live-wallpaper-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: контролл корректировки времени</title>
		<link>http://rux.pp.ru/blog/2012.01/java-swing-controll-to-fix-russian-time/</link>
		<comments>http://rux.pp.ru/blog/2012.01/java-swing-controll-to-fix-russian-time/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 18:29:03 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[format]]></category>
		<category><![CDATA[jspinner]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[timestamp]]></category>
		<category><![CDATA[timezone]]></category>
		<category><![CDATA[tzdata]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=1008</guid>
		<description><![CDATA[В середине 2011 года вышел закон, в котором отменяется певод времени на летнее. #СПАСИБОСАМИЗНАЕТЕЗАЭТО.

Вот только кто софту скажет что всё поменялось? В частности в джаве есть косяки Оракл не торопится выпускать апдейт под венду, который исправляет время.
Напомню, что даже если в венде поставленны патчи и оно показывается правильное время, джава будет по-прежнему показывать GMT+3 (вместо [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fjava-swing-controll-to-fix-russian-time%2F&amp;via=ruxeg&amp;text=Java%3A+%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB+%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2012.01%2Fjava-swing-controll-to-fix-russian-time%2F"  class="twitter-share-button">Tweet</a></div><p><P>В середине 2011 года вышел закон, в котором отменяется певод времени на летнее. #СПАСИБО<em>САМИЗНАЕТЕ</em>ЗАЭТО.
</p>
<p>Вот только кто софту скажет что всё поменялось? В частности в джаве есть косяки Оракл не торопится выпускать апдейт под венду, который исправляет время.<br />
Напомню, что даже если в венде поставленны патчи и оно показывается правильное время, джава будет по-прежнему показывать <strong>GMT+3</strong> (вместо <strong>GMT+4</strong>), т.е. на час раньше.
</p>
<p><span id="more-1008"></span></p>
<p>Да, оракл<a href="http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html#introduction" follow="noref"> выпустил патч</a> (глазам не поверил &#8211; консольная тузла) под винду, которая помогает системным администатором всё вернуть в рабочий режим. Я так и не смог накатить его на рабочую машинку, видимо фиговый из меня админ, ога<strong> :-/ </strong>.  Да и желания фиксить таким образом нет &#8211; ну ок, я сделаю это на своей машине, а пользователи? Надо им разбираться там куда что как писать и запускать? Важно понимать, что если моя программа показывает не правильно, то виноват <strong>именно я</strong>, а не оракл или <em>самизанаетекто</em>.</p>
<p>Я запарился с этим возится (не предстваляю как пришлось бы мучатся конечным юзерам) и сделал мега костыль в программке на swing (десктопный клиент-нотификатор к SugarCRM) &#8211; при старте даю возможность &#8220;подогнать&#8221; смещение времени так, чтоб стало &#8220;как нужно&#8221;.</p>
<h3>Суть задачи</h3>
<p>Получилось большое введение <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Задача в создании &#8220;красивого&#8221; контролла для ввода коррекции времени.</p>
<table width="100%">
<tr>
<td width="50%" align="center">
<img src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/time-fix-controll-negative.png" alt="" title="time-fix-controll-negative"  class="alignnone size-full wp-image-1009" />
</td>
<td width="50%" align="center">
<img src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/time-fix-controll-positive.png" alt="" title="time-fix-controll-positive"  class="alignnone size-full wp-image-1009" />
</td>
</tr>
</table>
<p>Решается достаточно просто, но пришлось скомпоновать много похожих решений в сети</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; fldTimeFix <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JSpinner<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SpinnerNumberModel<span style="color: #009900;">&#40;</span>0, <span style="color: #339933;">-</span>12, <span style="color: #339933;">+</span>12, 1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JSpinner.<span style="color: #006633;">NumberEditor</span> numberEditor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JSpinner.<span style="color: #006633;">NumberEditor</span><span style="color: #009900;">&#40;</span>fldTimeFix<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JFormattedTextField formattedTextField <span style="color: #339933;">=</span> numberEditor.<span style="color: #006633;">getTextField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NumberFormatter fmt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NumberFormatter<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">DecimalFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;'+'00':00';'-'00':00'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fmt.<span style="color: #006633;">setValueClass</span><span style="color: #009900;">&#40;</span>fldTimeFix.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; DefaultFormatterFactory fmtFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultFormatterFactory<span style="color: #009900;">&#40;</span>fmt, fmt, fmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; formattedTextField.<span style="color: #006633;">setFormatterFactory</span><span style="color: #009900;">&#40;</span>fmtFactory<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; formattedTextField.<span style="color: #006633;">setEditable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fldTimeFix.<span style="color: #006633;">setEditor</span><span style="color: #009900;">&#40;</span>numberEditor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<h2>UPD: скорректированное время</h2>
<p><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/time-fixer-with-display.png" alt="" title="time-fixer-with-display" width="214" height="105" class="alignright size-full wp-image-1017" /></p>
<p>Вариант привести к нормальному виду (ибо непонятно по отношению к чему человек выставляет смещение). Справа от Spinner&#8217;a поставить время, которе получилось после внесения коррекции.
</p>
<p>Так явно посимпотичнее. Зато количество кода на такую &#8220;мелочь&#8221; увеличилось значительно. Важно не забывать останавливать таймер когда фрейм не активен (в моём случае он не создаётся заново при открытии), и запускать когда появляется.</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> fillContent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; . . . . . <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006633;">fldTimeFix</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JSpinner<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SpinnerNumberModel<span style="color: #009900;">&#40;</span>0, <span style="color: #339933;">-</span>12, <span style="color: #339933;">+</span>12, 1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JSpinner.<span style="color: #006633;">NumberEditor</span> numberEditor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JSpinner.<span style="color: #006633;">NumberEditor</span><span style="color: #009900;">&#40;</span>fldTimeFix<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; JFormattedTextField formattedTextField <span style="color: #339933;">=</span> numberEditor.<span style="color: #006633;">getTextField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NumberFormatter fmt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NumberFormatter<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">DecimalFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;'+'00':00 &nbsp;';'-'00':00 &nbsp;'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fmt.<span style="color: #006633;">setValueClass</span><span style="color: #009900;">&#40;</span>fldTimeFix.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; DefaultFormatterFactory fmtFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultFormatterFactory<span style="color: #009900;">&#40;</span>fmt, fmt, fmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; formattedTextField.<span style="color: #006633;">setFormatterFactory</span><span style="color: #009900;">&#40;</span>fmtFactory<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; formattedTextField.<span style="color: #006633;">setEditable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fldTimeFix.<span style="color: #006633;">setEditor</span><span style="color: #009900;">&#40;</span>numberEditor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Panel</span> timeFixPanel <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Panel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">GridLayout</span><span style="color: #009900;">&#40;</span>1, 2, 4, 1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; timeFixPanel.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>fldTimeFix, <span style="color: #003399;">BorderLayout</span>.<span style="color: #006633;">PAGE_START</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; lblTimeFixResult <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;--:--&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; timeFixPanel.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>lblTimeFixResult, <span style="color: #003399;">BorderLayout</span>.<span style="color: #006633;">PAGE_END</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;. . . . . <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006633;">timerFixTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Timer</span><span style="color: #009900;">&#40;</span>990, updateFixTimeResult<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; fldTimeFix.<span style="color: #006633;">addChangeListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ChangeListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> stateChanged<span style="color: #009900;">&#40;</span><span style="color: #003399;">ChangeEvent</span> ce<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateFixTimeResult.<span style="color: #006633;">actionPerformed</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Action</span> updateFixTimeResult <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">AbstractAction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">SimpleDateFormat</span> sdf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">Calendar</span> nc <span style="color: #339933;">=</span> <span style="color: #003399;">Calendar</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">TimeZone</span>.<span style="color: #006633;">getTimeZone</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;GMT&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nc.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Calendar</span>.<span style="color: #006633;">HOUR</span>, getTimeFixHours<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lblTimeFixResult.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &nbsp;&quot;</span> <span style="color: #339933;">+</span> sdf.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>nc.<span style="color: #006633;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setVisible<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">boolean</span> isVis<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span>isVis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isVis<span style="color: #009900;">&#41;</span> timerFixTime.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">else</span> timerFixTime.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></div>
<p><img src="http://rux.pp.ru/blog/wp-content/uploads/2012/01/time-fix-controll-under-win7.png" alt="" title="time-fix-controll-under-win7" width="216" height="89" class="alignright size-full wp-image-1019" /></p>
<p>Все эти манипуляции с календарём &#8211; вынужденная мера. Да, прям вот так руками пришлось пересчитывать время GMT. <strong> <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </strong></p>
<p>Справа &#8211; как выглядит под вендой</p>
<p><br/></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(1008, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_1008_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_1008_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2012.01/java-swing-controll-to-fix-russian-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мысли: мартабрь или #сжечьзиму</title>
		<link>http://rux.pp.ru/blog/2011.12/fire-winter/</link>
		<comments>http://rux.pp.ru/blog/2011.12/fire-winter/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 22:57:20 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[mind]]></category>
		<category><![CDATA[spb]]></category>
		<category><![CDATA[winter]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=986</guid>
		<description><![CDATA[
Немного моей бредни про зиму Питере.
Зима &#8211; приятное время года, снежок, прохладно, бла-бла-бла, просто замечательно, правда? Так было и так будет всегда!
Мы часто об этом даже не задумываемся и приспосабливаемся к тому, что есть. Ну есть зима? Ну что поделать, можно потерпеть. Нам это вбивают с детства, потому что мы на это не можем повлиять, [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Ffire-winter%2F&amp;via=ruxeg&amp;text=%D0%9C%D1%8B%D1%81%D0%BB%D0%B8%3A+%D0%BC%D0%B0%D1%80%D1%82%D0%B0%D0%B1%D1%80%D1%8C+%D0%B8%D0%BB%D0%B8+%23%D1%81%D0%B6%D0%B5%D1%87%D1%8C%D0%B7%D0%B8%D0%BC%D1%83+&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Ffire-winter%2F"  class="twitter-share-button">Tweet</a></div><p><img class="alignright size-full wp-image-997" style="border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; padding-left:0; margin-left:5pt" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/holod.resized.jpg" alt="" width="207" height="158" /></p>
<p><span style="text-decoration: line-through;">Не</span>много моей бредни про зиму Питере.</p>
<p>Зима &#8211; приятное время года, снежок, прохладно, бла-бла-бла, просто замечательно, правда? Так было и так будет всегда!</p>
<p>Мы часто об этом даже не задумываемся и приспосабливаемся к тому, что есть. Ну есть зима? Ну что поделать, можно <strong>потерпеть</strong>. Нам это вбивают с детства, потому что мы на это не можем повлиять, даже не задумываясь как могло бы быть <strong>иначе</strong>.</p>
<p><span id="more-986"></span></p>
<p>Последние несколько лет я не могу терпеть это безобразие &#8211; в действительности выходишь на улицу &#8211; снег и метель в лицо. Стараешься как можно быстрее добежать до места куда нужно. Тут явно не до прогулок. Забегаешь в метро &#8211; там жара (в сравнении), сразу взмокаешь. Выходишь &#8211; разумеется снова на холод. Вы прекрасно знаете как не приятно выходить из тёплого в холод &#8211; дискомфорт. И так весь день!</p>
<p>Разумеется может и продуть, поэтому зимой чаще заболевают/либо заболевают весной, потому что весь иммунитет ушёл на зиму. Тут тоже нужно добавить, что нет витамин и свежих фруктов/овощей.</p>
<p>Зима &#8211; даже в питере тёмная (особенно в спальных районах). Отсюда увеличение численности недо-людей неприятного вида. А раннее потемнение и позднее посветление приводит к изменениям биологических ритмов &#8211; а именно хочется больше спать (что естественно), но на работу нужно приходить так же как и летом.</p>
<p>Сосульки и лёд &#8211; отдельная тема. Сколько людей пострадало из за них? Можно хоть сколько винить домуправления, районные и городские власти, но это &#8211; наша погода, и именно она &#8211; первопричина. Водители тоже не в восторге от гололёда!</p>
<p>А если брать нижние слои населения &#8211; бомжи замерзают на улицах, впрочем, алкоголики тоже, пытаясь согреться водкой.</p>
<h2>Почему нужно #сжечьзиму</h2>
<ul>
<li>избавиться от холода</li>
<li>избавиться от ветра</li>
<li>избавится от темноты по ночам (Питер знает что такое белые ночи)</li>
<li>уменьшить количество травм</li>
<li>больше гулять</li>
<li>меньше одежды</li>
<li>меньше болеть</li>
</ul>
<h2>А как #сжечьзиму?</h2>
<p>А никак. Просто важно не забывать, что нам не нравится, а поэтому &#8220;<a href="https://twitter.com/#!/ruxeg/status/143284044313010176" target="_blank">бороться с мельницей</a>&#8220;.</p>
<p>Разумеется есть альтернативы &#8211; в холодные зимние месяца поехать в тёплые страны. Чем не вариант?</p>
<h2>Какую зиму я хочу?</h2>
<p>Это эгоистично, ну и пусть. Сухую, тёплую (от -3<sup>о</sup> до +10<sup>о</sup>)</p>
<p>Чтоб можно было пройтись от офиса по мосту, не боясь превратится в ледышку. Чтоб выходя на улицу не нужно было натягивать побольше шапку, одевать перчатки и быстрее бежать к автобусу/метро.</p>
<p>Чтоб кофе можно было попить на улице. Чтоб утро начиналось не с вьюги.</p>
<p>Дальше можно самостоятельно продолжить ассоциативый ряд <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Короче &#8211; <strong>чтоб было комфортно.</strong></p>
<h2>Конец декабря 2011 года в Питере</h2>
<p>Мне явно подфортило &#8211; сейчас(31 декабря 2011) на улице стоит отличная погода (по моим меркам) &#8211; средняя температура днём <strong>+3<sup>о</sup></strong>, ночью &#8211; <strong>-1<sup>о</sup></strong>, на улице сухо. 28-30 был сильный ветер 15-20м/с (из за которого поднялась вода в городе на 289см), но он не лядяной, поэтому вполне терпимо. 30-31 декабря так вообще спокойно <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Можно ходить в одной рубашке и куртке, без свитера, не парясь, что замёрзнешь или продует.</p>
<p>Немного моих фоток Питера с 27-31 декабря 2011:</p>
<style>
a[title="holod"] { display: none; }
</style>

<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0205/' title='Около м.Горьковская, 26дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0205-150x112.jpg" class="attachment-thumbnail" alt="" title="Около м.Горьковская, 26дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0209/' title='Камменоостровский пр. 29дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0209-150x112.jpg" class="attachment-thumbnail" alt="" title="Камменоостровский пр. 29дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0210/' title='Начало ул. Ленина, возле БЦ Сеннатор. 28дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0210-150x112.jpg" class="attachment-thumbnail" alt="" title="Начало ул. Ленина, возле БЦ Сеннатор. 28дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0213/' title='Собор, Невский пр. 29дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0213-150x112.jpg" class="attachment-thumbnail" alt="" title="Собор, Невский пр. 29дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0216/' title='Вид на вышку. 30дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0216-150x112.jpg" class="attachment-thumbnail" alt="" title="Вид на вышку. 30дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0218/' title='м. Сенная пл. Вид с пер. Гривцова. 30дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0218-150x112.jpg" class="attachment-thumbnail" alt="" title="м. Сенная пл. Вид с пер. Гривцова. 30дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/imag0220/' title='Камменноостровский пр. Вид с мостина на Карповке. 30дек2011 #сжечьзиму'><img width="150" height="112" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/IMAG0220-150x112.jpg" class="attachment-thumbnail" alt="" title="Камменноостровский пр. Вид с мостина на Карповке. 30дек2011 #сжечьзиму" /></a>
<a href='http://rux.pp.ru/blog/2011.12/fire-winter/holod-resized/' title='holod'><img width="150" height="114" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/holod.resized-150x114.jpg" class="attachment-thumbnail" alt="" title="holod" /></a>

<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(986, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_986_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_986_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.12/fire-winter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Мысли: о толерантности</title>
		<link>http://rux.pp.ru/blog/2011.12/mysli-o-tolerantnosti/</link>
		<comments>http://rux.pp.ru/blog/2011.12/mysli-o-tolerantnosti/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 08:02:07 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[mind]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=980</guid>
		<description><![CDATA[Иногда логика людей совсем не подаётся объяснениям


&#8220;Ты че не пьёшь, больной чтоли?&#8221;
Татуированный человек никогда не наедет на нормального, только потому что у него нет тату. Зато &#8220;нормальные&#8221; видимо считают своим долгом высказать своё мнение о том, как татуировки ужасны и как теперь жить.
&#8220;Линукс говно!&#8221;
&#8220;Ты не так решаешь задачу &#8211; делай по-моему!&#8221;

Можно подытожить &#8211; если ты [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Fmysli-o-tolerantnosti%2F&amp;via=ruxeg&amp;text=%D0%9C%D1%8B%D1%81%D0%BB%D0%B8%3A+%D0%BE+%D1%82%D0%BE%D0%BB%D0%B5%D1%80%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Fmysli-o-tolerantnosti%2F"  class="twitter-share-button">Tweet</a></div><p>Иногда логика людей совсем не подаётся объяснениям</p>
<p><img class="alignright size-thumbnail wp-image-983" src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/x_b3c619c2-1-150x126.jpg" alt="" width="150" height="126" /></p>
<ul>
<li>&#8220;Ты че не пьёшь, больной чтоли?&#8221;</li>
<li>Татуированный человек никогда не наедет на нормального, только потому что у него нет тату. Зато &#8220;нормальные&#8221; видимо считают своим долгом высказать своё мнение о том, как татуировки ужасны и как теперь жить.</li>
<li>&#8220;Линукс говно!&#8221;</li>
<li>&#8220;Ты не так решаешь задачу &#8211; делай по-моему!&#8221;</li>
</ul>
<p>Можно подытожить &#8211; если ты не такой как я &#8211; <strong>ты неправильный</strong>. Похоже навеянно <strong>стереотипами</strong> и <strong>стадом</strong>. Мне кажется, что эти люди боятся отличатся от себеподобных и поэтому делают всё, чтоб все были такимиже, дабы не выглядить уныло на их фоне.</p>
<p><strong> &#8220;Неправильные&#8221;</strong> люди похоже более толерантны потому что ценят свободу личного выбора, уникальность &#8211; они знают это по себе.</p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(980, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_980_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_980_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.12/mysli-o-tolerantnosti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проект: GeoChat</title>
		<link>http://rux.pp.ru/blog/2011.12/geochat-project/</link>
		<comments>http://rux.pp.ru/blog/2011.12/geochat-project/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 22:44:22 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[geochat]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[LBS]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[zeptojs]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=942</guid>
		<description><![CDATA[
Долгое время я со своей некогда командой разрабатывал несколько геолокационных приложений. Ага, это были стартапы. Сейчас не хочу даваться в подробности провала, по крайней мере покачто. Ближнее окружение в курсе, а остальным не очень то и нужно знать 

Как из вестно, любой проект должен быть доведён до конца, если начат. До какого-либо конца, логического завершения. [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Fgeochat-project%2F&amp;via=ruxeg&amp;text=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%3A+GeoChat&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.12%2Fgeochat-project%2F"  class="twitter-share-button">Tweet</a></div><p><a href="http://crazygeo.com" target="_blank"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/logo-256x256-150x150.png" alt="" title="GeoChat logo" width="60" height="60"  halign="5" class="alignleft size-thumbnail wp-image-955" /></a><br />
Долгое время я со своей некогда командой разрабатывал несколько геолокационных приложений. Ага, это были <em>стартапы</em>. Сейчас не хочу даваться в подробности провала, по крайней мере покачто. Ближнее окружение в курсе, а остальным не очень то и нужно знать <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-942"></span><br />
Как из вестно, любой проект должен быть доведён до конца, если начат. До какого-либо конца, логического завершения. Бросать ни в коем случае <strong>нельзя</strong>. Почему? Об этом пишут много в книжках по управлению проектами, проектной деятельности <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Единственным &#8220;выжившим&#8221; проектом стал <strong>GeoChat</strong> (анонимное общение с людьми поблизости). К большому сожалению на момент написания команды уже не было. Несмотря на кучу порождённого почти за год кода он не пригодился &#8211; все решения были слишком &#8220;общие&#8221; и абстактные. Также повлияло то, что я не могу брать чужую работу, за которую не заплатил</p>
<p>Буквально за 2 недели смог написал первый прототип (паралельно изучив достаточно глубоко nodejs), ещё неделя &#8211; и презентовал его на sumIT, где получил хороший фидбек.</p>
<p><!--more--></p>
<h2>Что получилось</h2>
<p>На тот момент у меня уже были приличные знания разработки под андроид, поэтому быстренько набросал нативную обёртку, чтоб можно было в выгрузить на Android Market</p>
<p><a href="http://crazygeo.com"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/qrcode-crazygeo.com_.png" alt="" title="crazygeo.com" width="135" height="135" class="alignright size-full wp-image-957" target="_blank" /></a></p>
<p>Можно посмотреть, потыкать приложение:</p>
<ul>
<li>Перейти в любом современном браузере (читай webkit) на <big> CrazyGeo.com</big>  &#8211; откроется чатик прямо в браузере</li>
<li>Поискать на маркете: <a href="https://market.android.com/search?q=crazygeo.com.geochat&#038;so=1&#038;c=apps">GeoChat</a></li>
<li>Воспользоваться QR-кодом справа <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p><br/></p>
<h2>Скриншоты (v1.0)</h2>
<h3>Мобильное приложение</h3>
<table style="margin: 0 auto">
<tr>
<td><div id="attachment_966" class="wp-caption aligncenter" style="width: 190px"><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-login-screen.jpg" target="_blank"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-login-screen-180x300.jpg" alt="" title="GeoChat - login screen" width="180" height="300" class="size-medium wp-image-966" style="border: 1px solid black; box-shadow:7px 7px 25px #000;" /></a><p class="wp-caption-text">Экран входа</p></div></td>
<td width="10%">
<td><div id="attachment_968" class="wp-caption aligncenter" style="width: 190px"><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-chatscreen.jpg" target="_blank"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-chatscreen-180x300.jpg" alt="" title="GeoChat main tab" width="180" height="300" class="size-medium wp-image-968" style="border: 1px solid black; box-shadow:7px 7px 25px #000;"/></a><p class="wp-caption-text">Окошко с чатом</p></div></td>
</tr>
</table>
<p>Mobile view <em style="color: gray">(хоть в бложике могу не подбирать перевод <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</em> использует <a href="http://zeptojs.com">zeptojs</a> &#8211; это облегчённая версия всеми любимого jQuery специально для мобильных устройств. В частности &#8220;изкаропки&#8221; есть swipe &#8211; можно пальцем слайдить по экрану для перехода между вкладками (к сожалению, без анимации).</p>
<p>Нативная обёртка на андроиде ничем не отличается, кроме:</p>
<ul>
<li>не даёт WebKit движку засыпать. Заметил что в мобильных Safari/Chrome после отправки браузера в бэкграунд через 1-5 минут отваливается соединение. Я не виню браузеры, всё логично <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . В обётке под андроид таких проблем нет &#8211; висел ооочень долго, неотваливаясь</li>
<li>наличия вибрации. Когда к тебе обращаются через <strong>@</strong> телефон вибрирует. Так делают твиттер-клиенты и я вижу это важным фактором &#8220;возвращения&#8221; пользователя <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h3>Сайтик</h3>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-frontpage-v1.png" target="_blank"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/12/geochat-frontpage-v1.png" alt="" title="GeoChat frontpage (v1.0)" width="90%"  class="aligncenter size-medium wp-image-959" /></a></p>
<p>Дизайн сам <s>скопировал</s> взял идею с sequelizejs (ORM для nodejs). Очень понравились background stripes. Ну и всякие html5 штуки вроде теней, полупрозрачности и скруглённых бордеров. Надо отметить что и сайт на nodejs. У неё достаточно приятные html/css шаблонизаторы.
</p>
<h2>А что не так?</h2>
<p>Невозможно собрать аудиторию из хотябы 20-30 человек на одной площади в одно время, да ещё и заставить их возвращаться (тот самый показатель retention rate). По крайней мере пока. Если читатель думает по другому &#8211; жду писем на ruX[собак]CrazyGeo[точка]com </p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(942, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_942_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_942_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.12/geochat-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>avr: случайнее random()</title>
		<link>http://rux.pp.ru/blog/2011.11/avr-randomize-random/</link>
		<comments>http://rux.pp.ru/blog/2011.11/avr-randomize-random/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 13:09:12 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[seed]]></category>
		<category><![CDATA[xor]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=944</guid>
		<description><![CDATA[В простых встраиваемых устройствах есть большая проблема: очень хочется рандом. Нормальный такой рандом. Но если подумать, то контроллеру совершенно не от чего &#8220;рандомизировать&#8221; генератор случайных чисел. Ибо каждый старт контроллера &#8220;жизнь начинается с 0&#8243;. 
Эта проблема всплыла в пресловутом moodlamp (лампа настроения, переливающиеся цвета светодиода). Хочется чтоб &#8220;переливы&#8221; каждый раз начинались с нового цвета  [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Favr-randomize-random%2F&amp;via=ruxeg&amp;text=avr%3A+%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%B5%D0%B5+random%28%29&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Favr-randomize-random%2F"  class="twitter-share-button">Tweet</a></div><p>В простых встраиваемых устройствах есть большая проблема: очень хочется рандом. Нормальный такой рандом. Но если подумать, то контроллеру совершенно не от чего &#8220;рандомизировать&#8221; генератор случайных чисел. Ибо каждый старт контроллера &#8220;жизнь начинается с 0&#8243;. </p>
<p>Эта проблема всплыла в пресловутом moodlamp (лампа настроения, переливающиеся цвета светодиода). Хочется чтоб &#8220;переливы&#8221; каждый раз начинались с нового цвета <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p><span id="more-944"></span></p>
<p>После долгих дум пришёл к следующим идеям</p>
<h3>Использовать шумы</h3>
<p>Вокруг туча замечательных шумов и наводок! Хоть где то их можно использовать. Например читать с ног ADC и использовать для рандомизации эти значения.</p>
<h3>Запоминать значение</h3>
<p>По умолчанию библиотека gcc-avr инициализирует random seed value в 1. Можно заменить на что нить другое. Мы можем запоминать в EEPROM и инкрементировать это каждый запуск контоллера. Разумеется инициализировать генератор этим значением через srandom(val) </p>
<h3>Использовать температуру</h3>
<p>Некоторые контроллеры теперь идут с возможностью измерить температуру кристалла. Или же применение контроллера связанно с измерением каких-либо физических величин. В общем случае это поможет получать хоть сколько-то случайные величины</p>
<h3>Использовать ^ (xor)</h3>
<p>Вместо установки только что полученного значения с ADC/датчиков можно сделать с этим значением xor. Навроде srandom(newvalue ^ oldvalue).</p>
<p>Почему xor? Эта операция гарантированно возвращает новое значение (сущность побитовой операции такая, можно взглянуть в таблицу истинности) </p>
<h3>Читать память</h3>
<p>В процессе работы контроллера меняется значение каких-то переменных, мы может хаотично выбирать их из всего пространства доступной памяти. Это несколько может помочь рандомизировать значения. Причём было бы прикольно читать память при каком-нибудь событии, например по таймеру или по внешнему прерыванию</p>
<p>Пример будет ниже в моём решении</p>
<h3>Сохранять собранные данные в своём EEPROM</h3>
<p>Любые (или часть, или случайная часть) собранных цифр с ADC, датчиков, рандома, памяти сохранять в программируемую память. Это позволит при загрузки использовать больше цифр при начальной инициализации</p>
<h3>Ещё&#8230;</h3>
<p>
Можно напридумывать куча способов, рассуждая в этом же направлении <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p>Я очень доверяю народу из форумов avrfreaks, поэтому привожу <a href="http://www.avrfreaks.net/index.php?name=PNphpBB2&#038;file=viewtopic&#038;p=254771#254771">их совет</a> :</p>
<div class="codecolorer-container c twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> makeRandom<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> upper<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>RAND_MAX <span style="color: #339933;">+</span> 1<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> upper<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</p>
<h2>Моё решение</h2>
<p>Скомпоновав мысли выше, вывел вот такое:</p>
<div class="codecolorer-container c twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> makeRandom<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> upper<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>RAND_MAX <span style="color: #339933;">+</span> 1<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> upper<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<br />
<span style="color: #993333;">void</span> storeRandomToEEPROM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; uint8_t i<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eeprom_write_byte<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>uint8_t <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>i<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>uint8_t<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>makeRandom<span style="color: #009900;">&#40;</span>1000<span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>255<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>makeRandom<span style="color: #009900;">&#40;</span>1000<span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> 2<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eeprom_write_byte<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>uint8_t <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>i<span style="color: #339933;">,</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>uint8_t<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>makeRandom<span style="color: #009900;">&#40;</span>1000<span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>255<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #993333;">void</span> randomizeFromEEPROM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; uint16_t rndVal <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>uint16_t<span style="color: #009900;">&#41;</span>makeRandom<span style="color: #009900;">&#40;</span>12345<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> i<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> rndVal <span style="color: #339933;">^=</span> eeprom_read_word<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>uint16_t<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; srandom<span style="color: #009900;">&#40;</span>rndVal<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
. . . <br />
<span style="color: #993333;">void</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; . . . <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #202020;">randomizeFromEEPROM</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; storeRandomToEEPROM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
ISR <span style="color: #009900;">&#40;</span>TIM0_OVF_vect<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333;">static</span> uint16_t softcount<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">++</span>softcount <span style="color: #339933;">==</span> 0<span style="color: #009900;">&#41;</span> storeRandomToEEPROM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; . . . . <br />
<span style="color: #009900;">&#125;</span></div></div>
</p>
<h2>Что получилось</h2>
<p>До запуска прошивки состояние EEPROM:</p>
<pre>
>>> read eeprom 0 30
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff        |..............  |
</pre>
</p>
<p>
После первого запуска(и последующих картина памяти будет менятся)</p>
<pre>
>>> read eeprom 0 30
0000  00 35 97 bf 07 00 5d bc  53 4a 00 ea 07 13 06 01  |.5....].SJ......|
0010  00 00 dd 5a ff ff ff ff  ff ff ff ff ff ff        |...Z..........  |
</pre>
</p>
<p>При первом запуске генератор инициализируется значениями из EEPROM (при этом xor-ятся друг с другом), и тут же заполняет это место другими значениями, полученными из обычного рандома, после этого поверх случайным образом из случайного места в памяти записывается значение.</p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(944, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_944_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_944_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.11/avr-randomize-random/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grub: загрузить ОС с флешки</title>
		<link>http://rux.pp.ru/blog/2011.11/load-pendrive-os-from-hdd/</link>
		<comments>http://rux.pp.ru/blog/2011.11/load-pendrive-os-from-hdd/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 14:24:47 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[initrd]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=947</guid>
		<description><![CDATA[Есть задача: требуется загрузить ось с флешки. Компьютер не умеет сам по себе стартовать с pendrive и/или отсутствует boot-flag на разделе с системой. На компьютере установлен grub2


1. Убедится, что требуемый раздел виден
Сначала нужно проверить, что флешка отображается в списке (ls). Например, нужен раздел (usb0, msdos6).
grub&#62; ls
&#40;hd0&#41; &#40;hd0,msdos3&#41; &#40;hd0,msdos2&#41; &#40;hd0,msdos1&#41; &#40;hd1&#41; &#40;hd0,msdos2&#41; &#40;hd1,msdos1&#41; &#40;fd0&#41;
В моём флешки [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Fload-pendrive-os-from-hdd%2F&amp;via=ruxeg&amp;text=Grub%3A+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C+%D0%9E%D0%A1+%D1%81+%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D0%B8&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Fload-pendrive-os-from-hdd%2F"  class="twitter-share-button">Tweet</a></div><p>Есть задача: требуется загрузить ось с флешки. Компьютер не умеет сам по себе стартовать с pendrive и/или отсутствует boot-flag на разделе с системой. На компьютере установлен grub2
</p>
<p><span id="more-947"></span></p>
<h3>1. Убедится, что требуемый раздел виден</h3>
<p>Сначала нужно проверить, что флешка отображается в списке (<b>ls</b>). Например, нужен раздел <strong>(usb0, msdos6)</strong>.</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ls</span><br />
<span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos3<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd1,msdos1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>fd0<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>В моём флешки нет. Чтоб grub увидел флешку нужно загрузить ряд модулей:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<span style="color: #000000; font-weight: bold;">&gt;</span> insmod uhci<br />
grub<span style="color: #000000; font-weight: bold;">&gt;</span> insmod fat</div></div>
<p>После этого снова попробовать, флешка должна появиться</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ls</span><br />
<span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0,msdos7<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0,msdos6<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0,msdos5<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0,msdos1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos3<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd0,msdos2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>hd1,msdos1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>fd0<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
</p>
<h3>Устанавливаем корень</h3>
<p><div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">set</span> <span style="color: #007800;">root</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>usb0,msdos6<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
</p>
<h3>Указываем ядро</h3>
<p>
Для линукс систем нужно указать используемое ядро и (если нужно) initrd</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grub<span style="color: #000000; font-weight: bold;">&gt;</span> linux <span style="color: #000000; font-weight: bold;">/</span>kernel quiet <span style="color: #007800;">root</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>ram0 <span style="color: #007800;">androidboot_hardware</span>=generic_x86 <br />
grub<span style="color: #000000; font-weight: bold;">&gt;</span> initrd <span style="color: #000000; font-weight: bold;">/</span>initrd.img</div></div>
</p>
<h3>Указываем ядро</h3>
<p> Загружаемся! <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">boot</div></div></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(947, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_947_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_947_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.11/load-pendrive-os-from-hdd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ресурсы в SWING приложении</title>
		<link>http://rux.pp.ru/blog/2011.11/resources-in-swing-application/</link>
		<comments>http://rux.pp.ru/blog/2011.11/resources-in-swing-application/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 19:26:12 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[loader]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=935</guid>
		<description><![CDATA[В swing-приложениях при работе с встроенными ресурсами (такие как изображения) есть разница, откуда эти ресурсы подцепляются в зависимости от условий запуска. Это может быть запуск из IDE а может запуск JAR файла


Из-за этого придётся привести в порядок местоположение файлов
В итоге должна структура, как скниншотике справа


В корне нужно создать папку/пакет resources
Все ресурсы (изображения/тексты/звуки) переместить туда
Поместить класс [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Fresources-in-swing-application%2F&amp;via=ruxeg&amp;text=%D0%A0%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B+%D0%B2+SWING+%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.11%2Fresources-in-swing-application%2F"  class="twitter-share-button">Tweet</a></div><p>В swing-приложениях при работе с встроенными ресурсами (такие как изображения) есть разница, откуда эти ресурсы подцепляются в зависимости от условий запуска. Это может быть запуск из IDE а может запуск JAR файла</p>
<p><span id="more-935"></span><br />
<img src="http://rux.pp.ru/blog/wp-content/uploads/2011/11/resources-placement-in-swing-desktop-applications.png" alt="" title="resources-placement-in-swing-desktop-applications" width="227" height="138" class="alignright size-full wp-image-936" /></p>
<p>Из-за этого придётся привести в порядок местоположение файлов<br />
В итоге должна структура, как скниншотике справа
</p>
<ol>
<li>В корне нужно создать папку/пакет <strong>resources</strong></li>
<li>Все ресурсы (изображения/тексты/звуки) переместить туда</li>
<li>Поместить класс <strong>Resource</strong>, который обеспечит доступ к ресурсам:
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">resources</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Image</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Toolkit</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.URL</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp;* Resources loader <br />
&nbsp;* @author ruX[Ruslan Zaharov], http://ruX.pp.ru<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Resource <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Image</span> getImage<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> filename<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">Image</span> image<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">URL</span> url <span style="color: #339933;">=</span> Resource.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getResource</span><span style="color: #009900;">&#40;</span>filename<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; image <span style="color: #339933;">=</span> <span style="color: #003399;">Toolkit</span>.<span style="color: #006633;">getDefaultToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; image <span style="color: #339933;">=</span> <span style="color: #003399;">Toolkit</span>.<span style="color: #006633;">getDefaultToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;resources/&quot;</span> <span style="color: #339933;">+</span> filename<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> image<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</li>
<li>Для получения ресурса из любого места в коде следует общаться так:
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Image</span> trayIco <span style="color: #339933;">=</span> Resource.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;tray.gif&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</li>
</ol>
<p>
Вообще странно, что приходится так такнцевать с бубном. Казалось бы это достаточно стандартная операция &#8211; допустим, расставить иконки в меню. Разумеется эти иконки должны быть вшиты в jar, а не висеть снаружи, на мой взгляд (для наиболее простой &#8220;транспортировки&#8221; приложения).</p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(935, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_935_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_935_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.11/resources-in-swing-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Учёба на пятом курсе СПбГУ ИТМО</title>
		<link>http://rux.pp.ru/blog/2011.10/uchjoba-na-pyatom-kurse-spbgu-itmo/</link>
		<comments>http://rux.pp.ru/blog/2011.10/uchjoba-na-pyatom-kurse-spbgu-itmo/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 10:01:08 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[ИТМО]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[учёба]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=930</guid>
		<description><![CDATA[Об учёбе на последнем году обучения на специалиста в нашем университете на специальности 210202.65 «Проектирование и технология электронно-вычислительных средств». Кафедры ПКС(ныне ПБКС) факультета КТиУ.

После того, как я стал резидентом бизнес-инкубатора QD роль &#8220;основного&#8221; универа (говоря про ПКС) отошла на задний план.
Я стал ходить в основной универ как когда то два года назад ходил в Ингрию [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.10%2Fuchjoba-na-pyatom-kurse-spbgu-itmo%2F&amp;via=ruxeg&amp;text=%D0%A3%D1%87%D1%91%D0%B1%D0%B0+%D0%BD%D0%B0+%D0%BF%D1%8F%D1%82%D0%BE%D0%BC+%D0%BA%D1%83%D1%80%D1%81%D0%B5+%D0%A1%D0%9F%D0%B1%D0%93%D0%A3+%D0%98%D0%A2%D0%9C%D0%9E&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.10%2Fuchjoba-na-pyatom-kurse-spbgu-itmo%2F"  class="twitter-share-button">Tweet</a></div><p>Об учёбе на последнем году обучения на специалиста в нашем университете на специальности <strong>210202.65</strong> «Проектирование и технология электронно-вычислительных средств». Кафедры <a  target="_blank" follow="noref" href="http://faculty.ifmo.ru/csd/">ПКС(ныне ПБКС)</a> факультета КТиУ.</p>
<p><span id="more-930"></span><br />
После того, как я стал резидентом <a href="http://qd.ifmo.ru" target="_blank">бизнес-инкубатора QD</a> роль &#8220;основного&#8221; универа (говоря про ПКС) отошла на задний план.</p>
<p>Я стал ходить в основной универ как когда то два года назад ходил в <a href="http://ingria-startup.ru"  target="_blank" follow="noref">Ингрию</a> &#8211; послушать что интересного есть. Т.е. лекции превратились в интересные &#8220;свободно посещаемые&#8221; семинары. Хожу в основной универ &#8211; просто послушать, только потому что <strong>интересно</strong>. Сейчас много пар про создание полупроводников, устройство, физические процессы протекающие там, проектирование топологии ИС и даже семантик веб. Скворцов, Халецкий, Бондаренко, Муромцев &#8211; замечательные преподы <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Чтоб разнообразить процесс обучения и сделать что то на практике по специальности я долгое время пытаюсь работать над проектами Геннадия Николаевича (декана ИФФ) по мониторингу  теплового потока и сейчас начинаю работать над мобильным приложением для музея Оптики ИТМО, которое использует онтологии, во главе с Дмитрием Муромцевым и Юрой Катковым.</p>
<p>Остальные активности имеют очень мало отношения к основному универу и почти все завязанны на <a href="http://qd.ifmo.ru" target="_blank" follow="noref">QD</a>/<a href="http://mte.ifmo.ru"  target="_blank" follow="noref">MTE</a>, в этот раз я о них умолчу <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Итого для меня учёба в основном универе на пятом курсе нечто вроде семинаров Теории&amp;Практика, проходят мимолётно и увлекательно, местами полезно.</p>
<p>Кроме того, универ даёт много возможностей для проектов, которые я стараюсь использовать максимально, но это снова не для этого поста &#8211; учёба в универе <strong>не то же самое</strong> что универ <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>На примере одногрупников вижу что можно не ходить вообще, малоли кому нужно <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(930, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_930_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_930_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.10/uchjoba-na-pyatom-kurse-spbgu-itmo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мысли: полосатые проекты</title>
		<link>http://rux.pp.ru/blog/2011.09/mind-dashed-startups/</link>
		<comments>http://rux.pp.ru/blog/2011.09/mind-dashed-startups/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 09:39:26 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Заметки]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[audience]]></category>
		<category><![CDATA[mind]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=919</guid>
		<description><![CDATA[Люди собираются вместе чтоб создать нечто.
Манит красивая идея, хорошая цель, бесконечный энтузиазм, появляется желание принять участие в Великом, собственноручно внести вклад в развитие, оставить кусочек себя.. в проектах.
К сожалению, все эти эмоции часто затмевают реальное положение дел. Горящие глаза видят того, чего нет. Руки делают то, что не будет использоваться. Разум дорисовывает картину мира до [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.09%2Fmind-dashed-startups%2F&amp;via=ruxeg&amp;text=%D0%9C%D1%8B%D1%81%D0%BB%D0%B8%3A+%D0%BF%D0%BE%D0%BB%D0%BE%D1%81%D0%B0%D1%82%D1%8B%D0%B5+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.09%2Fmind-dashed-startups%2F"  class="twitter-share-button">Tweet</a></div><p>Люди собираются вместе чтоб создать нечто.</p>
<p>Манит красивая идея, хорошая цель, бесконечный энтузиазм, появляется желание принять участие в Великом, собственноручно внести вклад в развитие, оставить кусочек себя.. в проектах.</p>
<p>К сожалению, все эти эмоции часто затмевают реальное положение дел. Горящие глаза видят того, чего нет. Руки делают то, что не будет использоваться. Разум дорисовывает картину мира до идеальной, специально под великий Проект.</p>
<p>Приходит время настоящих действий, принятия решений. Сказочная картина чуть чуть приближается к жизни реальной, а не к жизни которая нужна проекту. И чем дольше идёт процесс создания, тем лучше получается увидеть реальную жизнь, реальные потребности людей. Почему? Одна из самых зажигающих эмоций &#8211; энтузиазм (те самые <strong>горящие</strong> глаза). Он способен заставить людей собраться и создавать нечто, затухает. И Великая идея уже не кажется такой великой.</p>
<p><span id="more-919"></span></p>
<h2>К чему я это?</h2>
<p>Мне кажется, что лучше иметь горящие глаза, которые много не видят в реальной жизни, но помогают создать нечто. Хотябы чтоб просто проверить идею на прочность. Ни один crash-test, и уж тем более советы и воссторженные возгласы знакомых и друзей не могут изменить реальные потребности людей. Можно очень много говорить о use-case проектов, приводить красочные примеры (особенно на стартап-ивентах), но если этот use-case будет действовать в одном из тысячи случаев &#8211; это пустое сотрясание воздуха. Давайте приблизимся к реальности.</p>
<h2>Подходы</h2>
<p>Есть pull &amp; push подходы. В кратце push это, когда продукт/сервис &#8220;вталкивается&#8221; пользователю и у него нет потребности в этом (т.е. навязывается потребность), а pull &#8211; когда проект/идя рождается из неудовлетворённых потребностей. Кажется я осознал, что большинство моих(и не только идей) &#8211; это push подход. Как правило, разрабатывается или познаётся некая технология которая потом раздувается до проекта на её основе.  Это &#8211; не плохо. Это &#8211; мало кому нужно, а чтоб заставить пользоваться нужно много сил маркетологов, пиарщиков. Уверен, часто это не оправданно. А ведь как хочется <strong>сделать то, что хочется, да?</strong></p>
<h2>Инвестиции</h2>
<p>Ну а как же? Пузырь надувается &#8211; видно вокруг, что у нас, что на западе инвесторы так и пытаются сунуть деньги любому более-менее внятному проекту. Мне очень нравится подход Игоря Хлуденцова (стартап-тренер на Селигере 2010), в котором всё просто: <span style="text-decoration: underline;">если не можешь сделать проект(не наукоёмкий) без инвестиций &#8211; значит ты не можешь его сделать</span>, также: <span style="text-decoration: underline;">любой проект можно сделать без вложений</span> (дада, именно так. Игорь действительно умеет и рассказывает как), и последнее: <span style="text-decoration: underline;">инвестиции могут ускорить процесс создания проекта, а если инвестор видит, что вы можете справится и без него &#8211; тем более обратит на вас внимание</span>. Формулирвки наврал, но суть такая же.</p>
<p>Уверен, ходить на стартап-ивенты только для того, чтоб попытаться выловить деньги инвестора &#8211; плохо. Получить советы, критику &#8211; уже лучше. <strong>Главное чтоб это не становилось целью проекта!</strong></p>
<h2></h2>
<h2>Аудитория</h2>
<p><a href="http://www.valuebasedmanagement.net/methods_rogers_innovation_adoption_curve.html"><img class="alignright size-full wp-image-920" style="border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; padding: 5px" title="picture_rogers_adoption_innovation_curve" src="http://rux.pp.ru/blog/wp-content/uploads/2011/09/picture_rogers_adoption_innovation_curve.gif" alt="" width="317" height="213" /></a></p>
<p>Возвращаясь к аудитории проекта. На сколько она выдуманная? Честно, для себя &#8211; так или иначе всё проявится в релизе, но когда уже будет поздно, разумеется об этом не обязательно говорить инвестору(хотя это будет благородная честность). И с самого начала нужно видеть как преподнести, донести до аудитории свой продукт. Как она о нём узнает?</p>
<p>Заметил серьёзную ошибку у себя и своих коллег по цеху &#8211; ориентацию на новаторов и early adopters (по Джефри Муру). Уйма проектов доходят до стадии безубыточности и там остаются, именно потому что левая часть распределения Мура кончилась и продукт никому больше не нужен. Впорчем, это успех.</p>
<p>Именно по потребностям ЦА определяется как должен выглядеть конечный продукт и как его монетизировать.</p>
<h2>Команда</h2>
<p>Ядро всего. Могут быть тысячи идей, сотни проектов но именно команда (слаженность, сплочённость, отношения) создаёт продукт. Не открою секрета если скажу что инвесторы смотрят на команду в первую очередь. Даже если проект не выстрелит, а команда будет вместе &#8211; они смогут создать ещё много разного. А если команда никакая &#8211; то врядли что-нибудь сделают.</p>
<p>В команде сложно сделать всё легко, по крайней мере у меня так получается. Есть мнения, есть отвлекающие факторы (учёба, работа &#8211; дада, работа &#8211; ведь не все могут позволить не работать), не всегда есть место где можно работать (я по-прежнему уверен что работать в большинстве своём нужно в офисе), не всегда есть настроение работать (ибо стартап &#8211; нечто большее чем работа, туда вкладываешь креатив, себя). И да, создать прототип/продукт &#8211; это не должно быть самым сложным.</p>
<p>Пусть команда знает всё, что должна знать, не больше. </p>
<h3>К чему пост?</h3>
<p>Просто мысли. Те, с кем общаюсь знают откуда они появились.</p>
<p style="text-align: right;"><em><span style="color: #800000;">Да, это простые истины<br />
которые можно найти в любой<br />
бизнес-литературе, я в курсе.</span></em></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(919, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_919_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_919_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.09/mind-dashed-startups/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>nodejs: mysql-libmysqlclient и русские буквы</title>
		<link>http://rux.pp.ru/blog/2011.09/nodejs-mysql-libmysqlclient-i-russkie-bukvy/</link>
		<comments>http://rux.pp.ru/blog/2011.09/nodejs-mysql-libmysqlclient-i-russkie-bukvy/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 08:45:20 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=915</guid>
		<description><![CDATA[
При работе с библиотекой mysql для ноды(уверен это будет с любой либой) возникает маленькая проблемка &#8211; Ñ‹Ð²Ð°Ñ‹Ð²Ð. Это всё из-за кодировки в которой по умолчанию работает сервер базы данных.

Как исправить?


Предлагаю для начала проверить какая кодировка сейчас используется:
&#62; conn.getCharsetSync&#40;&#41;
&#123; charset: 'latin1',
&#160; collation: 'latin1_swedish_ci',
&#160; dir: '',
&#160; min_length: 1,
&#160; max_length: 1,
&#160; number: 8,
&#160; state: 801,
&#160; comment: 'cp1252 West [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.09%2Fnodejs-mysql-libmysqlclient-i-russkie-bukvy%2F&amp;via=ruxeg&amp;text=nodejs%3A+mysql-libmysqlclient+%D0%B8+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B5+%D0%B1%D1%83%D0%BA%D0%B2%D1%8B&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.09%2Fnodejs-mysql-libmysqlclient-i-russkie-bukvy%2F"  class="twitter-share-button">Tweet</a></div><p>
При работе с библиотекой mysql для ноды(уверен это будет с любой либой) возникает маленькая проблемка &#8211; <strong>Ñ‹Ð²Ð°Ñ‹Ð²Ð</strong>. Это всё из-за кодировки в которой по умолчанию работает сервер базы данных.
</p>
<h2>Как исправить?</h2>
<p><span id="more-915"></span></p>
<p>
Предлагаю для начала проверить какая кодировка сейчас используется:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&gt;</span> conn.<span style="color: #660066;">getCharsetSync</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span> charset<span style="color: #339933;">:</span> <span style="color: #3366CC;">'latin1'</span><span style="color: #339933;">,</span><br />
&nbsp; collation<span style="color: #339933;">:</span> <span style="color: #3366CC;">'latin1_swedish_ci'</span><span style="color: #339933;">,</span><br />
&nbsp; dir<span style="color: #339933;">:</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">,</span><br />
&nbsp; min_length<span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><br />
&nbsp; max_length<span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><br />
&nbsp; number<span style="color: #339933;">:</span> <span style="color: #CC0000;">8</span><span style="color: #339933;">,</span><br />
&nbsp; state<span style="color: #339933;">:</span> <span style="color: #CC0000;">801</span><span style="color: #339933;">,</span><br />
&nbsp; comment<span style="color: #339933;">:</span> <span style="color: #3366CC;">'cp1252 West European'</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #339933;">&gt;</span> conn.<span style="color: #660066;">getCharsetNameSync</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #3366CC;">'latin1'</span></div></div>
<p>Ну и установить то, что хочется нам:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&gt;</span> conn.<span style="color: #660066;">setCharsetSync</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">true</span><br />
conn.<span style="color: #660066;">query</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;insert into txt (t) values('раздватри')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>После этого проблем с абракадаброй нет:<br />
<img src="http://rux.pp.ru/blog/wp-content/uploads/2011/09/nodejs-mysqlclient-encoding-charset.png" alt="" title="nodejs-mysqlclient-encoding-charset" width="200" height="92" class="alignnone size-full wp-image-916" /></p>
<h3>Вместе с установкой соединения</h3>
<p>Кусочек кода, устанавливающий соединение с БД из geoChat:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">mysql</span>.<span style="color: #660066;">createConnectionSync</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">connectSync</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">config</span>.<span style="color: #660066;">mysql</span>.<span style="color: #660066;">host</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">config</span>.<span style="color: #660066;">mysql</span>.<span style="color: #660066;">user</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">config</span>.<span style="color: #660066;">mysql</span>.<span style="color: #660066;">pass</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">config</span>.<span style="color: #660066;">mysql</span>.<span style="color: #660066;">base</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">connectedSync</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot; MySQL connection error &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">connectErrno</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">connectError</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; process.<span style="color: #660066;">exit</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">setCharsetSync</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot; &nbsp; MySQL connection successful&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; process.<span style="color: #660066;">on</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'exit'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; gc.<span style="color: #660066;">dbconn</span>.<span style="color: #660066;">closeSync</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(915, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_915_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_915_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.09/nodejs-mysql-libmysqlclient-i-russkie-bukvy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FTP: сервер на amazon ec2</title>
		<link>http://rux.pp.ru/blog/2011.08/ftp-server-na-amazon-ec2/</link>
		<comments>http://rux.pp.ru/blog/2011.08/ftp-server-na-amazon-ec2/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 10:55:54 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[ftp]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=910</guid>
		<description><![CDATA[Немного не очевидный процесс настройки FTP cервера (на примере proftpd)
Как известно инстансы имеют айпи в сети 10.x.x.x, а не внешний. Внешний же (Elastic IP) подключается динамически
Как настроить тогда?

Первым делом отредактировать конфиг proftpd.conf:
(части авторизации касаться не буду &#8211; у меня через SQL)
. . . 
# In some cases you have to specify passive ports range to [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fftp-server-na-amazon-ec2%2F&amp;via=ruxeg&amp;text=FTP%3A+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+%D0%BD%D0%B0+amazon+ec2&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fftp-server-na-amazon-ec2%2F"  class="twitter-share-button">Tweet</a></div><p>Немного не очевидный процесс настройки FTP cервера (на примере proftpd)</p>
<p>Как известно инстансы имеют айпи в сети 10.x.x.x, а не внешний. Внешний же (Elastic IP) подключается динамически</p>
<p>Как настроить тогда?</p>
<p><span id="more-910"></span></p>
<p>Первым делом отредактировать конфиг proftpd.conf:<br />
(части авторизации касаться не буду &#8211; у меня через SQL)</p>
<div class="codecolorer-container apache twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">. . . <br />
<span style="color: #adadad; font-style: italic;"># In some cases you have to specify passive ports range to by-pass</span><br />
<span style="color: #adadad; font-style: italic;"># firewall limitations. Ephemeral ports can be used for that, but</span><br />
<span style="color: #adadad; font-style: italic;"># feel free to use a more narrow range.</span><br />
PassivePorts &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #ff0000;">49000</span> <span style="color: #ff0000;">49999</span><br />
<br />
<span style="color: #adadad; font-style: italic;"># If your host was NATted, this option is useful in order to</span><br />
<span style="color: #adadad; font-style: italic;"># allow passive tranfers to work. You have to use your public</span><br />
<span style="color: #adadad; font-style: italic;"># address and opening the passive ports used on your firewall as well.</span><br />
MasqueradeAddress &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 174.129.220.85</div></div>
<p>Т.е. нужно разкоментить директивы MasqueradeAddress и PassivePorts и вписать туда <strong>elastic IP</strong> (смотри в<a href="https://console.aws.amazon.com/ec2" target="_blank" rel="nofollow"> панели AWS</a>) и порты 49000-49999
</p>
<p>
<img src="http://rux.pp.ru/blog/wp-content/uploads/2011/08/amazon-ec2-proftpd-config.png" alt="" title="amazon-ec2-proftpd-config" width="382" height="254" class="alignright size-full wp-image-911" /><br />
Сетевая часть proftpd настроенна, теперь к настройке Security Group в AWS (слева в группе Network &#038; Security).</p>
<p>Нужно добавить в список разрешённых портов 20-21 и 49000-49999 и <strong>незабыть</strong> нажать кнопочу Apply rule changes, как на скриншоте справа.</p>
<p>На этом всё, авторизацию придётся настроить отдельно <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(910, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 0"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_910_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_910_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.08/ftp-server-na-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>brainfuck: java-компилятор</title>
		<link>http://rux.pp.ru/blog/2011.08/brainfuck-java-compiler/</link>
		<comments>http://rux.pp.ru/blog/2011.08/brainfuck-java-compiler/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 14:01:15 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[bcel]]></category>
		<category><![CDATA[brainfuck]]></category>
		<category><![CDATA[bytecode]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[hackathon]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[reflection]]></category>
		<category><![CDATA[ИТМО]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=888</guid>
		<description><![CDATA[branfuck &#8211; это такой простейший язык программирования который реализует некую &#8220;полную машину Тьюринга&#8221;, подробнее в википедии, там же и подробное описание команд. Кому лень  &#8211; пример, выводящий традиционное Hello world:
&#160;++++++++++&#91;&#62;+++++++&#62;++++++++++&#62;+++&#62;+&#60;&#60;&#60;&#60;-&#93;&#62;++
&#160;.&#62;+.+++++++..+++.&#62;++.&#60;&#60;+++++++++++++++.&#62;.+++.
&#160;------.--------.&#62;+.&#62;.
Для тех, кто  видит в первый раз это кажется диким. Ну разе lisp не страшнее?)

Зачем??!

Это &#8211; язык-головоломка. Благодаря такому маленькому набору команд компилятор/интерпретатор становится [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fbrainfuck-java-compiler%2F&amp;via=ruxeg&amp;text=brainfuck%3A+java-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fbrainfuck-java-compiler%2F"  class="twitter-share-button">Tweet</a></div><p>branfuck &#8211; это такой простейший язык программирования который реализует некую &#8220;полную машину Тьюринга&#8221;, подробнее в <a href="http://ru.wikipedia.org/wiki/Brainfuck" target="_blank" >википедии</a>, там же и подробное описание команд. Кому лень  &#8211; пример, выводящий традиционное <strong>Hello world</strong>:</p>
<div class="codecolorer-container ini twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;++++++++++<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>&gt;+++++++&gt;++++++++++&gt;+++&gt;+&lt;&lt;&lt;&lt;-<span style="">&#93;</span></span>&gt;++<br />
&nbsp;.&gt;+.+++++++..+++.&gt;++.&lt;&lt;+++++++++++++++.&gt;.+++.<br />
&nbsp;------.--------.&gt;+.&gt;.</div></div>
<p>Для тех, кто  видит в первый раз это кажется диким. Ну разе lisp не страшнее?)
</p>
<h2>Зачем??!</h2>
<p><span id="more-888"></span></p>
<p>Это &#8211; язык-головоломка. Благодаря такому маленькому набору команд компилятор/интерпретатор становится очень простым, а разработка на нём &#8211; поистине напряг для мозга, особенно для программистов которые привыкли к роскоши <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>И всё-таки зачем?</h3>
<p>В рамках <a href="http://sumit.ru" rel="nofollow" target="_blank">#SumIT</a> был конкурс javathon от <s>Sun</s> Oracle на написание приложения используя последние java-технологии. Напомню, что за 2 недели назад вышла Java 7. Один из вариантов был написать компилятор какого-либо языка в джава-байткод за <strong>23 часа</strong>. Подробнее <a href="http://sumit.ru/events/31" target="_blank" rel="nofollow">о конкурсе</a> и <a href="http://sumit.ru/events/40"  target="_blank" rel="nofollow">результатах</a> </p>
<p>Вместе с приятелем, <a href="http://twitter.com/#!/Kolchinmax">Максимом Колчиным</a> мы взялись за написания такого компилятора, который попутно получился ещё и оптимизирующий. Соответственно цепочка логики: брейнфак компилятор на джаве генерит байткод программы, которая потом запускается и выдаёт то, что должна делать программа на брей,нфаке в исходном виде. Запутал <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Картинка иллюстрирует<br />
<center><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/08/jfuck-workflow.png" alt="" title="jfuck-workflow" width="553" height="193" class="aligncenter size-full wp-image-894" align="center" style="border-radius: 4px; margin: 0 auto"/></center>
</p>
<p>Попутно добавили ещё одну команду, которая является расширением языка. <strong>&#8220;~&#8221;</strong>, &#8220;тильда&#8221; &#8211; создаёт задержку на 300мсек. Вводя тильду у нас удалось достичь эмуляции &#8220;набора текста&#8221; из за-за задержки при выводе на экран. </p>
<p>Макс предложил название <strong>jFuck</strong> &#8211; клёвое! <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Поскольку писать на брейфаке большой текст <s>геморой</s> одно удовольствие пришлось на скорую руку написать конвертор(jfuck-gen) любого текста в брейфак код, рандомно добавляя тильды, т.е. задержки в тексте.
</p>
<h2>jFuck</h2>
<p>Для разработки использовали maven, чтоб его&#8230; Тормознутая хрень, да. Точно не для нетбука &#8211; это был первый опыт работы с ним.</p>
<p>Разумеется, мы использовали библиотеки для генерации байткода &#8211; <a href="http://commons.apache.org/bcel/" rel="nofollow" target="_blank">Apache BCEL</a> (<strong>org.apache.bcel</strong>). Писать руками достаточно сложно, тем более в такое ограниченное время (фактически у нас вышло <strong>4+10=14 часов</strong>, не спать было бы глупо &#8211; больше протупили бы)</p>
<p>Так же нам очень пригодилась публично выложенный код самого интерпретатора брейнфака, очень грамотно написанный (например есть &#8220;минусовая&#8221; память). Автор <strong>vampirus</strong> (<a href="http://vampirus.ru/code/brainfuck/" target="_blank">vampirus.ru/code/brainfuck</a>) </p>
<h3>Как работает компилятор?</h3>
<p>Мы имеем некую заготовку, класс Tmpl, который умеет выполнять инструкции брейнфака, вызывая соотвествующий метод. Например <strong>&#8220;+&#8221;</strong> должен вызвать метод <strong>incValue()</strong>. Дальше в этот класс нужно внедрить сами инструкции, т.е. код который будет вызывать методы у заготовки.</p>
<p>Кто внимательно читает сразу увидит что есть большое количество повторений одинаковых инструкций, и вызывать 200 раз метод incValue() &#8211; глупо. Есть где опимизировать <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А ещё если посмотреть на брейнфак можно заметить наличие циклов &#8220;<strong>[</strong>...<strong>]</strong>&#8220;, которые достаточно сложно реализовать (нужно уметь корректно отмечать добавлять закладки и проверять условия, в случае чего нужно вернуться к этим закладкам. В контексте генерации байткода выглядит устрашающе <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) Поэтому мы добавили оптимизатор &#8211; во время компиляции мы эмулируем работу брейнфака, соответственно раскрывая циклы. В этом же месте и считаем количество повторений инструкций. </p>
</p>
<h3>Например</h3>
<p>Кусок кода, который добавляет в instructionList(читать как набор инструкций метода) вызов метода с одним аргументом</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>InstructionConstants.<span style="color: #000000; font-weight: bold;">THIS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PUSH<span style="color: #009900;">&#40;</span>factory.<span style="color: #006633;">getConstantPool</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, count<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>factory.<span style="color: #006633;">createInvoke</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl&quot;</span>, getMethod<span style="color: #009900;">&#40;</span>last<span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Type.<span style="color: #006633;">VOID</span>, <span style="color: #000000; font-weight: bold;">new</span> Type<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>Type.<span style="color: #006633;">INT</span><span style="color: #009900;">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Constants.<span style="color: #006633;">INVOKEVIRTUAL</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</p>
<p>Сам Tmpl класс:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Tmpl <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> pointerzero <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> memory<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> pointer <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> in <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> pin<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> Tmpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; memory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> nextCeil<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pointer <span style="color: #339933;">+=</span> amount<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> prevCeil<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pointer <span style="color: #339933;">-=</span> amount<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> incValue<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span> cur <span style="color: #339933;">=</span> getValue<span style="color: #009900;">&#40;</span>pointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; setValue<span style="color: #009900;">&#40;</span>pointer, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">+</span> value<span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> 256<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> decValue<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span> cur <span style="color: #339933;">=</span> getValue<span style="color: #009900;">&#40;</span>pointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; setValue<span style="color: #009900;">&#40;</span>pointer, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>cur <span style="color: #339933;">-=</span> value<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> 0 <span style="color: #339933;">?</span> 255 <span style="color: #339933;">-</span> cur <span style="color: #339933;">:</span> cur <span style="color: #339933;">%</span> 256<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> print<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span> cur <span style="color: #339933;">=</span> getValue<span style="color: #009900;">&#40;</span>pointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">--</span>amount <span style="color: #339933;">&gt;=</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>cur<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> read<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; setValue<span style="color: #009900;">&#40;</span>pointer, in.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">+</span>amount<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pin<span style="color: #339933;">+=</span>amount<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> sleep<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">Thread</span>.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span>300 <span style="color: #339933;">*</span> amount<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">InterruptedException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">char</span> getValue<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pointer<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> newpointer <span style="color: #339933;">=</span> pointerzero <span style="color: #339933;">+</span> pointer<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>memory.<span style="color: #006633;">length</span> <span style="color: #339933;">&gt;</span> newpointer <span style="color: #339933;">&amp;&amp;</span> newpointer <span style="color: #339933;">&gt;=</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> memory<span style="color: #009900;">&#91;</span>newpointer<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> tmp <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&gt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> newpointer <span style="color: #339933;">+</span> 1 <span style="color: #339933;">:</span> memory.<span style="color: #006633;">length</span> <span style="color: #339933;">+</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tmp.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> 0, k <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&gt;</span> 0 <span style="color: #339933;">?</span> 0 <span style="color: #339933;">:</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> memory.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp<span style="color: #009900;">&#91;</span>k<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> memory<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory <span style="color: #339933;">=</span> tmp<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&lt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pointerzero <span style="color: #339933;">+=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setValue<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pointer, <span style="color: #000066; font-weight: bold;">char</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> newpointer <span style="color: #339933;">=</span> pointerzero <span style="color: #339933;">+</span> pointer<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>memory.<span style="color: #006633;">length</span> <span style="color: #339933;">&gt;</span> newpointer <span style="color: #339933;">&amp;&amp;</span> newpointer <span style="color: #339933;">&gt;=</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory<span style="color: #009900;">&#91;</span>newpointer<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> tmp <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&gt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> newpointer <span style="color: #339933;">+</span> 1 <span style="color: #339933;">:</span> memory.<span style="color: #006633;">length</span> <span style="color: #339933;">+</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tmp.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> 0, k <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&gt;</span> 0 <span style="color: #339933;">?</span> 0 <span style="color: #339933;">:</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> memory.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp<span style="color: #009900;">&#91;</span>k<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> memory<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory <span style="color: #339933;">=</span> tmp<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>newpointer <span style="color: #339933;">&gt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory<span style="color: #009900;">&#91;</span>newpointer<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pointerzero <span style="color: #339933;">+=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>newpointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">String</span> code <span style="color: #339933;">=</span> &nbsp;<span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Tmpl tmpl <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Tmpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; tmpl.<span style="color: #006633;">run</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// stub</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> error<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> somevar<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">System</span>.<span style="color: #006633;">err</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unknown command&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Фактически этот класс &#8211; изменённый BFInt смерженный с Memory, взятый у вышеупомянутого автора <strong><a href="http://vampirus.ru/code/brainfuck/" target="_blank" rel="nofollow">vampirus</a></strong>. Как видно все вызываемые методы имеют один единственный аргумент &#8211; целое число повторений.
</p>
<p>В <strong>Tmpl</strong> есть пустой метод <strong>run()</strong> &#8211; именно он заполняется инструкциями на этапе компиляции.</p>
<p>В самом же компиляторе jFuck основной метод, который загружает шаблонный класс <strong>Tmpl</strong>, и заменяет пустую заглушку (stub) <strong>run()</strong> на сформированный код.</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> compile<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> code<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ClassGen cg <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassGen<span style="color: #009900;">&#40;</span><span style="color: #003399;">Repository</span>.<span style="color: #006633;">lookupClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassNotFoundException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>Jfuck.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span>Level.<span style="color: #006633;">SEVERE</span>, <span style="color: #000066; font-weight: bold;">null</span>, ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cg.<span style="color: #006633;">replaceMethod</span><span style="color: #009900;">&#40;</span>lookupMethod<span style="color: #009900;">&#40;</span>cg, <span style="color: #0000ff;">&quot;run&quot;</span><span style="color: #009900;">&#41;</span>, generateRun<span style="color: #009900;">&#40;</span>cg, code<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cg.<span style="color: #006633;">getJavaClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">dump</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl.class&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>Jfuck.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span>Level.<span style="color: #006633;">SEVERE</span>, <span style="color: #000066; font-weight: bold;">null</span>, ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></div>
</p>
<h2>Весь компилятор</h2>
<p>Получился не большой:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">ru.ifmo.jfuck</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Jfuck <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp; &nbsp;* Program start point<br />
&nbsp; &nbsp; &nbsp;* @param args <br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>args.<span style="color: #006633;">length</span> <span style="color: #339933;">&gt;</span> 0<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">BufferedReader</span> input <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; StringBuilder sb <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedReader</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileReader</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">FileNotFoundException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">String</span> line <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> line <span style="color: #339933;">=</span> input.<span style="color: #006633;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;line.separator&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Jfuck jfuck <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Jfuck<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jfuck.<span style="color: #006633;">compile</span><span style="color: #009900;">&#40;</span>jfuck.<span style="color: #006633;">interpret</span><span style="color: #009900;">&#40;</span>sb.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toCharArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Second argument should be path to program on Jfuck language.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Method</span> lookupMethod<span style="color: #009900;">&#40;</span>ClassGen tmpl, <span style="color: #003399;">String</span> methodName<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Method</span> m <span style="color: #339933;">:</span> tmpl.<span style="color: #006633;">getMethods</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>m.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>methodName<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> m<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Method</span> generateRun<span style="color: #009900;">&#40;</span>ClassGen jc, <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> cmds<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ConstantPoolGen cp <span style="color: #339933;">=</span> jc.<span style="color: #006633;">getConstantPool</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; InstructionList il <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> InstructionList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MethodGen m <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MethodGen<span style="color: #009900;">&#40;</span>Constants.<span style="color: #006633;">ACC_PRIVATE</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type.<span style="color: #006633;">VOID</span>, <span style="color: #000000; font-weight: bold;">new</span> Type<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>, <span style="color: #0000ff;">&quot;run&quot;</span>, <span style="color: #0000ff;">&quot;Tmpl&quot;</span>, il, cp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; InstructionFactory factory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> InstructionFactory<span style="color: #009900;">&#40;</span>jc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; translate<span style="color: #009900;">&#40;</span>il, factory, cmds<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>InstructionConstants.<span style="color: #000000; font-weight: bold;">RETURN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; m.<span style="color: #006633;">setMaxStack</span><span style="color: #009900;">&#40;</span>5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> m.<span style="color: #006633;">getMethod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp; &nbsp;* Find for corresponding method<br />
&nbsp; &nbsp; &nbsp;* @param ch brainfuck command<br />
&nbsp; &nbsp; &nbsp;* @return method name in Tmpl instance<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> getMethod<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span> ch<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>ch<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'&gt;'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;nextCeil&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'&lt;'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;prevCeil&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'+'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;incValue&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'-'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;decValue&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'.'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;print&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">','</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;read&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">'~'</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;sleep&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">default</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp; &nbsp;* Interprets brainfuck <br />
&nbsp; &nbsp; &nbsp;* @param src source program<br />
&nbsp; &nbsp; &nbsp;* @return brainfuck w/o loops<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> interpret<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> src<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> BFInt<span style="color: #009900;">&#40;</span>src<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">emulate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> compile<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> code<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ClassGen cg <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassGen<span style="color: #009900;">&#40;</span><span style="color: #003399;">Repository</span>.<span style="color: #006633;">lookupClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassNotFoundException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>Jfuck.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span>Level.<span style="color: #006633;">SEVERE</span>, <span style="color: #000066; font-weight: bold;">null</span>, ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cg.<span style="color: #006633;">replaceMethod</span><span style="color: #009900;">&#40;</span>lookupMethod<span style="color: #009900;">&#40;</span>cg, <span style="color: #0000ff;">&quot;run&quot;</span><span style="color: #009900;">&#41;</span>, generateRun<span style="color: #009900;">&#40;</span>cg, code<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cg.<span style="color: #006633;">getJavaClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">dump</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl.class&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>Jfuck.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span>Level.<span style="color: #006633;">SEVERE</span>, <span style="color: #000066; font-weight: bold;">null</span>, ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> translate<span style="color: #009900;">&#40;</span>InstructionList il, InstructionFactory factory,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> code<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">char</span> last <span style="color: #339933;">=</span> code<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> code.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>last <span style="color: #339933;">==</span> code<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count<span style="color: #339933;">++;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//Invoke with arg last</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>InstructionConstants.<span style="color: #000000; font-weight: bold;">THIS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PUSH<span style="color: #009900;">&#40;</span>factory.<span style="color: #006633;">getConstantPool</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, count<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; il.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>factory.<span style="color: #006633;">createInvoke</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Tmpl&quot;</span>, getMethod<span style="color: #009900;">&#40;</span>last<span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Type.<span style="color: #006633;">VOID</span>, <span style="color: #000000; font-weight: bold;">new</span> Type<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>Type.<span style="color: #006633;">INT</span><span style="color: #009900;">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Constants.<span style="color: #006633;">INVOKEVIRTUAL</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last <span style="color: #339933;">=</span> code<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Ах да, так как Макс и я студенты СПбГУ ИТМО, поэтому назвали соотвественно package: <strong>ru.ifmo.jfuck</strong>
</p>
<h2>Скачать jFuck</h2>
<p>Все в архиве <a href='http://rux.pp.ru/blog/wp-content/uploads/2011/08/jFuck.tar.gz'>jFuck.tar.gz</a>(компилятор + генератор)</p>
<p>Вообще достаточно хорошо провели время, весьма интересный формат мероприятия. Узнали то, с чем вряд ли бы когда-нибудь столкнулись. Не часто приходится писать компиляторы в повседневной жизни <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(888, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 1"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_888_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_888_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.08/brainfuck-java-compiler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gentoo: снёс, поставил xubuntu</title>
		<link>http://rux.pp.ru/blog/2011.08/make-gentoo_remove-xubuntu_install/</link>
		<comments>http://rux.pp.ru/blog/2011.08/make-gentoo_remove-xubuntu_install/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 16:21:01 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[xubuntu]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=881</guid>
		<description><![CDATA[Почти 4 года на очень слабом десктопе простояла Джента. Но терпение кончилось &#8211; снёс.
Why?



Есть несколько очень важных для меня моментов:

Первая цель установки gentoo &#8211; высокая скорость работы, благодаря оптимизациям под процессор, отключение не нужных фитч. Как выяснилось &#8211; это не то что сказка, но мало применима к этому железу
Процессор &#8211; Celeron 1.7Ghz, тормоз. Помню ещё [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style=";float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fmake-gentoo_remove-xubuntu_install%2F&amp;via=ruxeg&amp;text=Gentoo%3A+%D1%81%D0%BD%D1%91%D1%81%2C+%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D0%BB+xubuntu&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fmake-gentoo_remove-xubuntu_install%2F"  class="twitter-share-button">Tweet</a></div><p>Почти <b>4</b> года на очень слабом десктопе простояла Джента. Но терпение кончилось &#8211; снёс.<br />
Why?
</p>
<p><span id="more-881"></span><br />
<img src="http://rux.pp.ru/blog/wp-content/uploads/2011/08/gentoo-logo.png" alt="" title="gentoo-logo" width="150" height="200" class="alignright size-full wp-image-885" /></p>
<p>Есть несколько очень важных для меня моментов:</p>
<ul>
<li>Первая цель установки gentoo &#8211; высокая скорость работы, благодаря оптимизациям под процессор, отключение не нужных фитч. Как выяснилось &#8211; это не то что сказка, но мало применима к этому железу</li>
<li>Процессор &#8211; Celeron 1.7Ghz, тормоз. Помню ещё лет 8 назад(в далёком 8ом классе) я купил материнку и проц по дешёвке б/у в радиокружке. Памяти &#8211; целых 512Мб. Сложно передать сколько времени происходят все операции&#8230; Например
<ul>
<li>Поиск package &#8211; около 2 минут</li>
<li>Резрешение зависимостей в <em>emerge -uDNa world</em> &#8211; минут 10</li>
<li>Сборка OpenOffice 2.3 &#8211; полтора дня(!), OpenOffice 3.1 &#8211; сутки</li>
<li>Сборка gcc и прямых зависимостей &#8211; пол дня</li>
</ul>
</li>
<li>Вторая цель установки &#8211; понять как устроен линукс несколько ближе, <strong>получить знания</strong>. Спасибо, многое для меня стало яснее. Уверен, это помогло мне немного улучшить понимание устройства системы, связи компонентов. Научило более подробно читать документацию и багрепорты. На такой медленной системе хорошо заметны многие оптимизации софта &#8211; я смог это прочувствовать. Но поизучал &#8211; и хватит.</li>
<li>Десктоп стоит дома &#8211; я же дома бываю редко. Из за инертности (в плане пересборки зависимостей) периодически часть софта перестаёт работать. Дома &#8211; не станут разбираться в чём проблема, им нужно чтоб просто работало и это правильно</li>
</ul>
<p>И это только основные причины <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<h3>Xubuntu</h3>
<p>Выбирал не долго, ведь на нетбуке убунту <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Встала не сразу &#8211; единственная болванка, что я нашёл оказалась зацарапанная, и всё что я смог сделать &#8211; загрузиться с неё и установить ручками через проверенный <strong>debootstrap</strong> прямо из интернетов</p>
<h3>Разница</h3>
<p>Оказалась не большая &#8211; где то быстрее, где то медленее. Почему-то медленее стало отрисовывать графику(GF 5500) , компиз стал подтормаживать(только в сессии Xfce, в гноме все ок), чего раньше не замечал в дженте.</p>
<p>В среднем скорость увеличилась &#8211; ибо пересобирать ничего не нужно. <s>Воткнул и работает.</s> Скачал и установил.</p>
<p><br/></p>
<p style="color: brown;" align=right>
Думаю поможет с выбором<br />
что ставить на слабые машины<br />
</P></p>
<div class="thanks_button_div" style="float: right; margin-right: 10px; padding: 2px 5px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(881, 'Вы уже оставили благодарность за эту статью')" value="Спасибо, помогло!: 2"
                class="thanks_button thanks_compact thanks_grey1"
                style="background-image:url(http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_grey1.png);  font-family: Arial; font-size: 12px; font-weight: bold; border: 1px solid black; background: #eed;; color:brown;"
                id="thanksButton_881_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_881_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://rux.pp.ru/blog/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://rux.pp.ru/blog/2011.08/make-gentoo_remove-xubuntu_install/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

