<?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/'>
<channel>
  <title>about_zero</title>
  <link>http://about-zero.livejournal.com/</link>
  <description>about_zero - LiveJournal.com</description>
  <lastBuildDate>Fri, 20 Jun 2008 15:13:55 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>about_zero</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://p-userpic.livejournal.com/59217223/11992164</url>
    <title>about_zero</title>
    <link>http://about-zero.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/13517.html</guid>
  <pubDate>Fri, 20 Jun 2008 15:13:55 GMT</pubDate>
  <title>на злобу дня</title>
  <link>http://about-zero.livejournal.com/13517.html</link>
  <description>Интересно, каково было бы Гераклу, если бы подвиг по вычистке Авгиевых конюшен ему пришлось бы повторять постоянно, вместо остальных 11ти подвигов?&lt;br /&gt;&lt;br /&gt;NB. а не пора ли вам сударь, обновить свой рекламный щит и встать у дороги?&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=85076910&amp;r=945763410&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/13517.html</comments>
  <lj:mood>мрачное</lj:mood>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/13256.html</guid>
  <pubDate>Wed, 26 Mar 2008 18:31:37 GMT</pubDate>
  <title>диалог, которого не было</title>
  <link>http://about-zero.livejournal.com/13256.html</link>
  <description>- Здравствуйте, я бы хотел заказать у вас садовую скамейку. Знаете, обычную такую, пара досок поперек, и спинка.&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;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=4157614&amp;r=748469229&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/13256.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/12503.html</guid>
  <pubDate>Sat, 02 Feb 2008 13:51:19 GMT</pubDate>
  <title>записки на манжетах</title>
  <link>http://about-zero.livejournal.com/12503.html</link>
  <description>Вот, немножко начал игратся с distributed cvs, т.к. до этого опыта никакого с ними не имел. Далее просто неформальное изложение мыслей, чтобы потом не потерялось...&lt;br /&gt;Итак, начинаем играться с mercurial. Почему именно оно, а не darcs или git? Не знаю, честно говоря, просто в памяти отложился.&lt;br /&gt;Итак, начинаем тихие игры. Самый лучший кандидат на контроль версий в linux системе имхо это /etc :) С него и начнем. Нам нужно создать 2 репозитория (можно обойтись и одним, но зачем тогда dcvs? :) ).&lt;br /&gt;1-й, типа удаленный. Для простоты делаем его в домашнем каталоге. &lt;br /&gt;mkdir -p ~/repo/etc&lt;br /&gt;cd ~/repo/etc&lt;br /&gt;hg init&lt;br /&gt;Создали каталог и проинициализировали репозиторий.&lt;br /&gt;Далее уже под root идем в /etc&lt;br /&gt;cd /etc&lt;br /&gt;hg init&lt;br /&gt;hg add &lt;br /&gt;hg commit -m &quot;initial revision&quot;&lt;br /&gt;Проиницализировали типа локальный репозиторий, добавили в него файлы, и закоммитили в локальный репозиторий.&lt;br /&gt;При коммите пишем текст сообщения, иначе по-любому поднимется редактор и заставит его написать :)&lt;br /&gt;В процессе можно поиграться с &lt;br /&gt;hg status - выводит статус файлов в директории относительно хранящихся в локальном репозитории&lt;br /&gt;hg log - показывает лог коммитов&lt;br /&gt;Теперь отправляем файлы из &quot;локального&quot; в &quot;удаленный&quot; репозиторий (иожно делать и под обычным пользователем)&lt;br /&gt;cd /etc&lt;br /&gt;hg push ~/repo/etc&lt;br /&gt;И получаем их в &quot;удаленном&quot; репозитории&lt;br /&gt;cd ~/repo/etc&lt;br /&gt;hg update&lt;br /&gt;&lt;br /&gt;В общем, как я понял, идеология поощряет использование отдельных репозиториев на каждый бранч (путем hg clone), правки там, и потом hg push в родительский, с периодическим выполнением hg poll для обновления содержимого локального репозитория&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=973632255&amp;r=745753508&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/12503.html</comments>
  <category>cvs mercurial</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/12281.html</guid>
  <pubDate>Mon, 28 Jan 2008 19:43:45 GMT</pubDate>
  <title>бессознательное</title>
  <link>http://about-zero.livejournal.com/12281.html</link>
  <description>Видимо после небольшого перенапряжения на текущем проекте начали меня посещать несообразные мысли об альтернативном пути в жизни - т.н. downshifting... Ну типа там свалить в Гоа, питаться бананами, и ничего не делать. Как щадящий вариант с минимумом изменений - пользуясь бумом спроса на программистов, свалить куда-нибудь обычным рядовым программистом клепать формочки и запросы, по вечерам выходя в космос и общаясь с астралом. Звучит все это черезвычайно заманчиво, удачно вписываясь в анекдот про негра и сбор бананов. &lt;br /&gt;К чему это я все написал? Честно говоря не знаю, просто захотелось структурированно изложить кашу, которая сейчас крутится у меня в голове, авось заодно и смысл жизни найдется, и тогда глупые вопросы перестанут возникать.&lt;br /&gt;&lt;br /&gt;ЗЫ: А вот неудобно иногда, что в OCaml по умолчанию string &amp;lt;&amp;gt; char list, и нужно писать преобразование ручками. Или это я такой невнимательный? :)&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=480508938&amp;r=714267735&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/12281.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/11778.html</guid>
  <pubDate>Thu, 22 Nov 2007 18:56:09 GMT</pubDate>
  <title>back to future</title>
  <link>http://about-zero.livejournal.com/11778.html</link>
  <description>Читаю сейчас замечательную книжку Leo Brodie &quot;Thinking Forth&quot; (&lt;a href=&quot;http://thinking-forth.sourceforge.net/&quot;&gt;ссылка&lt;/a&gt;)&lt;br /&gt;Несмотря на то, что книга выпущена в 1984 году, актуальности своей она не потеряла. Читаю, и все больше убеждаюсь в корректности изречения &quot;Все новое - это хорошо забытое старое&quot;.&lt;br /&gt;&lt;br /&gt;Создание DSL как основной способ решения задач.&lt;br /&gt;Быстрые итерации, прототипирование, постоянное взаимодействие с пользователем - основные постулаты Agile методик. &lt;br /&gt;&lt;br /&gt;Помимо всего прочего, и сам язык показался мне весьма интересным и приспособленным именно под подобный стиль разработки.&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=505282210&amp;r=587068344&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/11778.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/11267.html</guid>
  <pubDate>Thu, 25 Oct 2007 17:40:21 GMT</pubDate>
  <title>лохматость</title>
  <link>http://about-zero.livejournal.com/11267.html</link>
  <description>&quot;Структура банковских данных слишком сложна, чтобы применять к ней правила реляционного моделирования&quot; - шедевральная цитата, взята &lt;a href=&quot;http://dom.bankir.ru/showthread.php?t=77431&amp;amp;page=2&quot;&gt;из обсуждения здесь&lt;/a&gt;.&lt;br /&gt;Это я к тому, что все виденные мной схемы БД для банков, действительно выглядят несколько &quot;лохмато&quot;. Широкие таблицы, куча редкоиспользуемых колонок, дублирующихся значений, смешение различных сущностей в одной таблице... Все это в той или иной степени присутствует во всех виденных системах. Похоже, что либо все архитекторы придерживаются этой максимы, либо таков неумолимый эволюционный процесс, что любая схема БД со временем накапливает энтропию и деградирует до 1НФ (или в лучшем случае до 2НФ)?&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=949131270&amp;r=939014628&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/11267.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/11094.html</guid>
  <pubDate>Tue, 02 Oct 2007 16:13:20 GMT</pubDate>
  <title>классика</title>
  <link>http://about-zero.livejournal.com/11094.html</link>
  <description>В очередной раз перечитываю &quot;Путь камикадзе&quot; Йордона. До чего же хорошая, успокаивающая и умная книжка... Просто сейчас вживую наблюдаю все то, что написано в книжке, точность попадания и систематизации просто поражающая....&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=225014117&amp;r=43101958&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/11094.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/10911.html</guid>
  <pubDate>Thu, 16 Aug 2007 16:22:48 GMT</pubDate>
  <title>забавно</title>
  <link>http://about-zero.livejournal.com/10911.html</link>
  <description>Интересно, какое название лучше подойдет - некропрограммист или археолог-программист? Не хочу ни так, ни так на самом деле...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=941452440&amp;r=910279621&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/10911.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/10642.html</guid>
  <pubDate>Thu, 09 Aug 2007 17:40:24 GMT</pubDate>
  <title>мысли вслух...</title>
  <link>http://about-zero.livejournal.com/10642.html</link>
  <description>Еще несколько наблюдений из разряда типовых задач для баз данных. Итак, времязависимые данные. Есть 2 основных подхода для хранения периода актуальности у сущности:&lt;br /&gt;&lt;br /&gt;- EntityPK, ValidFrom. В этом случае периоды постоянства следуют один за другим без разрывов, до следующего ValidFrom с тем же EntityPK. Из явных плюсов - нет проблем с контролем интервалов постоянства (на наличие дырок, на наличие пересечений), нет проблем при загрузке данных в хранилище (нет необходимости корректировать остальные записи). Но есть один явный недостаток - для определения состояния на дату необходим подзапрос&lt;br /&gt;&lt;br /&gt;- EntityPK, ValidFrom, ValidTo. В этом случае все ровно наоборот - простота выборки и сложность добавления и поддержания согласованности данных.&lt;br /&gt;&lt;br /&gt;Кроме чистого подхода, можно например оптимизировать первый вариант для наиболее часто встречающегося случая - запрос актуальных данных на текущую дату, путем добавления поля-признака isActualState. Вариантов реализации много, от триггера до materialized view.&lt;br /&gt;&lt;br /&gt;Но по большому счету это все проблемы физической реализации типа данных - &quot;временной интервал&quot;. У Дейта хорошо описано, что это такое и зачем нужно. И вот меня сейчас мучает вопрос - пропустил ли я что-то в возможностях современных СУБД в этой области, или до сих пор нет удобного типа данных для решения подобных задач? &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;- Поддержка NULL-значений&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=913350573&amp;r=362196220&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/10642.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/10244.html</guid>
  <pubDate>Fri, 27 Jul 2007 17:51:37 GMT</pubDate>
  <title>наболело</title>
  <link>http://about-zero.livejournal.com/10244.html</link>
  <description>Планета Шелезяка. Жизни нет, мозгов нет, населена биомассой...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=614546070&amp;r=476470418&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/10244.html</comments>
  <category>angry</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/10019.html</guid>
  <pubDate>Thu, 26 Jul 2007 17:38:09 GMT</pubDate>
  <title>Аляска, сэр...</title>
  <link>http://about-zero.livejournal.com/10019.html</link>
  <description>Из разряда wtf...&lt;br /&gt;&lt;a href=&quot;http://dom.bankir.ru/showthread.php?t=75882&quot;&gt;Автоматизация&lt;/a&gt; во всей красе :)&lt;br /&gt;Похоже что разработчиков в Диасе уже не осталось...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=674749377&amp;r=725614651&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/10019.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/9850.html</guid>
  <pubDate>Mon, 16 Jul 2007 18:52:58 GMT</pubDate>
  <title>заметки на полях</title>
  <link>http://about-zero.livejournal.com/9850.html</link>
  <description>Интересно наблюдать эволюцию развития банковских систем &quot;у нас&quot; и &quot;у них&quot;. Очень четко прослеживается разница в подходах к проектированию и решаемых задачах. Почти все отечественные системы для банков идут от бухгалтерского учета, соответственно, вся доступная информация о движении средств доступна через проводки и остатки на счетах. Т.е. главное - выполнение ПБУ и банковская отчетность, а собственно задачи учета и анализа - вторичны. В забугорных системах (не могу сказать, что я видел их много, но все же...) - изначально все шло похоже именно от задач учета. Этот подход мне нравится больше, для текущих решаемых задач возьму похоже за образец аналогичный подход...&lt;br /&gt;Еще до кучи мелкая архитектурная заметка - остатки по валютным счетам. Если мы храним приведенную сумму, то записи будут множиться ежедневно, т.к. курс меняется, соответственно идет переоценка остатка. Другой вариант - таблица курсов. Минус - лишнее соединение, недостаточно таблицы курсов ЦБ, потому что нужен курс на любую дату, в т.ч. и на праздники, что выливается либо в подзапросы, либо в доп. логику при загрузке курсов. А вот при хранении первичных документов проще всего сразу хранить приведенную сумму. Так что надо будет прикинуть и выбрать.&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=530351354&amp;r=376372218&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/9850.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/9514.html</guid>
  <pubDate>Fri, 22 Jun 2007 17:11:46 GMT</pubDate>
  <title>бревно запроса :)</title>
  <link>http://about-zero.livejournal.com/9514.html</link>
  <description>&lt;a href=&quot;http://www.onliner.by/test/gsm/nokia_gold/print&quot;&gt;Правильные телефоны&lt;/a&gt; :) А то я что-то завыбирался, зажрался так сказать... :)&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=861064325&amp;r=546502624&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/9514.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/9399.html</guid>
  <pubDate>Tue, 19 Jun 2007 18:03:54 GMT</pubDate>
  <title>недоуменное</title>
  <link>http://about-zero.livejournal.com/9399.html</link>
  <description>А вот мне интересно, это судьба у меня такая идти по стопам &quot;архитекторов&quot; и доводить &quot;решенные задачи&quot; и &quot;готовые модули&quot; до рабочего состояния? Вроде уже не мальчик, да и с &quot;архитектором&quot; мы это уже все неоднократно проходили в прошлом... Так чеж я удивляюсь как в первый раз?&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=465807528&amp;r=966123987&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/9399.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/9151.html</guid>
  <pubDate>Mon, 21 May 2007 17:49:02 GMT</pubDate>
  <title>В ассистенты б я пошел...</title>
  <link>http://about-zero.livejournal.com/9151.html</link>
  <description>&lt;a href=&quot;http://www.sql.ru/forum/actualthread.aspx?bid=9&amp;amp;tid=428093&amp;amp;pg=1&quot;&gt;Kичный ИТ ассистент генерального директора компании&lt;/a&gt;&lt;br /&gt;Порадовало :)&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=726375996&amp;r=656575847&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/9151.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/8837.html</guid>
  <pubDate>Tue, 24 Apr 2007 17:39:43 GMT</pubDate>
  <title>дожили...</title>
  <link>http://about-zero.livejournal.com/8837.html</link>
  <description>&lt;a href=&quot;http://rsdn.ru/Forum/Message.aspx?mid=2457628&amp;amp;only=1&quot;&gt;Это пять&lt;/a&gt;, если товарищ не стебется... Вот они, подрастающие программисты, наша надежда и опора :)&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=417754029&amp;r=210834306&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/8837.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/8504.html</guid>
  <pubDate>Tue, 17 Apr 2007 16:17:12 GMT</pubDate>
  <title>литература</title>
  <link>http://about-zero.livejournal.com/8504.html</link>
  <description>Господа, а кто что может порекомендовать почитать хорошего по основам статистики и анализа данных? Чтобы после прочтения не пугаться слов типа линейная регрессия, кластеризация и т.д? Если литература на английском, то возможно это будет даже лучше.&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=976168077&amp;r=976016396&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/8504.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/8358.html</guid>
  <pubDate>Wed, 11 Apr 2007 18:56:45 GMT</pubDate>
  <title>ностальгия</title>
  <link>http://about-zero.livejournal.com/8358.html</link>
  <description>Спровоцирована &lt;a href=&quot;http://fishki.net/comment.php?id=19900&quot;&gt;вот этим постом&lt;/a&gt;. Почти все из перечисленного было и у меня, разве что вместо палицы и нунчаков использовалась велосипедная цепь :) Эх, было время...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=632436313&amp;r=393037912&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/8358.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/7646.html</guid>
  <pubDate>Tue, 27 Mar 2007 07:21:23 GMT</pubDate>
  <title>стоя на лыжах... в гамаке...</title>
  <link>http://about-zero.livejournal.com/7646.html</link>
  <description>Перекраивая в очередной раз sql-код, с горечью раздумываю на тему, почему же unit-testing так непопулярен при разработке БД? По идее, никаких противопоказаний на этот счет нет, есть даже некий DbUnit... Но что получается на самом деле...&lt;br /&gt;Если в базе только CRUD-операции, то все выглядит более-менее пристойно, просто и понятно. Но как только в базе появляется БЛ (бизнес-логика, про которую Фаулер помнится писал &quot;странно, что такую нечеткую, нелогичную, часто меняющуюся вещь назвали термином бизнес-логика&quot;), начинается цирк. Особенно если пытаешься использовать TDD с середины разрабокти или не дай бог когда началась поддержка. Рассмотрим этот самый крайний случай.&lt;br /&gt;- Нужна база в жестком зафиксированном состоянии, причем для некоторых тестов эти состояния могут быть взаимоисключающими. Т.е. подняли эталонный дамп - прогнали тесты, и так по кругу. &lt;br /&gt;- Все время приходится балансировать между производительным кодом, и кодом удобным для тестирования. Например, код, который бежит курсором по данным и вызывает для каждой строки процедуру, которая полагается только на переданные ей параметры, тестировать гораздо легче, чем код, состоящий из диких insert/update/delete, использующий кучу временных таблиц, которые заполнены за пару вызовов вверх. &lt;br /&gt;- Следующий из предыдущего пункта вывод - для таких случаев черезвычайно сложно подготовить набор тестовых данных.&lt;br /&gt;- Еще более следующий вывод - то что в этом случае получается уже сложно назвать unit-test&apos;ом, это скорее уже функциональные тесты, которые логичнее производить со стороны вызывающего кода.&lt;br /&gt;- Время выполнения набора тестов может получиться неприлично большим, что сводит на нет их полезность. Если после каждой правки мне нужно ждать даже 10 минут чтобы быть уверенным что я ничего не поломал - никуда не годная ситуация. А так как я не один, и каждый хочет запускать свои тесты на чистой тестовой базе, то получается очень много согласований и ненужной суеты.&lt;br /&gt;&lt;br /&gt;В результате полчается, что даже есть желание, реализовать полноценное unit-тестирование большого проекта практически невозможно :( Что я уже и наблюдал пару раз на разных проектах... К сожалению...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Upd.&lt;/b&gt; Вот &lt;a href=&quot;http://www.rsdn.ru/Forum/Message.aspx?mid=2025093&quot;&gt;более развернутая&lt;/a&gt; мысль на эту же тему... Человек более грамотным и культурным языком чем я описывает свое видение данной проблемы...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=234302212&amp;r=282582409&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/7646.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/7257.html</guid>
  <pubDate>Mon, 26 Mar 2007 09:03:59 GMT</pubDate>
  <title>redesign wheel...</title>
  <link>http://about-zero.livejournal.com/7257.html</link>
  <description>&lt;a href=&quot;http://jemacs.sourceforge.net/JEmacs-FSM.html&quot;&gt;Оригинально...&lt;/a&gt; Жалко только что наверняка несовместимо с оригнальным Emacs... А так идея хороша :)&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=661854871&amp;r=694345222&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/7257.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/6939.html</guid>
  <pubDate>Fri, 23 Mar 2007 08:22:54 GMT</pubDate>
  <title>а почему бы и нет? :)</title>
  <link>http://about-zero.livejournal.com/6939.html</link>
  <description>Наткнулся тут нас обсуждение на &quot;Королевстве Дельфи&quot;&lt;br /&gt;&lt;br /&gt;&quot;&lt;br /&gt;Правильным названием для новых сред от CodeGear было не не Дельфи для чего то там, а TurboPHP, TurboRuby, TurboPyhton, TurboLisp (мечтать не вредно :)) )&lt;br /&gt;Это гораздо эффективнее и в маркетинговом плане.&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;ЗЫ. Да, TurboHaskell - это было бы неплохо! :о))&lt;br /&gt;&quot;&lt;br /&gt;&lt;br /&gt;Красота... :)))&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=890884438&amp;r=258761852&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/6939.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/6903.html</guid>
  <pubDate>Thu, 22 Mar 2007 18:05:13 GMT</pubDate>
  <title>повеселило</title>
  <link>http://about-zero.livejournal.com/6903.html</link>
  <description>Вот как надо &lt;a href=&quot;http://programming.reddit.com/goto?rss=true&amp;amp;id=1c3u6&quot;&gt;людей на работу приглашать&lt;/a&gt; :). А то понимаешь ли...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=89915376&amp;r=733261418&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/6903.html</comments>
  <category>funny</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/6155.html</guid>
  <pubDate>Fri, 16 Mar 2007 18:16:51 GMT</pubDate>
  <title>чуть-чуть</title>
  <link>http://about-zero.livejournal.com/6155.html</link>
  <description>Вот. Попробую описать свой велосипед, дабы получить критику и новый опыт. Итак, часть 1-я. &lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сначала небольшой пример. Вот так выглядит выражение для разбора числа с плавающей запятой.&lt;br /&gt;&lt;pre&gt;
get_float =
	[PMany1 [PDigit],
		POpt [PChar &apos;.&apos;,
		PMany1 [PDigit],
		POpt [PChar &apos;E&apos;, POpt [POneOf [&apos;+&apos;, &apos;-&apos;]], PMany1 [PDigit]
	]]]
&lt;/pre&gt;&lt;br /&gt;Напоминает Parsec, не так ли? :) Надеюсь что названия говорят сами за себя.&lt;br /&gt;Входная точка разбора &lt;pre&gt;get_token :: String -&amp;gt; [PV] -&amp;gt; (Maybe String, String)&lt;/pre&gt;&lt;br /&gt;Здесь PV - тип, констукторами которого являются PDigit, PMany, ...&lt;br /&gt;Возврат - (Nothing, исходная строка) в случае если начало строки не совпадает с указанным образцом, и (Just совпавшая часть, остаток строки) в противоположном случае. Реализация &quot;в лоб&quot; путем прохода по списку паттернов с рекурсией, если необходимо и сопоставлением текущего символа строки с текущим элементарным паттерном.&lt;br /&gt;&lt;pre&gt;
get_token datas lst =
    unmapParts $ reverse $ get_token&apos; datas lst []
    where
	get_token&apos; _ [] accum = accum
	get_token&apos; s (x:xs) accum =
	    case pass s x of
-- если на каком-то этапе не смогли сопоставить с образцом
-- то значит вся строка нам не подходит
	        (Nothing, _) -&amp;gt; [(Nothing, datas)] 
	        (Just v, rest) -&amp;gt; get_token&apos; rest xs ((Just v, rest) : accum)
&lt;/pre&gt;&lt;br /&gt;pass - вспомогательная функция, которая проверяет совпадение с конкретным паттерном.&lt;br /&gt;&lt;br /&gt;Вот, это основной кирпичик. Далее на него навешивается&lt;br /&gt;- набор выражений для опознания основных токенов. Числа, строки, переменные, идентификаторы, комментарии, ...&lt;br /&gt;Разбор текста точно также примитивен.&lt;br /&gt;&lt;pre&gt;
tokens = [
	Token &quot;Space&quot; get_space,
	Token &quot;Comment&quot; get_comment,
	Token &quot;Comment&quot; get_comment2,
	Token &quot;String&quot; get_string,
	Token &quot;String&quot; get_string2,
	Token &quot;Number&quot; get_float,
	Token &quot;Identifier&quot; get_identifier,
	Token &quot;Variable&quot; get_variable,
	Token &quot;GlobalVar&quot; get_global_variable,
	Token &quot;Op&quot; get_operand
	]
&lt;/pre&gt;&lt;br /&gt;Полный список распознаваемых токенов. Процедура получения из строки списка токенов заключается в последовательном примении функции try_apply.&lt;br /&gt;&lt;pre&gt;
try_apply s = try_apply&apos; s tokens
-- если перебрали весь список возможных токенов, и ни один не подошел, то ой...
try_apply&apos; s [] = (Nothing, s) 
try_apply&apos; s (x:xs) =
    case r of
        (Just v, rest) -&amp;gt; (Just $ TokenData x v, rest)
        (Nothing, _) -&amp;gt; try_apply&apos; s xs
    where
        r = get_token s (get_token_list x)
        get_token_list (Token name lst) = lst
&lt;/pre&gt;&lt;br /&gt;Вот в общем-то и все на текущий момент из глобального. Поверх этого в два касания был реализован&lt;br /&gt;перевод зарезервированных слов t-sql к uppercase и вырезание комментариев. Так сказать чтобы была пользая и на практике :)&lt;br /&gt;&lt;br /&gt;ЗЫ: Для тех, кто все-таки дочитал до конца - о наличии Parsec.ParsecLanguage и иже с ними я осведомлен :) Просто нужно было написать что-то несложное, дабы почувствовать язык.&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=313895441&amp;r=449555147&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/6155.html</comments>
  <category>haskell</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/6018.html</guid>
  <pubDate>Fri, 16 Mar 2007 12:46:57 GMT</pubDate>
  <title>ффух...</title>
  <link>http://about-zero.livejournal.com/6018.html</link>
  <description>Ну вот, дописал до относительно рабочего состояния свой первый небольшой проект на haskell. ~200 строчек кода вместе с тестами и готовым применением. Если причесать и окультурить, то будет меньше. Примитивный велосипедообразный разбор на лексемы, с готовым применением под t-sql :) С Parsec было бы раза в 2 меньше, но не так интересно :)&lt;br /&gt;Писать честно говоря было приятно и удобно (за исключением отладки :) ), но не уверен, что я смогу разобраться в этом коде через месяц например...&lt;br /&gt;Следующим шагом будет докрутка фич, ради которых это все собственно говоря и затевалось...&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=782920073&amp;r=397694426&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/6018.html</comments>
  <category>haskell</category>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://about-zero.livejournal.com/5732.html</guid>
  <pubDate>Sat, 10 Mar 2007 14:25:52 GMT</pubDate>
  <title>Виртуализация</title>
  <link>http://about-zero.livejournal.com/5732.html</link>
  <description>Итак. Чего хочется. Хочется в виртуальной машине погонять Linux или BSD. Т.к. виртуальная машина, то не хочется ставить современный мощный пользовательский дистрибутив, им моего компа и вживую маловато ;). Из маленьких и шустрых которые более-менее на слуху, нашел 2. Zenwalk 4.4.1 и ArchLinux 0.7.2.&lt;br /&gt;Что есть. Есть WinXP с стоящим VMWare 5.5.1. &lt;br /&gt;Zenwalk 4.4.1 с ядром 2.6.20 - начинается установка, но не может найти почему-то CRDOM. Дальше этого не идем.&lt;br /&gt;ArchLinux 0.7.2. Ставится. Начинаем устанавливать VMWare-tools как изложено у них в wiki. Нифига. Никак у него `uname -r` не совпадает с UTS_RELEASE в include/linux/version.h, хотя должон :) Хачить их конфигуратор на perl мне было влом.&lt;br /&gt;Итак, чего бы мне еще попробовать? &lt;br /&gt;Что нужно от дистрибутива. Относительная современность, чтобы не было проблем со сборкой из исходников, в случае чего. Из GUI там будет fluxbox или Xfce как барский вариант. Ну и набор разработчика. Религиозных предубеждений Linux vs. BSD, или rpm vs. deb vs. tar.gz или прочих не имею :) &lt;br /&gt;Главное, чтобы хорошо работало под виртуальной машиной. Кстати, может есть что-то лчуше чем VMWare?&lt;br /&gt;&lt;br /&gt;Вот, продолжу поиски, авось что-то найдется.&lt;img src=&apos;http://ads.sup.com/adv?i1=11992164&amp;vid=273976808&amp;r=784913895&amp;srv=1&amp;adzone=LJCom_Rss_1x1&apos; width=&apos;1&apos; height=&apos;1&apos; border=&apos;0&apos;&gt;</description>
  <comments>http://about-zero.livejournal.com/5732.html</comments>
  <category>linux</category>
  <lj:security>public</lj:security>
</item>
</channel>
</rss>
