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

<channel>
	<title>Архив статей Андрея Роговского</title>
	<atom:link href="http://andreyka.od.ua/feed" rel="self" type="application/rss+xml" />
	<link>http://andreyka.od.ua</link>
	<description>Полный архив всех моих постов с Хабрахабра</description>
	<lastBuildDate>Wed, 13 Jul 2011 06:09:56 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Ударим СтрайкПостом по разгильдяйству Почты России!</title>
		<link>http://andreyka.od.ua/28.html</link>
		<comments>http://andreyka.od.ua/28.html#comments</comments>
		<pubDate>Sat, 26 Mar 2011 18:36:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Краудсорсинг]]></category>
		<category><![CDATA[почта]]></category>
		<category><![CDATA[россия]]></category>
		<category><![CDATA[страйкпост]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=28</guid>
		<description><![CDATA[Как я и обещал, был создан сайт направленный против забастовки почты России, (а именно так можно оценивать ее работу), с символическим названием СтрайкПост. На этом сайте планируется собрать жалобы о качестве работы, пропавших или вскрытых посылках, сканы обращений и самое главное — законные методы воздействия на эту ситуацию. Сейчас пока все еще сыро, но самое главное — [...]]]></description>
			<content:encoded><![CDATA[<p>Как я и <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://habrahabr.ru/blogs/needhelp/88932/" >обещал</a>, был создан сайт направленный против забастовки почты России, (а именно так можно оценивать ее работу), с символическим названием <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://www.strikepost.com/" >СтрайкПост</a>.</p>
<p>На этом сайте планируется собрать жалобы о качестве работы, пропавших или вскрытых посылках, сканы обращений и самое главное — законные методы воздействия на эту ситуацию. Сейчас пока все еще сыро, но самое главное — и сервер и домен вне зоны влияния силовых структур РФ и сайт просто так не закроют.</p>
<p>Конечно, один бы я не справился и мне помог <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://adubovskoy.habrahabr.ru/" >adubovskoy</a>, за что ему большое спасибо. В скором времени там будет доступна многоязычность, тексты заявлений и руководства к действию.</p>
<p>Любые предложения и замечания принимаются с благодарностью!</p>
<p><strong>Сейчас</strong> сайт размещен на моем сервере в виде VDS, прежний хостер — stormondemand.com на котором лежал сайт не выдержал хаброэффекта. Как верно подметили в одном из камментов — хостинг за 15$ хаброэффекты не держит.</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/28.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Как я покупал джойстик для Xbox-360</title>
		<link>http://andreyka.od.ua/32.html</link>
		<comments>http://andreyka.od.ua/32.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 18:39:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Я негодую]]></category>
		<category><![CDATA[бизнес]]></category>
		<category><![CDATA[ебизнес]]></category>
		<category><![CDATA[наебизнес]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=32</guid>
		<description><![CDATA[Решил я купить еще один джойстик, чтоб играть вдвоем — веселей. А в комплекте изначально идет только один. Сначала я зашел в ЦУМ и узнал что там хотят за этот геймпад 530 гривен — примерно 65$. Затем, уже дома, я погуглил и нашелболее приемлемое предложение — 365 гривен или ~45$. Да, неплохо в магазинах накручивают [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www1.dealextreme.com/productimages/sku_18435_1_small.jpg" alt="image" align="left" />Решил я купить еще один джойстик, чтоб играть вдвоем — веселей. А в комплекте изначально идет только один.<br />
Сначала я зашел в ЦУМ и узнал что там хотят за этот геймпад 530 гривен — примерно 65$. Затем, уже дома, я погуглил и нашел<a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://pristavki.ua/product_1988.html" >более приемлемое предложение</a> — 365 гривен или ~45$. Да, неплохо в магазинах накручивают — вероятно за аренду.<br />
А потом я погуглил на английском языке (учите его, это очень полезно) и нашел <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://www.dealextreme.com/details.dx/sku.18435~r.70925151" >китайскую подделку за 30$.</a>. Я все-таки рискнул и заказал самый дешевый вариант.<br />
Вчера я получил наконец этот геймпад, и оказалось что во-первых он рабочий, что самое главное, а во-вторых — не подделка, все работает как у оригинала, в том числе и вибрация. Единственная разница — в наклеечке, которую видно там ставят навроде акцизных марок.</p>
<p>Так вот — если брать оптом, то их там отдают по 28$. А у нас в магазинах чуть ли не трехкратная накрутка. И если посмотреть — так во всем. Такой вот отечественный бизнес.</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/32.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Пользуетесь PHP на 64-х битной платформе? Значит потеряли в производительности!</title>
		<link>http://andreyka.od.ua/141.html</link>
		<comments>http://andreyka.od.ua/141.html#comments</comments>
		<pubDate>Sat, 20 Nov 2010 07:09:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Хостинг]]></category>
		<category><![CDATA[brk]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[malloc]]></category>
		<category><![CDATA[mmap]]></category>
		<category><![CDATA[mmap2]]></category>
		<category><![CDATA[mremap]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[говнокод]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=141</guid>
		<description><![CDATA[По идее, эта статья должна была выйти в блоге «Linux для всех». Однако, данная проблема не проявила себя в аналогичных тестах на python и perl, а следовательно специфично-зависимая от PHP и разрядности платформы. А так PHP у нас прежде всего связан с сайтами, то и блог соответствующий — хостинг. Внимание! Следующий текст содержит сцены насилия фрагменты исходного [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory"><br />
<img src="http://habrastorage.org/storage/09de9600/d1063c1a/2862d079/0fde8398.png" alt="" /></a></p>
<p><em>По идее, эта статья должна была выйти в блоге «Linux для всех». Однако, данная проблема не проявила себя в аналогичных тестах на python и perl, а следовательно специфично-зависимая от PHP и разрядности платформы. А так PHP у нас прежде всего связан с сайтами, то и блог соответствующий — хостинг.</em></p>
<p><strong>Внимание</strong>! Следующий текст содержит сцены насилия фрагменты исходного кода и может нанести неисправимый урон вашему мозгу и разрушить веру в человечество linuxphp.<br />
<a name="habracut"></a><br />
Все началось с жалобы на то, что под 64-х битной архитектурой следующий скрипт на PHP работает катастрофически медленно:<br />
<code>&lt;?php</p>
<p>$cnt=0;<br />
while ($cnt++&lt;5) {</p>
<p>echo '----- TEST #'.$cnt.'-----<br />
';</p>
<p>echo 'start FOR &amp; WHILE testing<br />
';</p>
<p>$start = microtime(1);<br />
for($i=0;$i&lt;3000000;$i++) {}<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' for($i=0;$i&lt;3000000;$i++) {}<br />
';</p>
<p>$start = microtime(1);<br />
$i=0; while($i++&lt;3000001) {}<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' while($i++&lt;3000001) {}<br />
';</p>
<p>$start = microtime(1);<br />
$i=0; while($i&lt;3000000) {$i++;}<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' while($i&lt;3000000) {$i++;}<br />
';</p>
<p>$start = microtime(1);<br />
$i = 0;<br />
while ($i&lt;3000000): $i++; endwhile;<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' while ($i&lt;3000000): $i++; endwhile;<br />
';</p>
<p>echo '</p>
<p>start a.=b &amp; a=a.b testing<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
for($i=0;$i&lt;3000000;$i++) {$a = $a.$b;}<br />
$end = microtime(1);</p>
<p>$time = $end - $start;<br />
echo $time.' for($i=0;$i&lt;3000000;$i++) {$a = $a.$b;}<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
for($i=0;$i&lt;3000000;$i++) $a = $a.$b;<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' for($i=0;$i&lt;3000000;$i++) $a = $a.$b;<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
for($i=0;$i&lt;3000000;$i++) {$a .= $b;}<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' for($i=0;$i&lt;3000000;$i++) {$a.=$b;}<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
for($i=0;$i&lt;3000000;$i++) $a .= $b;<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' for($i=0;$i&lt;3000000;$i++) $a .= $b;<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
$i=0; while($i++&lt;3000001) {$a.= $b;}<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' while($i++&lt;3000001) {$a.= $b;}<br />
';</p>
<p>$a = NULL;<br />
$b = 'Довольно длинная строка, символов эдак 40';<br />
$start = microtime(1);<br />
$i=0; while($i++&lt;3000001) $a.= $b;<br />
$end = microtime(1);<br />
$time = $end - $start;<br />
echo $time.' $i=0; while($i++&lt;3000001) $a.= $b;<br />
';</p>
<p>}</p>
<p>?&gt;<br />
</code></p>
<p>Действительно, такая проблема присутствует в php5.2, что было проверено на различных дистрибутивах. Следовательно — проблема действительно была связана с разрядностью. Однако, испытав аналог подобного кода на других интерпретаторах, было выяснено — подобной проблемы там нет.<br />
Соответственно — это была исключительно проблема самого PHP, которая проявляла себя именно на 64-х битах. Но почему же настолько сильно, тысяча чертей?</p>
<p>Был произведен запуск со strace, который на i386, PAE и x86_64 выдавал различные значения:</p>
<ul>
<li>i386 mmap</li>
<li>PAE mremap (что в логично, это mmap с флагами)</li>
<li>x86_64 brk и mmap (а вот зачем brk?)</li>
</ul>
<p>Что же такое этот brk, почему он так влияет на скорость работы php и как избежать подобных ситуаций?<br />
Прежде всего отмечу, что картинка к топику — кликабельная и ведет на фундаментальную статью, которая раскрывает все подробности работы с памятью. Однако она очень сложная и на английском языке. Если кратко — то brk позволяет изменить размер выделенной памяти вместо откусывания куска через mmap, что сокращает ее фрагментацию.</p>
<p>Но как видно — эта операция очень затратна, и сокращение используемой памяти вызывает настолько большой оверхед, что этим лучше пренебречь. Особенно если речь идет о хайлоаде — скорость отклика значительно важнее, чем экономия памяти.</p>
<p>Так почему же на i386 мы используем только mmap, в то время как на x86_64 туда проникает brk? Для ответа на этот вопрос обращаемся к первоисточнику — <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://www.kernel.org/doc/man-pages/online/pages/man3/malloc.3.html" >malloc</a>:<br />
<code>Normally, malloc() allocates memory from the heap, and adjusts the size of the<br />
heap as required, using sbrk(2). When allocating blocks of memory larger than<br />
MMAP_THRESHOLD bytes, the glibc malloc() implementation allocates the memory<br />
as a private anonymous mapping using mmap(2). MMAP_THRESHOLD is 128 kB by<br />
default, but is adjustable using mallopt(3).<br />
</code></p>
<p>Теперь все стало на свои места — для x86_64 MMAP_THRESHOLD был увеличен, что и привело к такому интересному результату, связанному по всей видимости с очень хитрым сборщиком мусора в PHP, который в данном случае обхитрил сам себя.</p>
<p>А для того, чтоб вернуть вызов malloc как и в i386, надо вернуть старые значения. Это можно сделать поменять глобально, собрав glibc, что нежелательно или сделать выборочно для процесса, указав в переменных ядра старое значение (если конечно glibc собран с поддержкой этой опции):<br />
<strong>export MALLOC_MMAP_THRESHOLD_=131072</strong></p>
<p>Если вставить эту магическую строку в init скрипт apache, то вы можете получить прирост в скорости и больший расход по памяти. Разумеется, это актуально не только для php, но возможно и для многих других программ, когда разработчики вызывая malloc подразумевали mmap.</p>
<p>P.S. Тест лучше запускать с консоли.<br />
strace php -f qq.php даст одну картину<br />
MALLOC_MMAP_THRESHOLD_=131072 strace php -f qq.php даст совершенно другую, конечно если у вас 64 бита.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/141.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Что вы можете реально сделать за 1000 рублей или ошибки фрилансеров</title>
		<link>http://andreyka.od.ua/9.html</link>
		<comments>http://andreyka.od.ua/9.html#comments</comments>
		<pubDate>Sat, 23 Oct 2010 17:11:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Персональный блог]]></category>
		<category><![CDATA[выводы]]></category>
		<category><![CDATA[фриланс]]></category>
		<category><![CDATA[эксперимент]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=9</guid>
		<description><![CDATA[Хочу подвести итоги конкурса, который я когда-то давно попросил опубликовать одного моего знакомого odessky. Прежде всего хочу сказать, что это конечно же был социальный эксперимент, в котором я попытался изучить типичные ошибки фрилансеров, чтоб избегать их в дальнейшем самому. А задания были вот какие: Создание сайта-визитки crossolt Фото сессия от Assargin Хабропицца — andorro Провокационный видеоролик от alexkl Фото недостроенной АЭС [...]]]></description>
			<content:encoded><![CDATA[<p>Хочу подвести итоги <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://habrahabr.ru/blogs/personal/98680/" >конкурса</a>, который я когда-то давно попросил опубликовать <span style="color: red;"><em>одного моего знакомого</em></span> <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://odessky.habrahabr.ru/" >odessky</a>.<br />
Прежде всего хочу сказать, что это конечно же был социальный эксперимент, в котором я попытался изучить типичные ошибки фрилансеров, чтоб избегать их в дальнейшем самому.</p>
<p>А задания были вот какие:</p>
<ul>
<li>Создание сайта-визитки <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://crossolt.habrahabr.ru/" >crossolt</a></li>
<li>Фото сессия от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://assargin.habrahabr.ru/" >Assargin</a></li>
<li>Хабропицца — <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://andorro.habrahabr.ru/" >andorro</a></li>
<li>Провокационный видеоролик от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://alexkl.habrahabr.ru/" >alexkl</a></li>
<li>Фото недостроенной АЭС от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://neochapay.habrahabr.ru/" >neochapay</a></li>
</ul>
<p>Напоминаю, что за каждое задание я оценивал в 1000 рублей. Ну а теперь — результаты и выводы.<br />
<a name="habracut"></a><span id="more-9"></span><br />
От создания сайта-визитки я ожидал простое оформление и 3-5 стандартных страниц (Главная, О нас, Контакты и т.д.). Результатом сначала был шаблон, где текст главной был вставлен в обновление, потом поплыла верстка. В результате <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://crossolt.habrahabr.ru/" >crossolt</a> предложил мне сделать сайт на ukoz, что мне не подошло, после чего — пропал. Это одна из тактик фрилансера — взять на себя проект, знаний для которого недостаточно и потом попытаться убедить заказчика внести изменение в ТЗ под себя. Работает только с недалекими заказчиками, которые не в теме.</p>
<p><a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://assargin.habrahabr.ru/" >Assargin</a> честно выполнил фото сессию, хотя он не смог сделать полностью, что обещал, он тем не менее технически выполнил все как договорились + проявил творческий подход. Я доволен и собираюсь выложить фотки зимой, когда они будут особенно интересны.</p>
<p>А вот с <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://andorro.habrahabr.ru/" >andorro</a> вышло хуже. Сначала он не отвечал, хотя я выждал неделю — это вполне достаточный срок. Затем, после напоминания прислал всего 2 фотографии, мотивируя тем, что фотограф остальные стер. Тут уже можно сделать вывод — если ты, фрилансер, запорол задание, то наберись мужества и сообщи об этом сразу, и предложи свои варианты для решения этой проблемы. Попытки затягивания ответа выставляют тебя в худшем варианте.</p>
<p>С провокационным роликом, который должен был снять <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://alexkl.habrahabr.ru/" >alexkl</a> ничего не вышло, но к чести <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://alexkl.habrahabr.ru/" >alexkl</a> могу сказать то, что он отказался получать 100% предоплату. И действительно, если есть сомнения в своих силах — лучше не брать предоплату.</p>
<p>Ну и наконец фото АЭС, которые должен был сделать <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://neochapay.habrahabr.ru/" >neochapay</a>. Сначала я получил сообщение, о том что он будет месяц в командировке, через месяц написал повторно — и получил в ответ цельное ничего. Откуда следует вывод, что когда заказчики не хотят вносить 100% предоплату — на это есть определенные причины.</p>
<p>Надеюсь, этот небольшой эксперимент пойдет всем нам на пользу — как фрилансерам, так и заказчикам.</p>
<p>Будьте счастливы и приятных выходных!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/9.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Стив Джобс: «Я — Дартаньян, а вы&#8230;»</title>
		<link>http://andreyka.od.ua/14.html</link>
		<comments>http://andreyka.od.ua/14.html#comments</comments>
		<pubDate>Wed, 22 Sep 2010 17:16:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[поддержка]]></category>
		<category><![CDATA[совок]]></category>
		<category><![CDATA[стив джобс]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=14</guid>
		<description><![CDATA[Как известно, у яблочной компании множество фанатов, что гарантирует ей процветание и продажу своей продукции, сделанной умелыми руками китайцев, по более высоким ценам, чем конкуренты. Это был выбор, и сознательная работа на удовлетворение клиента. Но клиенту нужен не только товар, ему еще нужна и поддержка, и сервисное обслуживание. К сожалению, многие крупные компании, наращивая свои [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно, у яблочной компании множество фанатов, что гарантирует ей процветание и продажу своей продукции, сделанной умелыми руками китайцев, по более высоким ценам, чем конкуренты.<br />
Это был выбор, и сознательная работа на удовлетворение клиента. Но клиенту нужен не только товар, ему еще нужна и поддержка, и сервисное обслуживание.<br />
К сожалению, многие крупные компании, наращивая свои отделы все новыми и новыми менеджерами, забывают о росте техподдержки. И там по прежнему работают два с половиной человека, как это показано в одном известном сериале.<br />
Увы, и Apple не стала исключением. Однажды одна настырная студентка стала задавать<a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://gawker.com/5641211/steve-jobs-in-email-pissing-match-with-college-journalism-student" >слишком много вопросов</a> по поводу использования продукции Apple для образовательных целей.<br />
Не получив ответа, она написала Стиву Джобсу, на sjobs@apple.com. Ответы были такие:<br />
<a name="habracut"></a><span id="more-14"></span></p>
<ul>
<li>У нас более 300 миллионов пользователей, и мы не можем ответить на их просьбы, если они связаны с какой-то ерундой. Извините.</li>
<li>Пожалуйста, оставьте нас в покое.</li>
</ul>
<p>Те, кто рос при СССР, наверное еще помнят хамство советских продавщиц, высокомерно обсчитывающих покупателей — <strong>Вас много, а я одна</strong>.<br />
Теперь Apple из яблочной компании становится совковой. <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://habrahabr.ru/blogs/apple/82762/" >Что</a> в прочем <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://habrahabr.ru/blogs/apple/91584/" >не удивительно</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/14.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Защита от DDOS атаки случайными аргументами при помощи Nginx</title>
		<link>http://andreyka.od.ua/17.html</link>
		<comments>http://andreyka.od.ua/17.html#comments</comments>
		<pubDate>Mon, 20 Sep 2010 17:21:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Информационная безопасность]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[боты]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=17</guid>
		<description><![CDATA[Я встретился с новым типом ботнета. Если старый долбил только в главную, то новый действует иначе. Он посылает множество запросов вида GET someurl/?t1555ss5326=5326, где someurl — найденный ботом php скрипт. Но если атакуемый сайт поддерживает ЧПУ, то такие запросы к нему должны отсутствовать в принципе. ЧПУ сейчас является стандартом де-факто, по этому можно смело отрезать такие запросы, [...]]]></description>
			<content:encoded><![CDATA[<p>Я встретился с новым типом ботнета. Если старый долбил только в главную, то новый действует иначе. Он посылает множество запросов вида<br />
<code>GET <strong>someurl</strong>/?t1555ss5326=5326</code>, где <strong>someurl</strong> — найденный ботом php скрипт.<br />
Но если атакуемый сайт поддерживает ЧПУ, то такие запросы к нему должны отсутствовать в принципе. ЧПУ сейчас является стандартом де-факто, по этому можно смело отрезать такие запросы, логируя IP ботов.<br />
Для этого очень удобен nginx, и его переменная <strong>is_args</strong>, которая имеет значение &laquo;?&raquo;, если в URI идут аргументы. Базовая конструкция выглядит так:</p>
<p><code>if ($is_args = "?") {<br />
return 403 444;<br />
}<br />
</code><br />
Очень просто и красиво, правда?<br />
Вот как выглядит LA после включения этой защиты:<br />
<code>load average: 1.50, 3.09, 6.96</code><br />
Текущий ботнет из ~20000 зомби, делают 5-8k одновременных запросов.</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/17.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кто же он такой, отечественный IT-лидер?</title>
		<link>http://andreyka.od.ua/139.html</link>
		<comments>http://andreyka.od.ua/139.html#comments</comments>
		<pubDate>Tue, 14 Sep 2010 06:00:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Персональный блог]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[компании]]></category>
		<category><![CDATA[менеджмент проектов]]></category>
		<category><![CDATA[программисты]]></category>
		<category><![CDATA[работа]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=139</guid>
		<description><![CDATA[Все больше и больше IT-компаний озабочены поиском руководителей, так называемых IT-лидеров, или просто — специалистов на руководящую должность (proof). Но что именно вкладывают в понятие IT-лидера компании и почему их поиски не приносят желаемых результатов? Ответ смотрите сегодня вечером на канале ТНТ! А если серьезно, то на лицо идет явное нарушение логики в требованиях к знаниям иумениям. [...]]]></description>
			<content:encoded><![CDATA[<p>Все больше и больше IT-компаний озабочены поиском руководителей, так называемых IT-лидеров, или просто — специалистов на руководящую должность (<a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://www.e-xecutive.ru/education/adviser/1375019/" >proof</a>).<br />
Но что именно вкладывают в понятие IT-лидера компании и почему их поиски не приносят желаемых результатов? <em>Ответ смотрите сегодня вечером на канале ТНТ!</em><br />
А если серьезно, то на лицо идет явное нарушение логики в требованиях к <strong>знаниям</strong> и<strong>умениям</strong>. И сейчас я объясню, почему.<br />
<a name="habracut"></a><br />
Итак, прежде всего сам специалист. К нему сразу 2 требования — быть в курсе современных технологий и способов их применений, и уметь руководить людьми.<br />
Однако, сразу возникает вопрос, а почему такой специалист идет работать наемным сотрудником? Ведь он может сам организовать свой бизнес. Он в курсе что делать и как общаться с программистами.<br />
Тут может быть единственный вариант сотрудничества — это партнерство, когда кроме высокой зарплаты, IT-лидер получает <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://e-servis.biz/" >опционы</a>, как это делается в крупных зарубежных компаниях. Его вклад в работу подобен банковскому счету — если он работал хорошо, то он получает отчисления от компании, которые значительно больше ЗП, и главное — к его мнению прислушиваются не только подчиненные, но и непосредственные руководители.<br />
Если сравнить создание IT-проекта со строительством дома, то обычные программисты являются строителями, строящими модуль за модулем код, а IT-лидер — строительной фирмой, которая обеспечивает архитектурный проект, утверждение и контроль за его постройкой.</p>
<p>Однако в сфере отечественных IT-компаний, особенно тех, которые работают на аутсорс, а таких — большинство, в термин IT-лидера вкладываются совершенно другие понятия.<br />
Прежде всего, ни о какой свободе выбора или высказывании своего мнения и речи быть не может. Руководитель, общаясь непосредственно с заказчиком, на самом высоком уровне, собирает общие представления о требованиях, которые потом будут уточняться по мере хода работы.<br />
И от IT-лидера требуется создать проект, по нечеткому ТЗ, которое еще и будет несколько раз изменено.<br />
В этом случае IT-лидер выполняет роль прораба, а руководство с заказчиком — роль сумасбродной блондинки, которая заказала ремонт в своей квартире, «так чтоб было по-европейски гламурненько, а по цене — дешевенько».<br />
И начинается. Сегодня — «Хочу стены розовые». Завтра — «Я передумала, хочу золотые обои». Послезавтра — «Нет, пусть будет белая штукатурка, я сама разрисую по-феншую».<br />
В действительности, руководитель такой компании, чистый менеджер, не понимает почему нужно так кардинально менять код, как и не понимает блондинка, почему подготовка стен под обои или краску требует разных грунтовок и шпаклевки.<br />
Да они и не хотят понимать, они платят деньги, а ты, IT-прораб выкручивайся как хочешь. И объясняй уставшим программистам, почему в очередной раз изменился алгоритм программы и что теперь надо менять.</p>
<p>Таким образом, на современном рынке IT, больше всего затребован прораб-телепат с навыками пророковедения, способный прочитать мысли заказчика на расстоянии и предвидеть возможные изменения, чтоб изначально подойти к проекту таким образом, чтоб он был завершен в срок и удовлетворил заказчика.</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/139.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Идеальный эксперт или гороскопы на службе ERP</title>
		<link>http://andreyka.od.ua/136.html</link>
		<comments>http://andreyka.od.ua/136.html#comments</comments>
		<pubDate>Fri, 10 Sep 2010 05:53:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Персональный блог]]></category>
		<category><![CDATA[erp]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[гороскопы]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=136</guid>
		<description><![CDATA[А вы пробовали когда-то делать системный анализ гороскопов? Я пробовал и нашел, что все эти советы дает Капитан Очевидность и они носят универсально-рекомендательный характер. Например: Хабролюдям сегодня стоит приложить усилия для успешного завершения начатого дела, это может принести успех, но остерегайтесь возможных ДТП, особенно после обеда. Разберем этот пример. В пятницу очень хорошо закончить запланированный [...]]]></description>
			<content:encoded><![CDATA[<p>А вы пробовали когда-то делать системный анализ гороскопов? Я пробовал и нашел, что все эти советы дает Капитан Очевидность и они носят универсально-рекомендательный характер.<br />
Например: Хабролюдям сегодня стоит приложить усилия для успешного завершения начатого дела, это может принести успех, но остерегайтесь возможных ДТП, особенно после обеда.</p>
<p>Разберем этот пример. В пятницу очень хорошо закончить запланированный этап работы, чтоб отдыхать со спокойной совестью. А вести себя внимательно на дорогах — это актуально всегда.</p>
<p>Так вот, однажды один владелец крупной компании захотел себе <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://erponline.ru/" >ERP</a>. Но не простую, как у всех, а которая реально помогает управлять предприятием. Вводишь в нее цифры — а она говорит тебе, что надо сделать.</p>
<p>Казалось бы, идея не реальная, но… Я вспомнил за программу генерации гороскопов. Только вместо дней недели меня интересовала дисперсия по введенным числам, а точнее говоря — прибыль (или убыток) компании на этап ввода данных.<br />
<a name="habracut"></a><br />
Если компания выходила с прибылью — программа выдавала нечто: Стратегия по укреплению основных сегментов влияния выбрана успешна. Рекомендуется направить усилия на получение новых направлений.<br />
А если был убыток, то: Вероятно, что в отдел сбыта конкуренты внедрили своего человека, проводящего диверсионный метод работы. Рекомендуется усилить контроль.</p>
<p>Спустя пол-года в компании все знали, что у владельца есть чудо-программа, которая может предсказывать будущее, увольнять плохих сотрудников, указывать на недочеты и даже, о чудо, посоветовать на день рождения компании: Сегодня подходящий момент для корпоративного события, в котором должны участвовать все сотрудники.</p>
<p>Разумеется, дата создания компании была вбита в программу, но дело не в этом. Компания уже существует шестой год и она очень успешная. Казалось бы парадокс — доверить управление генератору случайных чисел?</p>
<p>Однако сам психологический факт, того что есть программа, которая может вычислить недобросовестность или лень, риск быть уволенным перед всемогущим компьютерным разумом, действует на сотрудников гипнотически, держа их в постоянном тонусе.</p>
<p>А вы когда-то писали нечто грандиозное, в основе которого лежит генератор случайных чисел?</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/136.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как сделать облачный (кластерный) хостинг за пару копеек</title>
		<link>http://andreyka.od.ua/22.html</link>
		<comments>http://andreyka.od.ua/22.html#comments</comments>
		<pubDate>Tue, 24 Aug 2010 17:28:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Хостинг]]></category>
		<category><![CDATA[кластер]]></category>
		<category><![CDATA[облако]]></category>
		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=22</guid>
		<description><![CDATA[Три года назад у меня была интересная задача. Необходимо было собрать платформу, объединявшую несколько стоек с серверами в единое целое, для динамического распределения ресурсов между сайтами написанным для LAMP платформы. Причем так, чтоб вмешательство в код сайтов было минимальным, а еще лучше — вообще отсутствовало. При этом никаких дорогих решений вроде Cisco Content Switch или [...]]]></description>
			<content:encoded><![CDATA[<p>Три года назад у меня была интересная задача. Необходимо было собрать платформу, объединявшую несколько стоек с серверами в единое целое, для динамического распределения ресурсов между сайтами написанным для LAMP платформы. Причем так, чтоб вмешательство в код сайтов было минимальным, а еще лучше — вообще отсутствовало.<br />
При этом никаких дорогих решений вроде Cisco Content Switch или дисковой полки с оптоволокном использовать нельзя — не хватало бюджета.<br />
А кроме того, разумеется, в случае выхода одного из серверов из строя — это не должно было влиять на работу платформы.<br />
<a name="habracut"></a></p>
<h4>Голь на выдумки хитра</h4>
<p>Прежде всего нужно разделить создание платформы на подзадачи. Сразу понятно, что придется что-то делать для синхронизации данных, так как общий диск недоступен. Кроме того, необходимо балансировать трафик и иметь по нему кое-какую статистику. Ну и наконец, автоматизация предоставления нужных ресурсов — это тоже достаточно серьезная задача.</p>
<h4>Начнем с начала, да прибудет со мной КО</h4>
<p>У меня был выбор, на чем организовать платформу. Это OpenVZ и XEN. У каждого есть свои плюсы и минусы. OpenVZ имеет меньший оверхед, работает с файлами а не блочными устройствами, но не умеет запускать что-то кроме Linux&#8217;овых дистрибутивов. XEN позволяет запустить и Windows, но более сложен в работе. Я использовал OpenVZ, так как это более подходило для решения задачи, но вас-то никто не ограничивает в выборе.</p>
<p>Затем я разделил сервера на места под VDS, по одной на каждое ядро. Сервера были разные, по этому у меня был набор от 2-х до 16-и виртуалок на каждом из серверов. В «среднем по палате» вышло ~150 виртуалок на стойку.</p>
<h4>Как синхронизацировать данные</h4>
<p>Следующий пункт — это оперативное создание VDS по требованию + защита от поломки любого сервера. Решение было простым и красивым.<br />
Для каждой VDS создается начальный образ в виде файлов на LVM разделе. Этот образ «разливается» по всем серверам платформы. В результате мы имеем бекап всех проектов на каждом сервере (параноики плачут от умиления), а создание новой VDS «по запросу» упростилось до снапшота с образа и его старта в виде VDS (дело буквально нескольких секунд).</p>
<h4>База и API</h4>
<p>Если с целостностью файлов было все просто, то вот с синхронизацией базы дело обстояло хуже. С начала я попробовал классический пример — master-slave, и столкнулся с классической проблемой: slave отставал от master (да, и спасибо за репликацию в один поток, очень большое спасибо).<br />
Следующим шагом был Mysql-Proxy. Как сисадмину, мне подобное решение было очень удобным — поставил и забыл, только конфиг обновлять надо при добавлении/удалении новых VDS. Но у разработчиков было свое мнение. В частности, то, что проще написать некий класс PHP для синхронизации INSERT/UPDATE/DELETE запросов, чем изучать Lua, без которого Mysql-Proxy бесполезен.<br />
Результатом их работы стал так называемый API, который умел находить соседей широковещательным запросом, синхронизироваться до актуального состояния и информировать соседей о всех изменениях с базой.<br />
Но все же стоит изучить Lua и сделать нативный режим работы, когда все запросы будут синхронизированы с соседями.</p>
<h4>Слава FreeBSD</h4>
<p>Балансер — это можно сказать ключевой аспект платформы. Если упадет балансирующий сервер, то вся работа не будет иметь никакого смысла.<br />
Именно по этому я использовал CARP для создания отказоустойчивого балансера, выбрав FreeBSD в качестве ОС и Nginx в качестве балансера.<br />
Да-да, дорогущий NLB был заменен двумя слабыми машинками с FreeBSD (маркетологи в ярости).</p>
<h4>И самое главное — как это работало</h4>
<p>При старте платформы для каждого сайта запускалось по одной копии и monit на баланесере следил, за тем, чтобы первичная копия всегда работала.<br />
Кроме того на балансере был установлен анализатор статистики Awstats, который предоставлял все логи в удобном формате, а главное — там был скрипт, опрашивающий каждую VDS по SNMP на предмет ее нагрузки.<br />
Как мы помним, я выделял на каждую VDS по одному ядру, следовательно Load Average в 1 — это будет нормальной нагрузкой для VDS. Если LA становился 2 или выше — запускался скрипт, создающий копию VDS на случайном сервере и прописывал ее в апстрим nginx&#8217;а. А когда нагрузка на дополнительной VDS падала меньше 1 — соответственно, все удалялось.</p>
<h4>Резюмирую</h4>
<p>Если взять стойку с серверами и свитчем поддерживающим CARP протокол, то для создания облачного хостинга будет необходимо:</p>
<ul>
<li>Изучить Lua и настроить прозрачную синхронизацию через Mysql-Proxy</li>
<li>Прикрутить биллинг для учета дополнительных копий VDS и трафика</li>
<li>Написать веб-интерфейс для управления VDS</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/22.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Что бы вы сделали за 1000 рублей?</title>
		<link>http://andreyka.od.ua/134.html</link>
		<comments>http://andreyka.od.ua/134.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 05:51:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Персональный блог]]></category>
		<category><![CDATA[эксперимент]]></category>

		<guid isPermaLink="false">http://andreyka.od.ua/?p=134</guid>
		<description><![CDATA[Знаю, что хабралюди очень талантливые и разносторонние. Так уж сложилось, что у меня есть около 9000 рублей на яндекс.кошельке и я хочу ими заплатить девяти хабражителям за какую-то работу. Понимаю, что сумма очень маленькая и даже оскорбительная для большинства, но попробуйте понять меня правильно — это своего рода попытка показать то, чем хабралюди отличаются от [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://narrowcampus.files.wordpress.com/2009/04/d1325will-work-for-money-posters.jpg" alt="image" align="left" /><br />
Знаю, что хабралюди очень талантливые и разносторонние. Так уж сложилось, что у меня есть около 9000 рублей на яндекс.кошельке и я хочу ими заплатить девяти хабражителям за какую-то работу. Понимаю, что сумма очень маленькая и даже оскорбительная для большинства, но попробуйте понять меня правильно — это своего рода попытка показать то, чем хабралюди отличаются от обычных фрилансеров, а именно — творчеством и ответственностью (я надеюсь).</p>
<p>Правила очень просты. Вы пишите, какую работу готовы выполнить за 1000 яндекс.рублей, мы оговариваем все детали тут, у всех на виду, и в случае согласия я сразу перевожу деньги на ваш счет, ожидая в оговоренный срок получить выполненную работу. Или обмануть меня, разбогатев на 1000 рублей и испортить свою карму (настоящую).</p>
<p>Список работ, которые я оплатил — под катом<br />
<a name="habracut"></a></p>
<ol>
<li>Создание сайта-визитки студии «Добродетель», делающая бесплатно сайты для детских домов. <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://crossolt.habrahabr.ru/" >crossolt</a></li>
<li>Фото сессия от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://assargin.habrahabr.ru/" >Assargin</a></li>
<li>Хабропицца — <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://andorro.habrahabr.ru/" >andorro</a></li>
<li>Провокационный видеоролик от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://alexkl.habrahabr.ru/" >alexkl</a></li>
<li>Фото недостроенной АЭС от <a target="_blank" rel="nofollow" href="http://andreyka.od.ua/goto/http://neochapay.habrahabr.ru/" >neochapay</a></li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andreyka.od.ua/134.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

