<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>netch80</title>
  <link>http://netch80.livejournal.com/</link>
  <description>netch80 - LiveJournal.com</description>
  <lastBuildDate>Fri, 13 Nov 2009 17:42:40 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>netch80</lj:journal>
  <lj:journalid>15216683</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/12158.html</guid>
  <pubDate>Fri, 13 Nov 2009 17:42:40 GMT</pubDate>
  <title>время, стой. раз-два.</title>
  <link>http://netch80.livejournal.com/12158.html</link>
  <description>Цитируем Posix:&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;Epoch&lt;br /&gt;&lt;br /&gt;   The time zero hours, zero minutes, zero seconds, on January 1, 1970&lt;br /&gt;   Coordinated Universal Time (UTC).&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;Смотрим в википедию - с 1970-го года в UTC было 24 вставных секунды (leap seconds).&lt;br /&gt;&lt;br /&gt;Проверяем системные часы:&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; a = (10*366+29*365)*86400&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;1230768000&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import time&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; time.gmtime(a)[0:6]&lt;br /&gt;(2009, 1, 1, 0, 0, 0)&lt;br /&gt;&lt;br /&gt;то есть никто не применял коррекцию по ним.&lt;br /&gt;&lt;br /&gt;Первый вопрос - покажите мне хоть один юникс или одну Windows, чтобы честно реализовывала UTC, а не UT1 или UT2?&lt;br /&gt;&lt;br /&gt;Второй вопрос - а нафига этот UTC нужен в практической машинной реальности?</description>
  <comments>http://netch80.livejournal.com/12158.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>12</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/11959.html</guid>
  <pubDate>Fri, 09 Oct 2009 20:04:43 GMT</pubDate>
  <title>[erlang] множественные очереди и одиночный тормоз</title>
  <link>http://netch80.livejournal.com/11959.html</link>
  <description>&lt;a href=&quot;http://netch80.livejournal.com/11101.html&quot;&gt;В прошлом сообщении&lt;/a&gt; пришёл к выводу, что спасением для быстрого детекта сигнала &quot;притормозить&quot; является синхронный вызов.&lt;br /&gt;&lt;br /&gt;Но надо было действительно подумать, чтобы вспомнить, что ответ на синхронный вызов тоже падает в очередь сообщений, и извлечь его оттуда - тот же receive с матчингом - тормозит линейно зависимо от длины очереди.&lt;br /&gt;&lt;br /&gt;&quot;Схватить автомат и убивать всех подряд&quot; (tm)</description>
  <comments>http://netch80.livejournal.com/11959.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/11767.html</guid>
  <pubDate>Wed, 23 Sep 2009 05:43:14 GMT</pubDate>
  <title>umass, sync и вокруг</title>
  <link>http://netch80.livejournal.com/11767.html</link>
  <description>Что-то во фре (или в семёрке, или даже в 7.2) подломали в плане аккуратности доступа к дискам. Уже два раза запарывал нафиг файловую систему на флэшке телефона, подключаемой как простой umass, несмотря на то, что после umount и sync ждал больше минуты, пока всё не успокоится.&lt;br /&gt;&lt;br /&gt;Это смыкается с выводом, который сделал по текущему проекту: любые асинхронные подходы хороши для держания нагрузки, но независимо от стиля и качества реализации обязаны иметь и синхронные варианты, и команды типа &quot;здесь барьер, всё что задано до него - завершить&quot;. В частном случае, sync после umount не должен был вернуть управление, пока не сбросил весь грязный кэш. Если для этого нужен другой sync - ok, но предоставьте.</description>
  <comments>http://netch80.livejournal.com/11767.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/11510.html</guid>
  <pubDate>Sat, 19 Sep 2009 18:59:32 GMT</pubDate>
  <title>Зюки</title>
  <link>http://netch80.livejournal.com/11510.html</link>
  <description>А вот как диагностировать, кто виноват в том, что Firefox и Seamonkey одинаково выводят  вместо греческих букв зюки какого-то неизвестного мне алфавита? (Уточнение: фря, 7.2)</description>
  <comments>http://netch80.livejournal.com/11510.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/11101.html</guid>
  <pubDate>Thu, 17 Sep 2009 18:43:19 GMT</pubDate>
  <title>Захотелось в Erlang&apos;е множественных очередей. Или приоритетных.</title>
  <link>http://netch80.livejournal.com/11101.html</link>
  <description>Ибо когда A посылает толстый поток данных на B, B - на C, C захлёбывается и просит B прикрутить краник - посылать сообщение об этом бессмысленно. Нормальным ходом оно дойдёт чёрт знает когда, а выбирать по маске с линейным перебором очереди - прямой способ убить всё вокруг нагрузкой.&lt;br /&gt;&lt;br /&gt;Все альтернативные способы кривы. Прокси-процесс с flow control - лишняя нагрузка на пересылке. Самым разумным показалась эмуляция глобальной переменной через специальный процесс и gen_server:call() к нему на каждые 100-1000 обработанных сообщений. Главное, чтобы этот процесс не сдох сам от нагрузки.&lt;br /&gt;&lt;br /&gt;Ну и как это называется? ;(</description>
  <comments>http://netch80.livejournal.com/11101.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/10920.html</guid>
  <pubDate>Thu, 17 Sep 2009 08:52:25 GMT</pubDate>
  <title>Какая смешная штука этот ваш Oracle.</title>
  <link>http://netch80.livejournal.com/10920.html</link>
  <description>INSERT WHEN NOT EXISTS (SELECT an_address FROM active_nodes WHERE an_address=&apos;10.0.7.141:5061&apos;) THEN INTO active_nodes (an_address, an_env, an_expires) VALUES (&apos;10.0.7.141:5061&apos;, 2, PORTA_COMPAT.NOW() + NUMTODSINTERVAL(600,&apos;SECOND&apos;)) SELECT NULL FROM DUAL;&lt;br /&gt;&lt;br /&gt;вот кому и зачем тут этот последний SELECT мусора из ниоткуда.</description>
  <comments>http://netch80.livejournal.com/10920.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/10563.html</guid>
  <pubDate>Thu, 27 Aug 2009 06:34:34 GMT</pubDate>
  <title>Грабли привычные, традиционные</title>
  <link>http://netch80.livejournal.com/10563.html</link>
  <description>&amp;lt; href=&quot;&lt;a href=&quot;http://www.rsdn.ru/forum/cpp.applied/3517122.aspx&quot;&gt;http://www.rsdn.ru/forum/cpp.applied/3517122.aspx&lt;/a&gt;&quot;&amp;gt;на которые наступают снова и снова&amp;lt;/a&amp;gt;.</description>
  <comments>http://netch80.livejournal.com/10563.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/10474.html</guid>
  <pubDate>Sat, 11 Jul 2009 19:59:33 GMT</pubDate>
  <title>to quote or not to quote</title>
  <link>http://netch80.livejournal.com/10474.html</link>
  <description>Про &lt;a href=&quot;http://netch80.livejournal.com/565.html&quot;&gt;грамматизьму в IETF&lt;/a&gt; я уже говорил, но, видно, мало. Только что нарвался с RFC2617.&lt;br /&gt;&lt;br /&gt;Пусть параметр в открытом виде выглядит так: a&quot;b&lt;br /&gt;Как quoted-string в заголовке Authorization он будет выглядеть так: &quot;a\&quot;b&quot;&lt;br /&gt;&lt;br /&gt;Передавать же в вычисления response надо так: a\&quot;b&lt;br /&gt;(то есть снять только крайние кавычки, внутренность параметра не менять)&lt;br /&gt;&lt;br /&gt;Возникает простой логичный вопрос: quoted-string допускает квотинг любого символа, то есть та же строка могла быть записана и как &quot;\a\&quot;\b&quot;, и как &quot;\a\&quot;b&quot;, и всеми аналогичными вариантами. И какой из них передавать в вычисления дайджеста, и почему?</description>
  <comments>http://netch80.livejournal.com/10474.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/10129.html</guid>
  <pubDate>Fri, 26 Jun 2009 14:27:28 GMT</pubDate>
  <title>коммит</title>
  <link>http://netch80.livejournal.com/10129.html</link>
  <description>commit 7d319d801dc7ced3bbd1c7b66034bc124c4bde0c&lt;br /&gt;Author: Valentin Nechayev &amp;lt;netch@*******&amp;gt;&lt;br /&gt;Date:   Fri Jun 26 17:19:07 2009 +0300&lt;br /&gt;&lt;br /&gt;    Hypervisor: functest 2 - for functest style 2.&lt;br /&gt;    &lt;br /&gt;    (Recursion: see Recursion.)</description>
  <comments>http://netch80.livejournal.com/10129.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/9961.html</guid>
  <pubDate>Thu, 28 May 2009 05:53:31 GMT</pubDate>
  <title>яйцо в утке, утка в зайце...</title>
  <link>http://netch80.livejournal.com/9961.html</link>
  <description>&lt;code&gt;&lt;pre&gt;&lt;font color=&quot;#3333ff&quot;&gt;
Author: jamie
Date: Wed May 27 14:11:23 2009
New Revision: 192895
URL: http://svn.freebsd.org/changeset/base/192895

Log:
  Add hierarchical jails.  A jail may further virtualize its environment
  by creating a child jail, which is visible to that jail and to any
  parent jails.  Child jails may be restricted more than their parents,
  but never less.  Jail names reflect this hierarchy, being MIB-style
  dot-separated strings.
&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Не знаю, насколько полезно, но выглядит очень круто:)</description>
  <comments>http://netch80.livejournal.com/9961.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/9546.html</guid>
  <pubDate>Wed, 27 May 2009 20:47:29 GMT</pubDate>
  <title>порт или не порт?</title>
  <link>http://netch80.livejournal.com/9546.html</link>
  <description>Коллега уже несколько дней заводит машинку на Cell&apos;е. При загрузке она пишет на консоль вполне разумные слова и понимает команды, но затем при запуске ядра начинает писать мусор. Зовёт на помощь подумать.&lt;br /&gt;&lt;br /&gt;Рассматриваю странные зюки, собранные цепочками, и думаю, что это всё очень напоминает ситуацию, когда компорт переинициализировался на скорость побольше (примерно в 2 раза), а слушаем мы его на прежней скорости. Озвучиваю эту мысль.&lt;br /&gt;&lt;br /&gt;Вписывает в yaboot.conf установку 115200 для ttyS0. Запускаем. Цепочки зюк короче и разнообразнее. Вписывает 19200. Запускаем. После критического места продолжается нормальный читаемый рассказ (стартовые скрипты, отсутствующие конфиги, и прочая и прочая). Пляшем джигу.&lt;br /&gt;&lt;br /&gt;Говорю что-то в стиле &quot;это элементарно, Ватсон&quot;. И тут мне объясняют, что никакой это нафиг не компорт. Это виртуальный последовательный порт по ethernet&apos;у с участием IPMI.&lt;br /&gt;&lt;br /&gt;Давно я в таком &lt;strike&gt;ах&lt;/strike&gt;... ошеломлении не был... Оказывается, таки да - оно пытается эмулировать все свойства порта включая скорость, и несоответствие скоростей приводит к потокам искривлённых байтов. Причём не у всех - мне тут же привели пример Tyan&apos;овской матери, на которой в одну сторону (наружу) настройка скорости не влияла, а в другую (внутрь) влияла, и оно могло чего-то выводить, но не принимать ввод.&lt;br /&gt;&lt;br /&gt;Пламенный привет интелу и бимерам.</description>
  <comments>http://netch80.livejournal.com/9546.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/9294.html</guid>
  <pubDate>Mon, 25 May 2009 18:14:08 GMT</pubDate>
  <title>firefox, картинки и загрузка скопом</title>
  <link>http://netch80.livejournal.com/9294.html</link>
  <description>У firefox (2-го, по крайней мере) что-то сильно клинит между окнами/табами (тредами?) при загрузке картинок. Характерно наблюдать netstat&apos;ом скорость загрузки на комплекте из ~40 табов, когда он подымается по restore previous session. Вначале скорость крайне неравномерна, резко прыгая от 0 до пика канала, но в основном держась в районе 1-3KB/s. Затем давка в дверях заканчивается, и начинается период ровной загрузки на полный канал, насколько осилит, и так пока не выбрано основное содержание. Зато в начальный период может успеть умереть до трети загрузок, по &quot;remote not responding&quot; (а скорее всего запросы даже не были отправлены). Так как редкая страница сейчас обходится без картинок - эффект устойчив.&lt;br /&gt;&lt;br /&gt;Интересно, firefox3 повторяет это или нет? Проверять жалко (уже ведь загрузилось много;))</description>
  <comments>http://netch80.livejournal.com/9294.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/9144.html</guid>
  <pubDate>Sun, 10 May 2009 18:27:56 GMT</pubDate>
  <title>дыбр апгрейдный</title>
  <link>http://netch80.livejournal.com/9144.html</link>
  <description>Переход домашней фряхи с 6.4 на 7.2 прошёл почти безболезненно, кроме следующего:&lt;br /&gt;&lt;br /&gt;- иксы 7.4 не запускались с нормальной диагностикой пока не обнаружил, что у них проблема с пониманием старого ~/.Xauthority (!) Разумеется, никакие логи этого не показали, пока не был убран весь .xinitrc - тогда кто-то начал плакаться в цикле на его формат.&lt;br /&gt;&lt;br /&gt;- драйвер звука вообще потерял возможность что-то знать про его входные устройства (mic, line in). прямо хоть под линукс переключайся.&lt;br /&gt;&lt;br /&gt;А ещё я &quot;обожаю&quot; firefox. 2-й поставлен и запущен. Поставил 3-й рядом, запускаю. Запускается морда 2-го. Берётся ktrace, изучается отчёт под микроскопом - нигде нет слова про 2-й. Вывод - оно присоединилось к тому что в памяти и запросило его открыть окно:( Опция смены профиля этому не помешала. Вспоминается рассказ Вагнера про неумение современных средств работать совместно.</description>
  <comments>http://netch80.livejournal.com/9144.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/8873.html</guid>
  <pubDate>Sat, 09 May 2009 12:12:43 GMT</pubDate>
  <title>CapsLock как переключатель клавиатуры на Windows</title>
  <link>http://netch80.livejournal.com/8873.html</link>
  <description>Тема известная (просто нагуглив можно получить и монстров типа Punto, и лёгкий keyla, и простой как угол дома lswitch), но захотелось получить вариант как &lt;a href=&quot;http://netch.livejournal.com/50536.html&quot;&gt;у меня на Unix&lt;/a&gt; - Caps переключает между английским и русским, а Ctrl+Caps - между русским и украинским.&lt;br /&gt;&lt;br /&gt;Пока идеально не получилось: [UPD] на FAR какие-то странные эффекты. Впрочем, и там можно через родной переключатель (как Ctrl+Shift) выбрать любую.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://segfault.kiev.ua/~netch/cpswitch/&quot;&gt;Текущие результаты&lt;/a&gt; (исходник и экзешник). Исходник - слегка замученный lswitch.c от Haali. Caps крутит раскладки по кругу вперёд, Ctrl+Caps - назад. Командная строка с &apos;q&apos; убирает резидент, с &apos;3s&apos; запускает в моём любимом режиме, в любом другом случае пытается ставить с переключением по кругу.&lt;br /&gt;&lt;br /&gt;Уже удобнее, чем в Putty, и Caps тоже можно включать (имитируя блондинку;))</description>
  <comments>http://netch80.livejournal.com/8873.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/8455.html</guid>
  <pubDate>Thu, 07 May 2009 19:24:02 GMT</pubDate>
  <title>Страусов не пугать - пол бетонный</title>
  <link>http://netch80.livejournal.com/8455.html</link>
  <description>4&amp;gt; &amp;lt;&amp;lt;P:32/big-float&amp;gt;&amp;gt; = &amp;lt;&amp;lt;63,128,0,0&amp;gt;&amp;gt;.&lt;br /&gt;&amp;lt;&amp;lt;63,128,0,0&amp;gt;&amp;gt;&lt;br /&gt;5&amp;gt; P.&lt;br /&gt;1.0&lt;br /&gt;6&amp;gt; &amp;lt;&amp;lt;P:32/big-float&amp;gt;&amp;gt; = &amp;lt;&amp;lt;127,128,0,0&amp;gt;&amp;gt;.&lt;br /&gt;** exception error: no match of right hand side value &amp;lt;&amp;lt;127,128,0,0&amp;gt;&amp;gt;&lt;br /&gt;7&amp;gt; &amp;lt;&amp;lt;P:32/big-float&amp;gt;&amp;gt; = &amp;lt;&amp;lt;127,128,0,1&amp;gt;&amp;gt;.&lt;br /&gt;** exception error: no match of right hand side value &amp;lt;&amp;lt;127,128,0,1&amp;gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;в команде 6 я пытался расшифровать +INF, 7 - +NAN(1)&lt;br /&gt;&lt;br /&gt;А вот что пишет ползучий питоний:&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; struct.unpack(&apos;&amp;gt;f&apos;, &apos;\x7f\x8f\x00\x00&apos;)[0]&lt;br /&gt;nan&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; struct.unpack(&apos;&amp;gt;f&apos;, &apos;\xff\x8f\x00\xff&apos;)[0]&lt;br /&gt;nan&lt;br /&gt;&lt;br /&gt;&amp;quot;это не число, и к дьяволу подробности!&amp;quot;&lt;br /&gt;Зато хоть создавать не запрещает:&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; a = float(&apos;nan&apos;)&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;nan&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; -a&lt;br /&gt;nan&lt;br /&gt;&lt;br /&gt;и на том спасибо.</description>
  <comments>http://netch80.livejournal.com/8455.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/8223.html</guid>
  <pubDate>Mon, 04 May 2009 17:00:13 GMT</pubDate>
  <title>[erlang] Сапожник без сапог</title>
  <link>http://netch80.livejournal.com/8223.html</link>
  <description>С тем, что нельзя открыть файл-устройство, уже столкнулись (отвечает eisdir&apos;ом, хотя совсем не каталог). В рассылках нашлось обоснование - мол, &quot;а что если оно заблокируется на ожидании?&quot; (я вообще-то /dev/urandom пытался открыть, и это мои проблемы, если что-то заблокируется). А сегодня новое. Цитирую коллегу...&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;&lt;br /&gt;Я обнаружил интересную фичу: если файл открыт с опцией compressed, то&lt;br /&gt;file:position/2 за пределы файла напрочь завешивает всю е-ноду вплоть до&lt;br /&gt;момента, пока кто-то не допишет в этот файл нужное количество данных. При&lt;br /&gt;этом нет разницы, зазипован ли файл на самом деле. А ведь единственный&lt;br /&gt;способ узнать реальный размер зазипованных данных - это поблочно прочесть&lt;br /&gt;его весь до eof`а!!!&lt;br /&gt;&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;Интересно, сколько ещё таких недопараллельностей таится в &quot;параллельной&quot; среде...</description>
  <comments>http://netch80.livejournal.com/8223.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/7968.html</guid>
  <pubDate>Fri, 20 Mar 2009 08:14:06 GMT</pubDate>
  <title>tokyo cabinet</title>
  <link>http://netch80.livejournal.com/7968.html</link>
  <description>Издеваемся оптимизацией параметров для таблицы tokyo cabinet:&lt;br /&gt;&lt;br /&gt;tcbtest write -rnd -lc 1024 -nc 512 ~/tmp/test.tcb  2000000 1000 1000&lt;br /&gt;[...]&lt;br /&gt;time: 86.647 (23Kinserts/sec)&lt;br /&gt;&lt;br /&gt;tcbtest write -rnd -lc 1536 -nc 768 ~/tmp/test.tcb  2000000 1000 1000&lt;br /&gt;[...]&lt;br /&gt;time: 34.053 (59Kinserts/sec)&lt;br /&gt;&lt;br /&gt;tcbtest write -rnd -lc 2000 -nc 1000 ~/tmp/test.tcb  2000000 1000 1000&lt;br /&gt;[...]&lt;br /&gt;time: 7.430 (270Kinserts/sec)&lt;br /&gt;&lt;br /&gt;tcbtest write -rnd -lc 4000 -nc 2000 ~/tmp/test.tcb  2000000 1000 1000&lt;br /&gt;[...]&lt;br /&gt;time: 6.550 (305Kinserts/sec)&lt;br /&gt;&lt;br /&gt;tcbtest write -mt -cj -tl -lc 100000 -nc 1000000 -ca 1000000 -nl -rnd  ~/tmp/test.tcb  10000000 1000 1000 100000&lt;br /&gt;[...]&lt;br /&gt;time: 21.857 (457Kinserts/sec)&lt;br /&gt;&lt;br /&gt;вот что-то приличное, а если не подстроить - происходит экспоненциальная потеря производительности.&lt;br /&gt;&lt;br /&gt;Егор - а ты можешь подсказать, как mysql подкрутить (ключевые слова)?&lt;br /&gt;Хочется чего-то сравнимого хотя бы до порядка, а 8Kinserts/sec меня не радует.&lt;br /&gt;&lt;br /&gt;Имитационная обстановка - тупая таблица типа&lt;br /&gt;&lt;br /&gt;CREATE TABLE `log` (&lt;br /&gt;  `l_when` int(11) default NULL,&lt;br /&gt;  `l_node` int(11) default NULL,&lt;br /&gt;  `l_object` int(11) default NULL,&lt;br /&gt;  `l_data` varchar(127) default NULL,&lt;br /&gt;  KEY `l_now` (`l_node`,`l_object`,`l_when`),&lt;br /&gt;  KEY `l_onw` (`l_object`,`l_node`,`l_when`)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;с заполнением последовательными для l_when и рандомными для l_object и l_node.</description>
  <comments>http://netch80.livejournal.com/7968.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/7897.html</guid>
  <pubDate>Thu, 12 Mar 2009 08:41:03 GMT</pubDate>
  <title>преимущества message passing</title>
  <link>http://netch80.livejournal.com/7897.html</link>
  <description>Пожалуй, можно окончательно сформулировать: &lt;u&gt;написание&lt;/u&gt; параллельного выполнения на message passing ничуть не проще (а часто и сложнее), чем на общей памяти с традиционными мьютексами, условными переменными и прочей соответствующей атрибутикой. Но это увеличение затрат не в разы и предсказуемо. А вот то, что при таком подходе реально упрощается - это возможность сделать так, чтобы у каждого участника спросить (послав ему соответствующее сообщение) - &quot;а на чём ты задумался и почему?&quot; и, может быть, &quot;плюнь на это, очистись от данной операции и иди дальше&quot; - по сравнению с &quot;ждём освобождения, освобождения нет, кто занял и почему - ХЗ&quot; или тем более &quot;память разрушена, кто разрушил, почему и как - ХЗ&quot; - экономия времени и сил получается не только в разы, но порой и на порядки. То есть упрощается &lt;u&gt;диагностика и отладка&lt;/u&gt;.&lt;br /&gt;&lt;br /&gt;И вот ради этого можно писать даже на таком кошмаре, как Erlang.:)&lt;br /&gt;&lt;br /&gt;(Если кому-то сказанное очевидно - что ж, пусть возьмёт с полки пирожок. Я предпочитаю разъяснить до глубин, на которых жупелы типа &quot;стоимость поддержки&quot; перестают быть Обстракциями.)</description>
  <comments>http://netch80.livejournal.com/7897.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/7570.html</guid>
  <pubDate>Fri, 02 Jan 2009 09:10:25 GMT</pubDate>
  <link>http://netch80.livejournal.com/7570.html</link>
  <description>У git есть очень правильная фича - указание, что именно из текущих изменений рабочей копии надо включать в коммит (не до уровня файлов, а внутри файла) - можно разобрать по отдельным микропатчам и задать включаемые.&lt;br /&gt;&lt;br /&gt;Но ни один туториал и ни один пользователь вживую из тех, с которыми я общался, не был способен правильно это назвать и объяснить - все ужасно косноязычно рассказывали про &quot;индекс&quot; и &quot;git работает не с файлами, а с содержанием&quot;.</description>
  <comments>http://netch80.livejournal.com/7570.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/7351.html</guid>
  <pubDate>Wed, 24 Dec 2008 20:48:57 GMT</pubDate>
  <title>Об относительности</title>
  <link>http://netch80.livejournal.com/7351.html</link>
  <description>Тот, кто думает, что в LISP&apos;е слишком много скобок, никогда не писал на m4.</description>
  <comments>http://netch80.livejournal.com/7351.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/7141.html</guid>
  <pubDate>Fri, 19 Dec 2008 08:20:56 GMT</pubDate>
  <title>разочарования</title>
  <link>http://netch80.livejournal.com/7141.html</link>
  <description>- Функция loop получает кучу параметров, внутри неё if, и только в одной ветке&lt;br /&gt;надо поменять значение одного параметра, а в остальные он должен прийти&lt;br /&gt;неизменённым. Как это удобно сделать?&lt;br /&gt;- Вызови в этом месте loop() с новым параметром и заверши работу.&lt;br /&gt;- Но у меня дальше большая общая часть работы.&lt;br /&gt;- Вынеси её в отдельную функцию, вызови loop() из неё.&lt;br /&gt;- Это неудобно. Почему бы не сделать что-то вроде Xout=ifdef(X1, X1, X),&lt;br /&gt;  loop(...,Xout)?&lt;br /&gt;- Ты хочешь неправильного. Здесь делают именно так.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;- Как это нормально делается? Я же не могу отдать параметр обратно.&lt;br /&gt;- Сложи его значение в ets.&lt;br /&gt;- Но это уже побочный эффект, это неправильная практика. Надо избавляться&lt;br /&gt;от побочных эффектов.&lt;br /&gt;- Здесь делают так.&lt;br /&gt;- Но ets дорого, и неуникально. Я не могу изобретать атом для каждого&lt;br /&gt;процесса, они плодятся по одному для внешнего объекта согласно конфигурации.&lt;br /&gt;Почему бы не использовать словарь процесса?&lt;br /&gt;- Это неправильно. Словарь процесса - костыль, его скоро отменят.&lt;br /&gt;- Но ets - такой же костыль, причём менее удобный, потому что надо использовать&lt;br /&gt;левые сущности вроде имён-атомов.&lt;br /&gt;- Здесь делают так.&lt;br /&gt;- Почему я не могу использовать в качестве идентификатора таблицы текстовую&lt;br /&gt;строку?&lt;br /&gt;- Здесь так не принято.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;- Мне нужно сделать общий репозиторий, в который все будут складывать свои&lt;br /&gt;изменения.&lt;br /&gt;- Ты хочешь неправильно. Это распределённая система.&lt;br /&gt;- Я и использую её как распределённую. Каждый тащит изменения к себе, делает&lt;br /&gt;что хочет в любом количестве своих копий и репозиториев, затем, когда решил,&lt;br /&gt;что всё окончательно правильно - делает push.&lt;br /&gt;- Ты хочешь неправильно. Каждый должен коммитить в свою ветку в центральном&lt;br /&gt;репозитории. Дальше у него остальные забирают изменения.&lt;br /&gt;- Я не хочу разводить бардак, особенно когда таких источников будет два&lt;br /&gt;десятка. Каждый обязан влить свои изменения и за это отвечает.&lt;br /&gt;- Ты хочешь неправильно. Здесь так не делают. Приходи, получай ченжсеты&lt;br /&gt;от своих сотрудников и вливай это в общий репозиторий, есть стандартная&lt;br /&gt;поддержка приёма и применения по почте и иными средствами.&lt;br /&gt;- Мне надо чтобы они это делали сами. И это неудобно ещё по целому ряду&lt;br /&gt;параметров - например, надо держать на сервере полный шелл.&lt;br /&gt;- Ты хочешь неправильно. Это распределённая система.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;- Если я хочу один репозиторий, но две рабочих копии?&lt;br /&gt;- Ты хочешь неправильно. Это распределённая система. Каждая рабочая копия&lt;br /&gt;получает полную копию репозитория со всей историей.&lt;br /&gt;- Я не хочу каждый раз переливать между двумя репозиториями у себя в home.&lt;br /&gt;- Ты хочешь неправильно. Это распределённая система.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;- Лог коммитов сортируется по дате исходного коммита. Если кто-то поставил&lt;br /&gt;дату коммита 70-м годом, его будет очень долго и нудно искать.&lt;br /&gt;- Да, дата коммита и авторство не меняются при слиянии.&lt;br /&gt;- Тогда почему у коммита нет нескольких дат и авторов? Ведь тот, кто влил&lt;br /&gt;набор изменений, тоже сделал существенное действие, которое должно быть&lt;br /&gt;отражено. Он выбрал источник вливания, он выбрал набор изменений.&lt;br /&gt;- Ты хочешь странного.</description>
  <comments>http://netch80.livejournal.com/7141.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>31</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/6672.html</guid>
  <pubDate>Mon, 08 Dec 2008 21:23:20 GMT</pubDate>
  <title>Python, 3000?</title>
  <link>http://netch80.livejournal.com/6672.html</link>
  <description>Я вот одного не пойму со всем этим - куда и зачем они спешат с обновлениями.&lt;br /&gt;Что-то вводится в 2.6, и становится единственным вариантом в 3.0. Это вместо того, чтобы:&lt;br /&gt;- стать допустимым в 2.6.&lt;br /&gt;- стать дефолтом в 3.0.&lt;br /&gt;- стать единственным в 3.1.&lt;br /&gt;или ещё медленнее (три переходных).&lt;br /&gt;Сейчас поставщики разных дистрибутивов начнут активно впихивать 3.0 везде. Это при том, что на дворе ещё дофига 2.4 и даже 2.3. После перехода будет совсем другой язык, многие вещи несовместимы и любая серьёзная программа требует переписки.&lt;br /&gt;&lt;br /&gt;Для сравнения - majordomo работает под Perl 5.8, при том, что код писался под Perl4.&lt;br /&gt;&lt;br /&gt;И что вместо reload() теперь? (это я уже, наверно, торможу к вечеру)</description>
  <comments>http://netch80.livejournal.com/6672.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/6417.html</guid>
  <pubDate>Mon, 08 Dec 2008 18:33:56 GMT</pubDate>
  <title>судьба softupdates</title>
  <link>http://netch80.livejournal.com/6417.html</link>
  <description>Нет неошибающихся программистов, нет программ без ошибок. Редкие&lt;br /&gt;исключения вроде TeX не нарушают это правило и даже подтверждают тем, что&lt;br /&gt;эти ошибки были. Что делает нормальный программист, который знает, что он&lt;br /&gt;ошибётся и хочет как можно быстрее и удобнее найти и устранить последствия&lt;br /&gt;этого?  Он строит тесткейсы и разнообразные проверки в рантайме: как&lt;br /&gt;минимум жалобы на нарушение инвариантов. Он добавляет отладочную печать и&lt;br /&gt;даёт ручку для регулировки её уровня и состава. Он даёт сбор статистики и&lt;br /&gt;возможность анализа этой статистики на предмет устойчивости и&lt;br /&gt;осмысленности работы.  Он даёт удобную регулировку использования своего&lt;br /&gt;кода, если без него можно обойтись.&lt;br /&gt;&lt;br /&gt;Но если код добавлен, работает плохо, а его автор не желает ничего реально&lt;br /&gt;сделать, чтобы он нормально работал, и не предоставляет никаких средств&lt;br /&gt;для диагностики, локализации и устранения проблем?  В христианстве это&lt;br /&gt;называется &quot;гордыня&quot;, а на луркоморье - ЧСВ, чувство собственного величия:&lt;br /&gt;человек думает о себе существенно лучше и значительнее, чем он есть, и&lt;br /&gt;действует исходя из своего самомнения.&lt;br /&gt;&lt;br /&gt;Судьба softupdates - отличный пример воздействия гордыни на результат.&lt;br /&gt;Неплохая и полезная технология убита качеством реализации и заморочкой на&lt;br /&gt;непогрешимость её автора, при непригодном к сопровождению и отладке коде:&lt;br /&gt;- Включение и выключение требует сложных манипуляций с перемонтированием.&lt;br /&gt;- Код ведёт свою ничем не управляемую жизнь. Даже обычный sync на него&lt;br /&gt;не действует, хотя, казалось бы, что может быть проще.&lt;br /&gt;- Рантайм-статистики нет.&lt;br /&gt;- Средств рантайм-диагностики нет (даже просто снять список задержанных&lt;br /&gt;микроопераций с их таймаутами и зависимостями). Так называемые опции&lt;br /&gt;DIAGNOSTICS и DEBUG включают дай бог чтобы 2% необходимых проверок.&lt;br /&gt;- Самоконтроля нет.&lt;br /&gt;- Даже заготовок для подключения всего вышеперечисленного нет, из чего&lt;br /&gt;можно сделать однозначный вывод - если автору потребуется что-то&lt;br /&gt;диагностировать, ему придётся всё вписывать с самого начала.&lt;br /&gt;- Код предельно сложной подсистемы (у которой и собственные нетривиальные&lt;br /&gt;структуры и соотношения данных, и работа в условиях сложной ядерной модели&lt;br /&gt;данных, и работа с нижними уровнями, у которых собственная сложная логика)&lt;br /&gt;написан предельно неструктурно (не в смысле функций, но в смысле блоков и&lt;br /&gt;подсистем). О том, что код такого типа всё-таки можно так писать, чтобы&lt;br /&gt;выделять и тестировать основные блоки ещё до запуска программы - автор&lt;br /&gt;представления не имеет.&lt;br /&gt;&lt;br /&gt;Ничего удивительного, что за уже 10 лет практического развития данной&lt;br /&gt;технологии количество отрицательных отзывов о ней не меньше количества&lt;br /&gt;положительных, а сторонники метода журнала метаданных получают выгодные&lt;br /&gt;для себя сравнения на пустом месте.&lt;br /&gt;&lt;br /&gt;Хотел бы я обойтись тут без комментариев про определённые личные качества&lt;br /&gt;автора данной реализации, но когда его ближайший друг уже 20 лет всеми&lt;br /&gt;силами избегает элементарного рефакторинга там, где слои реализации&lt;br /&gt;громоздятся друг на друге уже в 4-5 слоёв и отдельные части может понять&lt;br /&gt;только тот, кто работает с этим уже лет десять - не могу обойтись.;)&lt;br /&gt;&lt;br /&gt;P.S. А самая большая фигня тут в том, что в соседнем лагере ничуть не&lt;br /&gt;лучше.</description>
  <comments>http://netch80.livejournal.com/6417.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>20</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/6290.html</guid>
  <pubDate>Thu, 20 Nov 2008 15:09:03 GMT</pubDate>
  <title>мелкий питоновый хинт</title>
  <link>http://netch80.livejournal.com/6290.html</link>
  <description>print list(s) в питоновом шелле - удобный способ понять, как же строка распарсилась:)&lt;br /&gt;Со строками вида \&quot;([^\r\n\&quot;\\\\]|\\\\[^\r\n])*\&quot;&quot; это жизненно важно.</description>
  <comments>http://netch80.livejournal.com/6290.html</comments>
  <category>python</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://netch80.livejournal.com/6137.html</guid>
  <pubDate>Sun, 28 Sep 2008 05:47:27 GMT</pubDate>
  <title>freetim</title>
  <link>http://netch80.livejournal.com/6137.html</link>
  <description>А что, до сих пор нет opensource аналога The Incredible Machine?</description>
  <comments>http://netch80.livejournal.com/6137.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
</channel>
</rss>
