<?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"
	>

<channel>
	<title>Life by the park &#187; Work</title>
	<atom:link href="http://www.katkovonline.com/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.katkovonline.com</link>
	<description>Life, Work, Thoughts and Pictures</description>
	<pubDate>Tue, 22 Jun 2010 10:45:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Ботнет: «был твой — стал мой» или как ботнеты работают</title>
		<link>http://www.katkovonline.com/2009/11/botnets/</link>
		<comments>http://www.katkovonline.com/2009/11/botnets/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 08:07:58 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[architecture]]></category>

		<category><![CDATA[botnet]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[phishing]]></category>

		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1586</guid>
		<description><![CDATA[




Любопытная статья исследователей из университета &#8220;University of California Santa Barbara&#8221; PDF тут.
Исследователи перехватили контроль над ботнетом Torpig и ковыряли его 10 дней, пока владелцы не накатили обновление и не вернули управление себе. За это время стало понятно какого вида информацию он собирает, как он это делает, как защищается от перехвата управления и на какое поведение [...]]]></description>
			<content:encoded><![CDATA[<!-- <a href="http://www.thulasidas.com/adsense" title="Visit plugin homepage">Easy AdSense</a> V2.81 -->
<!-- Post[count: 2] -->
<div class="ezAdsense adsense adsense-leadin" style="float:right;margin:12px; "><script type="text/javascript"><!--
google_ad_client = "pub-8130845805731512";
/* 234x60, created 10/20/09 */
google_ad_slot = "3197235080";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p><img class="size-thumbnail wp-image-1587 alignleft" style="margin: 5px 10px;" title="botnet" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet-150x150.png" alt="" width="150" height="150" />Любопытная статья исследователей из университета &#8220;University of California Santa Barbara&#8221; <a href="http://www.cs.ucsb.edu/%7Eseclab/projects/torpig/torpig.pdf">PDF тут</a>.</p>
<p>Исследователи перехватили контроль над ботнетом Torpig и ковыряли его 10 дней, пока владелцы не накатили обновление и не вернули управление себе. За это время стало понятно какого вида информацию он собирает, как он это делает, как защищается от перехвата управления и на какое поведение юзеров он рассчитан.</p>
<p>Авторы утверждают что Torpig это одно из самых продвинутых crimeware на сегодняшний день. У него самая лучшая программная архитектура, самые остроумные способы воровства данных, самая лучшая топология управления. Также Torpig наносит самый большой финансовый ущерб.<br />
Оценка экономической эффективности $3-300 млн в год. Из упражнений спамеров, ботнеты похоже становятся серьёзным бизнесом.</p>
<p>Работает это всё следующим образом</p>
<p><span id="more-1586"></span></p>
<h4>Инсталяция</h4>
<p style="text-align: center;"><img class="size-full wp-image-1588 aligncenter" style="margin-top: 10px; margin-bottom: 10px;" title="botnet2" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet2.png" alt="" width="500" height="176" /></p>
<p>Взламываются популярные сайты и вставляется ссылка на специальный JavaScript. Браузер скачивает и выполняет вредоносный JavaScript, код в котором пытается залинковать свою dll в проводник (explorer.exe) используя известные уязвимости самого браузера, его плагинов или ActiveX объектов. Уязвимости перебираются по кругу пока одна из них не сработает. Дальше все операции выполняются как будто бы самим explorer.exe - вполне себе уважаемым процессом. Теперь загружается драйвер ядра, который подменяет оригинальный disk.sys на себя и затирает Master Boot Record (MBR)<br />
Всё, шаг №1 выполнен - руткит Mebroot поставлен. Фокус тут в том, что после перезагрузки Mebroot выполняется самым первым, раньше чем загрузится OS и остается практически невидимым для антивирусного ПО.</p>
<p>Сам по себе Mebroot ничего плохого не делает, но это только платформа для других модулей которые и делают всяческие гадости. Итак, сразу после перезагрузки, каждые два часа Mebroot соединятеся с Mebroot C&amp;C server и качает модули, например Torpig. Все соединения шифруются. Теперь и шаг №2 выполнен - Torpig установлен.</p>
<p>Torpig вставляет линкует свою dll в Service Control Manager (services.exe), проводник и 29 другиз популярных программ, например браузеры - IE, Firefox, Opera, FTP клиенты - CuteFTP, LeechFTP, e-mail клиенты - Thunderbird, Outlook, Eudora, мессенжеры - Skype, ICQ и такое прочее. Теперь Torpig может просматривать все данные которые эти программы манипулируют, выделять интересные куски, например логины с паролями. Каждые 20 минут Torpig закачивает всё что он там насобирал на сервер.</p>
<h4>Топология управления</h4>
<p>Тут интересное архитектурное решение, если адрес этого C&amp;C сервера известен и более менее постоянен, то его легко можно отфильтровать тем самым нейтрализовав утечку данных.  Исторически ботнеты это делают следующим образом - имя домена статично и не меняется, но очень часто меняются IP серверов куда замаплена DNS запись - это делает блокировку по IP не эффективной. Недостаток тут очевиден - статическое доменное имя. Mebroor и Torpig вместо этого генерируют доменные имена по специальному алгоритму, если домен заблокирован, не отвечает на запросы по ботнетовскому протоколу или не существует - генерируется следующее имя и так до победного конца.<br />
Тут надо помнить, что регистрация домена стоит денег, но владельцам ботнета нет необходимости регистрировать все имена - достаточно удерживать контроль над хотя бы одним из доменов который сгенерируют боты. В этой силе кроется и слабость. Если алгоритм известен и предсказуем, нужно зарегистрировать следующий домен которому подчинится ботнет.</p>
<p>Именно так авторы статьи и перехватили управление. На 10 дней.</p>
<p>К чести оригинальных программистов ботнета следует заметить, что эти 10 дней не прошли даром. Они поменяли алгоритм генерации доменных имен, усложнили и внесли недетерменизм. Это сразу сделало перехват управления экономически не выгодным, например новая версия Conficker генерирует 50,000 доменных имен в день, если все их регистрировать это выливается в большие расходы - $91 - $182 млн.</p>
<h4>Остроумные способы воровства данных</h4>
<p><a href="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet3.png"><img class="alignleft size-thumbnail wp-image-1590" style="margin: 5px;" title="botnet3" src="http://www.katkovonline.com/wp-content/uploads/2009/11/botnet3-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Тут старый добрый фишинг поднятый на новый уровень. В своём конфигурационном файле Torpig читает имена банковских сайтов. Если юзер посещает такой сайт, Torpig вставляет HTML форму прямо в страницу сайта. Это происходит прямо в DOM-e браузера. Определить это очень трудно - URL сайта верный, стили и картинки соблюдены, и даже SSL тут не спасёт. Все сертификаты верны. Пользователя просят якобы подтвердить свою личность введя номер карты, налоговый номер и прочее.</p>
<p>За 10 дней, Torpig наворовал 300ооо логинов с паролями, 1600 номеров кредитных карт и 8300 логинов в онлайн банкинг. Всего в забеге участвовало 180ооо инфицированных хостов.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1586" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/botnets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PuTTY: Как быстро изменить цветовую схему в существующих сессиях</title>
		<link>http://www.katkovonline.com/2009/11/putty/</link>
		<comments>http://www.katkovonline.com/2009/11/putty/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 22:44:37 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[color schema]]></category>

		<category><![CDATA[colors]]></category>

		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1583</guid>
		<description><![CDATA[Как накатить цветовую схему на уже существующие сесии. Сделал для себя .reg файл. Его надо открыть в UTF-8 редакторе, изменить
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\%session-name%] на имя вашей сесии и импортировать в реестр.
Изменятся только цветовые настройки, всё остальное останется как есть.
30 секунд и весь мой десяток сессий блистает новыми цветами.

Саму цетовую схему взял тут. Недостаток оригинального файла - это полный [...]]]></description>
			<content:encoded><![CDATA[<p>Как накатить цветовую схему на уже существующие сесии. Сделал для себя <a href="http://www.katkovonline.com/wp-content/uploads/2009/11/pytty-template.reg">.reg файл</a>. Его надо открыть в UTF-8 редакторе, изменить<br />
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\<strong>%session-name%</strong>] на имя вашей сесии и импортировать в реестр.<br />
Изменятся только цветовые настройки, всё остальное останется как есть.<br />
30 секунд и весь мой десяток сессий блистает новыми цветами.</p>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2009/11/putty-terminals.png" alt="image" /></p>
<p>Саму цетовую схему взял <a href="http://www.igvita.com/2008/04/14/custom-putty-color-themes/">тут</a>. Недостаток оригинального файла - это полный export всего подряд, а нужно всего только цвета поменять.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1583" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/putty/feed/</wfw:commentRss>
<enclosure url="http://www.katkovonline.com/wp-content/uploads/2009/11/pytty-template.reg" length="4714" type="audio/mpeg" />
		</item>
		<item>
		<title>Latency - это наше всё</title>
		<link>http://www.katkovonline.com/2009/11/latency/</link>
		<comments>http://www.katkovonline.com/2009/11/latency/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 21:16:05 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[high load]]></category>

		<category><![CDATA[latency]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[presentation]]></category>

		<category><![CDATA[revenue]]></category>

		<category><![CDATA[Steve Souder]]></category>

		<category><![CDATA[Velocity 2009]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1564</guid>
		<description><![CDATA[Замечательная презентация &#8220;Высокие нагрузки: 14 правил для ускорения загрузки страниц&#8221; (англ.)
Автор - Steve Souder, тот самый который написал &#8220;High Performance Web Sites&#8221; и &#8220;Even Faster Web Sites&#8221;
 
Объясняет, как latency коррелирует с прибылью, почему сайты вообще медленно грузятся в браузере и рассказывает как это можно исправить. Утверждает он следующие интересные вещи:
Влияние latency на доход
Google: +500 [...]]]></description>
			<content:encoded><![CDATA[<p>Замечательная презентация &#8220;<a href="http://stevesouders.com/docs/velocity-20090622.ppt">Высокие нагрузки: 14 правил для ускорения загрузки страниц</a>&#8221; (англ.)<br />
Автор - <a href="http://stevesouders.com/" target="_blank">Steve Souder</a>, тот самый который написал &#8220;High Performance Web Sites&#8221; и &#8220;Even Faster Web Sites&#8221;</p>
<p><a href="http://www.amazon.com/gp/product/0596529309?ie=UTF8&amp;tag=stevsoud-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596529309" target="_blank"><img class="alignnone size-full wp-image-1565" title="high-performance-web-sites" src="http://www.katkovonline.com/wp-content/uploads/2009/11/high-performance-web-sites.jpg" alt="" width="95" height="125" /></a> <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&amp;tag=stevsoud-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596522304" target="_blank"><img class="alignnone size-medium wp-image-1566" title="even-faster-web-sites" src="http://www.katkovonline.com/wp-content/uploads/2009/11/even-faster-web-sites.jpg" alt="" width="95" height="125" /></a></p>
<p>Объясняет, как latency коррелирует с прибылью, почему сайты вообще медленно грузятся в браузере и рассказывает как это можно исправить. Утверждает он следующие интересные вещи:</p>
<h4><span id="more-1564"></span>Влияние latency на доход</h4>
<p>Google: +500 ms  -20% traffic<br />
Yahoo: +400 ms  -5-9% full-page traffic<br />
Amazon: +100 ms  -1% sales</p>
<p>На конференции <a href="http://en.oreilly.com/velocity2009">Velocity 2009</a> докладчикам от  AOL, Google, Microsoft и Shopzilla <a href="http://radar.oreilly.com/2009/07/velocity-making-your-site-fast.html">задали вопрос </a>&#8220;почему это важно - уделять внимание производительности?&#8221;</p>
<ul>
<li>Microsof (Bing): увеличение времени отклика на 2 секунды это -1,8% запрос/пользователь и -4,3% дохода с пользователя</li>
<li>Google: увеличение времени отклика на 400 ms это -0,59% запрос/пользователь</li>
<li>AOL: 25% падение количества page hits при удвоении времени отклика</li>
<li>Shopzilla: Ускорение с 7секунд до 2х дало +25% page hits, +7-12%  дохода и 50% экономия на железе</li>
</ul>
<h4>Почему сайты медленно грузятся?</h4>
<p>Согласно Souder-а причины могут быть следующие:</p>
<ul>
<li> Тормозит back-end</li>
<li>Тормозит front-end</li>
<li>Тормозит интернет</li>
</ul>
<p>Steve говорит, что 80-90% всего времени тратится на front-end и соответсвенно оптимизировать надо как раз эту часть в первую очередь. И дешевле всего и эффект виднее.</p>
<h4>Как исправить</h4>
<p>Вот его 14 правил:</p>
<ol>
<li>Делать меньше HTTP запросов</li>
<li>Использовать <a href="http://ru.wikipedia.org/wiki/Content_Delivery_Network">CDN</a></li>
<li>Не забыть про <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP">Expires</a></li>
<li>Использовать Gzip компрессию</li>
<li>Все стили на верх страницы</li>
<li>Все скрипты - вниз</li>
<li>Избегать CSS expressions</li>
<li>Выносить JS и CSS во внешние файлы</li>
<li>Уменьшать DNS lookups</li>
<li>Сжимать JS</li>
<li>Избегать redirect-ов</li>
<li>Выкинуть повторяющийся JS</li>
<li>Не забыть про <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP">ETags</a></li>
<li>Сделать AJAX контент cacheable</li>
</ol>
<p>Сама презентация поясняет основные приёмы ускорения загрузки страниц:</p>
<ul>
<li>сначала грузим только то, что надо для отображения станицы, затем всё остальное</li>
<li>6 способов загрузить JS и чем они отличаются<br />
XHR Eval, XHR Injection, JS in Iframe, JS DOM Element, JS Defer, document.write Script Tag</li>
<li>как прятать от пользователя что мы ещё не все загрузили (индикатор загрузки в браузерах)</li>
<li>несколько неблокирующих способов грузить JS</li>
<li>способы вызова/инициализации JS со страницы, он называет это &#8220;coupling techniques&#8221;<br />
hardcoded callback, window onload, timer, degrading script tags, script onload</li>
<li>какие домены лишние, а какие наоборот надо добавить в round-robin DNS</li>
<li>почему для статики HTTP 1.0 лучше чем HTTP 1.1</li>
<li>фокусы с flush() на разных языках</li>
<li>эффективные и не эффективные CSS</li>
</ul>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1564" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/latency/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ПО которое исправляет ошибки в себе самом</title>
		<link>http://www.katkovonline.com/2009/11/software-that-fixes-itself/</link>
		<comments>http://www.katkovonline.com/2009/11/software-that-fixes-itself/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 05:32:18 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[MIT]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[ошибки]]></category>

		<category><![CDATA[уязвимости]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1561</guid>
		<description><![CDATA[Группа исследователей из MIT представили программное обеспечение, которое способно динамически исправлять ошибки и уязвимости. Исправлять способно в любом коде, не обязательно в себе самом. Исходники не нужны. Только под Windows.
Оригинальный PDF c публикацией &#8220;Automatically Patching Errors in Deployed Software&#8221; &#8220;Automatically Patching Errors in Deployed Software&#8221; вот здесь.
Область практической применимости очевидна и огромна. &#8220;Deployed Software&#8221; это [...]]]></description>
			<content:encoded><![CDATA[<p>Группа исследователей из MIT представили программное обеспечение, которое способно динамически исправлять ошибки и уязвимости. Исправлять способно в любом коде, не обязательно в себе самом. Исходники не нужны. Только под Windows.<br />
<span id="more-1561"></span>Оригинальный PDF c публикацией &#8220;Automatically Patching Errors in Deployed Software&#8221; <a href="http://people.csail.mit.edu/rinard/paper/sosp09.pdf">&#8220;Automatically Patching Errors in Deployed Software&#8221; вот здесь</a>.</p>
<p>Область практической применимости очевидна и огромна. &#8220;Deployed Software&#8221; это коммерческий софт. Утверждается, что лучше всего работает в кластерах, уязвимости обнаруженные на одном из хостов, автоматически накатываются на все остальные.</p>
<p>Идея такова:<br />
это самое &#8220;Deployed Software&#8221; постоянно мониторится на подозрительную активность, например переполнение буферов, подозрительные передачи управления и прочее некорректное поведение. Это само по себе не новость, обычно после обнаружения такой активности приложение прерывается, при повторении - блокируется.</p>
<p>Тут на самом деле две проблемы:</p>
<ul>
<li> Если система high availability - ни о каком прерывании или блокировках не может быть и речи.</li>
<li>Скорость латания дыр в коммерческом софте не велика - буквально через месяц программисты выпускают патч.</li>
</ul>
<p>Новость тут в том, что ClearView, так называется система, обещает чинить баги и устранять уязвимости в реальном времени без рестартов и человеческого вмешательства.</p>
<p>ClearView сначала собирает статистику поведения во время нормального выполнения, они называют это &#8220;инвариантами выполнения&#8221;, затем отслеживает активность, при обнаружении подозрений автоматически патчит бинарный код пытаясь восстановить &#8220;инварианты выполнения&#8221;. Умеет сама тестировать различные варианты исправлений, накатывать и откатывать заплатки. Т.е. фактически пытаться держать систему в устойчивом состоянии, фильтруя input или блокируя и исправляя код.</p>
<p>P.S.<br />
Ещё два шага и программы будут писать сами себя.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1561" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/11/software-that-fixes-itself/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Доступ к like/unlike статистике Google Reader для произвольного RSS</title>
		<link>http://www.katkovonline.com/2009/10/exporting-likes-from-google-reader/</link>
		<comments>http://www.katkovonline.com/2009/10/exporting-likes-from-google-reader/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 04:44:24 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[crowd-sourcing]]></category>

		<category><![CDATA[google reader]]></category>

		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1540</guid>
		<description><![CDATA[Обнаружил интересный hack (?) который даёт ответы на вопросы:
Как автоматически выделять самые интересные статьи из RSS потоков?
Как понять какие статьи пользуются популярностью а какие нет?
Как получить feedback от пользователей которые читают сайт через RSS?
В июле этого года Google запустил like/unlike в Google Reader. Человек читает статью - она ему интересна - человек отмечает ее как [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1574 alignleft" style="margin: 5px;" title="rss" src="http://www.katkovonline.com/wp-content/uploads/2009/11/rss.jpg" alt="" width="80" height="80" />Обнаружил интересный hack (?) который даёт ответы на вопросы:<br />
Как автоматически выделять самые интересные статьи из RSS потоков?<br />
Как понять какие статьи пользуются популярностью а какие нет?<br />
Как получить feedback от пользователей которые читают сайт через RSS?</p>
<p>В июле этого года Google запустил like/unlike в Google Reader. Человек читает статью - она ему интересна - человек отмечает ее как &#8220;понравилось&#8221;.</p>
<p><img class="alignnone size-full wp-image-1541" title="likes" src="http://www.katkovonline.com/wp-content/uploads/2009/10/likes.png" alt="" width="500" height="111" /></p>
<p>Всем читателям этого RSS потока видно, кому понравилась эта статья и сколько их. Задумывалось, что счастливые юзера будут кликать на имена, проверять что там эти люди ещё расшарили интересного и находить себе компанию по интересам.</p>
<p>Это полезно, но не очень интересно, намного интереснее применить эту собранную гуглом статистику в своих целях. Например можно фильтровать статьи в RSS потоках по количеству проголосовавших и читать только самое интересное. Можно смотреть на свой собственный RSS и видеть что читателям интересно, а что нет. А можно смотреть на RSS конкурентов и снова видеть что народу нравится.</p>
<p>Этакий digg или stumbleupon в миниатюре и совершенно бесплатно.<br />
Ну а теперь как это сделать</p>
<p><span id="more-1540"></span>Здесь и далее я буду использовать термин RSS как собирательный образ для всех синдикативных протоколов.</p>
<p>Широко известный факт, что Google Reader отдает нормализованные, агрегированные им RSS потоки. Надо только сформировать правильно URL:</p>
<p>http://www.google.com/reader/public/atom/feed/&lt;url encoded feed URL&gt;</p>
<p>Например для http://www.engadget.com/rss.xml это выглядит как</p>
<p>http://www.google.com/reader/public/atom/feed/http%3A%2F%2Fwww.engadget.com%2Frss.xml</p>
<p>Заглянув в source агрегированного Google Reader RSS/Atom потока видим такие теги</p>
<pre><span style="color: #cc00cc;">&lt;gr:likingUser&gt;00319180390340199299&lt;/gr:likingUser&gt;
&lt;gr:likingUser&gt;09803098588727110477&lt;/gr:likingUser&gt;
&lt;gr:likingUser&gt;09419458535147286956&lt;/gr:likingUser&gt;
&lt;gr:likingUser&gt;01041706060102840430&lt;/gr:likingUser&gt;
&lt;gr:likingUser&gt;16152963933826181588&lt;/gr:likingUser&gt;
&lt;gr:likingUser&gt;02215958792577066354&lt;/gr:likingUser&gt;</span></pre>
<p>Это ID юзеров которые отметили статью как &#8220;понравилось&#8221;. Можно даже воспользоваться <a href="http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q=http%3A%2F%2Fwww.google.com%2Freader%2Fshared%2F02215958792577066354">Social Graph API</a> и посмотреть кто же эти люди такие. Или можно посмотреть что эти люди <a href="http://www.google.com/reader/shared/02215958792577066354">расшарили</a>. Что бы понять как это работает смотрите src линков.</p>
<p>Так как все эти<span><span style="color: #cc00cc;"> &lt;gr:likingUser&gt; </span></span>теги видны всем без авторизации то можно автоматически отфильтровывать статьи с низким порогом &#8220;понравилось&#8221;. Можно вычислять точно количество &#8220;понравилось&#8221; и делать далеко идущие выводы.</p>
<p>Прямо в RSS потоке Google Reader отдает не более 100 user ID. Но если нужно знать точное число можно сконструировать URL вида</p>
<p>http://www.google.com/reader/api/0/item/likers?i=&lt;gr:original-id&gt;&amp;output=&lt;json|xml&gt;</p>
<p>и пересчитать их всех. Например: <a href="http://www.google.com/reader/api/0/item/likers?i=tag:google.com,2005:reader/item/1dbdf283de313617&amp;output=json">JSON</a>, <a href="http://www.google.com/reader/api/0/item/likers?i=tag:google.com,2005:reader/item/1dbdf283de313617&amp;output=xml">XML</a></p>
<p>Хорошо работает для популярных, англоязычных RSS. Чем меньше аудитория тем разумеется хуже работает crowd-sourcing.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1540" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/10/exporting-likes-from-google-reader/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Should I be worried about scaling?</title>
		<link>http://www.katkovonline.com/2009/08/work-should-i-be-worried-about-scaling/</link>
		<comments>http://www.katkovonline.com/2009/08/work-should-i-be-worried-about-scaling/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 05:54:12 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[scalability]]></category>

		<category><![CDATA[scalable]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1482</guid>
		<description><![CDATA[Замечательный сайт дающий ответ на вопрос &#8220;Should I be worried about scaling?&#8221; -
 http://shouldibeworriedaboutscaling.info
 ]]></description>
			<content:encoded><![CDATA[<p>Замечательный сайт дающий ответ на вопрос &#8220;Should I be worried about scaling?&#8221; -<br />
<a href="http://shouldibeworriedaboutscaling.info"> http://shouldibeworriedaboutscaling.info</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1482" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/08/work-should-i-be-worried-about-scaling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Microsoft Velocity</title>
		<link>http://www.katkovonline.com/2009/08/microsoft-velocity/</link>
		<comments>http://www.katkovonline.com/2009/08/microsoft-velocity/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 05:55:56 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[cache]]></category>

		<category><![CDATA[distributed cache]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1469</guid>
		<description><![CDATA[Если кому было мало distributed cache-й,  Microsoft строит свой - Velocity.
Релиза ещё нет, есть только несколько Community Technology Preview, но работы ведутся ударными темпами. У проекта есть
блог http://blogs.msdn.com/velocity и
форум http://social.msdn.microsoft.com/forums/en-US/velocity/threads
Трудно сказать зачем они это затеяли, может потому, что они всегда так делают, но вероятнее всего Microsoft продолжает строить свой software stack для Azure. Velocity [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1544 alignleft" style="margin: 10px;" title="velocity" src="http://www.katkovonline.com/wp-content/uploads/2009/10/velocity.jpg" alt="" width="244" height="166" />Если кому было мало distributed cache-й,  Microsoft строит свой - Velocity.<br />
Релиза ещё нет, есть только несколько Community Technology Preview, но работы ведутся ударными темпами. У проекта есть<br />
блог <a href="http://blogs.msdn.com/velocity">http://blogs.msdn.com/velocity</a> и<br />
форум <a href="http://social.msdn.microsoft.com/forums/en-US/velocity/threads/">http://social.msdn.microsoft.com/forums/en-US/velocity/threads</a></p>
<p>Трудно сказать зачем они это затеяли, может потому, что они <a href="http://en.wikipedia.org/wiki/Not_Invented_Here">всегда так делают</a>, но вероятнее всего Microsoft продолжает строить свой software stack для Azure. Velocity = memcached, Dryad = Hadoop + Hive/Pig и т.д.</p>
<p>Но интересно не это, интересна архитектура проекта - наворотили знатно. Velocity умеет всё, умеет как memcached быть простым key-value со стандартным алгоритмом consistent caching и LRU вытеснением - так MS позиционирует Velocity для Web. А может быть сложным кешем с репликацией и гарантированной availability, со сложным routing, с transparent in-process cache с автоматическим обновлением локальных даных, умеет уведомления о изменеии состояния данных, умеет тэги и т.д. такое Velocity MS готовит для enterprise.</p>
<p>В общем, всё о чём можно только мечтать - Velocity умеет. На довесок - REST API, несколько видов упраления памятью, несколько видов блокировок (sic!), кворумы в репликации, failover, горячее добавлеие новых узлов.</p>
<p>Я просто терясь в догадках, зачем кешу всё это. Тут не хватает только disk persistence что бы построить non-sql DB который заткнёт за пояс всё что есть на сегодняшний день.</p>
<p>Замечательная PowerPoint презентация об архитектуре проекта - <a href="http://www.katkovonline.com/wp-content/uploads/2009/08/ms-velocity.pptx"> Project &#8220;Velocity&#8221;: Under the hood</a><br />
И статья в MSDN <a href="http://msdn.microsoft.com/en-ca/library/cc645013.aspx">http://msdn.microsoft.com/en-ca/library/cc645013.aspx</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1469" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/08/microsoft-velocity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Скользящее среднее</title>
		<link>http://www.katkovonline.com/2009/07/moving-average/</link>
		<comments>http://www.katkovonline.com/2009/07/moving-average/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 13:36:04 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[monitoring]]></category>

		<category><![CDATA[moving average]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1438</guid>
		<description><![CDATA[Правильный real-time мониторинг системы, дело не такое простое, как может показаться на первый взгляд.
Самый распространенный пример - измерение времени отклика сервера на запрос. Допустим у нас всё есть:
- сервер для каждого запроса вычисляет execution time, складывает в счётчик
- сервер умеет отдавать значение счётчика по внешнему запросу
- есть monitoring сервер который собирает значения каждый poll interval, [...]]]></description>
			<content:encoded><![CDATA[<p>Правильный real-time мониторинг системы, дело не такое простое, как может показаться на первый взгляд.</p>
<p>Самый распространенный пример - измерение времени отклика сервера на запрос. Допустим у нас всё есть:<br />
- сервер для каждого запроса вычисляет execution time, складывает в счётчик<br />
- сервер умеет отдавать значение счётчика по внешнему запросу<br />
- есть monitoring сервер который собирает значения каждый poll interval, хранит, агрегирует и рисует графики</p>
<p>Решение в лоб - измерять мгновенное значение счётчика - особого смысла не имеет, при poll interval в одну или пять минут, мы получим мгновенное значение производительности системы измеренное по последнему запросу. Если все 5 минут до этого исполнялись запросы по 2секунды или больше, а последний был легкий на 20ms мы увидим только 20ms. Или наоборот.</p>
<p>Стандартное решение - скользящее среднее по последним N запросам. Решение работает замечательно, пока N запросов выполняются за время меньшее poll interval. Если нагрузка падает, получается вот такое вот:</p>
<p><img class="alignnone size-full wp-image-1441" title="Moving average before" src="http://www.katkovonline.com/wp-content/uploads/2009/07/graph_image1.png" alt="" width="500" height="197" /></p>
<p>Между полночью и 4-мя часами утра либо не было запросов вовсе, либо было меньше N. Значение скользящего среднего не менялось и создаётся обманчивое впечатление, что сервер обрабатывал все запросы за 6ms.</p>
<p>Ниже, тот же счётчик, только с другого сервера где скользящее среднее было модифицировано.</p>
<p><img class="alignnone size-full wp-image-1442" title="Moving average afrer" src="http://www.katkovonline.com/wp-content/uploads/2009/07/graph_image21.png" alt="" width="500" height="197" /></p>
<p>Картина видна гораздо лучше. Видно где были запросы, а где не было.</p>
<p>Модификация довольно простая. Кроме параметра N - размера окна для скользящего среднего. Вводится ещё один параметр - T, время забывания (expiration time), все значения в окне, старше T не учитываются при подсчёте среднего.</p>
<p>Выбор T (ms) для данного значения poll interval (ms) - это другая интересная проблема.<br />
Если T &lt;&lt; poll interval, (много меньше) будут потерянные значения<br />
Если T &gt;&gt; poll interval, (много больше) будет график #1<br />
В первом приближении, можно принять T = 2 * poll interval</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1438" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/moving-average/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Сказка про ID generation</title>
		<link>http://www.katkovonline.com/2009/07/id-generation/</link>
		<comments>http://www.katkovonline.com/2009/07/id-generation/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 22:44:24 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[generation]]></category>

		<category><![CDATA[id generation schema]]></category>

		<category><![CDATA[генерация id]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1425</guid>
		<description><![CDATA[
Жили были item-ы и было у них sequential numeric id.
То, что оно sequential - это тяжелое наследие царского режима, потом пришли большевики, но ничего сделать было уже нельзя.
#0
И вот, при Николае-батюшке, было это autoincrement поле в MS SQL, item-ы получали id при вставке и никто горя не знал. Очевидно для того, что бы узнать это [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1551" style="margin: 5px 10px;" title="split-flap-flip-counter-calendar-clock" src="http://www.katkovonline.com/wp-content/uploads/2009/10/split-flap-flip-counter-calendar-clock.jpg" alt="" width="110" height="75" /></p>
<p>Жили были item-ы и было у них sequential numeric id.</p>
<p>То, что оно sequential - это тяжелое наследие царского режима, потом пришли большевики, но ничего сделать было уже нельзя.</p>
<p>#0</p>
<p style="padding-left: 30px;">И вот, при Николае-батюшке, было это autoincrement поле в MS SQL, item-ы получали id при вставке и никто горя не знал. Очевидно для того, что бы узнать это id на клиенте надо вставлять item-ы один за другим.</p>
<p>#1</p>
<p style="padding-left: 30px;">Нагрузка возросла - власть поменялась, хостов баз данных стало больше одного, генерацию вынесли в отдельную таблицу. Простой инкремент. Продолжали вставлять один за другим.</p>
<p>#2</p>
<p style="padding-left: 30px;">Нагрузка возросла - сделали вставку item-ов сразу пачками, а генерацию соответсвенно тоже поменяли, что бы генерировать сразу на всю пачку за один запрос. Стандартная hi-lo процедура (см ниже). Скажем, если вставляется 10 записей - один запрос на генерацию 10 ids.</p>
<p>#3</p>
<p style="padding-left: 30px;">Нагрузка возросла - сделали пре-генерацию id наперёд блоками и кеширование этого блока на клиенте. Скажем, если вставляется 10 записей - один запрос на генерацию 1000 ids. 10 используются сразу, а 990 ждут следующего раза.</p>
<p>При порядка 700 витках (threads), которые всё время пишут в базу, эффект поразительный.</p>
<p><img class="size-full wp-image-1435 alignnone" title="Average wait time" src="http://www.katkovonline.com/wp-content/uploads/2009/07/graph_image3.png" alt="Average wait time" width="500" height="174" /></p>
<p>А вот если бы сесть и подумать, можно было бы сразу с последнего пункта начать&#8230;</p>
<p>hi-lo cхема выглядит так:</p>
<p><span id="more-1425"></span></p>
<p>Таблица в БД</p>
<pre class="brush: sql">
CREATE TABLE IDTable(
TableName varchar(255) NOT NULL,
NextID bigint NOT NULL,
CONSTRAINT IDTable1_PK PRIMARY KEY CLUSTERED( TableName ASC)
</pre>
<p>SQL запрос на генерацию примерно так</p>
<pre class="brush: sql">
DECLARE @LocalTempTable  table(id int)
DECLARE @NEXTID INT
DECLARE @CNT INT

BEGIN TRAN
SELECT @NEXTID = (SELECT NextID FROM IDTable WITH (UPDLOCK) WHERE TableName = @@TABLENAME)
SET @CNT = 0
WHILE(@CNT &lt; @@COUNT)
BEGIN
INSERT INTO @LocalTempTable(id) VALUES(@NEXTID + @CNT)
SET @CNT = @CNT + 1
END
UPDATE IDTable WITH (UPDLOCK) SET NextID = @NEXTID+@CNT WHERE TableName = @@TABLENAME
COMMIT
SELECT id FROM @LocalTempTable
</pre>
<p>Где TABLENAME это имя последовательности, а COUNT это размер пачки.</p>
<p>Самый интересный фокус тут это <strong>SELECT &#8230; WITH (UPDLOCK)</strong>. Клиенты делают запросы указывая размер пачки, а потом либо тратят ее всё как в случае #2 либо кешируют часть про запас, как в случае #3.</p>
<p>Некоторые размер пачки хранят прямо в таблице, отсюда и название. У этого подхода есть одно достоинство - можно централизованно управлять сколько ID создать. Но это же одновременно и недостаток - часто нужно здесь создать1000 штук, а тут только 10.</p>
<p>Вот тут есть не плохой <a title="обзор доступных способов получения ID" href="http://www.scalabium.com/articles/id_generation.htm">обзор доступных способов получения ID</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1425" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/id-generation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: про availability и двух фазный коммит</title>
		<link>http://www.katkovonline.com/2009/07/availability-two-phases-commit/</link>
		<comments>http://www.katkovonline.com/2009/07/availability-two-phases-commit/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:43:02 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[availability]]></category>

		<category><![CDATA[CAP Theorem]]></category>

		<category><![CDATA[consistency]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[partition tolerance]]></category>

		<category><![CDATA[Werner Vogels]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1412</guid>
		<description><![CDATA[В догонку к CAP Theorem и availability
Обычные распределённые системы, RDBMS и J2EE контейнеры, целостность ставят во главу угла. Все эти фокусы с блокировками и распределенными транзакциями даются дорогой ценой. Эта цену большие распределенные системы платить не готовы, им нужно прежде всего availability. Поэтому Google, Amazon и некоторые другие крупные компании  построили свои собственные инфраструктуры.
Werner [...]]]></description>
			<content:encoded><![CDATA[<p>В догонку к <a title="CAP Theorem и велосипеды" href="http://www.katkovonline.com/2009/07/work-cap-theorem">CAP Theorem и availability</a></p>
<p>Обычные распределённые системы, RDBMS и J2EE контейнеры, целостность ставят во главу угла. Все эти фокусы с блокировками и распределенными транзакциями даются дорогой ценой. Эта цену большие распределенные системы платить не готовы, им нужно прежде всего availability. Поэтому Google, Amazon и некоторые другие крупные компании  построили свои собственные инфраструктуры.</p>
<p>Werner Vogels, Amazon VP &amp; CTO, <a title="почему двух-фазный коммит это плохой выбор если нужно строить scalable систему" href="http://www.infoq.com/presentations/availability-consistency">популярно объясняет</a> почему двух фазный коммит это плохой выбор если нужно строить scalable систему. Он ещё, ведет блог <a title="Werner Vogels' weblog on building scalable and robust distributed systems." href="http://www.allthingsdistributed.com/" target="_blank">All things Distribtued</a> для тех кому интересно.</p>
<p>Для того что бы система расширялась нужны асинхронные, stateless сервисы, а целостность приходится компенсировать сложными согласованиями-компенсациями в случае ошибок. Ну и конечно, модель данных оказывает существенное влияние на производительность. Чем проще - тем быстрее. Тут можно вспомнить про <a title="как работает Amazon’s Dynamo в частности и о сложностях дизайна Key-Value distributed storage вообще" href="http://www.katkovonline.com/2009/06/work-non-sql-db/">Dynamo от Amazon</a> и MapReduce/BigTables от Google.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1412" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/availability-two-phases-commit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: CAP Theorem и велосипеды</title>
		<link>http://www.katkovonline.com/2009/07/work-cap-theorem/</link>
		<comments>http://www.katkovonline.com/2009/07/work-cap-theorem/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 15:17:41 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[availability]]></category>

		<category><![CDATA[CAP Theorem]]></category>

		<category><![CDATA[consistency]]></category>

		<category><![CDATA[partition tolerance]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1410</guid>
		<description><![CDATA[Полезная, для построителей распределенных систем CAP Theorem-а. Теорема о целостности, доступности и терпимости к разделению. Позволяет избежать изобретения велосипедов с квадратными колёсами.
CAP Theorem-а утверждает, что система может удовлетворять не более двум требованиям из трех: целостность (consistency), доступность (availability) и терпимость к разделению (partition tolerance).

Где:
целостность (consistency) - гарантирует, что все клиенты всегда прочтут одинаковые данные, в [...]]]></description>
			<content:encoded><![CDATA[<p>Полезная, для построителей распределенных систем CAP Theorem-а. Теорема о целостности, доступности и терпимости к разделению. Позволяет избежать изобретения велосипедов с квадратными колёсами.</p>
<p>CAP Theorem-а утверждает, что система может удовлетворять не более двум требованиям из трех: целостность (<em>consistency)</em>, доступность (<em>availability</em>) и терпимость к разделению (<em>partition tolerance</em>).</p>
<div style="text-align: center;"><a href="http://www.katkovonline.com/wp-content/uploads/2009/07/cap.png"><img class="aligncenter size-full wp-image-1411" title="cap theorem" src="http://www.katkovonline.com/wp-content/uploads/2009/07/cap.png" alt="" width="244" height="249" /></a></div>
<p>Где:<br />
целостность (<em>consistency) - </em>гарантирует, что все клиенты всегда прочтут одинаковые данные, в не зависимости к какому узлу в кластере они обратились. Операция записи атомарная для всех узлов.</p>
<p><em></em></p>
<p>доступность (<em>availability</em>) - гарантирует, что в в  случае любого (разумного) отказа, клиенты все равно смогут получить доступ к копии их данных.</p>
<p>терпимость к разделению (<em>partition tolerance</em>) - гарантирует, что система остается работоспособной даже если авария сети приведет к образованию двух или более под-кластеров.</p>
<p>У этой теореме существует <a title="Формальное доказательство теоремы" href="http://citeseer.ist.psu.edu/544596.html">формальное доказательство</a>. Работа 2002 года, ссылается на публикации конца 80-х начала 90-х.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1410" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/work-cap-theorem/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Commodity hardware</title>
		<link>http://www.katkovonline.com/2009/07/work-commodity-hardware/</link>
		<comments>http://www.katkovonline.com/2009/07/work-commodity-hardware/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 03:12:54 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[Yahoo]]></category>

		<category><![CDATA[сommodity hardware]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1387</guid>
		<description><![CDATA[В последнее время, кого не послушай, все свои компьютерные кластеры строят на сommodity hardware. Кто ещё не построил - тот собирается. Вот что Yahoo!, примерно, понимает под этим термином:
Processor - 2 quad-core Intel Xeon 2.5GHz CPUs
Memory - 8 GB ECC RAM
Storage - 4&#215;1 TB SATA disks
Network - Gigabit Ethernet
Это конфигурация Hadoop-узла в 4000-ном кластере на [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время, кого не послушай, все свои компьютерные кластеры строят на сommodity hardware. Кто ещё не построил - тот собирается. Вот что Yahoo!, примерно, <a href="http://developer.yahoo.net/blogs/hadoop/2008/09/scaling_hadoop_to_4000_nodes_a.html">понимает</a> под этим термином:</p>
<p>Processor - 2 quad-core Intel Xeon 2.5GHz CPUs<br />
Memory - 8 GB ECC RAM<br />
Storage - 4&#215;1 TB SATA disks<br />
Network - Gigabit Ethernet</p>
<p>Это конфигурация Hadoop-узла в 4000-ном кластере на сентябрь 2008 года. Характеристики этого самого &#8220;сommodity hardware&#8221; конечно меняются со временем, но картина становится более-менее понятной.</p>
<p>Что бы примерно прикинуть сколько это стоит - вот голые факты - мы в Viigo за один такой хост платим $1132 USD в месяц. Fully managed hosting @ RackSpace. Free incoming traffic. Годовой контракт. Конечно, если бы мы эти хосты там арендовали сотнями, то цена пошла бы вниз.</p>
<p>“Commodity” не означает &#8220;самое дешевое&#8221;, дешевые хосты зачастую собраны из самых дешевых комплектующих, которые выходят из строя чаще чем более дорогие (но всё равно &#8220;сommodity&#8221; класса) детали. Если кластер состоит из десятков, сотен или тысяч машин, дешевые комплектующие выходят боком. Более частые поломки - выше затраты на обслуживание. С другой стороны, машины класса &#8220;база данных&#8221;, то же не самый лучший выбор - отношение цена/производительность у них так себе. И даже тот факт, что их надо будет меньше что бы построить кластер с заданной производительностью, компенсируется тем, что выход из строя одного такого хоста окажет больший эффект на всю систему в целом.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1387" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/work-commodity-hardware/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Старые перцы vs. молодые герои</title>
		<link>http://www.katkovonline.com/2009/07/gray-beards-vs-young-turks/</link>
		<comments>http://www.katkovonline.com/2009/07/gray-beards-vs-young-turks/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 22:13:07 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[non sql]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1383</guid>
		<description><![CDATA[В январе  2007, двое убеленных сединами, RDBMS специалиста, David J. DeWitt и Michael Stonebraker опубликовали страшную вещь. А они действительно убеленные сединами,  и действительно специалисты, так вот, они покусились на святое, на MapReduce - см. “MapReduce: A major step backwards” В статье они критикуют MapReduce вообще и называют его шагом назад по сравнению с [...]]]></description>
			<content:encoded><![CDATA[<p>В январе  2007, двое убеленных сединами, RDBMS специалиста, <a href="http://pages.cs.wisc.edu/~dewitt/">David J. DeWitt</a> и <a href="http://en.wikipedia.org/wiki/Michael_Stonebraker">Michael Stonebraker</a> опубликовали страшную вещь. А они действительно убеленные сединами,  и действительно специалисты, так вот, они покусились на святое, на MapReduce - см. <a href="http://www.databasecolumn.com/2008/01/mapreduce-a-major-step-back.html">“MapReduce: A major step backwards”</a> В статье они критикуют MapReduce вообще и называют его шагом назад по сравнению с RDBMS. Само собой, в коментах молодые герои их смешали с говном. Впочем были и аргументированные ответы - см. <a href="http://scienceblogs.com/goodmath/2008/01/databases_are_hammers_mapreduc.php">“Databases are hammers; MapReduce is a screwdriver”</a> И тут Девиду и Майклу показалось мало, они публикуют статью-ответ на всю критику сразу см. <a href="http://www.databasecolumn.com/2008/01/mapreduce-continued.html">“MapReduce II”</a>. Все эти статьи очень интересное чтиво, включая коментарии.</p>
<p>Рекомендую.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1383" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/07/gray-beards-vs-young-turks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Michael Jackson strikes back</title>
		<link>http://www.katkovonline.com/2009/06/michael-jackson-strikes-back/</link>
		<comments>http://www.katkovonline.com/2009/06/michael-jackson-strikes-back/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 01:10:27 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[funny]]></category>

		<category><![CDATA[highload]]></category>

		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1374</guid>
		<description><![CDATA[В новостях пишут о что новость о смерти Майкла Джексона привела к перегрузке известных интернет сайтов. Гугль думал что они под хакерской атакой

News of Jackson&#8217;s death spread quickly online, causing many websites to experience technical difficulties under the unanticipated swell of users. Google announced technical difficulties after a sudden swell in searches for &#8220;Michael Jackson&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1546 alignleft" style="margin: 10px;" title="growing-up" src="http://www.katkovonline.com/wp-content/uploads/2009/10/growing-up.png" alt="" width="102" height="105" />В новостях пишут о что новость о смерти Майкла Джексона привела к перегрузке известных интернет сайтов. Гугль думал что они под хакерской атакой</p>
<blockquote>
<p style="text-align: left;">News of Jackson&#8217;s death spread quickly online, causing many websites to experience technical difficulties under the unanticipated swell of users. <strong>Google </strong>announced technical difficulties after a sudden swell in searches for &#8220;Michael Jackson&#8221; led the company to believe it was under attack from hackers, while social networking site <strong>Twitter </strong>reported a crash after record numbers of users used the site to spread the news of Jackson&#8217;s death.[175] <strong>Wikipedia </strong>experienced technical difficulties, and crashed at 3:15 PDT reportedly due to excessive edits and user overload.[167]<a href="http://en.wikipedia.org/wiki/Death_of_Michael_Jackson"></a></p>
<p style="text-align: right;"><a href="http://en.wikipedia.org/wiki/Death_of_Michael_Jackson">wiki</a></p>
</blockquote>
<p>Я тоже сначала думал что нас в Viigo атакуют. Трафик обычных запросов прыгнул на 15% в течении 10-20 минут. Трафик запросов к рекламным банерам - на 40%. Целый час потратил, что бы понять кто все эти люди и откуда они взялись. Мысль про Джексона приходила в голову, но я ее отмёл как несостоятельную.</p>
<p>Если бы мне кто-то сказал, о таком несколько дней назад, я бы не поверил&#8230;</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1374" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/michael-jackson-strikes-back/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Project Manager</title>
		<link>http://www.katkovonline.com/2009/06/project-manager/</link>
		<comments>http://www.katkovonline.com/2009/06/project-manager/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 05:10:23 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[management]]></category>

		<category><![CDATA[project manager]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1370</guid>
		<description><![CDATA[Задали вам &#8220;не решаемый&#8221; вопрос
«Вы — руководитель проекта, который начинается с завтрашнего дня и заканчивается ровно через год. Все планы утверждены, команда подобрана, роли определены. И вдруг… Становятся известны результаты проведенного маркетингового исследования, которые говорят о том, что конкурирующая компания планирует выпуск такого же продукта с той же функциональностью, но месяцем раньше. Ваш топ-менеджмент настаивает [...]]]></description>
			<content:encoded><![CDATA[<p>Задали вам &#8220;не решаемый&#8221; вопрос</p>
<blockquote><p>«Вы — руководитель проекта, который начинается с завтрашнего дня и заканчивается ровно через год. Все планы утверждены, команда подобрана, роли определены. И вдруг… Становятся известны результаты проведенного маркетингового исследования, которые говорят о том, что конкурирующая компания планирует выпуск такого же продукта с той же функциональностью, но месяцем раньше. Ваш топ-менеджмент настаивает на завершении проекта тремя месяцами раньше.»<br />
Из ограничений: нельзя уменьшать функциональность и качество, увеличивать объём ресурсов и стоимость.</p></blockquote>
<p>Что должно сразу приходить в голову хорошему руководителю проекта?<br />
Ему должны сразу приходить идеи и идеи во множестве.<br />
Например</p>
<blockquote><p>В конечном счёте всё равно либо придётся вносить изменения в функциональность (не обязательно в сторону ухудшения, но однозначно в сторону уменьшения трудоёмкости), либо находить «из воздуха» дополнительные ресурсы (не те, за которые платит компания): увеличение рабочего дня на энтузиазме (что плохо), привлечь десяток студентов-программистов на практику, организовать юзабилити-конкурс на лучшее решение сложной задачи и т. п. Так или иначе, за эти ресурсы просто заплатят другие: сотрудники, студенты, участники конкурса.</p></blockquote>
<p>Или вот</p>
<blockquote><p>1) вторым быть проще (не помню, где читал)<br />
2) вы не уточняете, увеличивать стоимость чего нельзя. если речь идет только о разработке, то можно увеличить маркетинговый бюджет<br />
3) есть утопические варианты вроде саботажа =)<br />
4) группировка функциональности и запуск «облегченной» версси продукта за 6 месяцев, и выпуск полной за 12.</p></blockquote>
<p><a href="http://habrahabr.ru/blogs/pm/62622/#comment_1731597">Отсюда</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1370" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/project-manager/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Non SQL DB Conference</title>
		<link>http://www.katkovonline.com/2009/06/work-non-sql-db-conference/</link>
		<comments>http://www.katkovonline.com/2009/06/work-non-sql-db-conference/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 02:54:11 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[Cassandra]]></category>

		<category><![CDATA[CouchDB]]></category>

		<category><![CDATA[db]]></category>

		<category><![CDATA[Dynomite]]></category>

		<category><![CDATA[HBase]]></category>

		<category><![CDATA[Hypertable]]></category>

		<category><![CDATA[non sql]]></category>

		<category><![CDATA[Voldemort]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1365</guid>
		<description><![CDATA[На днях в Сан-Франциско прошла конференция по key-value хранилищам.  Представлены все главные проекты, не хватает только Tokyo Cabinet и memcachedb.  Cloudera кажется не причём, но это очень хороший ресурс по Hadoop/Hive/Pig
Intro session - Todd Lipcon, Cloudera
Voldemort - Jay Kreps, Linkedin
Cassandra - Avinash Lakshman, Facebook
Dynomite - Cliff Moon, Powerset
HBase - Ryan Rawson, Stumbleupon
Hypertable - Doug Judd, [...]]]></description>
			<content:encoded><![CDATA[<p>На днях в Сан-Франциско прошла конференция по key-value хранилищам.  Представлены все главные проекты, не хватает только <a title="Tokyo Cabinet" href="http://tokyocabinet.sourceforge.net/" target="_blank">Tokyo Cabinet</a> и <a href="http://memcachedb.org/" target="_blank">memcachedb</a>.  Cloudera кажется не причём, но это очень хороший ресурс по Hadoop/Hive/Pig</p>
<p>Intro session - Todd Lipcon, Cloudera<br />
<a href="http://project-voldemort.com/">Voldemort</a> - Jay Kreps, Linkedin<br />
<a href="http://incubator.apache.org/cassandra/">Cassandra</a> - Avinash Lakshman, Facebook<br />
<a href="http://github.com/cliffmoon/dynomite/tree/master">Dynomite</a> - Cliff Moon, Powerset<br />
<a href="http://hadoop.apache.org/hbase/">HBase</a> - Ryan Rawson, Stumbleupon<br />
<a href="http://hypertable.org/">Hypertable</a> - Doug Judd, Zvents<br />
<a href="http://couchdb.apache.org/">CouchDB</a> - Chris Anderson, couch.io<br />
<a href="http://wiki.github.com/trav/vpork/vpork">VPork</a> - Jon Travis, Springsource<br />
<a href="http://www.mongodb.org/">MongoDb</a> - Dwight Merriman, 10gen<br />
Infinite Scalability - Jonas S Karlsson, Google</p>
<p>Начинают появляться слайды и видео докладов. Кому интересно - могут <a title="Слайды и видео конференции" href="http://blog.oskarsson.nu/2009/06/nosql-debrief.html" target="_blank">пройти в закрома</a>. Хорошее место Silicon Valley, всё самое интересное происходит там. В Торонто какие-то убогие сборища в последнее время происходят только. Вот <a title="Microsoft и OpenSource" href="http://webnotwar.ca/" target="_blank">Microsoft рассказывает про OpenSource</a>. Молодой человек на главной странице, очевидно, олицетворяет target группу.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1365" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/work-non-sql-db-conference/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Non SQL DB</title>
		<link>http://www.katkovonline.com/2009/06/work-non-sql-db/</link>
		<comments>http://www.katkovonline.com/2009/06/work-non-sql-db/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 15:06:08 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[Dynamo]]></category>

		<category><![CDATA[key-value]]></category>

		<category><![CDATA[nonsql]]></category>

		<category><![CDATA[sql]]></category>

		<category><![CDATA[storage]]></category>

		<category><![CDATA[Werner Vogels]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1363</guid>
		<description><![CDATA[Werner Vogels, Amazon CTO, пишет о том как работает Amazon&#8217;s Dynamo в частности и о сложностях дизайна Key-Value distributed storage вообще.
http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html
Ссылается на работы Lamport-а 1978 года, это тот самый кто придумал такие алгоритмы для distributed computing как Vector clock и Paxos. Довольно странно читать научные работы 30-ти летней давности и отчеты о самых свежих, bleeding-edge, [...]]]></description>
			<content:encoded><![CDATA[<p>Werner Vogels, Amazon CTO, <a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html" target="_blank">пишет</a> о том как работает Amazon&#8217;s Dynamo в частности и о сложностях дизайна Key-Value distributed storage вообще.<br />
<a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html" target="_blank">http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html</a></p>
<p>Ссылается на работы <a href="http://en.wikipedia.org/wiki/Leslie_Lamport" target="_blank">Lamport</a>-а 1978 года, это тот самый кто придумал такие алгоритмы для distributed computing как <a href="http://en.wikipedia.org/wiki/Vector_clocks" target="_blank">Vector clock</a> и <a href="http://en.wikipedia.org/wiki/Paxos_algorithm" target="_blank">Paxos.</a> Довольно странно читать научные работы 30-ти летней давности и отчеты о самых свежих, bleeding-edge, программных разработках, которые эти самые работы используют. То ли програмная индустрия безнадежно отстаёт от учёной мысли, то ли учёная мысль вырвалась вперед.</p>
<p>Вот и Last.fm присматривает key-value storage для себя<br />
<a href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/" target="_blank">http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/</a><br />
пишет <a href="http://www.metabrew.com" target="_blank">Richard Jones</a>,  <a href="http://blog.last.fm/2009/06/10/message-from-the-lastfm-founders-felix-rj-and-martin" target="_blank">бывший</a> Last.fm CTO. Коментарии к посту тоже интересны.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1363" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/work-non-sql-db/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: All probabilities becomes certanties</title>
		<link>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/</link>
		<comments>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 16:50:31 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[probabilities]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1353</guid>
		<description><![CDATA[Очень хорошо сказано
The law of big numbers insures that all probabilities becomes certanties.
 ]]></description>
			<content:encoded><![CDATA[<p>Очень хорошо сказано</p>
<blockquote><p>The law of big numbers insures that all probabilities becomes certanties.</p></blockquote>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1353" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/06/all-probabilities-becomes-certanties/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Profiling PHP code with xhprof</title>
		<link>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/</link>
		<comments>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:10:23 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[profiling]]></category>

		<category><![CDATA[xdebug]]></category>

		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1329</guid>
		<description><![CDATA[xhprof - маленький и простой профайлер для PHP.
Лицензия Apache 2.0 Работает только под Unix.
Компилируется и инсталлируется в два счёта. Статистику отдает через web интерфейс (PHP)
Очень удобно, никаких дополнительных программ, только браузер. Перед инсталляцией нужно не забыть поставить PHP development module
apt-get install php5-dev
А потом обернуть нужный код в

xhprof_enable();

&#60;some code is here&#62;

$xhprof_data = xhprof_disable();

и готово.
Я для удобства [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pecl.php.net/package/xhprof/" target="_blank">xhprof</a> - маленький и простой профайлер для PHP.<br />
Лицензия Apache 2.0 Работает только под Unix.<br />
Компилируется и инсталлируется в два счёта. Статистику отдает через web интерфейс (PHP)</p>
<p>Очень удобно, никаких дополнительных программ, только браузер. Перед инсталляцией нужно не забыть поставить PHP development module</p>
<p>apt-get install php5-dev</p>
<p>А потом обернуть нужный код в</p>
<pre class="brush: php">
xhprof_enable();

&lt;some code is here&gt;

$xhprof_data = xhprof_disable();
</pre>
<p>и готово.</p>
<p>Я для удобства обернул вообще все вызовы, и отдавал ссылку на страницу с собранной статистикой прямо в HTTP header. Выглядело вот так</p>
<pre class="brush: php">
// start profiling
xhprof_enable();

&lt;some code is here&gt;

// stop profiler
$xhprof_data = xhprof_disable();
include_once $XHPROF_ROOT . &quot;/root/xhprof/xhprof-0.9.1/xhprof_lib/utils/xhprof_lib.php&quot;;
include_once $XHPROF_ROOT . &quot;/root/xhprof/xhprof-0.9.1/xhprof_lib/utils/xhprof_runs.php&quot;;
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs-&gt;save_run($xhprof_data, &quot;xhprof_foo&quot;);
header(&quot;x-company-name-profile: http://xhprof.company-name.com/index.php?run=$run_id&amp;amp;source=xhprof_foo&quot;);
</pre>
<p>xhprof.company-name.com прописал в hosts на своём компьютере. А на сервере добавил в конфигурацию Apache виртуальный хост</p>
<pre class="brush: xml">
&lt;VirtualHost *:80&gt;
    ServerName xhprof.company-name.com
    DocumentRoot /root/xhprof/xhprof-0.9.1/hprof_html
    &lt;Directory /root/xhprof/xhprof-0.9.1/hprof_html&gt;
        AllowOverride All
    &lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>Любопытно конечно сравнить с другим профайлером - <a href="http://www.xdebug.org" target="_blank">XDebug</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1329" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/03/work-profiling-php-code-with-xhprof/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: полку MQ прибыло</title>
		<link>http://www.katkovonline.com/2009/03/twitter-mq-kestrel/</link>
		<comments>http://www.katkovonline.com/2009/03/twitter-mq-kestrel/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 04:59:22 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[activemq]]></category>

		<category><![CDATA[kestrel]]></category>

		<category><![CDATA[mq]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1321</guid>
		<description><![CDATA[Evan Weaver на последней конференции QCon упомянул в частности, что Twitter написал свою собственную версию Message Queue на Scala - Kestrel. Вот ссылка на слайды. Они в Твитере конечно очень счастливы и всё такое, но вызывает недоумение не столько тайный смысл изобретения велосипеда, см. RabbitMQ или QPid или OpenAMQ или ZeroMQ или ActiveMQ или MSMQ, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.evanweaver.com">Evan Weaver</a> на последней конференции QCon упомянул в частности, что Twitter написал свою собственную версию Message Queue на Scala - <a href="http://github.com/robey/kestrel/tree/master">Kestrel</a>. Вот <a href="http://blog.evanweaver.com/articles/2009/03/13/qcon-presentation/">ссылка на слайды</a>. Они в Твитере конечно очень счастливы и всё такое, но вызывает недоумение не столько тайный смысл изобретения велосипеда, см. <a href="http://www.rabbitmq.com/">RabbitMQ</a> или <a href="http://qpid.apache.org/">QPid</a> или <a href="http://www.openamq.org/">OpenAMQ</a> или <a href="http://www.zeromq.org/">ZeroMQ</a> или <a href="http://activemq.apache.org">ActiveMQ</a> или <a href="http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx">MSMQ</a>, сколько очень посредственная производительность.</p>
<p>Если я правильно понимаю результаты с <a href="http://github.com/robey/kestrel/tree/master">официальной страницы</a> Kestrel даёт  227.5 транзакций в секунду на 2.5GHz 2008 model Macbook Pro.</p>
<p>В то время как ActiveMQ <a href="http://activemq.apache.org/performance.html">даёт 2000  транзакций в секунду</a> на более медленном Intel Celeron 2.4 GHz.</p>
<p>И я даже не буду вдаваться в размеры самих сообщений, потому что сравнение будет ещё больше в пользу ActiveMQ.</p>
<p>И какой смысл в существовании Kestrel?</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1321" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/03/twitter-mq-kestrel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Twitter goes from Ruby to Scala</title>
		<link>http://www.katkovonline.com/2009/03/work-twitter-goes-from-ruby-to-scala/</link>
		<comments>http://www.katkovonline.com/2009/03/work-twitter-goes-from-ruby-to-scala/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 12:24:13 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[message queue]]></category>

		<category><![CDATA[mq]]></category>

		<category><![CDATA[scala]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1318</guid>
		<description><![CDATA[Что-то много вокруг разговоров о Scala, и с каждым днём всё больше и больше. Вот и Twitter туда же. Предали светлые идеалы Ruby.
&#8220;&#8230;One of the most important changes they introduced to improve performance in the last nine months is moving from a Ruby messaging middleware to a custom build JVM-based messaging middleware written in Scala.&#8221;
говорит [...]]]></description>
			<content:encoded><![CDATA[<p>Что-то много вокруг разговоров о Scala, и с каждым днём всё больше и больше. Вот и Twitter туда же. Предали светлые идеалы Ruby.</p>
<blockquote><p>&#8220;&#8230;One of the most important changes they introduced to improve performance in the last nine months is moving from a Ruby messaging middleware to a custom build JVM-based messaging middleware written in Scala.&#8221;</p></blockquote>
<p>говорит <a href="http://blog.evanweaver.com/">Evan Weave</a><br />
<img style="visibility: hidden; width: 0px; height: 0px; display: none;" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMzc*NjUyNDUxNDYmcHQ9MTIzNzQ2NTMxNjg1NCZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPWQ5OTRjZDQxMTAyYjQyODdhMTUzZWE5YTQ3ZGEyMDBj.gif" border="0" alt="" width="0" height="0" /></p>
<div id="__ss_1141786" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Improving Running Components at Twitter" href="http://www.slideshare.net/Eweaver/improving-running-components-at-twitter?type=presentation">Improving Running Components at Twitter</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=httpssupload.s3.amazonaws.comimprovingrunningcomponentsattwitter-evanweaver-qconlondon2009-090313094122-phpapp01.pdf.pdf&amp;stripped_title=improving-running-components-at-twitter" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=httpssupload.s3.amazonaws.comimprovingrunningcomponentsattwitter-evanweaver-qconlondon2009-090313094122-phpapp01.pdf.pdf&amp;stripped_title=improving-running-components-at-twitter" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1318" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/03/work-twitter-goes-from-ruby-to-scala/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: MindMap services</title>
		<link>http://www.katkovonline.com/2009/03/work-mindmap-services/</link>
		<comments>http://www.katkovonline.com/2009/03/work-mindmap-services/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 16:34:04 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[MindMap]]></category>

		<category><![CDATA[online services]]></category>

		<category><![CDATA[PM]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1315</guid>
		<description><![CDATA[Надо бы попробовать эти сервисы, как на презентации рекомендуют

А вот и оригинальная презентация
Web 2.0 Tools For Project Management


View more presentations from Douglas Tokuno.

 ]]></description>
			<content:encoded><![CDATA[<p>Надо бы попробовать эти сервисы, как на презентации рекомендуют</p>
<p><a href="http://www.katkovonline.com/wp-content/uploads/2009/03/mind-maps-services.png"><img class="size-full wp-image-1316 alignnone" title="mind-maps-services" src="http://www.katkovonline.com/wp-content/uploads/2009/03/mind-maps-services.png" alt="" width="382" height="286" /></a></p>
<p>А вот и оригинальная презентация</p>
<div id="__ss_1034819" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Web 2.0 Tools For Project Management" href="http://www.slideshare.net/douglastokuno/web-20-tools-for-project-management?type=powerpoint">Web 2.0 Tools For Project Management</a></div>
<div style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Web 2.0 Tools For Project Management" href="http://www.slideshare.net/douglastokuno/web-20-tools-for-project-management?type=powerpoint"></a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=web-20-tools-for-project-management-1234811974116287-3&amp;rel=0&amp;stripped_title=web-20-tools-for-project-management" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=web-20-tools-for-project-management-1234811974116287-3&amp;rel=0&amp;stripped_title=web-20-tools-for-project-management" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div id="__ss_1034819" style="width: 425px; text-align: left;">
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/douglastokuno">Douglas Tokuno</a>.</div>
</div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1315" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/03/work-mindmap-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: REST Batching, part III</title>
		<link>http://www.katkovonline.com/2009/01/rest-batching-3/</link>
		<comments>http://www.katkovonline.com/2009/01/rest-batching-3/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 07:21:32 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[batching]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[rest]]></category>

		<category><![CDATA[rest batching]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1271</guid>
		<description><![CDATA[продолжение см часть II &#8220;Идеальное&#8221; решение


Плохое решение
Multipart/mixed MIME messages.
Так как HTTP протокол полон приятных сюрпризов, то есть ещё один способ втиснуть несколько request-ов в один, и соотвественно несколько respons-ов тоже, в один. Всё, что надо сделать - это указать &#8220;Content-Type: multipart/mixed&#8221;. А затем аккуратно перечислить все что надо. Разделительные символы прилагаются.
Вот пример

POST /batch-proxy HTTP/1.1
Host: example.org
Content-Type: [...]]]></description>
			<content:encoded><![CDATA[<p>продолжение см <a href="http://www.katkovonline.com/2009/01/rest-batching-2">часть II &#8220;Идеальное&#8221; решение</a><br />
<code><br />
</code></p>
<h3>Плохое решение</h3>
<p>Multipart/mixed MIME messages.</p>
<p>Так как HTTP протокол полон приятных сюрпризов, то есть ещё один способ втиснуть несколько request-ов в один, и соотвественно несколько respons-ов тоже, в один. Всё, что надо сделать - это указать &#8220;Content-Type: multipart/mixed&#8221;. А затем аккуратно перечислить все что надо. Разделительные символы прилагаются.<br />
Вот пример</p>
<pre class="brush: xml">
POST /batch-proxy HTTP/1.1
Host: example.org
Content-Type: multipart/mixed; boundary=batch

-batch
Batch-Operation: POST /my/resource1
Host: example.org
Content-Type: application/xml
&lt;?xml version=&quot;1.0″?&gt;
&lt;entry xmlns=&quot;...&quot;&gt;...&lt;/entry&gt;

-batch
Batch-Operation: DELETE /my/resource2
Host: example.org
If-Match: &quot;ABC123XYZ&quot;
</pre>
<p>Выглядит замечательно, не так ли? Снимается проблема ~37% overhead в трафике, так как можно текст передавать как текст, а двоичные данные как двоичные данные. Правда на этом достоинства и кончаются. А проблемы всё теже самые, и не REST и security hole, и не прозрачность в общем, смотри выше по списку.</p>
<p>Кроме того, надо помнить, что MIME был создан для передачи 8-битного текста через 7-ми битный SMTP. Да в нём есть много интересного, но <strong>HTTP</strong><strong> не является MIME</strong><strong> совместимым протоколом</strong>. Есть тонкие различия вызванные в основном тем, что HTTP оптимизировался для передачи данных через двоичные соединения + обратная совместимость, а у MIME были совсем другие проблемы - вроде ограничения на максимальную длинну строки в e-mail. Всех желающих углубится в эти различия приглашаю ознакомится с секцией 19.4 RFC2616</p>
<p>На практике всё это означает, что клиенту и серверу нужно иметь качественный парсер MIME сообщений. Не просто продвинутый HTTP клиент, но и такой довольно экзотический парсер. По этому пути пошли ребята из Microsoft построив свою <a href="http://msdn.microsoft.com/en-us/library/cc668802.aspx">ADO.NET Data Services Framework</a> а также в Google - batching для GData. Если вам такой путь приемлем - то для Java есть бесплатный <a href="http://james.apache.org/mime4j/">mime4j</a>, а для .NET есть комерческий <a href="http://www.mime4.net/">Mime4Net</a>.</p>
<p>Для тех, кто не хочет возится с MIME есть уж совсем плохое решение</p>
<h3>Совсем плохое решение</h3>
<p>XML/JSON mark-up<br />
Берем и решаем задачу в лоб. Конвертируем всё в текст, для разметки используем XML или JSON.<br />
Пример с JSON</p>
<pre class="brush: jscript">
POST /batch-proxy HTTP/1.1
Content-Type: application/json
Accept: application/json
X-HTTP-Method-Override: BATCH
[
 {
   &quot;method&quot; : &quot;PUT&quot;,
   &quot;url&quot; :  &quot;http://someserver.com/some/resource/url&quot;,
   &quot;body&quot; : &quot;&lt;request body goes here&gt;&quot;,
   &quot;If-Match&quot; : &quot;xxxxxxxxxxx&quot;
 },
 {
   &quot;method&quot; : &quot;GET&quot;,
   &quot;url&quot; : &quot;http://someserver.com/some/resource/url2&quot;
 },
]
</pre>
<p>Пример с XML</p>
<pre class="brush: xml">
POST /batch-proxy HTTP/1.1
Content-Type: application/xml
Accept: application/xml
X-HTTP-Method-Override: BATCH
&lt;?xml version=&#039;1.0&#039;?&gt;
 &lt;batch xmlns:b=&#039;http://batch.someserver.com/schema&#039;&gt;
  &lt;b:request verb=&#039;put&#039; uri= http://someserver.com/some/resource/url&#039;&gt;
   &lt;b:headers&gt;
    &lt;b:header name=&#039;Content-Type&#039; value=&#039;text/xml; charset=UTF-8&#039; /&gt;
    &lt;b:header name=&#039;Content-Length&#039; value=&#039;XXX&#039; /&gt;
   &lt;/b:headers &gt;
  &lt;b:body&gt;
    &lt;![CDATA[ ... ]]&gt;
  &lt;/b:body&gt;
 &lt;/b:request&gt;
 &lt;b:request verb=&#039;get&#039; uri=&#039;http://someserver.com/some/resource/url2&#039;&gt;
  &lt;b:headers&gt;
   &lt;b:header name=&#039;Accept&#039; value=&#039;text/xml&#039; /&gt;
  &lt;/b:headers &gt;
 &lt;/b:request&gt;
&lt;/batch&gt;
</pre>
<p>Очевидно, что XML намного более избыточен, но решение следует принимать на основании доступности того или другого парсера. Ответы сервера выглядят точно также.</p>
<p>Таким образом:</p>
<ul class="unIndentedList">
<li> Каждая операция состоит из &#8220;конверта&#8221;, который содержит HTTP заголовки и тело запроса
<ul>
<li> &#8220;method&#8221; and &#8220;url&#8221; обозначают соотвественно HTTP verb и URL операции</li>
<li> &#8220;body&#8221;, обязательное только для POST и PUT, содержит данные которые были бы переданы в стандартом теле HTTP request/response</li>
</ul>
</li>
<li> Произвольные HTTP заголовки тоже могут быть указаны как в request так и в response</li>
</ul>
<p>А вот так например может выглядять response содержащий двоичные данные</p>
<pre class="brush: jscript">
200 OK
Content-Type: application/json; charset=UTF-8&#039;
[
 {
  &quot;code&quot; : 200,
  &quot;Content-type&quot;: &quot;application/octet-stream&quot;,
  &quot;Content-transfer-encoding&quot;: &quot;base64&quot;,
  &quot;body&quot;: &quot;PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R==&quot;
 }
 {
  &quot;code&quot; : 200,
  &quot;Content-type&quot;: &quot;application/octet-stream&quot;,
  &quot;Content-transfer-encoding&quot;: &quot;base64&quot;,
  &quot;body&quot;: &quot;PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R==&quot;
 }
]
</pre>
<p>Что же плохого в этом решении? А все из списка приведенного в самом начале статьи. Всё что ни возьми - всё и плохо, и не REST. И тем не менее этот подход является самым простым для реализации. А простотой не стоит пренебрегать.</p>
<p>Есть несколько приёмов которые помогут предложить пристойные ответы на список недостатков. Можно</p>
<ul class="unIndentedList">
<li> запретить запросы ко внешним серверам</li>
<li> запретить рекурсивные запросы к самому себе</li>
<li> ограничить количество запросов в пакете</li>
<li> ограничить общее время выполнения всего пакета и высылать на клиент HTTP error code 206 - Partial Content, в случае превышения</li>
<li> прекращать выполнение всего пакета после первой же ошибки</li>
<li> использовать протокол HTTP 1.0 при исполнении запросов в пакете</li>
<li> декларативно отказаться от атомарности операций</li>
<li> декларативно отказаться от оптимизации порядка или распаралеливания выполнения запросов</li>
<li> принимать только операции типа GET</li>
</ul>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1271" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/01/rest-batching-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: REST Batching, part II</title>
		<link>http://www.katkovonline.com/2009/01/rest-batching-2/</link>
		<comments>http://www.katkovonline.com/2009/01/rest-batching-2/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 07:21:28 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[batching]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[rest]]></category>

		<category><![CDATA[rest batching]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1265</guid>
		<description><![CDATA[продолжение см часть I Общие положения

«Идеальное» решение
HTTP 1.1 протокол изначально поддерживает приём-передачу нескольких request-response. Для этого нужны persisted connections, pipelining и chunking см ниже.
Клиент открывает соединение, пишет туда request-ы, читает respons-ы. Кроме очевидных требований о поддержке этих persisted connections, pipelining и chunking на сервере и клиенте, есть ещё одна неприятность -  протокол требует, что бы [...]]]></description>
			<content:encoded><![CDATA[<p>продолжение <a href="http://www.katkovonline.com/2009/01/rest-batching-1">см часть I Общие положения</a></p>
<p><img class="size-full wp-image-1548 alignleft" style="margin: 5px;" title="http" src="http://www.katkovonline.com/wp-content/uploads/2009/10/http.png" alt="" width="94" height="88" /></p>
<h3>«Идеальное» решение</h3>
<p>HTTP 1.1 протокол изначально поддерживает приём-передачу нескольких request-response. Для этого нужны persisted connections, pipelining и chunking см ниже.</p>
<p>Клиент открывает соединение, пишет туда request-ы, читает respons-ы. Кроме очевидных требований о поддержке этих persisted connections, pipelining и chunking на сервере и клиенте, есть ещё одна неприятность -  протокол требует, что бы клиент выслал заново все свои запросы сделанные в рамках этого pipelined соединения если оно прервётся в середине сеанса. А для того, что бы эту перепосылку можно было сделать без опаски, все запросы должны быть idempotent, т.е. только GET, HEAD, OPTIONS, PUT и DELETE. Это решение действительно очень хорошее с точки зрения REST - URI уникально адресуют ресурсы, HTTP headers означают правильные вещи и обрабатываются правильным образом, все транзитные сервера видят HTTP метод и могут, что-то правильное по этому поводу предпринять.</p>
<p>Однако, это «идеальное» решение существует главным образом на бумаге. Persisted connections не поддерживают мобильные устройства. Не все HTTP клиенты умеют читать chunked responses и использовать pipelining, привет AJAX рещениям. Да что chunked responses - для многих библиотек послать PUT запрос - уже проблема. Финальным аккордом тут является отсутствие поддержки метода POST в HTTP pipelining.</p>
<p>Раз «идеальное» решение не подходит, вернёмся к идее тунелирования HTTP протокола внутри HTTP.</p>
<p>Что такое persisted connections, pipelining и chunking:</p>
<h3>Persisted connections</h3>
<p>По умолчанию все соеднинения в HTTP 1.1 постоянные. Сервер не закрывает соединение сразу после обработки запроса тем самым позволяя клиенту использовать это соединение опять и опять. Если клиент желает получить несколько ресурсов с одного и тогоже сервера получается большой выигрыш в производительности. Вместо того, что бы открывать несколько соединений, все запросы пройдут по этому единственному каналу. Как клиент так и сервер могут оборвать этот канал с помощью HTTP header «Connection: close». Интересно, что запросы-ответы не обязаны быть строго последовательными, другими словами, клиент не обязан ждать ответа на первый запрос, а может сразу делать следующий и следующий, это становится возможным благодаря</p>
<h3>Pipelining</h3>
<p>Клиент посылает серию запросов, а сервер возвращает ответы в том порядке в котором были получены запросы. Часто бывает, что содержимое ответа генерируется динамически и сервер не знает точную длину которую следовало бы поместить в HTTP header Content-Length. Это нормально, в HTTP 1.1 в отличие от HTTP 1.0 заголовок Content-Length не является обязательным.</p>
<p>Так как Content-Length не передаётся, то нужен какой-то механизм, который бы сообщил клиенту, где кончается один response и начинается следующий. HTTP 1.1 решает эту проблему с помощью</p>
<h3>Chunking</h3>
<p>В случае динамических ресурсов, когда response не содержит Content-Length, он содержит Transfer-Encoding: chunked. Само же тело содержит куски с указаннием длины индивидуального куска. Кусок нулевой длины отмечает конец respons-а. Тут, пользуясь случаем, передаю привет IE6, который виснет, если ему этот последний кусок не передать.</p>
<p>Зачем я это всё рассказываю - в большинстве случаев, все эти технические детали скрыты в HTTP библиотеках или даже в абстракциях самого языка, но если мы уж собрались строить HTTP внутри HTTP то это надо понимать.</p>
<p>Что же делать? К сожалению существует только плохое решение и очень плохое.<br />
<code><br />
</code></p>
<p>продолжение см <a href="http://www.katkovonline.com/2009/01/rest-batching-3/">часть III “Плохие” решения</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1265" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/01/rest-batching-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: REST Batching, part I</title>
		<link>http://www.katkovonline.com/2009/01/work-rest-batching-part-i/</link>
		<comments>http://www.katkovonline.com/2009/01/work-rest-batching-part-i/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 07:13:24 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[batching]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[rest]]></category>

		<category><![CDATA[rest batching]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1263</guid>
		<description><![CDATA[HTTP внутри HTTP это, как реторта с
личинками дельфинов - вещь в себе
Если вы разрабатываете REST API, то рано или поздно к вам придут ваши клиенты с просьбой сделать пакетную обработку. Сделать так, что бы сервер приимал произвольный набор запросов одним пакетом и отправлял назад все результаты тоже одновременно. Это касается не только GET запросов, а [...]]]></description>
			<content:encoded><![CDATA[<p align="right"><a href="http://www.katkovonline.com/wp-content/uploads/2009/10/http.png"><img class="alignleft size-full wp-image-1548" style="margin: 10px;" title="http" src="http://www.katkovonline.com/wp-content/uploads/2009/10/http.png" alt="" width="94" height="88" /></a><em>HTTP</em><em> внутри HTTP</em><em> это, как реторта с<br />
личинками дельфинов - вещь в себе</em></p>
<p>Если вы разрабатываете REST API, то рано или поздно к вам придут ваши клиенты с просьбой сделать пакетную обработку. Сделать так, что бы сервер приимал произвольный набор запросов одним пакетом и отправлял назад все результаты тоже одновременно. Это касается не только GET запросов, а любых методов - PUT, POST, DELETE и т.д. Ответы тоже будут разные, и будут содержать различные типы данных - например текст в различных encoding-ах и charset-ах, или двоичные данные в произвольном формате. В общем случае, скажут они, было бы полезно уметь обрабатывать пакеты любых HTTP запросов, в том числе запросы к внешним серверам которые необходимо исполнить последовательно с запросами к серверам из локальной сети.</p>
<p>С первого взгляда это кажется замечательной идеей. Клиент делает единственный POST запрос, получает единственный ответ и здорово экономит на сетевых задержках. На самом деле, здесь столько подводных камней, что вы сможете пожалеть что вообще с этим связались. Но выбора обычно нет. Что же тут плохого? Посмотрим сначала на</p>
<h3>Религиозные проблемы REST</h3>
<ul class="unIndentedList">
<li> Очевидно, что URI этого прокси одинаков для пакетов любых запросов - на вход поступауют произвольные запросы, на выходе мы имеет произвольные ресурсы. Значит этот <strong>URI</strong><strong> перестаёт уникально идентифицировать ресурсы</strong> которые этот прокси обрабатывает</li>
<li> Требуемая операция содержится не в HTTP verb, а в теле запроса. И несмотря на то, что POST request вроде как является non-idempotent &amp; non-safe - внутри может быть что угодно - как набор совершенно безобидных GET запросов, так и действительно non-idempotent POST запросы, а может быть и вовсе некоторая смесь из них. Только клиент и сервет знают, что же там такое внутри. <strong>HTTP</strong><strong> метод перестал быть понятным</strong> для всех транзитных серверов, таких как HTTP прокси и кеши</li>
<li> В зависимости от набора запросов в пакете, сервер может создать новые ресурс(ы), обновить или удалить старые, или просто вернуть запрошенный ресурс. Некоторые из этих запросов могли завершиться с ошибкой, а другие были успешными. Передать эту информацию обратно клиенту в HTTP header нелегко, значит она будет втиснута в body ответа. Значит <strong>response</strong><strong> тоже перестал быть прозрачным</strong> для всех транзитных серверов</li>
</ul>
<p>Ну вот и всё, что бы из REST сделать SOAP больше ничего не нужно. На самом деле, стало даже хуже, чем если бы SOAP использовалось с самого начала - транзитные сервера теперь не знают у каких request/response HTTP headers значат то, что написанно в спецификации, а у каких уже ничего не значат.</p>
<p>Существуют также и</p>
<h3>Прочие недостатки пакетирования запросов</h3>
<p>Каким бы образом это решение не было бы сделано, результат будет являться тунелированием HTTP протокола внутри HTTP протокола. Задумайтесь на секунду, что это значит.</p>
<ul class="unIndentedList">
<li> Клиенты должны понимать все тонкости HTTP, и не только на этапе создания пакета запросов, но также они должны иметь обработчики ошибок, повторов и т.п. Они должны уметь обрабатывать все фокусы HTTP протокола - chunked и gzipped ответы. Перенаправления и HTTP headers</li>
<li> Транзитные сервера перестанут кешировать, исчезнет поддержка ETag, If-Modified-Since и т.п. А умные load-balancer-ы перестанут load balance-ить</li>
<li> Сломается &#8220;conversation pattern&#8221; если таковой будет подразумеваться конечным сервером.</li>
<li> Огромная дыра в security, привет системным администраторам</li>
<li> ~37% overhead в трафике из-за преобразования двоичных данных в текст, а также неизвестный CPU overhead на сервере и клиенте что бы эти данные кодировать-декодировать</li>
<li> Поддержка атомарности выполнения всего набора запросов</li>
<li> Определение порядка выполнения запросов в наборе</li>
</ul>
<p>На самом деле, если заглянуть в спецификацию протокола HTTP 1.1 то можно увидеть, что существует «Идеальное» решение<br />
<code><br />
</code><br />
продолжение см <a href="http://www.katkovonline.com/2009/01/rest-batching-2">часть II &#8220;Идеальное&#8221; решение</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1263" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2009/01/work-rest-batching-part-i/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Google visualization and chart API</title>
		<link>http://www.katkovonline.com/2008/12/google-visualization-n-chart-api/</link>
		<comments>http://www.katkovonline.com/2008/12/google-visualization-n-chart-api/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 01:38:18 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[charts]]></category>

		<category><![CDATA[google chart api]]></category>

		<category><![CDATA[google visualization api]]></category>

		<category><![CDATA[graphs]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1165</guid>
		<description><![CDATA[Google Chart API и Google visualization API. ]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin: 5px;" src="http://chart.apis.google.com/chart?cht=p3&amp;chd=s:Uf9a&amp;chs=250x100&amp;chl=January%7CFebruary%7CMarch%7CApril" alt="http://chart.apis.google.com/chart?cht=p3&amp;chd=s:Uf9a&amp;chs=250x100&amp;chl=January|February|March|April" width="150" height="60" /></p>
<p>В свете инструментации кода, мониторинга и сбора статистики не смог пройти мимо довольно интересных средств визуализации. Нельзя сказать, что такого раньше совсем не было, можно только сказать - что такого качество, даже за деньги, ещё поискать надо. Итак, о Google Chart API,  Google visualization API и о том, как сложно сделать простую вещь.</p>
<p><span id="more-1165"></span></p>
<p>В декабре прошлого, 2007-го года, Google открыл доступ к своему <a href="http://chart.apis.google.com">Chart API</a>. Идея очень простая - специально сконструированный URL возвращает картинку. Использование бесплатно, упоминают некий предел в 250ооо вызовов в день (~3 в секунду) после которого надо договариваться с гуглом отдельно.</p>
<p>Вот пример -</p>
<pre>http://chart.apis.google.com/chart
?chxt=x,y,r,t
&amp;cht=lc
&amp;chd=s:cEAELFJHHHKUju9uuXUc
&amp;chco=76A4FB
&amp;chs=200x125</pre>
<p><img src="http://chart.apis.google.com/chart?chxt=x,y,r,t&amp;cht=lc&amp;chd=s:cEAELFJHHHKUju9uuXUc&amp;chco=76A4FB&amp;chs=200x125" alt="http://chart.apis.google.com/chart?chxt=x,y,r,t&amp;cht=lc&amp;chd=s:cEAELFJHHHKUju9uuXUc&amp;chco=76A4FB&amp;chs=200x125" /></p>
<p>Типов графиков много, есть даже такие экзотические как этот</p>
<p><img src="http://chart.apis.google.com/chart?cht=rs&amp;chs=200x200&amp;chd=s:voJATd9v,MW9BA9&amp;chco=FF0000,FF9900&amp;chls=2.0,4.0,0.0%7C2.0,4.0,0.0&amp;chxt=x&amp;chxl=0:%7C0%7C45%7C90%7C135%7C180%7C225%7C270%7C315&amp;chxr=0,0.0,360.0&amp;chg=25.0,25.0,4.0,4.0&amp;chm=B,FF000080,0,1.0,5.0%7CB,FF990080,1,1.0,5.0%7Ch,0000FF,0,1.0,4.0%7Ch,3366CC80,0,0.5,5.0%7CV,00FF0080,0,1.0,5.0%7CV,008000,0,5.5,5.0%7Cv,00A000,0,6.5,4" alt="Radar chart" width="160" height="160" /></p>
<p>или этот - географические карты</p>
<p><img src="http://chart.apis.google.com/chart?cht=t&amp;chs=220x110&amp;chd=t:0,100,50,32,60,40,43,12,14,54,98,17,70,76,18,29&amp;chco=FFFFFF,FF0000,FFFF00,00FF00,FFFF00&amp;chld=DZEGMGAOBWNGCFKECGCVSNDJTZGHMZZM&amp;chtm=africa&amp;chf=bg,s,EAF7FE" alt="http://chart.apis.google.com/chart?cht=t&amp;chs=220x110&amp;chd=t:0,100,50,32,60,40,43,12,14,54,98,17,70,76,18,29&amp;chco=FFFFFF,FF0000,FFFF00,00FF00,FFFF00&amp;chld=DZEGMGAOBWNGCFKECGCVSNDJTZGHMZZM&amp;chtm=africa&amp;chf=bg,s,EAF7FE" /></p>
<p>Графика с временной линией нет, к сожалению. Для того что бы отобразить процесс надо самостоятельно заниматься группировкой.<br />
Другая понятная, но не очевидная вещь - данные заполняют всё пространство графика и соответственно растягиваются/сжимаются в зависимости от того сколько их там:</p>
<p><img src="http://chart.apis.google.com/chart?cht=lc&amp;chs=200x100&amp;chd=s:ithankYouGodformostthisamazingdayforthel&amp;chxt=x,y&amp;chxl=0:%7CApr%7CMay%7CJune%7C1:%7C%7C50+Kb" alt="Yellow line chart: less easy to read as data points are less spread along the x-axis" /></p>
<p><img src="http://chart.apis.google.com/chart?cht=lc&amp;chs=200x100&amp;chd=s:ithankYouGodformostthisamazingdayfortheleapinggreenlyspiritsoftreesandabluetruedreamofskyandforeverythingwhichisnaturalwhichisinfinitewhichisyesithankYouGodformostthisamazingdayfortheleapinggreenlyspiritsoftreesandabluetruedreamofskyandforeverythingwhichisnaturalwhichisinfinitewhichisyeseecummings&amp;chxt=x,y&amp;chxl=1:%7CApr%7CMay%7CJune%7C1:%7C%7C50+Kb" alt="Yellow line chart: very difficult to read as data points are very squashed along the x-axis" /></p>
<p>Идеальная замена генерации графика внутри браузера средствами JavaScript. Нагрузку перенесли с сервера на клиент, и теперь ещё раз с клиента на сторонний (Google) сервер. Не ясно, насколько забота о нагрузке клиента актуальна сегодня, но в 2006-том, когда я последний раз этим занимался, было очень актуально.</p>
<p>В этом месте опытные товарищи должны были вспомнить о практическом ограничении длины URI в HTTP. Так как данные передаются прямо в URL - то запихнуть туда можно их вполне ограниченное количество. См предложенные способы <a href="http://code.google.com/apis/chart/formats.html#extended">кодирования входных данных</a>.</p>
<p>Особенно опытные должны были также подумать о интернационализации. Тут всё плохо - поддержки нет, даже если вы не забудете сделать urlencode текста набранного не латинскими буквами.</p>
<p>Для публичного сайта, или стартапа какого - это просто клад. С коммерческим применением не всё ясно - можно ли себе позволить полагаться на внешний сервис? Как быть если сервис завтра исчезнет? Что если данные по которым это всё генерируется - private? и т.д.</p>
<p>С архитектурной точки зрения - сервис просто конфетка - яркий пример того, как сложно сделать простую вещь.</p>
<p>На этом дело, впрочем, не закончилось, и спустя полгода, весной 2008-го Google выпускает <a href="http://code.google.com/apis/visualization/documentation/">Google Visualization API</a>. Теперь визуализация ещё сложнее - DHTML и flash. Правда и возможности шире. Вот пример - выглядит просто потрясающе</p>
<div id="chart_div" style="width: 700px; height: 240px;">JavaScript удалён или не работает поэтому ничего не видно, <a href="http://www.katkovonline.com/2008/12/google-visualization-n-chart-api/">припасть к источнику</a></div>
<p><script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"><!--
      google.load('visualization', '1', {'packages':['annotatedtimeline']});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('date', 'Date');
        data.addColumn('number', 'Sold Pencils');
        data.addColumn('string', 'title1');
        data.addColumn('string', 'text1');
        data.addColumn('number', 'Sold Pens');
        data.addColumn('string', 'title2');
        data.addColumn('string', 'text2');
        data.addRows(6);
        data.setValue(0, 0, new Date(2008, 1 ,1));
        data.setValue(0, 1, 30000);
        data.setValue(0, 4, 40645);
        data.setValue(1, 0, new Date(2008, 1 ,2));
        data.setValue(1, 1, 14045);
        data.setValue(1, 4, 20374);
        data.setValue(2, 0, new Date(2008, 1 ,3));
        data.setValue(2, 1, 55022);
        data.setValue(2, 4, 50766);
        data.setValue(3, 0, new Date(2008, 1 ,4));
        data.setValue(3, 1, 75284);
        data.setValue(3, 4, 14334);
        data.setValue(3, 5, 'Out of Stock');
        data.setValue(3, 6, 'Ran out of stock on pens at 4pm');
        data.setValue(4, 0, new Date(2008, 1 ,5));
        data.setValue(4, 1, 41476);
        data.setValue(4, 2, 'Bought Pens');
        data.setValue(4, 3, 'Bought 200k pens');
        data.setValue(4, 4, 66467);
        data.setValue(5, 0, new Date(2008, 1 ,6));
        data.setValue(5, 1, 33322);
        data.setValue(5, 4, 39463); var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div'));
        chart.draw(data, {displayAnnotations: true});
      }
// --></script><br />
Графики эти не просто интерактивные, данные могут быть подгружены динамически - тут надо либо самому их отдавать особым образом (JSON, CSV) <a href="http://code.google.com/apis/visualization/documentation/dev/implementing_data_source.html">смотреть как именно</a>, либо закачать в документ <a href="http://docs.google.com/">Google Spreadsheets</a>. Там целое локальное API <a href="http://code.google.com/apis/visualization/documentation/reference.html#Query">смотреть API</a> вокруг этого наворочено.</p>
<p>Любопытно, что мелкий временной процесс и тут не просто отобразить, самый мелкий шаг этого графика - 1 час. Если со статическими графиками ещё можно было что-то придумать - то тут уже всё - никак нельзя.</p>
<p>Кроме такого выдающегося контрола, есть таблицы с сортировкой по клику, интерактивные столбики, пироги и географические карты <a href="http://code.google.com/apis/visualization/documentation/examples.html">смотреть что ещё есть</a> . Везде JavaScript и Adobe Flash т.е. решения довольно тяжеловесные, что не умаляет конечно, простоту анализа отображенных данных.</p>
<p>Отличная демонстрация на живом бизнес примере - Google Analytics практически полностью построен на этих графиках.</p>
<p>Всё опять совершенно бесплатно. Никаких ограничений вроде 250ооо вызовов, только <a href="http://www.google.com/accounts/TOS">Google Term of Service</a></p>
<p>Меня не отпускает ощущение, что легко визуализировать только относительно статические данные, а с динамикой придётся либо основательно повозиться (JavaScript code) либо устроить себе агрегирующий код на сервере, с которого и кормить цифрами эти контролы.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1165" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/google-visualization-n-chart-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Заметки очень хитрого архитектора</title>
		<link>http://www.katkovonline.com/2008/12/very-smart-architect-notes/</link>
		<comments>http://www.katkovonline.com/2008/12/very-smart-architect-notes/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 03:21:03 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[architect]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1069</guid>
		<description><![CDATA[Интересная статья об архитектуре одноразового почтового сервера Mailinator - The Architecture of Mailinator. Дизайн интересен сам по себе, написан живым языком а также служит отличной иллюстрацией того, насколько правильно сформулированное тех. задание улучшает качество продукта. Что такое качество см. здесь
Paul Tyma, автор, конечно немножко обманщик - он сам себе заказчик и волен менять условия как [...]]]></description>
			<content:encoded><![CDATA[<p>Интересная статья об архитектуре одноразового почтового сервера Mailinator - <a href="http://paultyma.blogspot.com/2006/12/architecture-of-mailinator.html">The Architecture of Mailinator</a>. Дизайн интересен сам по себе, написан живым языком а также служит отличной иллюстрацией того, насколько правильно сформулированное тех. задание улучшает качество продукта. Что такое качество см. <a href="http://www2.computer.org/portal/web/buildyourcareer/fa035">здесь</a></p>
<p>Paul Tyma, автор, конечно немножко обманщик - он сам себе заказчик и волен менять условия как ему вздумается, но в остроте ума ему не отказать.</p>
<p>Paul Tyma два раза молодец - вместо того, что бы письма форвардить куда скажут - он только показывает их на своём сайте, крутит рекламу и в ус себе не дует.</p>
<p>На таких как <a href="http://www.linkedin.com/in/paultyma">Paul Tyma</a> надо равняться!<br />
Java guy, работал в Google, теперь трудится как CTO в компании которая делает известный обфускатор кода - Dotfuscator для .Net</p>
<p>Тут Paul в третий раз молодец - для Java разве продашь что-то? так, срам один, а на любителях Microsoft и заработать не грех.</p>
<p><a href="http://www2.computer.org/portal/web/buildyourcareer/fa035"><br />
</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1069" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/very-smart-architect-notes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: webrunner for NUnit tests</title>
		<link>http://www.katkovonline.com/2008/12/work-webrunner-for-nunit-tests/</link>
		<comments>http://www.katkovonline.com/2008/12/work-webrunner-for-nunit-tests/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 05:16:15 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[c#]]></category>

		<category><![CDATA[functional tests]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1062</guid>
		<description><![CDATA[Хочется странного.
Есть набор юнит тестов (nunit) на C#, которые на самом деле не юнит, а вовсе даже acceptance/functional tests. Есть также желание их запускать через web. Нету только возможности. В стандартной поставке nunit есть GUI runner, есть консольный runner, а вот ASPX runner-a нету.
Покопавшись в интернете я нашёл некий runit 2.4.2, даже вместе с исходниками. [...]]]></description>
			<content:encoded><![CDATA[<p>Хочется странного.</p>
<p>Есть набор юнит тестов (nunit) на C#, которые на самом деле не юнит, а вовсе даже acceptance/functional tests. Есть также желание их запускать через web. Нету только возможности. В стандартной поставке nunit есть GUI runner, есть консольный runner, а вот ASPX runner-a нету.</p>
<p>Покопавшись в интернете я нашёл некий runit 2.4.2, даже вместе <a href="http://blogs.byte-force.com/media/p/1492.aspx">с исходниками</a>. Как и следовало ожидать, работать он отказался. Сначала жаловался на несоответствие assembly-ей, потом, после пересборки из исходников стал имитировать работу, рисовать web интерфейс, но тесты всё равно не запускает. Говорит - TestFixtureSetUp exception и всё тут. Пол дня воскресенья убил, уже наверно мог своё написать&#8230; Сдался, выкинул runit, а проблема всё равно осталась.</p>
<p>Можно конечно в CruiseControl.NET подцепить, как проект без исходников и артефактов, но как-то оно там не к месту вроде&#8230;</p>
<p>В общем рынок поразительно пуст - для functional tests предлагаются монстры вроде QEngine, QTP и прочего. На другом конце спектра питоновский twill. А по-середине - ничего нет. А делов-то! REST API протестировать, куда уж проще.</p>
<p>Справедливости ради, стоит заметить, что с Java было бы ничуть не легче. Я поначалу нашёл замечательный RestClient (<a href="http://code.google.com/p/rest-client/">с исходниками</a>) Обрадовался ужас как, думал - вот оно торжество разума над Microsoft, даже поучаствовал в коллективной разработке и дописал command line interface туда. Но по зрелому размышлению, если отринуть красивое GUI, это ничуть не лучше nunit тестов, а даже и хуже:</p>
<ul>
<li>программистам придётся писать на Java, в то время как основной проект на С#</li>
<li>web gui все равно нет</li>
<li>дебага нет, статической проверки ошибок нет, IDE нет</li>
<li>добавил туда поддержку JSON (30 минут) код теста с assert-ами разросся, начал добавлять поддержку XML посмотрел на размер тестов, ужаснулся</li>
</ul>
<p>В общем так и докатился до nunit тестов.</p>
<p>Как народ функциональное тестирование REST API организует - ума не приложу, похоже никак, или на коленке пишет что-то своё.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1062" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/work-webrunner-for-nunit-tests/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Cacti &#038; e-mail alerts</title>
		<link>http://www.katkovonline.com/2008/12/work-cacti-e-mail-alerts/</link>
		<comments>http://www.katkovonline.com/2008/12/work-cacti-e-mail-alerts/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 15:29:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1053</guid>
		<description><![CDATA[Последняя преграда на пути к полному забвению AppManager-а - это email alerts. AppManager out of the box может их отсылать и вести состояние мониторов, а Cacti нет. К счастью решение есть. Вот тут нужно взять Plugin Architecture и установить, затем здесь взять plug-in  			Thold.
Выглядеть оно обещает вот так

Народ на форумах вроде не жалуется. Надо как [...]]]></description>
			<content:encoded><![CDATA[<p>Последняя преграда на пути к полному забвению AppManager-а - это email alerts. AppManager out of the box может их отсылать и вести состояние мониторов, а Cacti нет. К счастью решение есть. Вот <a href="http://cactiusers.org/downloads/patches/" target="_blank">тут</a> нужно взять <a href="http://cactiusers.org/downloads/cacti-plugin-arch.zip">Plugin Architecture</a> и установить, затем <a href="http://cactiusers.org/downloads/plugins/" target="_blank">здесь</a> взять plug-in  			<a href="http://cactiusers.org/downloads/thold.zip">Thold</a>.</p>
<p>Выглядеть оно обещает вот так</p>
<p><a href="http://www.katkovonline.com/wp-content/uploads/2008/12/cacti-thold.jpg"><img class="alignnone size-medium wp-image-1054" title="cacti-thold" src="http://www.katkovonline.com/wp-content/uploads/2008/12/cacti-thold-300x182.jpg" alt="" width="300" height="182" /></a></p>
<p>Народ на форумах вроде не жалуется. Надо как руки дойдут попробовать. К сожалению AppManager уже всё равно куплен.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1053" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/work-cacti-e-mail-alerts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Load average</title>
		<link>http://www.katkovonline.com/2008/12/work-load-average/</link>
		<comments>http://www.katkovonline.com/2008/12/work-load-average/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 05:36:10 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[graph]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1039</guid>
		<description><![CDATA[Очень странно себя ведёт Debian Linux на Amazon EC2
Никаких cron job нет, нагрузки тоже никакой нет, чего оно скачет? Загадка. И спросить не у кого. Прям как в том анекдоте, про &#8220;странный стук в подвале&#8221;
Вот 5-ти минутное среднее

а вот 30-ти минутное

 ]]></description>
			<content:encoded><![CDATA[<p>Очень странно себя ведёт Debian Linux на Amazon EC2<br />
Никаких cron job нет, нагрузки тоже никакой нет, чего оно скачет? Загадка. И спросить не у кого. Прям как в том анекдоте, про &#8220;странный стук в подвале&#8221;</p>
<p>Вот 5-ти минутное среднее<br />
<a href="http://www.katkovonline.com/wp-content/uploads/2008/12/linux-load-average-5min.png"><img class="size-full wp-image-1040 alignnone" title="linux-load-average-5min" src="http://www.katkovonline.com/wp-content/uploads/2008/12/linux-load-average-5min.png" alt="" width="297" height="119" /></a></p>
<p>а вот 30-ти минутное</p>
<p><a href="http://www.katkovonline.com/wp-content/uploads/2008/12/linux-load-average-30min.png"><img class="alignleft size-full wp-image-1041" title="linux-load-average-30min" src="http://www.katkovonline.com/wp-content/uploads/2008/12/linux-load-average-30min.png" alt="" width="298" height="120" /></a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1039" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/work-load-average/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Парадигмы программирования</title>
		<link>http://www.katkovonline.com/2008/12/programming_paradigm/</link>
		<comments>http://www.katkovonline.com/2008/12/programming_paradigm/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 03:44:54 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=1037</guid>
		<description><![CDATA[Замечательная статья о парадигмах программирования ссылка
 ]]></description>
			<content:encoded><![CDATA[<p>Замечательная статья о парадигмах программирования <a href="http://lisp-univ-etc.blogspot.com/2008/12/blog-post.html">ссылка</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=1037" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/12/programming_paradigm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: MS SQL Server books</title>
		<link>http://www.katkovonline.com/2008/10/work-ms-sql-server-books/</link>
		<comments>http://www.katkovonline.com/2008/10/work-ms-sql-server-books/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 21:47:41 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[MS SQL Server]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=962</guid>
		<description><![CDATA[Glenn Berry, DB architect with NewsGator recommends the following books to read.
Must be really good books&#8230;










 ]]></description>
			<content:encoded><![CDATA[<p>Glenn Berry, DB architect with NewsGator recommends the following books to read.<br />
Must be really good books&#8230;</p>
<table border="0">
<tbody>
<tr>
<td>
<div id="attachment_963" class="wp-caption alignnone" style="width: 140px"><a href="http://www.amazon.com/Inside-Server-Microsoft-Windows-System/dp/0321397967"><img class="size-medium wp-image-963" title="inside-sql-server-2005-tools" src="http://www.katkovonline.com/wp-content/uploads/2008/10/inside-sql-server-2005-tools.jpg" alt="Inside SQL Server 2005 Tools" width="130" /></a><p class="wp-caption-text"><br />Inside SQL Server 2005 Tools</p></div></td>
<td>
<p><div id="attachment_966" class="wp-caption alignnone" style="width: 140px"><a href="http://www.amazon.com/Inside-Microsoft-SQL-Server-2005/dp/0735621055"><img class="size-medium wp-image-966" title="inside-microsoft-sql-server-2005-the-storage-engine1" src="http://www.katkovonline.com/wp-content/uploads/2008/10/inside-microsoft-sql-server-2005-the-storage-engine1.jpg" alt="Inside Microsoft SQL Server(TM) 2005: The Storage Engine" width="107" height="130" /></a><p class="wp-caption-text">Inside Microsoft SQL Server(TM) 2005: The Storage Engine</p></div></td>
</tr>
</tbody>
</table>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=962" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/10/work-ms-sql-server-books/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP: full flavor RSS</title>
		<link>http://www.katkovonline.com/2008/10/php-full-flavor-rss/</link>
		<comments>http://www.katkovonline.com/2008/10/php-full-flavor-rss/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 05:37:33 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=792</guid>
		<description><![CDATA[Корреспондент не плохой сайт, и RSS потоки там тоже не плохие, одно плохо - вместо полной статьи - там несколько предложений. Написал PHP скриптики которые вставляют полную статью в RSS что бы потом в метро можно было почитать. Без особых фокусов параллельно выкачивать странички PHP не умеет,  а значит и работает не так, что [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://korrespondent.net/">Корреспондент</a> не плохой сайт, и RSS потоки там тоже не плохие, одно плохо - вместо полной статьи - там несколько предложений. Написал PHP скриптики которые вставляют полную статью в RSS что бы потом в метро можно было почитать. Без особых фокусов параллельно выкачивать странички PHP не умеет,  а значит и работает не так, что бы сильно быстро.</p>
<p>Пользуйтесь, кому надо.</p>
<p>Украина : Политика <a href="http://k.img.com.ua/rss/ru/politics.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-politics.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a><br />
Бизнес <a href="http://k.img.com.ua/rss/ru/business.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-business.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a><br />
Киев <a href="http://k.img.com.ua/rss/ru/kyiv.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-kiev.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a><br />
Мир <a href="http://k.img.com.ua/rss/ru/world.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-world.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a><br />
Россия <a href="http://k.img.com.ua/rss/ru/russia.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-russia.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a><br />
Мир о нас <a href="http://k.img.com.ua/rss/ru/worldabus.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Заголовки</a> <a href="http://www.katkovonline.com/feeds/korrespondent.net-world-about-us.xml"><img class="alignnone size-full wp-image-793" title="rss_or" border=0 src="http://www.katkovonline.com/wp-content/uploads/2008/10/rss_or.gif" alt="" width="14" height="14" />Полные новости</a></p>
<p>Исходный код вот тут <a href="http://www.katkovonline.com/wp-content/uploads/2008/10/korrespondentnetphp.html">korrespondent.net.php</a> и тут <a href="http://www.katkovonline.com/wp-content/uploads/2008/10/korrespondentnet-politicsphp.html">korrespondentnet-politics.php</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=792" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/10/php-full-flavor-rss/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Self Improvement</title>
		<link>http://www.katkovonline.com/2008/07/work-self-improvement/</link>
		<comments>http://www.katkovonline.com/2008/07/work-self-improvement/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 14:47:16 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=775</guid>
		<description><![CDATA[Слава Панкратов, ре-постит замечательную цитату.
Классик личного брэндинга Томас Гэд отмечает, что для эффективного самопродвижения личность должна развиваться в четырёх направлениях:

функциональном - профессионализм
менторском - способность учить, менять жизнь других людей
социальном - контактность
духовном - наличие более высоких целей, чем у обычного профессионала; ощущение своей миссии


Мне кажется эти мысли достойны того, что бы стать личными планами.
Любопытно также, что [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pankratov.org.ua">Слава Панкратов</a>, <a href="http://pankratov.org.ua/daily/4vectors">ре-постит</a> замечательную <a href="http://ury-smirnov.livejournal.com/36967.html">цитату</a>.</p>
<blockquote><p>Классик личного брэндинга Томас Гэд отмечает, что для эффективного самопродвижения личность должна развиваться в четырёх направлениях:</p>
<ul>
<li>функциональном - профессионализм</li>
<li>менторском - способность учить, менять жизнь других людей</li>
<li>социальном - контактность</li>
<li>духовном - наличие более высоких целей, чем у обычного профессионала; ощущение своей миссии</li>
</ul>
</blockquote>
<p>Мне кажется эти мысли достойны того, что бы стать личными планами.</p>
<p>Любопытно также, что направления развития приведены в порядке возрастания сложности реализации. Первые цели три легко объяснимы и успешность их достижения будет прямо отражаться на благосостоянии, но мысль о &#8220;более высоких целях&#8221; достаточно туманна в разрезе IT.</p>
<p>Очевидно, что это не маркетинговые девизы и лозунги коорпораций, это что-то во что надо верить и чего планомерно добиваться. Но какая &#8220;особая миссия&#8221; может быть у &#8220;обычного профессионала&#8221;?<br />
Впрочем, для некоторых этот вопрос уже <a href="http://alexeymas.livejournal.com/182989.html">решён</a>.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=775" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/07/work-self-improvement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: PHP skills</title>
		<link>http://www.katkovonline.com/2008/07/work-php-skills/</link>
		<comments>http://www.katkovonline.com/2008/07/work-php-skills/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 17:12:24 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=721</guid>
		<description><![CDATA[
смеха ради прошёл тест.  Полгода наверно не брал в руки шашек, а серьёзно так и никогда не брал. Если бы в гугль подсматривал наверно ещё бы круче сдал
 ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.corp.mamba.ru/test/promo.phtml"><img src="http://www.katkovonline.com/wp-content/uploads/2008/07/you-are-good-php-programmer.gif" style="border-width: 0px; width: 200px; height: 69px" alt="you-are-good-php-programmer.gif" border="0" width="200" height="69" /></a></p>
<p>смеха ради прошёл тест.  Полгода наверно не брал в руки шашек, а серьёзно так и никогда не брал. Если бы в гугль подсматривал наверно ещё бы круче сдал</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=721" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/07/work-php-skills/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Life: IT bubble 1.0</title>
		<link>http://www.katkovonline.com/2008/07/life-it-bubble-10/</link>
		<comments>http://www.katkovonline.com/2008/07/life-it-bubble-10/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 05:36:20 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=718</guid>
		<description><![CDATA[Замечательный текст. Про рунет времен первого интернет бума. Очень познавательно.
http://www.ashmanov.com/pap/bubble/
Настоящие имена компаний изменены, но при желании узнаются. Сохраню пожалуй себе на случай если пропадёт статья.
Жизнь внутри пузыря
 ]]></description>
			<content:encoded><![CDATA[<p>Замечательный текст. Про рунет времен первого интернет бума. Очень познавательно.<br />
<a href="http://www.ashmanov.com/pap/bubble/">http://www.ashmanov.com/pap/bubble/</a></p>
<p>Настоящие имена компаний изменены, но при желании узнаются. Сохраню пожалуй себе на случай если пропадёт статья.<br />
<a href="http://www.katkovonline.com/wp-content/uploads/2008/07/life-inside-the-buuble-igor-ashmanov.htm" title="life-inside-the-buuble-igor-ashmanov.htm">Жизнь внутри пузыря</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=718" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/07/life-it-bubble-10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Double-Check Locking</title>
		<link>http://www.katkovonline.com/2008/07/work-double-check-locking/</link>
		<comments>http://www.katkovonline.com/2008/07/work-double-check-locking/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 17:05:36 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=715</guid>
		<description><![CDATA[Открытие дня - Double-Check Locking работает в .NET в отличие от Java.
 ]]></description>
			<content:encoded><![CDATA[<p>Открытие дня - Double-Check Locking работает в .NET в отличие от Java.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=715" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/07/work-double-check-locking/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: C# and MS</title>
		<link>http://www.katkovonline.com/2008/04/work-c-and-ms/</link>
		<comments>http://www.katkovonline.com/2008/04/work-c-and-ms/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 04:29:25 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=626</guid>
		<description><![CDATA[Предал светлые идела Java, работаю над проектом на C#. Прошёл месяц, так что все начальные впечатления должны были сгладится - и вот каков сухой остаток.
Чувствую себя маленькой шестеренкой в большом часовом организме Microsoft. Я уже и забыл как это. Никогда не испытывал никаких неприязненных чувств к MS, всегда считал да и продолжаю считать holy war-ные [...]]]></description>
			<content:encoded><![CDATA[<p>Предал светлые идела Java, работаю над проектом на C#. Прошёл месяц, так что все начальные впечатления должны были сгладится - и вот каков сухой остаток.</p>
<p>Чувствую себя маленькой шестеренкой в большом часовом организме Microsoft. Я уже и забыл как это. Никогда не испытывал никаких неприязненных чувств к MS, всегда считал да и продолжаю считать holy war-ные дела большими глупостями. Но разница с Java миром сильно режет глаз.</p>
<p>.Net это мир чистогана в империи MS. Шаг влево, шаг вправо, прыжок на месте карается тщетным чтением MSDN. Все что нужно среднестатистическому программисту уже сделано в core .NET, если это не сделано - значит это продаётся вот тут и тут за $1000+, если это не продаётся, значит это ересь. <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Забавно видеть как такое заботливо прокопанное русло неотвратно приводит ко всё большему и большему vendor-binding. Это как карусель, на которой весело ехать, но тяжело соскочить.</p>
<p>Наверно если бы я был Microsoft я бы тоже себя так вёл, в конце концов мы тут не благотворительностью занимаемся, но не приятно чувствовать как тебя тянут куда-то.</p>
<p>P.S. А сам язык C# - хорош да.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=626" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/04/work-c-and-ms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: IT Consulting</title>
		<link>http://www.katkovonline.com/2008/02/work-it-consulting/</link>
		<comments>http://www.katkovonline.com/2008/02/work-it-consulting/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 04:53:07 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=594</guid>
		<description><![CDATA[ What are the drawbacks of contracting?
    The biggest drawback of contracting is its unpredictability. You never know when you will be working or for how long. While you work the money may be very good, but contracts can end without warning and it may take longer to find a new contract [...]]]></description>
			<content:encoded><![CDATA[<p> What are the drawbacks of contracting?</p>
<blockquote><p>    The biggest drawback of contracting is its unpredictability. You never know when you will be working or for how long. While you work the money may be very good, but contracts can end without warning and it may take longer to find a new contract than you expected. If your technical skills are highly specialized, you may have to travel around the country to keep busy or you may have to settle in a particular area, like Silicon Valley, where demand for your skills is strong.<br />
Another drawback to consulting is that over time you may burn out on being a gypsy and begin to feel that in spite of all your labor you never build anything lasting. As you move from project to project you learn and forget the details of dozens of systems, while you form and break relationships with dozens of coworkers. This can be exciting for the first few years, particularly when coupled with high earnings. But after a while, many people find it hard to keep on living this way.<br />
Yet another challenge of contracting is that contractors are almost always hired to do the kinds work they have done before. If you are a C++ programmer, you&#8217;ll be offered C++ contracts. If you&#8217;re a DB2 specialist you&#8217;ll get jobs that involve DB2 databases.</p>
<p>When recruiters offer you ever increasing rates for doing the same kinds of work over and over again, it is hard to turn them down and hunt for the rarer contracts that let you learn new things that enhance your skills. Because of this, over time it can become increasingly difficult to get paid experience using new technology.<br />
Eventually you may get stuck in a software ghetto, able to find work only in the handful of companies that still need people with your obsolescing skills.</p></blockquote>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/answers-for-computer-contractors.JPG" style="width: 99px; height: 150px" alt="Answers for Computer Contractors" align="left" height="150" width="99" /></p>
<p>Из этой вот книжки.<br />
<span style="clear: both"></span></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=594" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-it-consulting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: &#8220;Every cloud has a silver lining&#8230;&#8221;</title>
		<link>http://www.katkovonline.com/2008/02/work-every-cloud-has-a-silver-lining/</link>
		<comments>http://www.katkovonline.com/2008/02/work-every-cloud-has-a-silver-lining/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 17:47:57 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=578</guid>
		<description><![CDATA[Вот здесь одна из не многих не сегодня толковых статей о cloud computing. Коментарии тоже ценные.
 ]]></description>
			<content:encoded><![CDATA[<p>Вот <a href="http://www.johnmwillis.com/redmonk/demystifying-clouds">здесь</a> одна из не многих не сегодня толковых статей о cloud computing. Коментарии тоже ценные.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=578" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-every-cloud-has-a-silver-lining/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Life: Computer Error Message</title>
		<link>http://www.katkovonline.com/2008/02/life-computer-error-message/</link>
		<comments>http://www.katkovonline.com/2008/02/life-computer-error-message/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 15:35:49 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=577</guid>
		<description><![CDATA[Computer Error Message:
Bad command or the file name. Good try, though.
 ]]></description>
			<content:encoded><![CDATA[<p>Computer Error Message:</p>
<blockquote><p>Bad command or the file name. Good try, though.</p></blockquote>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=577" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/life-computer-error-message/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: PHP 5 From Novice to Professional</title>
		<link>http://www.katkovonline.com/2008/02/work-php5/</link>
		<comments>http://www.katkovonline.com/2008/02/work-php5/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 14:40:27 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[brainbench]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=570</guid>
		<description><![CDATA[Прочёл книжку - Beginning PHP 5 and MySQL 5 - From Novice to Professional
Поковырялся.
Сдал экзамен на BrainBench на мастера.
Фигня этот ваш PHP.
А книжка хорошая, кому PHP за неделю нужно - рекомендую. Как справочник не годится, для справочника лучше родной документации не нашёл ничего, но как обзор - хороша. Я искал что-то вроде PHP for Java [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/book-beginning_php_5_and_mysql_5.jpg" style="width: 121px; height: 160px" alt="Beginning PHP 5 and MySQL 5 - From Novice to Professional" align="left" height="160" width="121" />Прочёл книжку - Beginning PHP 5 and MySQL 5 - From Novice to Professional<img src="http://www.katkovonline.com/wp-content/uploads/2008/02/php5.gif" style="width: 170px; height: 50px" alt="PHP5 Master Certificate" align="right" height="50" width="170" /></p>
<p>Поковырялся.</p>
<p>Сдал экзамен на BrainBench на мастера.<br />
Фигня этот ваш PHP.</p>
<p>А книжка хорошая, кому PHP за неделю нужно - рекомендую. Как справочник не годится, для справочника лучше родной документации не нашёл ничего, но как обзор - хороша. Я искал что-то вроде PHP for Java Developers, не нашёл - видимо такого в природе нет.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=570" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-php5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: To burst on not to burst</title>
		<link>http://www.katkovonline.com/2008/02/work-to-burst-on-not-to-burst/</link>
		<comments>http://www.katkovonline.com/2008/02/work-to-burst-on-not-to-burst/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 04:59:26 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=566</guid>
		<description><![CDATA[Разговаривал сегодня с Anadi Shrivastava (CEO Verax) со-владельцем консалтинговой фирмы в Торонто. Спросил его, что он думает про наступающую рецессию и про то как фирмы сократят своих IT работников и вместо них наймут консалтеров, которых тоже выгонят, но потом, когда уже совсем плохо будет. В общем про всё то, что писала госпожа _Mak_ .
По его [...]]]></description>
			<content:encoded><![CDATA[<p>Разговаривал сегодня с Anadi Shrivastava (CEO Verax) со-владельцем консалтинговой фирмы в Торонто. Спросил его, что он думает про наступающую рецессию и про то как фирмы сократят своих IT работников и вместо них наймут консалтеров, которых тоже выгонят, но потом, когда уже совсем плохо будет. В общем про всё то, что писала госпожа <a href="http://users.livejournal.com/_mak_">_Mak_</a> .</p>
<p>По его мнению, если бы крупный фирмы собирались бы увольнять сотрудников, то ещё год назад они бы начали останавливать и откладывать проекты, перетасовывать людей внутри компании, искать им работу и соответственно сокращать заказы на внешних консалтеров. Он говорит, что такого он не наблюдает даже сейчас. Приводил в пример BMO, TD и BNS</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=566" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-to-burst-on-not-to-burst/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Microsoft - Yahoo deal</title>
		<link>http://www.katkovonline.com/2008/02/work-microsoft-yahoo-deal/</link>
		<comments>http://www.katkovonline.com/2008/02/work-microsoft-yahoo-deal/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 22:14:02 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[deal]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=544</guid>
		<description><![CDATA[Интересная точка зрения на возможную сделку Microsoft - Yahoo
Marcelo Carvalho, IT manager in San Francisco, считает что, купив Yahoo MS распишется в своем собсвенном бессилии строить большие интернет системы на OS Windows:
  I do not know if anybody, including Marat Glazer, the Los Angeles software
developer who wrote the &#8220;Microsoft&#8217;s Yahoo Bid Genius&#8221; Talk Back letter, [...]]]></description>
			<content:encoded><![CDATA[<p>Интересная точка зрения на возможную сделку Microsoft - Yahoo</p>
<p>Marcelo Carvalho, IT manager in San Francisco, считает что, купив Yahoo MS распишется в своем собсвенном бессилии строить большие интернет системы на OS Windows:</p>
<blockquote><p>  I do not know if anybody, including Marat Glazer, the Los Angeles software<br />
developer who wrote the &#8220;Microsoft&#8217;s Yahoo Bid Genius&#8221; Talk Back letter, has<br />
understood the layer beneath a Microsoft Corp. (MSFT)-Yahoo Inc. (YHOO) deal.</p>
<p>The potential deal is not the same as two petroleum companies merging by just<br />
putting together their respective 6% and 22% market shares, changing the plastic<br />
banners at the gas stations, and at most, deciding from whom to continue buying<br />
drill bits.</p>
<p>It is an entirely different beast.</p>
<p>Microsoft runs on the Windows platform and it has proved inadequate to run big<br />
Internet companies. There is not one big Internet company - and I mean &#8220;BIG&#8221;<br />
like Google Inc. (GOOG), Yahoo, <a href="http://amazon.com/" target="_blank">Amazon.com</a> Inc. (AMZN), eBay Inc. (EBAY) and<br />
such - that runs on Windows besides Microsoft. Its software platform has been a<br />
disaster supporting its search engine, email and other free services.</p>
<p>On that front, Microsoft is being beaten by Google and Yahoo, both running on<br />
open source software, which has shown to be much more efficient than Windows<br />
servers. Of the top 500 supercomputers about 80% now run on Linux, including the<br />
top two, which run on the SuSE Linux Enterprise Server.</p>
<p>Now here comes the big issue!<br />
Will Microsoft move Yahoo to Windows?<br />
If so, Microsoft will go broke because this is just what hasn&#8217;t worked well.</p>
<p>If the company does not, it will be signing the Windows platform obituary<br />
because when people realize that Microsoft itself can run on Linux and does not<br />
need Windows, they will follow through.</p>
<p>To my knowledge the simple fact of Microsoft bidding to buy Yahoo means that<br />
Microsoft has thrown in the towel on its operating system, and that the Windows<br />
platform is a thing of the past.</p></blockquote>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=544" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-microsoft-yahoo-deal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Books</title>
		<link>http://www.katkovonline.com/2008/02/work-books/</link>
		<comments>http://www.katkovonline.com/2008/02/work-books/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 18:55:52 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[load balancing]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[perfomance]]></category>

		<category><![CDATA[scalable]]></category>

		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=539</guid>
		<description><![CDATA[Tony Bourke&#8217;s Server Load Balancing
Хвалят эту книжку - надо будет где-то взять почитать.

Вот эти две очень хороши

А вот Speed Up Your Site - оказалась откровенно слабой, как и MySQL Cookbook
  
Где только время найти это всё читать&#8230;
 ]]></description>
			<content:encoded><![CDATA[<p>Tony Bourke&#8217;s <span>Server Load Balancing</span><br />
Хвалят эту книжку - надо будет где-то взять почитать.</p>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/tony-bourkes-server-load-balancing.gif" style="width: 122px; height: 160px" ilo-full-src="http://www.katkovonline.com/wp-content/uploads/2008/02/tony-bourkes-server-load-balancing.gif" alt="Tony Bourke’s Server Load Balancing" height="160" width="122" /></p>
<p>Вот эти две очень хороши</p>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/high-performance-mysql.gif" style="width: 122px; height: 160px" ilo-full-src="http://www.katkovonline.com/wp-content/uploads/2008/02/high-performance-mysql.gif" alt="High Performance MySQL" height="160" width="122" /><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/building-scalable-web-sites.jpg" ilo-full-src="http://www.katkovonline.com/wp-content/uploads/2008/02/building-scalable-web-sites.jpg" alt="Building Scalable Web Sites" /></p>
<p>А вот Speed Up Your Site - оказалась откровенно слабой, как и MySQL Cookbook</p>
<p><img src="http://www.katkovonline.com/wp-content/uploads/2008/02/speed-up-your-site-web-site-optimization.gif" ilo-full-src="http://www.katkovonline.com/wp-content/uploads/2008/02/speed-up-your-site-web-site-optimization.gif" alt="Speed Up Your Site - Web Site Optimization" />  <img src="http://www.katkovonline.com/wp-content/uploads/2008/02/mysql-cookbook.jpg" ilo-full-src="http://www.katkovonline.com/wp-content/uploads/2008/02/mysql-cookbook.jpg" alt="MySQL Cookbook" /></p>
<p>Где только время найти это всё читать&#8230;</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=539" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-books/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: MySQL config</title>
		<link>http://www.katkovonline.com/2008/02/537/</link>
		<comments>http://www.katkovonline.com/2008/02/537/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 18:36:08 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[config]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=537</guid>
		<description><![CDATA[Вот тут Admin Zone Forums - MySQL Server Tweaking Basic обсуждают настройку MySQL, сохраню ка, я  это себе, там есть что почитать.
А вот тут приводят волешбный конфиг, его тоже надо изучить

Magical config for high performance
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
[server]
port=3306
socket=/tmp/mysql.sock
user=mysql
datadir=/var/db/mysql/
basedir=/usr/local
max_connections=3000
max_connect_errors=10
table_cache=2048
max_allowed_packet=1M
binlog_cache_size=1M
max_heap_table_size=64M
sort_buffer_size=64K
join_buffer_size=1M
thread_cache=16
thread_concurrency=16
thread_stack=196K
query_cache_size=0
ft_min_word_len=4
default_table_type=MYISAM
transaction_isolation=REPEATABLE-READ
tmp_table_size=64M
skip-locking
server-id=1
innodb_status_file=0
innodb_data_home_dir=/var/db/mysql/
innodb_data_file_path=ibdata1:100M:autoe
xtend
innodb_log_group_home_dir=/var/db/mysql/
innodb_buffer_pool_size=500M
innodb_additional_mem_pool_size=20M
innodb_log_file_size=900M
innodb_log_files_in_group=2
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=300
innodb_locks_unsafe_for_binlog=1
innodb_thread_concurrency=0
 ]]></description>
			<content:encoded><![CDATA[<p>Вот тут<a href="http://www.katkovonline.com/?attachment_id=536" rel="attachment wp-att-536" title="Admin Zone Forums - MySQL Server Tweaking Basics"> Admin Zone Forums - MySQL Server Tweaking Basic</a> обсуждают настройку MySQL, сохраню ка, я  это себе, там есть что почитать.<br />
А вот тут приводят волешбный конфиг, его тоже надо изучить<br />
<span id="more-537"></span><br />
Magical config for high performance</p>
<p><code>[client]<br />
#password = your_password<br />
port = 3306<br />
socket = /tmp/mysql.sock</code></p>
<p>[server]<br />
port=3306<br />
socket=/tmp/mysql.sock<br />
user=mysql<br />
datadir=/var/db/mysql/<br />
basedir=/usr/local<br />
max_connections=3000<br />
max_connect_errors=10<br />
table_cache=2048<br />
max_allowed_packet=1M<br />
binlog_cache_size=1M<br />
max_heap_table_size=64M<br />
sort_buffer_size=64K<br />
join_buffer_size=1M<br />
thread_cache=16<br />
thread_concurrency=16<br />
thread_stack=196K<br />
query_cache_size=0<br />
ft_min_word_len=4<br />
default_table_type=MYISAM<br />
transaction_isolation=REPEATABLE-READ<br />
tmp_table_size=64M<br />
skip-locking<br />
server-id=1<br />
innodb_status_file=0<br />
innodb_data_home_dir=/var/db/mysql/<br />
innodb_data_file_path=ibdata1:100M:autoe<br />
xtend<br />
innodb_log_group_home_dir=/var/db/mysql/<br />
innodb_buffer_pool_size=500M<br />
innodb_additional_mem_pool_size=20M<br />
innodb_log_file_size=900M<br />
innodb_log_files_in_group=2<br />
innodb_log_buffer_size=8M<br />
innodb_flush_log_at_trx_commit=1<br />
innodb_lock_wait_timeout=300<br />
innodb_locks_unsafe_for_binlog=1<br />
innodb_thread_concurrency=0</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=537" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/537/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: MySQL profiling</title>
		<link>http://www.katkovonline.com/2008/02/work-mysql-profiling/</link>
		<comments>http://www.katkovonline.com/2008/02/work-mysql-profiling/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 18:24:28 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[innotop]]></category>

		<category><![CDATA[MONyog]]></category>

		<category><![CDATA[mytop]]></category>

		<category><![CDATA[profiling]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=535</guid>
		<description><![CDATA[А здесь продают не плохую вещь для постоянного мониторинга MySQL instance
MONyog - Single Server - $218 CAD
Попробовал - хорошая штука. Свою такую за $218 не написать конечно.
Ещё пробовал перловые innotop-1.6.0 и mytop-1.6
Как говорится - &#8220;&#8230; жалкое подобие левой руки&#8221;, зато бесплатно.
 ]]></description>
			<content:encoded><![CDATA[<p>А <a href="https://secure.shareit.com/shareit/product.html?productid=300171895" title="тыц">здесь</a> продают не плохую вещь для постоянного мониторинга MySQL instance<br />
MONyog - Single Server - $218 CAD</p>
<p>Попробовал - хорошая штука. Свою такую за $218 не написать конечно.<br />
Ещё пробовал перловые innotop-1.6.0 и mytop-1.6<br />
Как говорится - &#8220;&#8230; жалкое подобие левой руки&#8221;, зато бесплатно.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=535" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-mysql-profiling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: SQL Relay</title>
		<link>http://www.katkovonline.com/2008/02/work-sql-relay/</link>
		<comments>http://www.katkovonline.com/2008/02/work-sql-relay/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 18:20:27 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=534</guid>
		<description><![CDATA[Вот здесь есть некая волшебная штука - SQL Relay
Обещают возможность соединения с множеством MySQL серверов
The good news is that SQL Relay&#8217;s performance here is comparable to PHP&#8217;s persistent connections. The reason is because SQL Relay has already established X number of Oracle (or MySQL) connections and strives to maintain that number continually. Then, your PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Вот <a href="http://sqlrelay.sourceforge.net" title="тыц">здесь</a> есть некая волшебная штука - SQL Relay<br />
Обещают возможность соединения с множеством MySQL серверов</p>
<blockquote><p>The good news is that SQL Relay&#8217;s performance here is comparable to PHP&#8217;s persistent connections. The reason is because SQL Relay has already established X number of Oracle (or MySQL) connections and strives to maintain that number continually. Then, your PHP app connects and disconnects from the SQL Relay server, which is lightweight.</p></blockquote>
<blockquote><p>Getting everything to run smoothly does take a fair bit of tuning and careful management of your SQL Relay connections. If you have leaky code that doesn&#8217;t disconnect properly, you can still flood your connection pool, no pun intended. Wish I had benchmarks but, the main thing is that SQL Relay offers similar performance and won&#8217;t flood your database with connections, both of which are good things.</p></blockquote>
<p>Выглядит заменчиво, надо посмотреть - вероятно это дешевая альтернатива domain data separation при больших нагрузках</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=534" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-sql-relay/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Consulting trends</title>
		<link>http://www.katkovonline.com/2008/02/work-consulting-trends/</link>
		<comments>http://www.katkovonline.com/2008/02/work-consulting-trends/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 04:27:13 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<category><![CDATA[consulting]]></category>

		<category><![CDATA[salary]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=530</guid>
		<description><![CDATA[Вот госпожа _Mak_ очень интересно пишет вот тут
Про консалтерские компании разного размера:
 Пропорции талантливых программистов у них вполне средние - 1 умный на 9 болванов, и хотя они нам и своим работникам говорят, что они очень беспокоятся об их профессиональном росте, но выражается это только в том, что они время от времени оплачивают технические курсы. [...]]]></description>
			<content:encoded><![CDATA[<p>Вот госпожа <a href="http://users.livejournal.com/_mak_">_Mak_</a> очень интересно пишет вот <a href="http://users.livejournal.com/_mak_/81541.html">тут</a></p>
<p>Про консалтерские компании разного размера:</p>
<blockquote><p> Пропорции талантливых программистов у них вполне средние - 1 умный на 9 болванов, и хотя они нам и своим работникам говорят, что они очень беспокоятся об их профессиональном росте, но выражается это только в том, что они время от времени оплачивают технические курсы. Никакого реального менторинга у них нет, в частности потому что программистов гоняют с проекта на проект под разных начальников, так что никто никогда не может создать отношений больше чем на несколько месяцев&#8230;</p></blockquote>
<p>и вот ещё</p>
<blockquote><p>&#8230;живут по принципу волка ноги кормят. Они все время в поисках людей, берут без разбору и бросают на проект не глядя.</p></blockquote>
<p>И чуть далее в коментариях про зарплаты которые они им платят:</p>
<blockquote><p>&#8230;просто никто не рассуждает &#8220;хоть парень и не просит, но он гений, а потому дадим-ка ему по верхней границе&#8221;. Все рассуждают &#8220;парень сейчас зарабатывает Х, дадим ему Х+5 он будет рад&#8221;. А Х, между тем, прямо зависит от того как часто этот парень меняет работу или скандалит с начальством за зарплату (если сидит на одном месте).</p></blockquote>
<p>Всё в точку.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=530" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-consulting-trends/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: MySQL</title>
		<link>http://www.katkovonline.com/2008/02/work-mysql/</link>
		<comments>http://www.katkovonline.com/2008/02/work-mysql/#comments</comments>
		<pubDate>Sat, 02 Feb 2008 18:28:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=517</guid>
		<description><![CDATA[На тему покупки Sun-ом MySQL AB, встретил интересный комментарий:
-&#160; Теперь вместо LAMP будет LAPP, только и всего 
 ]]></description>
			<content:encoded><![CDATA[<p>На тему покупки Sun-ом MySQL AB, встретил интересный комментарий:<br />
-&nbsp; Теперь вместо LAMP будет LAPP, только и всего <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=517" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/02/work-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work: Saying</title>
		<link>http://www.katkovonline.com/2008/01/work-saying/</link>
		<comments>http://www.katkovonline.com/2008/01/work-saying/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 18:43:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=514</guid>
		<description><![CDATA[Given the choice between good performance and no performance, choose wisely&#8230;
 ]]></description>
			<content:encoded><![CDATA[<p>Given the choice between good performance and no performance, choose wisely&#8230;</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=514" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2008/01/work-saying/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work:Internet is dead or alive</title>
		<link>http://www.katkovonline.com/2007/12/workinternet-is-dead-or-alive/</link>
		<comments>http://www.katkovonline.com/2007/12/workinternet-is-dead-or-alive/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 17:21:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=483</guid>
		<description><![CDATA[Сегодня интернет окончательно зажопился в скотском банке, каждые несколько минут меня выкидывет из ICQ. Радио затыкается, а аутлук уже надоел просто своими жалобами. Ну что за дела&#8230; А мне тут ещё два месяца как минимум сидеть.
 ]]></description>
			<content:encoded><![CDATA[<p>Сегодня интернет окончательно зажопился в скотском банке, каждые несколько минут меня выкидывет из ICQ. Радио затыкается, а аутлук уже надоел просто своими жалобами. Ну что за дела&#8230; А мне тут ещё два месяца как минимум сидеть.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=483" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2007/12/workinternet-is-dead-or-alive/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Work:Java</title>
		<link>http://www.katkovonline.com/2007/09/workjava/</link>
		<comments>http://www.katkovonline.com/2007/09/workjava/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 16:17:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=453</guid>
		<description><![CDATA[Надо прекратить читать ЖЖ кого попало, это болото для ума. Время уходит, а пользы ноль.
 ]]></description>
			<content:encoded><![CDATA[<p>Надо прекратить читать ЖЖ кого попало, это болото для ума. Время уходит, а пользы ноль.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=453" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2007/09/workjava/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java: удивительное рядом</title>
		<link>http://www.katkovonline.com/2007/07/java-%d1%83%d0%b4%d0%b8%d0%b2%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d1%80%d1%8f%d0%b4%d0%be%d0%bc/</link>
		<comments>http://www.katkovonline.com/2007/07/java-%d1%83%d0%b4%d0%b8%d0%b2%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d1%80%d1%8f%d0%b4%d0%be%d0%bc/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 05:14:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=445</guid>
		<description><![CDATA[Сегодня Идея предложила зарефакторить вызов статического метода в import static. Зарефакторил. Пару минут втыкал куда же оно подевалось. Погуглил. Поразился своей отсталости.
 ]]></description>
			<content:encoded><![CDATA[<p>Сегодня Идея предложила зарефакторить вызов статического метода в import static. Зарефакторил. Пару минут втыкал куда же оно подевалось. Погуглил. Поразился своей отсталости.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=445" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2007/07/java-%d1%83%d0%b4%d0%b8%d0%b2%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d1%80%d1%8f%d0%b4%d0%be%d0%bc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:Maven</title>
		<link>http://www.katkovonline.com/2006/12/javamaven/</link>
		<comments>http://www.katkovonline.com/2006/12/javamaven/#comments</comments>
		<pubDate>Thu, 28 Dec 2006 16:31:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=365</guid>
		<description><![CDATA[ На сайте Maven прямо сверху есть такая картинка. Это что?
Жопа Maven? Или что они этим хотели сказать?
 ]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ljplus.ru/img/k/a/katren/mavens-ass.gif" width=298 height=94 alt='18,96 КБ' align=left hspace=15> На сайте <a href="http://maven.apache.org">Maven</a> прямо сверху есть такая картинка. Это что?<br />
Жопа Maven? Или что они этим хотели сказать?</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=365" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/javamaven/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java</title>
		<link>http://www.katkovonline.com/2006/12/java/</link>
		<comments>http://www.katkovonline.com/2006/12/java/#comments</comments>
		<pubDate>Mon, 25 Dec 2006 18:33:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=362</guid>
		<description><![CDATA[сидел читал ленту, накопал пару новых java френдов, увлекся чтением . Открутил до сентября. И всё вроде хорошо, и любопытно и увлекательно, но не покидало ощущение какого-то максимализма. Посмотрел на возраст - 23 года. Неужели и я таким был?
 ]]></description>
			<content:encoded><![CDATA[<p>сидел читал ленту, накопал пару новых java френдов, увлекся чтением <lj user="zurg">. Открутил до сентября. И всё вроде хорошо, и любопытно и увлекательно, но не покидало ощущение какого-то максимализма. Посмотрел на возраст - 23 года. Неужели и я таким был?</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=362" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/java/feed/</wfw:commentRss>
		</item>
		<item>
		<title>life и френды</title>
		<link>http://www.katkovonline.com/2006/12/life-%d0%b8-%d1%84%d1%80%d0%b5%d0%bd%d0%b4%d1%8b/</link>
		<comments>http://www.katkovonline.com/2006/12/life-%d0%b8-%d1%84%d1%80%d0%b5%d0%bd%d0%b4%d1%8b/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 05:32:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=349</guid>
		<description><![CDATA[Что нужно постить в свой журнал, что бы тебя повыкидывали из френдов женщины? Надо всякие записки по работе постить, MySQL, Java и такое прочее&#8230;  Интересно, что же надо постить, что бы наоборот?
 ]]></description>
			<content:encoded><![CDATA[<p>Что нужно постить в свой журнал, что бы тебя повыкидывали из френдов женщины? Надо всякие записки по работе постить, MySQL, Java и такое прочее&#8230; <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Интересно, что же надо постить, что бы наоборот?</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=349" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/life-%d0%b8-%d1%84%d1%80%d0%b5%d0%bd%d0%b4%d1%8b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL INSERT: the power of cunning mind</title>
		<link>http://www.katkovonline.com/2006/12/mysql-insert-the-power-of-cunning-mind/</link>
		<comments>http://www.katkovonline.com/2006/12/mysql-insert-the-power-of-cunning-mind/#comments</comments>
		<pubDate>Fri, 15 Dec 2006 21:58:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=347</guid>
		<description><![CDATA[MySQL 5.0
mysql-connector-java-5.0.4-bin.jar
166 Mb dump file with 1 704 067 rows




Method


Time




Strait insert, one row at a time


6:15 min




Same insert but with prepared statement


6:42 min




Batched insert (10 at a time)
statement.addBatch()
…
statement.executeBatch()


6:20 min




Bulk insert (10 at a time)
Select into … values (…),(…)….


1:56 min




Bulk insert (100 at a time)


1:13 min




Bulk insert (1000 at a time)


1:05 min




&#160;
 ]]></description>
			<content:encoded><![CDATA[<div><font size="2">MySQL 5.0</font></div>
<div><font size="2">mysql-connector-java-5.0.4-bin.jar</font></div>
<div><font size="2">166 Mb dump file with 1 704 067 rows<br /></font></div>
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr height="14">
<td valign="top" width="264" height="14">
<div align="center"><font size="2">Method</font></div>
</td>
<td valign="top" width="72" height="14">
<div align="center"><font size="2">Time</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><font size="2">Strait insert, one row at a time</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">6:15 min</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><font size="2">Same insert but with prepared statement</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">6:42 min</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><font size="2">Batched insert (10 at a time)</font></div>
<div><font size="1">statement.addBatch()</font></div>
<div><font size="1">…</font></div>
<div><font size="1">statement.executeBatch()</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">6:20 min</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><a name="OLE_LINK2"><font face="Arial" size="2"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Bulk insert (10 at a time)</span></font></a></div>
<div><font size="1">Select into … values (…),(…)….</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">1:56 min</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><font size="2">Bulk insert (100 at a time)</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">1:13 min</font></div>
</td>
</tr>
<tr height="21">
<td valign="top" width="264" height="21">
<div><font size="2">Bulk insert (1000 at a time)</font></div>
</td>
<td valign="top" width="72" height="21">
<div align="right"><font size="2">1:05 min</font></div>
</td>
</tr>
</tbody>
</table>
<div><font size="2">&nbsp;</font></div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=347" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/mysql-insert-the-power-of-cunning-mind/feed/</wfw:commentRss>
		</item>
		<item>
		<title>рынок труда IT (java) в Торонто</title>
		<link>http://www.katkovonline.com/2006/12/%d1%80%d1%8b%d0%bd%d0%be%d0%ba-%d1%82%d1%80%d1%83%d0%b4%d0%b0-it-java-%d0%b2-%d1%82%d0%be%d1%80%d0%be%d0%bd%d1%82%d0%be/</link>
		<comments>http://www.katkovonline.com/2006/12/%d1%80%d1%8b%d0%bd%d0%be%d0%ba-%d1%82%d1%80%d1%83%d0%b4%d0%b0-it-java-%d0%b2-%d1%82%d0%be%d1%80%d0%be%d0%bd%d1%82%d0%be/#comments</comments>
		<pubDate>Tue, 12 Dec 2006 15:45:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=344</guid>
		<description><![CDATA[Мои исследования рынка труда&#160; IT (java) в Торонто
Это автоматически за 30 дней по данным воркополиса




SQL
500+


Oracle
463


mssql/tsql
235


websphere
129


javascript
123


UML
108


weblogic
106


struts
62


ejb
55


jms MQ?
55


ajax
47


jms
36


hibernate
29


mysql
27


SOAP
23


spring&#160;
20


jboss
14


jsf
5



А это то, что я руками за пару дней насобирал




struts
10.00


Oracle
8.00


UML (Must Have)
6.00


ejb
6.00


spring&#160;
6.00


weblogic
5.00


javascript
4.00


websphere
3.00


SQL
2.00


jms MQ?
2.00


hibernate
2.00


mssql/tsql
1.00


ajax
1.00


jms
1.00


mysql
1.00


SOAP
1.00


jboss
1.00


jsf
1.00




 ]]></description>
			<content:encoded><![CDATA[<p>Мои исследования рынка труда&nbsp; IT (java) в Торонто<br />
<lj-cut text="Смотреть таблицы">Это автоматически за 30 дней по данным воркополиса</p>
<table style="WIDTH: 136pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=181 border=0 x:str>
<colgroup><col style="WIDTH: 88pt; mso-width-source: userset; mso-width-alt: 4278" width=117><col style="WIDTH: 48pt" width=64><br />
<tbody>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 88pt; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" width=117 height=17><strong><font face=Verdana size=2>SQL</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BORDER-LEFT: windowtext; WIDTH: 48pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right width=64 x:num><font face=Arial size=2>500+</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>Oracle</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>463</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>mssql/tsql</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>235</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>websphere</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>129</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>javascript</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>123</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>UML</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>108</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>weblogic</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>106</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>struts</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>62</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>ejb</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>55</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jms MQ?</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>55</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>ajax</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>47</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jms</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>36</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>hibernate</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>29</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>mysql</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>27</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>SOAP</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>23</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17 x:str="spring "><strong><font face=Verdana><font size=2>spring<span style="mso-spacerun: yes">&nbsp;</span></font></font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>20</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jboss</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>14</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jsf</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>5</font></td>
</tr>
</tbody>
</table>
<p>А это то, что я руками за пару дней насобирал</p>
<table style="WIDTH: 149pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=198 border=0 x:str>
<colgroup><col style="WIDTH: 101pt; mso-width-source: userset; mso-width-alt: 4900" width=134><col style="WIDTH: 48pt" width=64><br />
<tbody>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 101pt; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" width=134 height=17><strong><font face=Verdana size=2>struts</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 0.5pt solid; BORDER-LEFT: windowtext; WIDTH: 48pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right width=64 x:num><font face=Arial size=2>10.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>Oracle</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>8.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>UML (Must Have)</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>6.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>ejb</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>6.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17 x:str="spring "><strong><font face=Verdana><font size=2>spring<span style="mso-spacerun: yes">&nbsp;</span></font></font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>6.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>weblogic</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>5.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>javascript</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>4.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>websphere</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>3.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>SQL</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>2.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jms MQ?</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>2.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>hibernate</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>2.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>mssql/tsql</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>ajax</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jms</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>mysql</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>SOAP</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jboss</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
<tr style="HEIGHT: 12.75pt" height=17>
<td class=xl24 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 0.5pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: transparent" height=17><strong><font face=Verdana size=2>jsf</font></strong></td>
<td class=xl25 style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" align=right x:num><font face=Arial size=2>1.00</font></td>
</tr>
</tbody>
</table>
<p></lj-cut></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=344" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/%d1%80%d1%8b%d0%bd%d0%be%d0%ba-%d1%82%d1%80%d1%83%d0%b4%d0%b0-it-java-%d0%b2-%d1%82%d0%be%d1%80%d0%be%d0%bd%d1%82%d0%be/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL:ARCHIVE</title>
		<link>http://www.katkovonline.com/2006/12/mysqlarchive/</link>
		<comments>http://www.katkovonline.com/2006/12/mysqlarchive/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 16:56:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=342</guid>
		<description><![CDATA[+ 400% performance increase in comparison with packed MyIsam (according to Livejournal people)
+ 20% less storage space in comparison with packed MyIsam
+ with really big tables > 1.5Gb table scan on ARCHIVE beats MyIsam
- no indexes whatsoever, not even primary keys
- MERGE can not be used
 ]]></description>
			<content:encoded><![CDATA[<p>+ 400% performance increase in comparison with packed MyIsam (according to Livejournal people)<br />
+ 20% less storage space in comparison with packed MyIsam<br />
+ with really big tables > 1.5Gb table scan on ARCHIVE beats MyIsam<br />
- no indexes whatsoever, not even primary keys<br />
- MERGE can not be used</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=342" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/mysqlarchive/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL:FEDERATED</title>
		<link>http://www.katkovonline.com/2006/12/mysqlfederated/</link>
		<comments>http://www.katkovonline.com/2006/12/mysqlfederated/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 16:50:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=341</guid>
		<description><![CDATA[
+ Any engine type
+ each host can have average sized disks
+ access over the network
- more memory it total as there are many DB instances
 ]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ljplus.ru/img/k/a/katren/federated-db-engine.gif" width=262 height=234 align="left" vsapce=5 hspace=5><br />
+ Any engine type<br />
+ each host can have average sized disks<br />
+ access over the network<br />
- more memory it total as there are many DB instances</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=341" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/mysqlfederated/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL:MERGE</title>
		<link>http://www.katkovonline.com/2006/12/mysqlmerge/</link>
		<comments>http://www.katkovonline.com/2006/12/mysqlmerge/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 16:33:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=340</guid>
		<description><![CDATA[Application: one host with a huge disk space.
+ less memory as one DB instance serves all
- huge disk is a must, although we can map drives and use symlinks
- local access to db data files only (no network)
* Works only with regular/packed MyIsam DB i.e. each time there is a new chunk of data we [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ljplus.ru/img/k/a/katren/merge-db-engine.gif" align="left" vsapce=5 hspace=5 border="0">Application: one host with a huge disk space.<br />
+ less memory as one DB instance serves all<br />
- huge disk is a must, although we can map drives and use symlinks<br />
- local access to db data files only (no network)<br />
* Works only with regular/packed MyIsam DB i.e. each time there is a new chunk of data we have to stop DB and to the maintenance chores -  dump/import/pack<br />
* It is possible to merge readonly and regular tables<br />
* Select with a key type search returns single record even if there were a few others with the same key. Select with a &#8220;like&#8221; type search (table scan) returns all of them.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=340" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/12/mysqlmerge/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:LiveJournal API:ru_java</title>
		<link>http://www.katkovonline.com/2006/11/javalivejournal-apiru_java/</link>
		<comments>http://www.katkovonline.com/2006/11/javalivejournal-apiru_java/#comments</comments>
		<pubDate>Wed, 29 Nov 2006 07:50:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=336</guid>
		<description><![CDATA[Люди из одинаковых городов представлены одним маркером. 
География&#160;ru_java
&#160;
 ]]></description>
			<content:encoded><![CDATA[<p><img height=258 alt="63,41 КБ" src="http://www.ljplus.ru/img/k/a/katren/ru_java-friends-google-map.gif" width=500 align=left>Люди из одинаковых городов представлены одним маркером. </p>
<p>География&nbsp;<a href="http://community.livejournal.com/ru_java/friends/">ru_java</a></p>
<div style="CLEAR: both">&nbsp;</div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=336" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/javalivejournal-apiru_java/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:LiveJournal API</title>
		<link>http://www.katkovonline.com/2006/11/javalivejournal-api/</link>
		<comments>http://www.katkovonline.com/2006/11/javalivejournal-api/#comments</comments>
		<pubDate>Wed, 29 Nov 2006 07:43:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=335</guid>
		<description><![CDATA[Продолжаю играться с Java API для LiveJournal который сам и пишу. Вот одно из применений.
Люди из одинаковых городов представлены одним маркером.
География моих френдов так сказать.
&#160;
 ]]></description>
			<content:encoded><![CDATA[<p><img height=292 alt="65,46 КБ" src="http://www.ljplus.ru/img/k/a/katren/katren-friends-google-map.gif" width=500 align=left>Продолжаю играться с Java API для LiveJournal который сам и пишу. Вот одно из применений.<br />
Люди из одинаковых городов представлены одним маркером.</p>
<p>География моих френдов так сказать.</p>
<div style="CLEAR: both">&nbsp;</div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=335" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/javalivejournal-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>unicode</title>
		<link>http://www.katkovonline.com/2006/11/unicode/</link>
		<comments>http://www.katkovonline.com/2006/11/unicode/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 20:08:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=332</guid>
		<description><![CDATA[В общей сложности, убил 8 часов на борьбу с юникодом, в Java, Ant, MySQL JDBC, MySQL4, MySQL5. Поборол в конце концов.  Но что забавно - всё началось с юзера под названием &#8220;Pruszcz Gdański&#8221;.
Шлю тебе, неизвестный Принц из Гданська, горячий привет!  Pruszcz Gdański
 ]]></description>
			<content:encoded><![CDATA[<p>В общей сложности, убил 8 часов на борьбу с юникодом, в Java, Ant, MySQL JDBC, MySQL4, MySQL5. Поборол в конце концов. <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Но что забавно - всё началось с юзера под названием &#8220;Pruszcz Gdański&#8221;.<br />
Шлю тебе, неизвестный Принц из Гданська, горячий привет! <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Pruszcz Gdański</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=332" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/unicode/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:Trails</title>
		<link>http://www.katkovonline.com/2006/11/javatrails/</link>
		<comments>http://www.katkovonline.com/2006/11/javatrails/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 20:01:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=331</guid>
		<description><![CDATA[Вот  тут живет проект который якобы &#8221; по мэппингам или по классам автоматом сделает WEB-интерфейс для редактирования, добавления, удаления итд.&#8221;
Надо посмотреть&#8230;
 ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.trailsframework.org">Вот  тут</a> живет проект который якобы &#8221; по мэппингам или по классам автоматом сделает WEB-интерфейс для редактирования, добавления, удаления итд.&#8221;<br />
Надо посмотреть&#8230;</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=331" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/javatrails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java: livejournal API</title>
		<link>http://www.katkovonline.com/2006/11/java-livejournal-api/</link>
		<comments>http://www.katkovonline.com/2006/11/java-livejournal-api/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 16:39:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=330</guid>
		<description><![CDATA[Ещё раз убедился, что почти всё что может потребоваться человеку можно купить на ebay программисту можно найти на Sourceforge
Вот например LiveJournal Java API тут
 ]]></description>
			<content:encoded><![CDATA[<p>Ещё раз убедился, что почти всё что может потребоваться <strike>человеку можно купить на <a href="http://www.ebay.com">ebay</a></strike> программисту можно найти на <a href="http://sourceforge.net">Sourceforge</a><br />
Вот например LiveJournal Java API <a href="http://sourceforge.net/projects/ljwindow">тут</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=330" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/java-livejournal-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java: Xalan</title>
		<link>http://www.katkovonline.com/2006/11/java-xalan/</link>
		<comments>http://www.katkovonline.com/2006/11/java-xalan/#comments</comments>
		<pubDate>Thu, 16 Nov 2006 17:19:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=327</guid>
		<description><![CDATA[Справедливость восторжествовала, как всегда впрочем. Намедни&#160;господин
alekro&#160;
совершенно справедливо указал,&#160;что зря я не люблю встроенную имплементацию&#160;JAXP&#160;в 1.4&#160;и, &#160;что Xalan уже включен в J2SE 1.4, а я просто готовить его не умею. И действительно как оказалось, Xalan содержит классы для XPath, только они называются по другому и вообще всё немножко не так, как в JDOM, и работает медленее. [...]]]></description>
			<content:encoded><![CDATA[<p>Справедливость восторжествовала, как всегда впрочем. Намедни&nbsp;господин
<div class="ljuser"><a href="http://alekro.livejournal.com/profile"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; VERTICAL-ALIGN: bottom; BORDER-RIGHT-WIDTH: 0px" height="17" alt="[info]" width="17" src="http://stat.livejournal.com/img/userinfo.gif" /></a><a href="http://alekro.livejournal.com/"><b>alekro</b></a>&nbsp;</div>
<p>совершенно справедливо указал,&nbsp;что зря я не люблю встроенную имплементацию&nbsp;JAXP&nbsp;в 1.4&nbsp;и, &nbsp;что Xalan уже включен в J2SE 1.4, а я просто готовить его не умею. И действительно как оказалось, Xalan содержит классы для XPath, только они называются по другому и вообще всё немножко не так, как в JDOM, и работает медленее. Зато никаких новый jar-ов не надо.</p>
<div class="ljcut" text="Читать код">
<p>Встроенный Xalan (код после оптимизации по скорости с прекомпиленными выражениями)&nbsp;:</p>
<pre style="BORDER-RIGHT: #000000 0.01mm solid; PADDING-RIGHT: 4px; BORDER-TOP: #000000 0.01mm solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #000000 0.01mm solid; LINE-HEIGHT: 100%; PADDING-TOP: 4px; BORDER-BOTTOM: #000000 0.01mm solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #ffffff"><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff">minusOneExpression </span><span style="BACKGROUND-COLOR: #ffffff">= </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">new</span><span style="BACKGROUND-COLOR: #ffffff"> XPath("<span style="FONT-WEIGHT: bold; COLOR: #008000; BACKGROUND-COLOR: #ffffff"><a>/game/principal/@noBid='true'</a>"</span>, </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">null</span><span style="BACKGROUND-COLOR: #ffffff">, </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">null</span><span style="BACKGROUND-COLOR: #ffffff">, XPath.</span><span style="FONT-WEIGHT: bold; COLOR: #660e7a; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">SELECT)</span><span style="BACKGROUND-COLOR: #ffffff">;
XObject containsLateBid = minusOneExpression.execute(</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">new</span><span style="BACKGROUND-COLOR: #ffffff"> XPathContext(), doc.getFirstChild(), </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">null</span><span style="BACKGROUND-COLOR: #ffffff">);
containsLateBid.bool()</span></pre>
<p>JDom:
<pre style="BORDER-RIGHT: #000000 0.01mm solid; PADDING-RIGHT: 4px; BORDER-TOP: #000000 0.01mm solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #000000 0.01mm solid; LINE-HEIGHT: 100%; PADDING-TOP: 4px; BORDER-BOTTOM: #000000 0.01mm solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #ffffff"><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff">noBidExpression </span><span style="BACKGROUND-COLOR: #ffffff">= XPath.newInstance("</span><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff"><span style="FONT-WEIGHT: bold; COLOR: #008000; BACKGROUND-COLOR: #ffffff"><a>/game/principal/@noBid='true'</a>"</span>)</span><span style="BACKGROUND-COLOR: #ffffff">;
Boolean result = (Boolean) </span><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff">noBidExpression.</span><span style="BACKGROUND-COLOR: #ffffff">selectSingleNode(doc);
</span><span style="BACKGROUND-COLOR: #ffffff">result.booleanValue()</span></pre>
<p>Следует ли говорить, что в 1.5 всё ещё более по третьему? <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <br /><!--EndFragment--><br />Sun по этому поводу <a href="http://java.sun.com/j2se/1.5.0/docs/guide/xml/jaxp/JAXP-Compatibility_150.html">пишет</a> следующее:</p>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><p>&#8220;&#8230;In J2SE 1.4, the fact that JAXP was built into the Java platform was a mixed blessing. On the one hand, an application could rely on that fact that it was there. On the other, most applications needed features and bug fixes that were available in later versions. But adding new libarires had no effect, because internal classes always take precedence over the classpath&#8230;&#8221; </p></blockquote>
<div>&nbsp;</div>
</div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=327" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/java-xalan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>java:xml</title>
		<link>http://www.katkovonline.com/2006/11/javaxml/</link>
		<comments>http://www.katkovonline.com/2006/11/javaxml/#comments</comments>
		<pubDate>Tue, 14 Nov 2006 17:15:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=326</guid>
		<description><![CDATA[Что то с памятью моей стало&#8230;
Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4
 ]]></description>
			<content:encoded><![CDATA[<p>Что то с памятью моей стало&#8230;<br />
Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4 Я больше не буду использовать JAXP в 1.4</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=326" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/javaxml/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java: конечные автоматы</title>
		<link>http://www.katkovonline.com/2006/11/java-%d0%ba%d0%be%d0%bd%d0%b5%d1%87%d0%bd%d1%8b%d0%b5-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d1%8b/</link>
		<comments>http://www.katkovonline.com/2006/11/java-%d0%ba%d0%be%d0%bd%d0%b5%d1%87%d0%bd%d1%8b%d0%b5-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d1%8b/#comments</comments>
		<pubDate>Fri, 10 Nov 2006 22:36:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=322</guid>
		<description><![CDATA[Сегодня сделал такую простую машину состояний, так вроде оно  называется. Что называется, попробуйте немножко лиспа  Зачем это нужно - если есть набор  правил, и нужно согласно с этими правилами что-то делать то либо нужно писать многоуровневый  IF-ELSE-IF-ELSE либо сделать FSM.
  Многоэтажные конструкции IF-ELSE-IF-ELSE просто писать, но сложно читать. И упаси [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня сделал такую простую машину состояний, так вроде оно  называется. Что называется, попробуйте немножко лиспа <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Зачем это нужно - если есть набор  правил, и нужно согласно с этими правилами что-то делать то либо нужно писать многоуровневый  IF-ELSE-IF-ELSE либо сделать FSM.<lj-cut text="Читать дальше с картинками">
<div style="FLOAT: left"><img height="801" alt="" hspace="15"  width="337" align="left" vspace="15" src="http://www.ljplus.ru/img/k/a/katren/chart.gif" />  Многоэтажные конструкции IF-ELSE-IF-ELSE просто писать, но сложно читать. И упаси боже через  неделю придется покопаться в правилах. FSM легко определить и легко потом читать изменять, но  нужен тот собственный черный ящик который будет правила исполнять. Кстати по правилам легко  генерировать картинки (слева), ещё более упрощая понимание. Вычленил свой код а крохотную  библиотечку, сначала думал может статейку какую написать простенькую, а сейчас уже остыл, может  и не надо это никому.</div>
<p></p>
<div style="FLOAT: left">
Вот собственно код который поясняет эта диаграмма<br/><br />
Вместо &#8220;мяса&#8221; реализации логики тут везде null</p>
<pre style="line-height: 100%;font-family:monospace;background-color:#ffffff;  border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"><span  style="background-color:#ffffff;">        Node countTimeOutStatementNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> StatementNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTimeout"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"orderCheck"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
        Node countOrderFailureStatementNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> StatementNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countOrderFailure"</span><spa n style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTotal"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
        Node countTotalStatementNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> StatementNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTotal"</span><span  style="background-color:#ffffff;">, RuleProcessor.</span><span  style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;">EndNode.</sp an><span style="background-color:#ffffff;">getName(), </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
        Node countOKStatementNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> StatementNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countOK"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTotal"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);

        Node timeOutCheckNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> CheckNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"timeOutCheck"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTimeout"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"notOrderCheck"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
        Node orderCheckNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> CheckNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"orderCheck"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countOrderFailure"</span><spa n style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countTotal"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
        Node notOrderCheckNode = </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span  style="background-color:#ffffff;"> CheckNodeAdaptor(</span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"notOrderCheck"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countOK"</span><span  style="background-color:#ffffff;">, </span><span  style="color:#008000;background-color:#ffffff;font-weight:bold;">"countOrderFailure"</span><spa n style="background-color:#ffffff;">, </span><span  style="color:#000080;background-color:#ffffff;font-weight:bold;">null</span><span  style="background-color:#ffffff;">);
</span></pre>
</div>
<p></lj-cut></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=322" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/java-%d0%ba%d0%be%d0%bd%d0%b5%d1%87%d0%bd%d1%8b%d0%b5-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d1%8b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:Люди через призму их слов</title>
		<link>http://www.katkovonline.com/2006/11/java%d0%bb%d1%8e%d0%b4%d0%b8-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%bf%d1%80%d0%b8%d0%b7%d0%bc%d1%83-%d0%b8%d1%85-%d1%81%d0%bb%d0%be%d0%b2/</link>
		<comments>http://www.katkovonline.com/2006/11/java%d0%bb%d1%8e%d0%b4%d0%b8-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%bf%d1%80%d0%b8%d0%b7%d0%bc%d1%83-%d0%b8%d1%85-%d1%81%d0%bb%d0%be%d0%b2/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 16:02:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=320</guid>
		<description><![CDATA[Интересная/забавная идея: автоматически анализировать блог человека что бы понять что он за человек. Как полезный побочный эффект можно сравнивать измерения за последовательные временные интервалы и смотреть как человек меняется. Конечно, это не точный психологический портрет но всё же, всё же&#8230;
читать и смотреть здесь
 ]]></description>
			<content:encoded><![CDATA[<p>Интересная/забавная идея: автоматически анализировать блог человека что бы понять что он за человек. Как полезный побочный эффект можно сравнивать измерения за последовательные временные интервалы и смотреть как человек меняется. Конечно, это не точный психологический портрет но всё же, всё же&#8230;<br />
<a href="http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=LookingAtPeopleThroughTheirWords">читать и смотреть здесь</a></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=320" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/java%d0%bb%d1%8e%d0%b4%d0%b8-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%bf%d1%80%d0%b8%d0%b7%d0%bc%d1%83-%d0%b8%d1%85-%d1%81%d0%bb%d0%be%d0%b2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java: Fuzzy String Matching</title>
		<link>http://www.katkovonline.com/2006/11/java-fuzzy-string-matching/</link>
		<comments>http://www.katkovonline.com/2006/11/java-fuzzy-string-matching/#comments</comments>
		<pubDate>Wed, 08 Nov 2006 18:17:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=317</guid>
		<description><![CDATA[Nice and simple code to do Fuzzy String Matching by Simon White

import java.util.ArrayList;

public class LetterPairSimilarity {
    /**
     * @return lexical similarity value in the range [0,1]
     */
    public static double compareStrings(String str1, String str2) {
       [...]]]></description>
			<content:encoded><![CDATA[<p>Nice and simple code to do Fuzzy String Matching by <a href="http://www.devarticles.com/c/a/Development-Cycles/How-to-Strike-a-Match/"><span class="content_rating">Simon White</span><br /></a></p>
<div class="ljcut" text="source code">
<pre style="BORDER-RIGHT: #000000 0.01mm solid; PADDING-RIGHT: 4px; BORDER-TOP: #000000 0.01mm solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #000000 0.01mm solid; LINE-HEIGHT: 100%; PADDING-TOP: 4px; BORDER-BOTTOM: #000000 0.01mm solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #ffffff"><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">import</span><span style="BACKGROUND-COLOR: #ffffff"> java.util.ArrayList;

</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">public</span><span style="BACKGROUND-COLOR: #ffffff"> </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">class</span><span style="BACKGROUND-COLOR: #ffffff"> LetterPairSimilarity {
    </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">/**
     * </span><span style="COLOR: #808080; TEXT-DECORATION: underline"><span style="FONT-WEIGHT: bold; COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">@return</span></span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff"> lexical similarity value in the range [0,1]
     */
</span><span style="BACKGROUND-COLOR: #ffffff">    </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">public</span><span style="BACKGROUND-COLOR: #ffffff"> </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">static</span><span style="BACKGROUND-COLOR: #ffffff"> </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">double</span><span style="BACKGROUND-COLOR: #ffffff"> compareStrings(String str1, String str2) {
        ArrayList pairs1 = </span><span style="FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">wordLetterPairs(</span><span style="BACKGROUND-COLOR: #ffffff">str1.toUpperCase());
        ArrayList pairs2 = </span><span style="FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">wordLetterPairs(</span><span style="BACKGROUND-COLOR: #ffffff">str2.toUpperCase());
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> intersection = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">;
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> union = pairs1.size() + pairs2.size();
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">for</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> i = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">; i &lt; pairs1.size(); i++) {
            Object pair1 = pairs1.get(i);
            </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">for</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> j = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">; j &lt; pairs2.size(); j++) {
                Object pair2 = pairs2.get(j);
                </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">if</span><span style="BACKGROUND-COLOR: #ffffff"> (pair1.equals(pair2)) {
                    intersection++;
                    pairs2.remove(j);
                    </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">break</span><span style="BACKGROUND-COLOR: #ffffff">;
                }
            }
        }
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">return</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">2.0</span><span style="BACKGROUND-COLOR: #ffffff"> * intersection) / union;
    }

    </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">/**
     * </span><span style="COLOR: #808080; TEXT-DECORATION: underline"><span style="FONT-WEIGHT: bold; COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">@return</span></span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff"> an ArrayList of 2-character Strings.
     */
</span><span style="BACKGROUND-COLOR: #ffffff">    </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">private</span><span style="BACKGROUND-COLOR: #ffffff"> </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">static</span><span style="BACKGROUND-COLOR: #ffffff"> ArrayList wordLetterPairs(String str) {
        ArrayList allPairs = </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">new</span><span style="BACKGROUND-COLOR: #ffffff"> ArrayList();
        </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">// Tokenize the string and put the tokens/words into an array
</span><span style="BACKGROUND-COLOR: #ffffff">        String[] words = str.split(</span><span style="FONT-WEIGHT: bold; COLOR: #008000; BACKGROUND-COLOR: #ffffff">"s"</span><span style="BACKGROUND-COLOR: #ffffff">);
        </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">// For each word
</span><span style="BACKGROUND-COLOR: #ffffff">        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">for</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> w = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">; w &lt; words.</span><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff">length;</span><span style="BACKGROUND-COLOR: #ffffff"> w++) {
            </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">// Find the pairs of characters
</span><span style="BACKGROUND-COLOR: #ffffff">            String[] pairsInWord = </span><span style="FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">letterPairs(</span><span style="BACKGROUND-COLOR: #ffffff">words[w]);
            </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">for</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> p = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">; p &lt; pairsInWord.</span><span style="FONT-WEIGHT: bold; COLOR: #660e7a; BACKGROUND-COLOR: #ffffff">length;</span><span style="BACKGROUND-COLOR: #ffffff"> p++) {
                allPairs.add(pairsInWord[p]);
            }
        }
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">return</span><span style="BACKGROUND-COLOR: #ffffff"> allPairs;
    }

    </span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">/**
     * </span><span style="COLOR: #808080; TEXT-DECORATION: underline"><span style="FONT-WEIGHT: bold; COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff">@return</span></span><span style="COLOR: #808080; FONT-STYLE: italic; BACKGROUND-COLOR: #ffffff"> an array of adjacent letter pairs contained in the input string
     */
</span><span style="BACKGROUND-COLOR: #ffffff">    </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">private</span><span style="BACKGROUND-COLOR: #ffffff"> </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">static</span><span style="BACKGROUND-COLOR: #ffffff"> String[] letterPairs(String str) {
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> numPairs = str.length() - </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">1</span><span style="BACKGROUND-COLOR: #ffffff">;
        String[] pairs = </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">new</span><span style="BACKGROUND-COLOR: #ffffff"> String[numPairs];
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">for</span><span style="BACKGROUND-COLOR: #ffffff"> (</span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">int</span><span style="BACKGROUND-COLOR: #ffffff"> i = </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">0</span><span style="BACKGROUND-COLOR: #ffffff">; i &lt; numPairs; i++) {
            pairs[i] = str.substring(i, i + </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">2</span><span style="BACKGROUND-COLOR: #ffffff">);
        }
        </span><span style="FONT-WEIGHT: bold; COLOR: #000080; BACKGROUND-COLOR: #ffffff">return</span><span style="BACKGROUND-COLOR: #ffffff"> pairs;
    }
}
</span></pre>
<p><!--EndFragment--></div>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=317" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/java-fuzzy-string-matching/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java:Toronto JUG</title>
		<link>http://www.katkovonline.com/2006/11/javatoronto-jug/</link>
		<comments>http://www.katkovonline.com/2006/11/javatoronto-jug/#comments</comments>
		<pubDate>Wed, 08 Nov 2006 16:51:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=316</guid>
		<description><![CDATA[JUG notes:

The only reason to introduce DB cluster cache is to make that cluster error prone, otherwise we should not care
InfoQ managed to build new UI for JForum
concept of lazy authorization:
to create a user record for each new customer who enters website and put a special info into cookies. So next time same user shows [...]]]></description>
			<content:encoded><![CDATA[<p>JUG notes:</p>
<ul>
<li>The only reason to introduce DB cluster cache is to make that cluster error prone, otherwise we should not care</li>
<li>InfoQ managed to build new UI for JForum</li>
<li>concept of lazy authorization:<br />
to create a user record for each new customer who enters website and put a special info into cookies. So next time same user shows up same DB record will be used. Whenever that half-registered users logs out a new &#8220;logged out&#8221; DB record is created making a pair. So that half-registered user can log in and log our switching between records inside that pair. When that user decides register himself the old &#8220;logged in&#8221; record is being populated with data.</li>
<li>Magnolia as a content replication system</li>
<li>DWR brings/makes accessible Java classes to the JS client</li>
<li>Some cool AJAX engine - Prototype</li>
<li>Floyd Marinescu wrote some allegedly nice books</li>
</ul>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=316" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/11/javatoronto-jug/feed/</wfw:commentRss>
		</item>
		<item>
		<title>java:httpunit</title>
		<link>http://www.katkovonline.com/2006/10/javahttpunit/</link>
		<comments>http://www.katkovonline.com/2006/10/javahttpunit/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 20:31:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=299</guid>
		<description><![CDATA[Супер идея дня! От создателей httpUnit! Сделать, блин, package scope run-time exception и его бросать. Exception который нельзя поймать! Вау!
 ]]></description>
			<content:encoded><![CDATA[<p>Супер идея дня! От создателей httpUnit! Сделать, блин, package scope run-time exception и его бросать. Exception который нельзя поймать! Вау!</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=299" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/10/javahttpunit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>java: the futility of struts</title>
		<link>http://www.katkovonline.com/2006/10/java-the-futility-of-struts/</link>
		<comments>http://www.katkovonline.com/2006/10/java-the-futility-of-struts/#comments</comments>
		<pubDate>Thu, 19 Oct 2006 19:56:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=292</guid>
		<description><![CDATA[Интересная точка зрения
&#8230;How is the MVC framework that Struts provides, different from the one that the servlet container provides? 
I always tought of a servlet as the &#8216;beginning&#8217; of my application so I saw a need for a framework like Struts. But if you think of the servlet container, as the &#8216;beginning&#8217; of the application, [...]]]></description>
			<content:encoded><![CDATA[<p>Интересная точка зрения<br />
<i>&#8230;How is the MVC framework that Struts provides, different from the one that the servlet container provides? </p>
<p>I always tought of a servlet as the &#8216;beginning&#8217; of my application so I saw a need for a framework like Struts. But if you think of the servlet container, as the &#8216;beginning&#8217; of the application, the servlet becomes nothing more than an equivalent of a Struts Action class. ActionServlet does the same things the container does. It reads its configuration file and delegates processing to configured actions. The container reads its configuration file and delegates processing to configured servlets. If one thinks of a Servlet as an Action then everything seems redundant. The container is basically Struts minus some utility classes. interesting! </i></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=292" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/10/java-the-futility-of-struts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>To check, or not to check?</title>
		<link>http://www.katkovonline.com/2006/10/to-check-or-not-to-check/</link>
		<comments>http://www.katkovonline.com/2006/10/to-check-or-not-to-check/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 20:16:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=275</guid>
		<description><![CDATA[Занимательная статья про Exceptions
http://www-128.ibm.com/developerworks/java/library/j-jtp05254.html
 ]]></description>
			<content:encoded><![CDATA[<p>Занимательная статья про Exceptions<br />
http://www-128.ibm.com/developerworks/java/library/j-jtp05254.html</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=275" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/10/to-check-or-not-to-check/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IntelliJIdea 6.0</title>
		<link>http://www.katkovonline.com/2006/10/intellijidea-60/</link>
		<comments>http://www.katkovonline.com/2006/10/intellijidea-60/#comments</comments>
		<pubDate>Wed, 11 Oct 2006 06:18:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=269</guid>
		<description><![CDATA[Встроенный в IntelliJIdea 6.0 CodeCoverage не работает с Java младше 5.0 - вот же ж несчастье 
 ]]></description>
			<content:encoded><![CDATA[<p>Встроенный в IntelliJIdea 6.0 CodeCoverage не работает с Java младше 5.0 - вот же ж несчастье <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=269" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/10/intellijidea-60/feed/</wfw:commentRss>
		</item>
		<item>
		<title>optimism</title>
		<link>http://www.katkovonline.com/2006/08/optimism/</link>
		<comments>http://www.katkovonline.com/2006/08/optimism/#comments</comments>
		<pubDate>Thu, 10 Aug 2006 20:36:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=252</guid>
		<description><![CDATA[Цитата:
How many times have you looked at the Javadoc for a class and wondered whether it was thread-safe?[8][8] If you&#8217;ve never wondered this, we admire your optimism.
 ]]></description>
			<content:encoded><![CDATA[<p>Цитата:</p>
<p>How many times have you looked at the Javadoc for a class and wondered whether it was thread-safe?<sup>[8]</sup><br /><a name="ch04fn08"><sup>[8]</sup></a> If you&#8217;ve never wondered this, we admire your optimism.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=252" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/08/optimism/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java Concurrency in Practice</title>
		<link>http://www.katkovonline.com/2006/08/java-concurrency-in-practice/</link>
		<comments>http://www.katkovonline.com/2006/08/java-concurrency-in-practice/#comments</comments>
		<pubDate>Thu, 10 Aug 2006 18:07:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=250</guid>
		<description><![CDATA[Который день уже с перерывами читаю эту книжку, не так чтобы увлекательно написанно, но много интересного.
 ]]></description>
			<content:encoded><![CDATA[<p><img height="103" alt="Book Cover" hspace="10" width="78" align="left" vspace="5" border="0" src="http://www.ljplus.ru/img/k/a/katren/JavaConcurrencyInPractice.jpg" />Который день уже с перерывами читаю эту книжку, не так чтобы увлекательно написанно, но много интересного.</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=250" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/08/java-concurrency-in-practice/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to make MySQL blazingly fast</title>
		<link>http://www.katkovonline.com/2006/03/how-to-make-mysql-blazingly-fast/</link>
		<comments>http://www.katkovonline.com/2006/03/how-to-make-mysql-blazingly-fast/#comments</comments>
		<pubDate>Fri, 24 Mar 2006 17:34:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=184</guid>
		<description><![CDATA[How to make MySQL blazingly fast
1)	Increase innodb_buffer_pool_size to 80% of memory of dedicated host. At least give it 265M. Here under is a snippet from mysql.ini 
set-variable=innodb_buffer_pool_size=256M
set-variable=innodb_additional_mem_pool_size=20M
Without any further optimization it gives you 50% performance gain (against old setting of 32Mb)
2)	Increase innodb_log_file_size to 25% of innodb_buffer_pool_size
set-variable=innodb_log_file_size=64M
set-variable=innodb_log_buffer_size=8M
Packaged with optimization above it can shave you up to [...]]]></description>
			<content:encoded><![CDATA[<p>How to make MySQL blazingly fast</p>
<p>1)	Increase innodb_buffer_pool_size to 80% of memory of dedicated host. At least give it 265M. Here under is a snippet from mysql.ini </p>
<p>set-variable=innodb_buffer_pool_size=256M<br />
set-variable=innodb_additional_mem_pool_size=20M</p>
<p>Without any further optimization it gives you 50% performance gain (against old setting of 32Mb)<br />
2)	Increase innodb_log_file_size to 25% of innodb_buffer_pool_size</p>
<p>set-variable=innodb_log_file_size=64M<br />
set-variable=innodb_log_buffer_size=8M</p>
<p>Packaged with optimization above it can shave you up to additional 10%<br />
3)	Make sure that for read-only transactions your switched ON auto commit setting. And then switched it back for read-write tasks. Set read-only settings properly to JDBC statement as well.<br />
Here you will see drastic improvement if you treated read-only transaction wrongly i.e. committed and rolled back them yourself from DAO<br />
4)	Make sure that you execute operation with DB concurrently. I was able to get 30% improvement when running 8 threads. There is a catch here though – by default internally MySQL holds 8 threads to serve DB requests. Make number of threads here and there consistent.<br />
5)	Change isolation level to READ-UNCOMMITTED if it possible (default for InnoDB is REPEATABLE READ)</p>
<p>set-variable=transaction-isolation=READ-UNCOMMITTED</p>
<p>My tests show that gain here is almost negligible around 4%</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=184" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/03/how-to-make-mysql-blazingly-fast/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Toronto Java Group</title>
		<link>http://www.katkovonline.com/2006/03/toronto-java-group/</link>
		<comments>http://www.katkovonline.com/2006/03/toronto-java-group/#comments</comments>
		<pubDate>Fri, 10 Mar 2006 04:12:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=173</guid>
		<description><![CDATA[Ходил на встречу Торонтовского Java сообщества. Очень познавательно. Люди все очень прилично выглядят и производят впечатление серьезных специалистов. Доклад был про &#8220;что такое Maven и как с ним бороться&#8221; Создатели Maven и рассказывали. А главная идея - давайте не будет давать людям выдумывать новые и замечательные пути собрать проект антом. Пусть энергию тратят на более [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ljplus.ru/img/k/a/katren/java.JPG" target=_blank><img height=150 src="http://www.ljplus.ru/img/k/a/katren/th_java.JPG" width=200 align=left vspace=5 border=0></a>Ходил на встречу Торонтовского Java сообщества. Очень познавательно. Люди все очень прилично выглядят и производят впечатление серьезных специалистов. Доклад был про &#8220;что такое Maven и как с ним бороться&#8221; Создатели Maven и рассказывали. А главная идея - давайте не будет давать людям выдумывать новые и замечательные пути собрать проект антом. Пусть энергию тратят на более полезные вещи.<br />
Жалко пропустил прошлую встречу - создатели Spring про него рассказывали. Говорят народу набилось - в проходах стояли.<br />
Sun Microsystems прислал 4 ящика всякого барахла. Футболки, ручки, книжки и Дюки.<br />
Пошопился&#8230; <img src='http://www.katkovonline.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=173" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2006/03/toronto-java-group/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Eclipse</title>
		<link>http://www.katkovonline.com/2005/11/eclipse/</link>
		<comments>http://www.katkovonline.com/2005/11/eclipse/#comments</comments>
		<pubDate>Sat, 26 Nov 2005 02:20:00 +0000</pubDate>
		<dc:creator>Igor Katkov</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.katkovonline.com/?p=106</guid>
		<description><![CDATA[В качестве эпиграфа
Дневник программиста:
Понедельник: Поставил JBuilder- кайф!
Вторник: Поставил Intellij IDEA - вечный кайф!
Среда: Потрахался с Eclipse - слабое подобие левой руки!
Поставил сегодня Eclipse - после IDEA кажется ужасным, все те маленькие штучки которы мне облегчали жизнь там тут отсутствуют.
Знающие люди говорят, что нужно плагинов наставить.
Наставил.
Colorer сломал там внутрях что-то и Eclipse перестал узнавать файлы *.java
Пока [...]]]></description>
			<content:encoded><![CDATA[<p>В качестве эпиграфа</p>
<p><font size=-2><em>Дневник программиста:<br />
Понедельник: Поставил JBuilder- кайф!<br />
Вторник: Поставил Intellij IDEA - вечный кайф!<br />
Среда: Потрахался с Eclipse - слабое подобие левой руки!</em></font></p>
<p>Поставил сегодня Eclipse - после IDEA кажется ужасным, все те маленькие штучки которы мне облегчали жизнь там тут отсутствуют.<br />
Знающие люди говорят, что нужно плагинов наставить.<br />
Наставил.<br />
Colorer сломал там внутрях что-то и Eclipse перестал узнавать файлы *.java<br />
Пока нашел кто виноват, пока снес, мама дорогая&#8230;<br />
Неужели $400 USD не стоят избавления от всего этого?</p>
<p>Качаю MyEclipse всего $30 USD в год, может лучше станет&#8230;</p>
 <img src="http://www.katkovonline.com/wp-content/plugins/feed-statistics.php?view=1&post_id=106" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.katkovonline.com/2005/11/eclipse/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
