<?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/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:about_zero</id>
  <title>about_zero</title>
  <subtitle>about_zero</subtitle>
  <author>
    <name>about_zero</name>
  </author>
  <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom"/>
  <updated>2008-06-20T15:13:55Z</updated>
  <lj:journal username="about_zero" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://about-zero.livejournal.com/data/atom" title="about_zero"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:13517</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/13517.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=13517"/>
    <title>на злобу дня</title>
    <published>2008-06-20T15:13:55Z</published>
    <updated>2008-06-20T15:13:55Z</updated>
    <content type="html">Интересно, каково было бы Гераклу, если бы подвиг по вычистке Авгиевых конюшен ему пришлось бы повторять постоянно, вместо остальных 11ти подвигов?&lt;br /&gt;&lt;br /&gt;NB. а не пора ли вам сударь, обновить свой рекламный щит и встать у дороги?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:13256</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/13256.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=13256"/>
    <title>диалог, которого не было</title>
    <published>2008-03-26T18:31:37Z</published>
    <updated>2008-03-26T18:31:37Z</updated>
    <content type="html">- Здравствуйте, я бы хотел заказать у вас садовую скамейку. Знаете, обычную такую, пара досок поперек, и спинка.&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;... хватает топор...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:12503</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/12503.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=12503"/>
    <title>записки на манжетах</title>
    <published>2008-02-02T13:51:19Z</published>
    <updated>2008-02-02T13:51:19Z</updated>
    <category term="cvs mercurial"/>
    <content type="html">Вот, немножко начал игратся с 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 "initial revision"&lt;br /&gt;Проиницализировали типа локальный репозиторий, добавили в него файлы, и закоммитили в локальный репозиторий.&lt;br /&gt;При коммите пишем текст сообщения, иначе по-любому поднимется редактор и заставит его написать :)&lt;br /&gt;В процессе можно поиграться с &lt;br /&gt;hg status - выводит статус файлов в директории относительно хранящихся в локальном репозитории&lt;br /&gt;hg log - показывает лог коммитов&lt;br /&gt;Теперь отправляем файлы из "локального" в "удаленный" репозиторий (иожно делать и под обычным пользователем)&lt;br /&gt;cd /etc&lt;br /&gt;hg push ~/repo/etc&lt;br /&gt;И получаем их в "удаленном" репозитории&lt;br /&gt;cd ~/repo/etc&lt;br /&gt;hg update&lt;br /&gt;&lt;br /&gt;В общем, как я понял, идеология поощряет использование отдельных репозиториев на каждый бранч (путем hg clone), правки там, и потом hg push в родительский, с периодическим выполнением hg poll для обновления содержимого локального репозитория</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:12281</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/12281.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=12281"/>
    <title>бессознательное</title>
    <published>2008-01-28T19:43:45Z</published>
    <updated>2008-01-28T19:43:45Z</updated>
    <content type="html">Видимо после небольшого перенапряжения на текущем проекте начали меня посещать несообразные мысли об альтернативном пути в жизни - т.н. downshifting... Ну типа там свалить в Гоа, питаться бананами, и ничего не делать. Как щадящий вариант с минимумом изменений - пользуясь бумом спроса на программистов, свалить куда-нибудь обычным рядовым программистом клепать формочки и запросы, по вечерам выходя в космос и общаясь с астралом. Звучит все это черезвычайно заманчиво, удачно вписываясь в анекдот про негра и сбор бананов. &lt;br /&gt;К чему это я все написал? Честно говоря не знаю, просто захотелось структурированно изложить кашу, которая сейчас крутится у меня в голове, авось заодно и смысл жизни найдется, и тогда глупые вопросы перестанут возникать.&lt;br /&gt;&lt;br /&gt;ЗЫ: А вот неудобно иногда, что в OCaml по умолчанию string &amp;lt;&amp;gt; char list, и нужно писать преобразование ручками. Или это я такой невнимательный? :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:11778</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/11778.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=11778"/>
    <title>back to future</title>
    <published>2007-11-22T18:56:09Z</published>
    <updated>2007-11-25T13:11:28Z</updated>
    <content type="html">Читаю сейчас замечательную книжку Leo Brodie "Thinking Forth" (&lt;a href="http://thinking-forth.sourceforge.net/"&gt;ссылка&lt;/a&gt;)&lt;br /&gt;Несмотря на то, что книга выпущена в 1984 году, актуальности своей она не потеряла. Читаю, и все больше убеждаюсь в корректности изречения "Все новое - это хорошо забытое старое".&lt;br /&gt;&lt;br /&gt;Создание DSL как основной способ решения задач.&lt;br /&gt;Быстрые итерации, прототипирование, постоянное взаимодействие с пользователем - основные постулаты Agile методик. &lt;br /&gt;&lt;br /&gt;Помимо всего прочего, и сам язык показался мне весьма интересным и приспособленным именно под подобный стиль разработки.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:11267</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/11267.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=11267"/>
    <title>лохматость</title>
    <published>2007-10-25T17:40:21Z</published>
    <updated>2007-10-25T17:40:21Z</updated>
    <content type="html">"Структура банковских данных слишком сложна, чтобы применять к ней правила реляционного моделирования" - шедевральная цитата, взята &lt;a href="http://dom.bankir.ru/showthread.php?t=77431&amp;amp;page=2"&gt;из обсуждения здесь&lt;/a&gt;.&lt;br /&gt;Это я к тому, что все виденные мной схемы БД для банков, действительно выглядят несколько "лохмато". Широкие таблицы, куча редкоиспользуемых колонок, дублирующихся значений, смешение различных сущностей в одной таблице... Все это в той или иной степени присутствует во всех виденных системах. Похоже, что либо все архитекторы придерживаются этой максимы, либо таков неумолимый эволюционный процесс, что любая схема БД со временем накапливает энтропию и деградирует до 1НФ (или в лучшем случае до 2НФ)?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:11094</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/11094.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=11094"/>
    <title>классика</title>
    <published>2007-10-02T16:13:20Z</published>
    <updated>2007-10-02T16:13:20Z</updated>
    <content type="html">В очередной раз перечитываю "Путь камикадзе" Йордона. До чего же хорошая, успокаивающая и умная книжка... Просто сейчас вживую наблюдаю все то, что написано в книжке, точность попадания и систематизации просто поражающая....</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:10911</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/10911.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=10911"/>
    <title>забавно</title>
    <published>2007-08-16T16:22:48Z</published>
    <updated>2007-08-16T16:22:48Z</updated>
    <content type="html">Интересно, какое название лучше подойдет - некропрограммист или археолог-программист? Не хочу ни так, ни так на самом деле...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:10642</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/10642.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=10642"/>
    <title>мысли вслух...</title>
    <published>2007-08-09T17:40:24Z</published>
    <updated>2007-08-09T17:40:24Z</updated>
    <content type="html">Еще несколько наблюдений из разряда типовых задач для баз данных. Итак, времязависимые данные. Есть 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;Но по большому счету это все проблемы физической реализации типа данных - "временной интервал". У Дейта хорошо описано, что это такое и зачем нужно. И вот меня сейчас мучает вопрос - пропустил ли я что-то в возможностях современных СУБД в этой области, или до сих пор нет удобного типа данных для решения подобных задач? &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-значений</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:10244</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/10244.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=10244"/>
    <title>наболело</title>
    <published>2007-07-27T17:51:37Z</published>
    <updated>2007-07-27T17:51:37Z</updated>
    <category term="angry"/>
    <content type="html">Планета Шелезяка. Жизни нет, мозгов нет, населена биомассой...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:10019</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/10019.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=10019"/>
    <title>Аляска, сэр...</title>
    <published>2007-07-26T17:38:09Z</published>
    <updated>2007-07-26T17:38:09Z</updated>
    <category term="funny"/>
    <content type="html">Из разряда wtf...&lt;br /&gt;&lt;a href="http://dom.bankir.ru/showthread.php?t=75882"&gt;Автоматизация&lt;/a&gt; во всей красе :)&lt;br /&gt;Похоже что разработчиков в Диасе уже не осталось...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:9850</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/9850.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=9850"/>
    <title>заметки на полях</title>
    <published>2007-07-16T18:52:58Z</published>
    <updated>2007-07-16T18:52:58Z</updated>
    <content type="html">Интересно наблюдать эволюцию развития банковских систем "у нас" и "у них". Очень четко прослеживается разница в подходах к проектированию и решаемых задачах. Почти все отечественные системы для банков идут от бухгалтерского учета, соответственно, вся доступная информация о движении средств доступна через проводки и остатки на счетах. Т.е. главное - выполнение ПБУ и банковская отчетность, а собственно задачи учета и анализа - вторичны. В забугорных системах (не могу сказать, что я видел их много, но все же...) - изначально все шло похоже именно от задач учета. Этот подход мне нравится больше, для текущих решаемых задач возьму похоже за образец аналогичный подход...&lt;br /&gt;Еще до кучи мелкая архитектурная заметка - остатки по валютным счетам. Если мы храним приведенную сумму, то записи будут множиться ежедневно, т.к. курс меняется, соответственно идет переоценка остатка. Другой вариант - таблица курсов. Минус - лишнее соединение, недостаточно таблицы курсов ЦБ, потому что нужен курс на любую дату, в т.ч. и на праздники, что выливается либо в подзапросы, либо в доп. логику при загрузке курсов. А вот при хранении первичных документов проще всего сразу хранить приведенную сумму. Так что надо будет прикинуть и выбрать.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:9514</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/9514.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=9514"/>
    <title>бревно запроса :)</title>
    <published>2007-06-22T17:11:46Z</published>
    <updated>2007-06-22T17:11:46Z</updated>
    <category term="funny"/>
    <content type="html">&lt;a href="http://www.onliner.by/test/gsm/nokia_gold/print"&gt;Правильные телефоны&lt;/a&gt; :) А то я что-то завыбирался, зажрался так сказать... :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:9399</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/9399.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=9399"/>
    <title>недоуменное</title>
    <published>2007-06-19T18:03:54Z</published>
    <updated>2007-06-19T18:03:54Z</updated>
    <content type="html">А вот мне интересно, это судьба у меня такая идти по стопам "архитекторов" и доводить "решенные задачи" и "готовые модули" до рабочего состояния? Вроде уже не мальчик, да и с "архитектором" мы это уже все неоднократно проходили в прошлом... Так чеж я удивляюсь как в первый раз?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:9151</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/9151.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=9151"/>
    <title>В ассистенты б я пошел...</title>
    <published>2007-05-21T17:49:02Z</published>
    <updated>2007-05-21T17:49:02Z</updated>
    <category term="funny"/>
    <content type="html">&lt;a href="http://www.sql.ru/forum/actualthread.aspx?bid=9&amp;amp;tid=428093&amp;amp;pg=1"&gt;Kичный ИТ ассистент генерального директора компании&lt;/a&gt;&lt;br /&gt;Порадовало :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:8837</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/8837.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=8837"/>
    <title>дожили...</title>
    <published>2007-04-24T17:39:43Z</published>
    <updated>2007-04-24T17:39:43Z</updated>
    <category term="funny"/>
    <content type="html">&lt;a href="http://rsdn.ru/Forum/Message.aspx?mid=2457628&amp;amp;only=1"&gt;Это пять&lt;/a&gt;, если товарищ не стебется... Вот они, подрастающие программисты, наша надежда и опора :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:8504</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/8504.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=8504"/>
    <title>литература</title>
    <published>2007-04-17T16:17:12Z</published>
    <updated>2007-04-17T16:17:12Z</updated>
    <content type="html">Господа, а кто что может порекомендовать почитать хорошего по основам статистики и анализа данных? Чтобы после прочтения не пугаться слов типа линейная регрессия, кластеризация и т.д? Если литература на английском, то возможно это будет даже лучше.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:8358</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/8358.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=8358"/>
    <title>ностальгия</title>
    <published>2007-04-11T18:56:45Z</published>
    <updated>2007-04-11T18:56:45Z</updated>
    <content type="html">Спровоцирована &lt;a href="http://fishki.net/comment.php?id=19900"&gt;вот этим постом&lt;/a&gt;. Почти все из перечисленного было и у меня, разве что вместо палицы и нунчаков использовалась велосипедная цепь :) Эх, было время...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:7646</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/7646.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=7646"/>
    <title>стоя на лыжах... в гамаке...</title>
    <published>2007-03-27T07:21:23Z</published>
    <updated>2007-03-28T05:46:32Z</updated>
    <content type="html">Перекраивая в очередной раз sql-код, с горечью раздумываю на тему, почему же unit-testing так непопулярен при разработке БД? По идее, никаких противопоказаний на этот счет нет, есть даже некий DbUnit... Но что получается на самом деле...&lt;br /&gt;Если в базе только CRUD-операции, то все выглядит более-менее пристойно, просто и понятно. Но как только в базе появляется БЛ (бизнес-логика, про которую Фаулер помнится писал "странно, что такую нечеткую, нелогичную, часто меняющуюся вещь назвали термином бизнес-логика"), начинается цирк. Особенно если пытаешься использовать TDD с середины разрабокти или не дай бог когда началась поддержка. Рассмотрим этот самый крайний случай.&lt;br /&gt;- Нужна база в жестком зафиксированном состоянии, причем для некоторых тестов эти состояния могут быть взаимоисключающими. Т.е. подняли эталонный дамп - прогнали тесты, и так по кругу. &lt;br /&gt;- Все время приходится балансировать между производительным кодом, и кодом удобным для тестирования. Например, код, который бежит курсором по данным и вызывает для каждой строки процедуру, которая полагается только на переданные ей параметры, тестировать гораздо легче, чем код, состоящий из диких insert/update/delete, использующий кучу временных таблиц, которые заполнены за пару вызовов вверх. &lt;br /&gt;- Следующий из предыдущего пункта вывод - для таких случаев черезвычайно сложно подготовить набор тестовых данных.&lt;br /&gt;- Еще более следующий вывод - то что в этом случае получается уже сложно назвать unit-test'ом, это скорее уже функциональные тесты, которые логичнее производить со стороны вызывающего кода.&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="http://www.rsdn.ru/Forum/Message.aspx?mid=2025093"&gt;более развернутая&lt;/a&gt; мысль на эту же тему... Человек более грамотным и культурным языком чем я описывает свое видение данной проблемы...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:7257</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/7257.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=7257"/>
    <title>redesign wheel...</title>
    <published>2007-03-26T09:03:59Z</published>
    <updated>2007-03-26T09:03:59Z</updated>
    <content type="html">&lt;a href="http://jemacs.sourceforge.net/JEmacs-FSM.html"&gt;Оригинально...&lt;/a&gt; Жалко только что наверняка несовместимо с оригнальным Emacs... А так идея хороша :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:6939</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/6939.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=6939"/>
    <title>а почему бы и нет? :)</title>
    <published>2007-03-23T08:22:54Z</published>
    <updated>2007-03-23T08:22:54Z</updated>
    <category term="funny"/>
    <content type="html">Наткнулся тут нас обсуждение на "Королевстве Дельфи"&lt;br /&gt;&lt;br /&gt;"&lt;br /&gt;Правильным названием для новых сред от CodeGear было не не Дельфи для чего то там, а TurboPHP, TurboRuby, TurboPyhton, TurboLisp (мечтать не вредно :)) )&lt;br /&gt;Это гораздо эффективнее и в маркетинговом плане.&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;ЗЫ. Да, TurboHaskell - это было бы неплохо! :о))&lt;br /&gt;"&lt;br /&gt;&lt;br /&gt;Красота... :)))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:6903</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/6903.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=6903"/>
    <title>повеселило</title>
    <published>2007-03-22T18:05:13Z</published>
    <updated>2007-03-22T19:14:06Z</updated>
    <category term="funny"/>
    <content type="html">Вот как надо &lt;a href="http://programming.reddit.com/goto?rss=true&amp;amp;id=1c3u6"&gt;людей на работу приглашать&lt;/a&gt; :). А то понимаешь ли...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:6155</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/6155.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=6155"/>
    <title>чуть-чуть</title>
    <published>2007-03-16T18:16:51Z</published>
    <updated>2007-03-17T09:44:37Z</updated>
    <category term="haskell"/>
    <content type="html">Вот. Попробую описать свой велосипед, дабы получить критику и новый опыт. Итак, часть 1-я. &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сначала небольшой пример. Вот так выглядит выражение для разбора числа с плавающей запятой.&lt;br /&gt;&lt;pre&gt;
get_float =
	[PMany1 [PDigit],
		POpt [PChar '.',
		PMany1 [PDigit],
		POpt [PChar 'E', POpt [POneOf ['+', '-']], 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 совпавшая часть, остаток строки) в противоположном случае. Реализация "в лоб" путем прохода по списку паттернов с рекурсией, если необходимо и сопоставлением текущего символа строки с текущим элементарным паттерном.&lt;br /&gt;&lt;pre&gt;
get_token datas lst =
    unmapParts $ reverse $ get_token' datas lst []
    where
	get_token' _ [] accum = accum
	get_token' s (x:xs) accum =
	    case pass s x of
-- если на каком-то этапе не смогли сопоставить с образцом
-- то значит вся строка нам не подходит
	        (Nothing, _) -&amp;gt; [(Nothing, datas)] 
	        (Just v, rest) -&amp;gt; get_token' 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 "Space" get_space,
	Token "Comment" get_comment,
	Token "Comment" get_comment2,
	Token "String" get_string,
	Token "String" get_string2,
	Token "Number" get_float,
	Token "Identifier" get_identifier,
	Token "Variable" get_variable,
	Token "GlobalVar" get_global_variable,
	Token "Op" get_operand
	]
&lt;/pre&gt;&lt;br /&gt;Полный список распознаваемых токенов. Процедура получения из строки списка токенов заключается в последовательном примении функции try_apply.&lt;br /&gt;&lt;pre&gt;
try_apply s = try_apply' s tokens
-- если перебрали весь список возможных токенов, и ни один не подошел, то ой...
try_apply' s [] = (Nothing, s) 
try_apply' s (x:xs) =
    case r of
        (Just v, rest) -&amp;gt; (Just $ TokenData x v, rest)
        (Nothing, _) -&amp;gt; try_apply' 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 и иже с ними я осведомлен :) Просто нужно было написать что-то несложное, дабы почувствовать язык.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:6018</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/6018.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=6018"/>
    <title>ффух...</title>
    <published>2007-03-16T12:46:57Z</published>
    <updated>2007-03-16T12:46:57Z</updated>
    <category term="haskell"/>
    <content type="html">Ну вот, дописал до относительно рабочего состояния свой первый небольшой проект на haskell. ~200 строчек кода вместе с тестами и готовым применением. Если причесать и окультурить, то будет меньше. Примитивный велосипедообразный разбор на лексемы, с готовым применением под t-sql :) С Parsec было бы раза в 2 меньше, но не так интересно :)&lt;br /&gt;Писать честно говоря было приятно и удобно (за исключением отладки :) ), но не уверен, что я смогу разобраться в этом коде через месяц например...&lt;br /&gt;Следующим шагом будет докрутка фич, ради которых это все собственно говоря и затевалось...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:about_zero:5732</id>
    <link rel="alternate" type="text/html" href="http://about-zero.livejournal.com/5732.html"/>
    <link rel="self" type="text/xml" href="http://about-zero.livejournal.com/data/atom/?itemid=5732"/>
    <title>Виртуализация</title>
    <published>2007-03-10T14:25:52Z</published>
    <updated>2007-03-10T14:25:52Z</updated>
    <category term="linux"/>
    <content type="html">Итак. Чего хочется. Хочется в виртуальной машине погонять 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;Вот, продолжу поиски, авось что-то найдется.</content>
  </entry>
</feed>
