<?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>Tue, 10 Jan 2012 17:55:26 +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>Паттерн 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="Спасибо, помогло!: 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_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="Спасибо, помогло!: 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_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="Спасибо, помогло!: 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_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="Спасибо, помогло!: 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_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>0</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="Спасибо, помогло!: 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_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>1</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>
		<item>
		<title>Netbeans:  включить нативный L&amp;F</title>
		<link>http://rux.pp.ru/blog/2011.08/netbeans-vklyuchit-nativnyjj-lf/</link>
		<comments>http://rux.pp.ru/blog/2011.08/netbeans-vklyuchit-nativnyjj-lf/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 16:48:45 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Заметки]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[look-and-feel]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=871</guid>
		<description><![CDATA[После установки Netbeans по умолчанию включается l&#038;f(look-and-feel, стиль, цвета отрисовки элементов управления, поведенческие черты интерфейса) от Gnome &#8211; что меня невыносимо раздражает, ибо:

Оформление гнома кушает ресурсы процессора больше, чем нативное джавовское. На нетбуке это особенно актуально
Шрифты &#8211; слишком большие, отступы paddings тоже. Для экрана нетбука это раздражающие факторы &#8211; маленькое разрешение.
Key bindings гнома слишком не [...]]]></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%2Fnetbeans-vklyuchit-nativnyjj-lf%2F&amp;via=ruxeg&amp;text=Netbeans%3A++%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C+%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9+L%26F&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fnetbeans-vklyuchit-nativnyjj-lf%2F"  class="twitter-share-button">Tweet</a></div><p>После установки Netbeans по умолчанию включается l&#038;f(look-and-feel, стиль, цвета отрисовки элементов управления, поведенческие черты интерфейса) от Gnome &#8211; что меня невыносимо раздражает, ибо:</p>
<ul>
<li>Оформление гнома кушает ресурсы процессора больше, чем нативное джавовское. На нетбуке это особенно актуально</li>
<li>Шрифты &#8211; слишком большие, <s>отступы</s> paddings тоже. Для экрана нетбука это раздражающие факторы &#8211; маленькое разрешение.</li>
<li>Key bindings гнома слишком не привычны для разработки</li>
</ul>
<h3>И поэтому&#8230;</h3>
<p><span id="more-871"></span></p>
<p>&#8230;устанавливая новую версию IDE отключаю навязанный l&#038;f &#8211; включаю родной Java &#8220;Metal&#8221;</p>
<h2>Какая там разница?</h2>
<div style="font-size: 30pt;padding-top:10pt; margin: auto; ">
<a href="http://rux.pp.ru/blog/wp-content/uploads/2011/08/netbeans-with-gnome-lnf.png"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/08/netbeans-with-gnome-lnf-300x175.png" alt="" title="netbeans-with-gnome-lnf" width="300" height="175" class="alignnone size-medium wp-image-872" align="middle" /></a><b>&nbsp;&rArr;&nbsp;</b><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/08/netbeans-with-standard-java-look-and-feel-metal.png"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/08/netbeans-with-standard-java-look-and-feel-metal-300x175.png" alt="" title="netbeans-with-standard-java-look-and-feel-metal" width="300" height="175" class="alignnone size-medium wp-image-873" align="middle"/></a>
</div>
<h2>Что нужно сделать?</h2>
<p>
Отредактировать файл <strong>&lt;install_dir&gt;/bin/netbeans</strong> &#8211; найти строчки и разкомментировать условие <strong>(if .. fi)</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"><span style="color: #666666; font-style: italic;"># following should be done just in RPM or Solaris Launcher</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>netbeans.conf <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; . <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>netbeans.conf<br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>- это придётся выполнять после каждой установки NB
</p>
<p>А ещё сам файл настроек, который не будет зависить от версии ide:</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">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>netbeans.conf<br />
<span style="color: #007800;">netbeans_default_options</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${netbeans_default_options}</span> &nbsp;--laf javax.swing.plaf.metal.MetalLookAndFeel&quot;</span><br />
<span style="color: #666666; font-style: italic;"># ctrl-D</span></div></div>
<p>тут же можно задать дополнительные опции загрузки среды, например выделение памяти &#8211; значение переменной передаётся как аргумент виртуальной машины.
</p>
<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(871, 'Вы уже оставили благодарность за эту статью')" 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_871_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_871_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/netbeans-vklyuchit-nativnyjj-lf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Воспоминания: самодельная сеть</title>
		<link>http://rux.pp.ru/blog/2011.08/vospominaniya-samodelnaya-set/</link>
		<comments>http://rux.pp.ru/blog/2011.08/vospominaniya-samodelnaya-set/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 21:44:19 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[воспоминания]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=868</guid>
		<description><![CDATA[
Этим постом начну цикл воспоминаний о том, что когда-то было, что уже исчезает из памяти, но не хочется забывать.
Предисловие
В далёком 7ом классе(примерно в 2003 году), когда я только начал интересоваться комьютерами и во всю занимался радиотехникой у меня появилась задача &#8211; обеспечить связь дома с дачей(порядка 500м).
Для полноты картины: мобильников не было, вообще. Сейчас наверное [...]]]></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%2Fvospominaniya-samodelnaya-set%2F&amp;via=ruxeg&amp;text=%D0%92%D0%BE%D1%81%D0%BF%D0%BE%D0%BC%D0%B8%D0%BD%D0%B0%D0%BD%D0%B8%D1%8F%3A+%D1%81%D0%B0%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F+%D1%81%D0%B5%D1%82%D1%8C&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fvospominaniya-samodelnaya-set%2F"  class="twitter-share-button">Tweet</a></div><p>
Этим постом начну цикл воспоминаний о том, что когда-то было, что уже исчезает из памяти, но не хочется забывать.</p>
<h2>Предисловие</h2>
<p>В далёком 7ом классе(примерно в 2003 году), когда я только начал интересоваться комьютерами и во всю занимался радиотехникой у меня появилась задача &#8211; обеспечить связь дома с дачей(порядка 500м).</p>
<p>Для полноты картины: мобильников не было, вообще. Сейчас наверное сложно представить) В то время у меня была <strong>IBM 80386</strong> в 640Кб оперативы(с DOS&#8217;ом разумеется) и <strong>Ericsson 8086</strong>(эта такая машинка с 512Кб оперативы и чб экраном). Про какой-то &#8220;виндоус&#8221; и сетевые карты &#8220;для интернета&#8221; я слышал лишь по телевизору &#8211; была такая передача &#8220;компьютерный мир&#8221;. Интернет? Слышал что есть такое. Сейчас наверное сложно представить разработчика без интернета. Вся документация &#8211; на тот момент времени в IDE. Ну а ещё много энтузиазма и куча деталей 80х годов. КТ315, МП41 кто нить помнит?)) </p>
<p><span id="more-868"></span></p>
<p>
На тот момент времени я освоил BASIC (<em>OMG!</em>), возможно PASCAL и не много ASM 8086. Откуда? Дома стояли 2 книги &#8220;Язык Си для проффисионалов&#8221; и ещё какая-то. А ещё в QuickC была документация и примеры. Собственно больше не было источников информации. <strong>Вообще</strong>. Сейчас, спустя 7 лет я осознаю как разбаловался &#8211; когда есть много много всего &#8211; бери и делай.</p>
<h3>Чего придумал</h3>
<p>Попробую объяснить что происходило</p>
<p>Первый шаг &#8211; наладить &#8220;общение&#8221; компьютеров по проводам. Т.е. железно их соединить и написать софт &#8220;чатик&#8221;. Для начала &#8211; хотя бы в одну сторону. Второй шаг &#8211; провода заменить на беспроводной канал &#8211; тогда эта задача решалась проще, чем написать софт. Ведь у меня были журналы &#8220;Радио&#8221; за 25 лет от деда <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Реализация</h3>
<p>Да, не знал я тогда про USART. Или его просто не было на Ericsson-e. Уже не важно, да и не вспомнить <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Зато я чётко знал, что если записать файлик на диск то мигнёт светодиод. Обращаю внимание &#8211; он гарантированно мигнёт &#8211; ни в оси ни в железке нет ничего кеширующего.</p>
<p>А ещё у IBM был &#8220;game port&#8221; &#8211; это такой порт для джойстика, у которого были аналоговые входы (программируемые).</p>
<p><P style="text-decoration: underline">И что с этим делом можно делать?</p>
<p>Ага &#8211; подключить светодиод HDD к аналоговому входу игрового порта <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>К большому сожалению фотографий этого не осталось &#8211; не было тогда ничего, на что можно сфоткать)</p>
<p>Что касается софтварной части реализации чатика: На одной стороне я &#8220;сериализировал&#8221; строку для посылки в ASCII код <strong>N</strong> и поднимал &#8220;линию&#8221; на <strong>N</strong> секунд зажигая светодиод HDD (каким именно образом он долгое время горел я не помню &#8211; вроде через прерывания BIOS была возможность включить его). На другой стороне (где геймпорт, приёмник) смотрел сколько времени поднята линия и восстанавливал символ на аски коду <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Стоит ли говорить как<strong> долго</strong> он передавал строку?))</p>
<p>И даже оптимизацию придумал &#8211; составил собственный алфавит и поставил время задержки меньше секунды.</p>
<p><strong>И оно работало!!!!</strong> <s>fuckyeah</s>.</p>
<p>До беспроводного канала так и не дошёл, не помню почему <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Сейчас, конечно, всё это забавно выглядит. Однако, когда я делал чувство эйфории меня не оставляло. </p>
<h2>P.S.</h2>
<p>И да &#8211; на всё это ушло всего вечер. Для того небольшого количества знаний на тот момент это очень быстро. Жаль, что сейчас я не способен так же быстро запускать проекты.</p>
<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(868, 'Вы уже оставили благодарность за эту статью')" 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_868_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_868_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/vospominaniya-samodelnaya-set/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>node.js: установка модулей через npm</title>
		<link>http://rux.pp.ru/blog/2011.08/node-js-ustanovka-modulejj-cherez-npm/</link>
		<comments>http://rux.pp.ru/blog/2011.08/node-js-ustanovka-modulejj-cherez-npm/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 21:45:31 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=862</guid>
		<description><![CDATA[Вот и моя очередь настала попробовать этот чудо-сервер и словить первые грабли  

В самом начале пути изучения node.js наткнулся на проблему подключения библиотек (в частности интересовал socket.io) &#8211; программа их тупо не видит.


Вылезает такая бяка при  попытке запустить чат из примера:
rux@rux-laptop:~/test/socket.io/examples/chat$ node app.js 

node.js:181
&#160; &#160; &#160; &#160; throw e; // process.nextTick error, or [...]]]></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%2Fnode-js-ustanovka-modulejj-cherez-npm%2F&amp;via=ruxeg&amp;text=node.js%3A+%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0+%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9+%D1%87%D0%B5%D1%80%D0%B5%D0%B7+npm&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.08%2Fnode-js-ustanovka-modulejj-cherez-npm%2F"  class="twitter-share-button">Tweet</a></div><p>Вот и моя очередь настала попробовать этот чудо-сервер и словить первые грабли <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-862"></span></p>
<p>В самом начале пути изучения node.js наткнулся на проблему подключения библиотек (в частности интересовал <a href="http://socket.io" _target="blank">socket.io</a>) &#8211; программа их тупо не видит.
</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">rux<span style="color: #339933;">@</span>rux<span style="color: #339933;">-</span>laptop<span style="color: #339933;">:</span>~<span style="color: #339933;">/</span>test<span style="color: #339933;">/</span>socket.<span style="color: #660066;">io</span><span style="color: #339933;">/</span>examples<span style="color: #339933;">/</span>chat$ node app.<span style="color: #660066;">js</span> <br />
<br />
node.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>181<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">throw</span> e<span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// process.nextTick error, or 'error' event on first tick</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">^</span><br />
Error<span style="color: #339933;">:</span> Cannot find module <span style="color: #3366CC;">'socket.io-client'</span><br />
&nbsp; &nbsp; at <span style="color: #003366; font-weight: bold;">Function</span>._resolveFilename <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>320<span style="color: #339933;">:</span>11<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at <span style="color: #003366; font-weight: bold;">Function</span>._load <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>266<span style="color: #339933;">:</span>25<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at require <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>364<span style="color: #339933;">:</span>19<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at Object.<span style="color: #339933;">&lt;</span>anonymous<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>test<span style="color: #339933;">/</span>socket.<span style="color: #660066;">io</span><span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>socket.<span style="color: #660066;">io</span>.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>12<span style="color: #339933;">:</span>14<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at Module._compile <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>420<span style="color: #339933;">:</span>26<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at Object..<span style="color: #660066;">js</span> <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>426<span style="color: #339933;">:</span>10<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at Module.<span style="color: #660066;">load</span> <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span>336<span style="color: #339933;">:</span>31<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at <span style="color: #003366; font-weight: bold;">Function</span>._load <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span><span style="color: #CC0000;">297</span><span style="color: #339933;">:</span><span style="color: #CC0000;">12</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at require <span style="color: #009900;">&#40;</span>module.<span style="color: #660066;">js</span><span style="color: #339933;">:</span><span style="color: #CC0000;">364</span><span style="color: #339933;">:</span><span style="color: #CC0000;">19</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; at Object.<span style="color: #339933;">&lt;</span>anonymous<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>test<span style="color: #339933;">/</span>socket.<span style="color: #660066;">io</span><span style="color: #339933;">/</span>examples<span style="color: #339933;">/</span>chat<span style="color: #339933;">/</span>app.<span style="color: #660066;">js</span><span style="color: #339933;">:</span><span style="color: #CC0000;">15</span><span style="color: #339933;">:</span><span style="color: #CC0000;">11</span><span style="color: #009900;">&#41;</span></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">root<span style="color: #000000; font-weight: bold;">@</span>rux-laptop:~$ npm <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-g</span> socket.io-client<br />
uglify-js<span style="color: #000000; font-weight: bold;">@</span>1.0.3 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>node_modules<span style="color: #000000; font-weight: bold;">/</span>socket.io-client<span style="color: #000000; font-weight: bold;">/</span>node_modules<span style="color: #000000; font-weight: bold;">/</span>uglify-js</div></div>
</p>
<h3>Решение</h3>
<p>Но на самом то деле то, что рекомендуют выше не помогает <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  В качестве костыля на stackoverflow предложили следующее:</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">root<span style="color: #000000; font-weight: bold;">@</span>rux-laptop:~$ <span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-sf</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">//</span>lib<span style="color: #000000; font-weight: bold;">/</span>node_modules<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>node<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>Очевидным минусом является то, что нужно после каждой установки модуля делать симлинки в другую папку. </p>
</p>
<p>Для справок по версиям (система убунта 10.04)</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">rux<span style="color: #000000; font-weight: bold;">@</span>rux-laptop:~$ npm <span style="color: #660033;">-v</span><br />
1.0.3<br />
<br />
rux<span style="color: #000000; font-weight: bold;">@</span>rux-laptop:~$ node <span style="color: #660033;">-v</span><br />
v0.5.0-pre</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(862, 'Вы уже оставили благодарность за эту статью')" 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_862_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_862_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/node-js-ustanovka-modulejj-cherez-npm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian: php-fpm в Squeeze</title>
		<link>http://rux.pp.ru/blog/2011.07/php-fpm-in-squeeze/</link>
		<comments>http://rux.pp.ru/blog/2011.07/php-fpm-in-squeeze/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 08:43:02 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[fpm]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=856</guid>
		<description><![CDATA[Ах эти мейнтейнеры Дебиана! Обещали оставить в сквизе php-fpm, но опять появились баги тараканы в голове &#8211; вэб разработчики и сисадмины как и прежде используют глючные сборки от dotdeb, если вообще не пересобирают руками весь php.

Решение
 В этом посте нашёл временное решение &#8211; изменить мета-описание пакета php5-fpm, который лежит в архиве пакетов дебиана, что позволяет [...]]]></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.07%2Fphp-fpm-in-squeeze%2F&amp;via=ruxeg&amp;text=Debian%3A+php-fpm+%D0%B2+Squeeze&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.07%2Fphp-fpm-in-squeeze%2F"  class="twitter-share-button">Tweet</a></div><p>Ах эти мейнтейнеры Дебиана! Обещали оставить в сквизе php-fpm, но опять появились <s>баги</s> тараканы в голове &#8211; вэб разработчики и сисадмины как и прежде используют глючные сборки от dotdeb, если вообще не пересобирают руками весь php.</p>
<p><span id="more-856"></span></p>
<h3>Решение</h3>
<p> В <a href="http://www.zagirov.name/debian-testing-install-php5-fpm" target="_blank" rel="nofollow">этом посте</a> нашёл временное решение &#8211; изменить мета-описание пакета php5-fpm, который лежит в архиве пакетов дебиана, что позволяет использовать старый fpm с новой версией php(тем более что на момент поста отличие минимально &#8211; 5.3.3-1 и 5.3.3-7+squeeze. Автор описывает последовательность действий по наложению патча.</p>
<h3>Скачать</h3>
<p>Сделал deb для i386 &#8211; <a href='http://rux.pp.ru/blog/wp-content/uploads/2011/07/php5-fpm_5.3.3-1_i386_patched.deb'>php5-fpm_5.3.3-1_i386_patched</a>. Если не боитесь &#8211; можно скачать, вирусов нету <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Иначе &#8211; проделать все операции руками <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>..А если форсировать установку пакета?</h3>
<p>По идее можно поставить принудительно пакет с другой версией, игнорируя зависимости&#8230; Это было моё первое решение, чтоб не пересобирать пакет. Установил через <em>dpkg</em> <em>&#8211;force-all </em> &#8211; ничего хорошего, после этого были конфликты, которые я не знал как решить: apt ругался что нужно снести пакет php5-fpm 5.3.3-1, т.к. он не удовлетворяет условию php5-common 5.3.3-7+squeeze</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(856, 'Вы уже оставили благодарность за эту статью')" 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_856_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_856_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.07/php-fpm-in-squeeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вся правда о форуме Селигер 2011</title>
		<link>http://rux.pp.ru/blog/2011.07/vsya-pravda-o-forume-seliger-2011/</link>
		<comments>http://rux.pp.ru/blog/2011.07/vsya-pravda-o-forume-seliger-2011/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 17:18:06 +0000</pubDate>
		<dc:creator>ruX</dc:creator>
				<category><![CDATA[events]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[forum]]></category>
		<category><![CDATA[innovations]]></category>
		<category><![CDATA[seliger]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[startuppoint]]></category>

		<guid isPermaLink="false">http://rux.pp.ru/blog/?p=835</guid>
		<description><![CDATA[О том, зачем я туда поехал второй раз на смену &#8220;Инновации и техническое творчество&#8221;


Это тот самый лагерь под Тверю, споров о котором бесконечно много. Все споры &#8211; политические, а значит непрерывный троллинг на тему причин его создания. Свою дурную славу он приобрёл ещё очень давно, во время его основания политическим движением &#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.07%2Fvsya-pravda-o-forume-seliger-2011%2F&amp;via=ruxeg&amp;text=%D0%92%D1%81%D1%8F+%D0%BF%D1%80%D0%B0%D0%B2%D0%B4%D0%B0+%D0%BE+%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B5+%D0%A1%D0%B5%D0%BB%D0%B8%D0%B3%D0%B5%D1%80+2011&amp;related=ruxeg&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Frux.pp.ru%2Fblog%2F2011.07%2Fvsya-pravda-o-forume-seliger-2011%2F"  class="twitter-share-button">Tweet</a></div><p>О том, зачем я туда поехал второй раз на смену &#8220;Инновации и техническое творчество&#8221;</p>
<p><span id="more-835"></span><br />
<img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-logo.png" alt="" title="seliger-2011-logo" width="202" height="66" class="alignright size-full wp-image-836" /></p>
<p>Это тот самый лагерь под Тверю, споров о котором бесконечно много. Все споры &#8211; политические, а значит непрерывный троллинг на тему причин его создания. Свою <em>дурную</em> славу он приобрёл ещё очень давно, во время его основания политическим движением &#8220;НАШИ&#8221;.</p>
<h3> Что я там забыл?</h3>
<p>Действительно, что могут преподавать в лагере, который основан правительством страны? Зачем было ехать второй раз на &#8220;промывку мозгов&#8221;? </p>
<p>ЖЖ делает своё дело. Уже давно вижу, что основная масса людей которые постят туда свои сопли ни на что не способны, кроме как критиковать и ныть. Ну и любят запускать возгласы о том, что всё кошмарно, нас все имеют, у нас нет выхода кроме как повесится. Ну да, постить в ЖоЖо проще, чем выйти на улицу и что-нибудь изменить.</p>
<p><br/></p>
<p>В прошлом году я был на семинарах от <a href="http://subscribe.ru/catalog/tech.bizproject0">Игоря Хлуденцова</a> &#8211; отличный тренер и классный человек, эксперт по созданию бизнесов. Мы занимались в FutuRussia и у нас был особый режим работы, не как у всего лагеря, поэтому я представления не имел чем занимаются другие участники форума. И снова, НАШИх не было на форуме, а другие тренеры часто повторяли мол, нечего надеятся на наше государство, помощи ждать глупо &#8211; хотя бы не мешали, да и ладно! </p>
<p><strong>И поэтому</strong> я поехал второй раз на форум, ожидая новую порцию знаний и энергии</p>
<p>Кстати теперь я понимаю что на Селигер 2010 мы были на тренинге от Игоря на площади форума, а не на самом форуме.</p>
<h3> Как организация</h3>
<p>Действительно, в форум вбухали в 2 раза больше средств чем в 2010 году. Благо мне есть с чем сравнивать.</p>
<p>Если коротко &#8211; организация<strong> ужасная</strong>. Новый директор с новой администрацией сделали своё дело. </p>
<h4> Централизованное питание</h4>
<p>Ещё до форума в группе вКонтакте было обсуждение чем закончится идея кормить самостоятельно (для тех кто не знает &#8211; до этого года выдавали макароны, каши, консервы, чай, хлеб и нужно было готовить самим). Оказалось хуже, чем могли предположить. </p>
<ul>
<li>Очереди &#8211; постоянно приходилось стоять, раздающие не успевали приносить еду от поваров</li>
<li>Не расчитанно количество еды &#8211; несколько раз мы ждали больше часа пока повора приготовят макароны, гречку. Со слов раздающих: повара спят по 3 часа в сутки</li>
<li>Невкусно. Я понимаю, что тендеры просто так не выигрываются, но блин, элементарно макароны можно научится варить??</li>
<li>Мааало! Первые 3-4 дня смены мы буквально сидели голодом. Чая наливать &#8211; чуть меньше моей кружки, сок &#8211; 4.5 литра на 20 человек.</li>
</ul>
<p>Лажа.
</p>
<h4>Ураган</h4>
<p>Возможно кто-то слышал, возможно кто-то даже писал комменты &#8220;жаль, что их всех не смыло&#8221; к новости о урагане 02 июля. Не знаю, как о таком можно было не предупредить и не проинструктировать куда бежать. Ведь бежать действительно некуда &#8211; открытая местность, только образовательные шатры. В одном из таких шатров мы находились во время урогана. </p>
<p>Очень ярко запомнилось: за шатром &#8211; ветер гонит дождь паралельно земле, внутри &#8211; человек 50 и скрипящие соединения, которые вот-вот сорвёт.</p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-destroed-tent.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-destroed-tent-150x150.jpg" alt="" title="" width="150" height="150" class="alignright size-thumbnail wp-image-837" /></a></p>
<p>Секунд 30 &#8211; и 3ёх метровая громадина в высоту перелетает над головой и её вдавливает в землю, сменая толстные железные конструкции корпуса. Это действительно <strong>жутко</strong>.
<p>Паники не было ни у кого. Первая мысль &#8211; ужасно холодно, мышцы задрожали &#8211; ветер просто ледяной, как раз начинался град. Вторая мысль, навеянная другими людьми &#8211; кричать тем, кто мог оказаться под конструкциями. К счастью никого. Как позже узнал несколько ребят вытащили всё-таки сразу после &#8211; видимо их совсем чуть-чуть придавило. Потом пошёл град диаметром в сантиметр, народ закрылся под обрывками покрытия шатра&#8230;</p>
<p>В лагере же было больше повреждений &#8211; 6 человек пострадало, кому то деревьями раздавило палатку, кому-то смыло потоком воды, народ остался без вещей. Надеюсь с ними будет всё хорошо.
</p>
<p class="aligncenter">
<a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-over-seliger-2011.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-over-seliger-2011-150x108.jpg" alt="" title="Ураган под Селигером - разбитые палатки" width="150" height="108" class="alignnone size-thumbnail wp-image-838"   style="padding: 5px" /></a><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-at-seliger-2011-broken-tent.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-at-seliger-2011-broken-tent-150x112.jpg" alt="" title="Селигер 2011: разбитый шатёр" width="150" height="112" class="alignnone size-thumbnail wp-image-839"   style="padding: 5px"/></a>
</p>
<p>И да, что всё-таки вам сделали эти молодые и талантливые инноваторы, предприниматели, танцоры, художники чтоб желать их смерти?</p>
<p>В тот вечер можно дали только слипшиеся макароны. Вся одежда промокла &#8211; единственное, что сказали организаторы &#8211; посушите над костром одежду, ага. Спасибо Денису из моей двадцатки &#8211; дал тёплую куртку с длинными рукавами. </p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-at-seliger-2011-memorial.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/storm-at-seliger-2011-memorial-112x150.jpg" alt="" title="Селигер 2011: вахта памяти" width="112" height="150" class="alignright size-thumbnail wp-image-842" /></a></p>
<p>И напоследок: на Форуме есть <strong>пост №1</strong> &#8211; нечто похожее на вечный огонь. На протяжении всего форума там горит огонь и стоят двое ребят &#8211; память погибшим. Во время урагана двое ребят не сдвинулись сместа &#8211; держали вахту памяти. Сложно представить сколько в них прилетело веток, прутьев и прочих предметов. Они &#8211; <strong>молодцы</strong>.</p>
<h4>Периметр</h4>
<p><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-perimetr-150x88.jpg" alt="" title="seliger-2011-perimetr" width="150" height="88" class="alignleft size-thumbnail wp-image-841"  style="padding: 5px"/></p>
<p>Есть правила Форума. В этом году можно посещать любые лекции, даже не своего потока. Ок. Вот только по форуму ходят люди в форме  ОМОНовцев, которым запретили думать. Они &#8211; ставят дырки(3 дырки &#8211; пошел вон с форума) тем, кто нарушает правила. У большенства из них на лбу написанно, что IQ  &rarrow; 0 &#8211; они не способны понять что мы перепутали место проведения семинара (попали на мелкомягких а не циско) или что у девушки болит живот(видел лично) и она идёт за таблетками. </p>
<p>Эти люди очень напрягают, главным образом своей безмозглостью (не в обиду &#8211; большенство именно такие). Зато тех, кто кричит по ночам (после часу) они не тревожат своим присутствием. Они очень похожи на ДПСников, которые любят повышать ЧСВ и самоутверждаться таким образом.</p>
<p>Выходит бредовая ситуация &#8211; те, кто приехал учится и тщательно выбирает себе семинары, тренинги должен парится о том, что ему не дают перемещаться между образовательными шатрами. А тем, кто приехал спать на лекции можно отсыпаться &#8211; они же не нарушают регламент, ага.</p>
<h4>&#8220;НАШИ&#8221;</h4>
<p>ХЗ, не видел. Знаю, что инструктор раньше там был и те люди, что организовывали вечерние активности оттуда. Про это они не говорили, да и ладно.</p>
<h3>Образовательная программа</h3>
<p>Что-то я разошёлся в критике &#8211; действительно очень много было косяков и раздражающих факторов. Но на этом всё плохое кончается &#8211; дальше: позитив</p>
<h4>Семинары и тренинги</h4>
<p>Так получилось, что по нашей программе &#8220;Создание малой инновационной компании&#8221; было скучно и не интересно, наверное, потому что нужно быть действительно инноватором &#8211; это не ко мне). Поэтому я с удовольствием посещал тренинги и семинары направления &#8220;Создание и развитие стартапа&#8221; а так же семинары программы &#8220;Ты-предприниматель&#8221; &#8211; весьма интересно и по существу.</p>
<p>Из преподов нашего потока запомнилось 2 девушки, которые не только много знают но и классно рассказывают, умеют преподавать и работать с аудиторией: <a href="http://vkontakte.ru/id431891">Чайченко Вита</a>(рассказывала о этапах в стартапе и маркетинге) и Алёна(к сожалению не знаю фамилии, рассказывала о финансовом менеджменте).</p>
<h4>VIP семинары</h4>
<p>Приезжали такие люди как Глеб Архангельский(как ни странно о планировании времени), основатель BlackBox(о важности стартапов), Эдгард Запашный(о бизнесе развлечений), Епремян Луиза(о оптовом интернет-магазине) а также десятки других спикеров, которые рассказывали о бизнесе, жизни, об их отношении ко всему, делились мыслями и отвечали на вопросы</p>
<h4>Деловые игры</h4>
<p>Проходила уйма игр, в которых любой желающий мог принять участие. Это и железный предприниматель, инвестиционные игры.</p>
<h4>Конкурсы, инвесторы и экспертиза проектов</h4>
<p><P> В &#8220;Стартап долине&#8221; можно было проверить свою идею на прочность у экспертов, получить оценку, консультации, рекомендации по своему проекту. Также был выезной StartupPoint, который вели Виталий Акимов и Анатолий Ларин на протяжении 7 дней, где любой инноватор имел возможность научится презентовать проект, а вечером сделать презентацию (в том числе и для инвесторов).</p>
<p>Правильные ребята могли получить инвестиции в &#8220;Система-саров&#8221; и в &#8220;РВК&#8221;, а так же поучавствовать в розыгрыше грантов от &#8220;Национальных перспектив&#8221; (те самые, шатёр которых унесло во время шторма). Что касается последних &#8211; деньги давали практически всем, кто заполнил не сложную анкету, но вот эксперты начали резать сумму (за которую ещё придётся отчитываться в два этапа) гранта, которая и без того ограниченна 100к. В итоге некий человек урезал статьи расходов в смете с 80к до 17к. Не серьёзно это.. В добавок жуткие очереди &#8211; забил на это дело.</p>
<h3>Участники форума</h3>
<p>Главное в форуме &#8211; это участники. Народ классный, целеустремлённый. У большенства есть искренее желать сделать мир лучше, помочь людям. Очень приятные люди!</p>
<p>Участники открыты для общения &#8211; просто подходишь и начинаешь говорить. Бейджи с именами лишь подстёгивают в очередной раз начать разговор.</p>
<p>IT-шников было мало о.О. Основная масса &#8211; учёные!! Так не обычно!! Обожаю когда мне ломают шаблоны!</p>
<p><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176-2.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176-2-300x225.jpg" alt="" title="Селигер 2011: фото двадцатки" width="300" height="225" class="alignright size-medium wp-image-844" /></a><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176-3-bicycle.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176-3-bicycle-300x225.jpg" alt="" title="Селигер 2011: 176 двадцатка на велосипедах" width="300" height="225" class="alignright size-medium wp-image-845" /></a><a href="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176.jpg"><img src="http://rux.pp.ru/blog/wp-content/uploads/2011/07/seliger-2011-innovations-group-176-300x225.jpg" alt="" title="Селигер 2011: 176 двадцатка на главной сцене" width="300" height="225" class="alignright size-medium wp-image-846" /></a></p>
<p>Мне очень повезло с двадцаткой (номер <strong>176</strong>) &#8211; всё такие клёвые <strong>^.^</strong>, яркие, уникальные личности!! Спасибо вам за время проведённое вместе!<br />
несколько групповых фоток справа</p>
<p><br/><br />
Грустно было уезжать&#8230;
</p>
<p>Также одной из целей посетить форум было поддтянуть английский &#8211; получилось примерно по полчаса-часу каждый день общения по английскому. Спасибо китайцам, японцам, жителям индии и палестины которые слушали и понимали мой ломаный язык <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Один из них международный юрист &#8211; ответил на важный вопрос про персональные данные, связанный с проектом <a href="http://crazygeo.com/myroute" target="_blank">MyRoute</a>. У ребят в международной смене есть отличительная черта &#8211; они _все_ хотят улучшить жизнь в мире. Очень удивило. Выбирают такие направления развитии, которые помогают улучшить экологию, вылечить детей, избавится от катастров. Необычно.</p>
<h2>Итого.</h2>
<p>Накатал я много <img src='http://rux.pp.ru/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Но всего описать что происходило</p>
<p>На форум можно ехать по разным причинам: послушать семинары, поиграть в деловые игры, познакомится с людьми, загорать и плавать(на нашей смене не вышло)</p>
<p><br/></p>
<p>Для себя я подчерпнул очень много: новые знания, иные взгляды на жизнь, бизнес, личные ценности, новые способы общения, новые потребности людей. Семинары и тренинги помогли ещё больше укрепить существующие знания и расширить их. Ураган ещё раз напомнил, что я живу в реальном мире</p>
<p>В целом мне <strong>очень понравилось</strong>, не смотря на большое количество минусов</p>
<p><big><b style="color: lightblue">[like]</b></big></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(835, 'Вы уже оставили благодарность за эту статью')" 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_835_2" title="Щелкните мышью, чтобы оставить благодарность за эту статью"/></div><div id="ajax_loader_835_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.07/vsya-pravda-o-forume-seliger-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

