четверг, 30 декабря 2010 г.

11111011011

Всех с наступающим 11111011011 годом!

У меня этот год, после трёх лет застоя, оказался достаточно насыщенным:
  • начал водить машину (на права выучился в прошлом году);
  • купили, собственно, первую машину, а потом, на новом месте, и вторую;
  • сменил работу: ушёл из кернельного тима в Red Hat в железячно-лисповый стартап;
  • переехал из Брно в Бостон;
  • купил гитару, начал учиться играть :)
  • ну ещё ипотеку в России закрыли.
В принципе, год положительным был.

Out of memory

У меня всегда была плохая память по отношению к собственным исходникам. Написал код, пошло в продакшн, проблем нет - забыл. А от писем, в которых спрашивается про какой-нибудь нюанс в ядерном патче, отправленном 2.5 года назад, у меня из ушей сыпется песок от скрежета заржевевших головных шестерёнок.

Вот, наверное, такая же фигня была бы у Пушкина, если бы на него натравили увлечённую своей профессией учительницу литературы. Она ему про грандиозную задумку и гениальную строку, оттенки и рифму в этом величайшем произведении (пусть, к примеру, "Бахчисарайский фонтан" будет), а он:

- Чё? Фонтан? А про чё там, напомните?

вторник, 21 декабря 2010 г.

понедельник, 20 декабря 2010 г.

Сибирь

Что-то стареньким я стал... 32 часа дороги перенёс очень плохо. После 9-часового перелёта в Москву из Нью-Йорка (плюс 4 часа на машине до NYC) был зелен, бледен и двоилось в глазах.

Ещё со мной посадили вонючего индуса, который, собственно, вонял немытым телом, снял ботинки и носки, свои грязные ноги куда только не ложил, ходил босым в сортир. Потом грязными руками жрал еду и, не вытырая их, лапал всё вокруг. Бвеее... Как тут не почувствовать рассовое превосходство? А ещё он все 9 часов усиленно чесал свою паховую область.

В Сибири хорошо, холодно. Русский Гисметео про погоду наврал на 30 градусов, а какой-то омереканский сайт всё правильно сказал: нате вам в понедельник -35C. Вообще, нормальному русскому холодотерапия жизненно необходима. Я аж жену в уговоренном месте когда ждал сегодня, стоял на улице, наслаждался ледяным ветром :) А то в квартире родителей тепло, жарят на совесть, а я в омереке привык к леднику -- окна у них фиговые, дома картонные.

В омерике мне не очень нравится, поэтому поймал себя на мысли, что в Сибирь лететь хотелось. Я прям самолёты эти очень сильно не люблю и тяжело переношу. Из тёплой ламповой Чехии не хотелось. Последние дни перед полётом ходил с печальным видом, глубоко вздыхал, прощающимся взглядом смотрел на брненские холмы. И хотя сейчас из омереки добираться 32, а не 21 час, как из Чехии, но всё равно хотелось. В общем, мой текущий быт в Бостоне так себе.

Родители мне нормальный интернет провели, так что могу нормально жить и работать :) Интернеты в сибирской глуши куда быстрее и дешевле, чем в омереке. Там у меня 1.5-3 мбит/с за $35 + налоги, а тут 6 (меньше нет) за что-то вроде $10.

четверг, 16 декабря 2010 г.

Основной инструмент

Полтора-два года назад мне попался небольшой колым. Нужно было сделать параллельный сетевой сервер, который помогал пхпшной системе делать одну задачу быстро и правильно. Заказчик в выборе языка вообще никак не ограничивал, мог на чём угодно писать. Только нужно было похапешный плагин для интеграции  с моим чудом наваять.

Тогда я по работе писал на Си, Лиспом уже баловался. Выбрал C++, потому что Лиспа достаточно хорошо не знал, а Эрланг, который, как я слышал, хорошо подходит для всяких сетевых задач, вообще ни разу не использовал. И даже доки ради интереса не читал, а начинать читать в тот момент было страшновато: сроки поджимали. Зато был положительный опыт с boost::asio. Вернее, оно тогда просто asio было.

В общем-то, за неделю написал, и оно хорошо работало. Некоторое время убил на отладку падений: всё-таки, косяк в асинхронном паттерне asio со смартпойнтерами отловить сложно, кто писал, тот поймёт :)

Сейчас у меня основной инструмент, понятно, Лисп, программы на нём думаются, а с C++ уже лоб морщить надо. Ну так вот, сижу я сейчас и думаю, что сегодня такую поделку написал бы за вечер, ну за день максимум. Самое сложное, что там было - это эмуляция лямбд и сборщика мусора, а в Лиспе оно есть из коробки. И пользоваться этим несравненно удобнее. Впрочем, с заразой из мира ФП в виде функций высшего порядка в крестах тоже живётся легче. По-крайней мере, структура программы становится понятной, сконцентрированной вокруг логики, а не реализации, нет лапши. Синтаксис, конечно, всё портит, но что поделать?.. Синтаксис так и шепчет: "Забей на C++, пиши на языке помощнее" :)

И интеграция лиспового демона с похапешным скриптом через zeromq - раз плюнуть, несколько строчек кода. Вообще, хорошая штука. Жаль тогда его не было.

вторник, 14 декабря 2010 г.

Deliver in LispWorks

Предыдущий пост, кстати, про ЛиспВоркс должен был быть, но я как-то до него не дошёл...

В общем, настала пара передавать продукт во внутреннее использование людЯм, ничего про asdf2, quicklisp, systems и т.п. не подозревающих. ЛиспВоркс для такого случая очень мощно приспособлен, у него есть концепция delivery. Это когда всё, что нужно для работы программы, запихивается в один исполняемый файл, но, в отличие от панковских оупенсорсных конпеляторов, у LW есть море ручек, которые можно при delivery крутить.

Например, в LW есть такая стадия создания образа, как утряска дерева (shake tree). LW бегает по дереву программы и смотрит, чего бы такого выбросить, что в программе, собственно, и не используется. Помнится, я жаловался у гражданина Love5an'а в его уютной ЖЖшечке, что SBCL на простой трёхкилобайтный tcp-сервер с использованием флагманских библиотек, типа iolib, генерирует исполняемый файл на 300 мегабайт. Так вот, LW из коробки, только на 20 мегабайт своих исходников, плюс неустановленного кол-ва библиотек, поставленных quicklisp'ом, сгенерил те же 300 мегабайт. 20 мегабайт исходников даже не на лиспе - это чуть больше, чем дофига, а уж на лиспе с его макросами, CLOS'ами и прочими ридтейблами - ещё больше.

Но самое неожиданное заключается в ручках к функции delivery. Есть у неё ключевой параметр с интересным именем :shake-shake-shake. Он отвечает за то, как активно трясти дерево. Я эксперимента ради дал ему вожжи в руки, и он натряс с дерева ажно 250 мегабайт. Т.е. результирующий бинарник стал всего 50 мб.

Самое удивительное, что бинарник всё ещё работал. Не работал только рантаймный load сорца с DSL-программой. Те сущности, которые использовались только в этой программе, и о которой компилятор знать не мог, LW вытряс напрочь, поэтому при загрузке валилось с руганью на неизвестные функции. А так, остальное, что во время компилирования установить можно было, всё работало.

Жаль только, что нормальная версия LW стоит, как подержанная, но всё ещё очень хорошая машина...

Боженька, убей всех плохих программистов. Выпуск #2.

Второй раз за последнее время натыкаюсь на проблему с ignore-errors, когда на поиск этих самых errors, которые ignored, тратится день-два. Пока-а-а в кишки сложного проекта погрузишься... В итоге, и время потратил, и изучил то, что изучать не собирался, и что, собственно, изучать не нужно вовсе.

Начинаю ненавидеть ignore-errors с той же степенью, что и malloc'и в Сях. Видишь grep'ом десятки-сотни ignore-errors или malloc в проекте - жди беды.

Товарищи программисты, пожалуйста, если вам кажется, что в вашем лиспокоде вот тут можно проигнорировать ошибку, то наваяйте макрос-обёртку, аналогичный ignore-errors, который сам суть обёртка над handler-case, но выводит warning. Этого достаточно, чтобы пользователю вашего кода вовремя заметить ошибку и начать копать её предметно, а не предварительно втыкать несколько часов в монитор со знаком вопроса в глазах, терзаясь смутными сомнения и не решаясь лезть в болото.

А теперь о погоде: в Бостоне тепло. Т.е. холодно, но воздух сухой, поэтому тепло. Сегодня немножко порывался снег идти, но позорно ретировался. Так и стоит погода позднего сибирского октября, когда вот-вот снег выпасть должен.

Кстати, о Сибири... Через два дня сажусь на свой кожанный диван с подогревом и запахом цветочков (Volvo V70 который), еду в Нью-Йорк, откуда летит мой самолёт. Заработался совсем, пора в отпуск! В отпуск, в Сибирь! :)

суббота, 11 декабря 2010 г.

Субботняя прогулка

Съехдил, посмотрел на здание Редхата в Вестфорде. Прикольное.

Потом поехал в Great Book Farm State Park, погулял немножко. Так себе. На велосипеде кататься не везде можно, подлесок густой, диких спусков, как в Чехии не сделаешь. Да и рельеф максимум на ленивую прогулку на хардтейлах с женой.

Скучаю по Чехии.

пятница, 10 декабря 2010 г.

Крик души

Дорогой боженька! Пожалуйста, убей всех плохих программистов!

среда, 8 декабря 2010 г.

Long live Common Lisp

У ANSI CL, типа, 18-го декабря - юбилей, поэтому лисперы по всей планете отмечают праздник, клепая мегакод. Я следующую фигню решал.

Дано описание железки в терминах DSL: какие в коробке есть платы,  что за гейтвари крутятся на FPGA, какие там ядра зашиты, где они находятся, что из себя представляют, etc. Надо: сделать веб-интерфейс для просмотра, редактирования конфигурации и мониторинга железки. DSL проектировался без учёта того, что какой-то там веб ещё должен быть.

Сколько усилий потребовалось, чтобы в браузере начать мышкой тыкать? Всего лишь добавить в макрос-генератор классов опцию :metaclass и указать метакласс от фреймворка, на котором крутится cl-user.net. Причём, приукрашательства ситуации, практически, нет (ну глюк нашёл, initarg у слотов по пути съедался, делов-то). Фреймворк сам траверсит объекты и их иерархию, используя метаобъектный протокол, и рисует умолчательные формы. Мне ничего дополнительного писать не пришлось, фреймворк даже юзает стандартные мои акцессоры для чтения регистров ядер с железки по сети.

То есть, что получается: к обыкновенному объектному коду можно привешивать метаклассы и получить автоматически интеграцию с веб-фреймворком, который о сути подсовываемых ему объектов ничего, собственно, и не знает. С другой стороны, в метакласс можно прикрутить такие мощные вещи, как персистентность объектов или чёрта с рогами, и мой DSL'ный код никаких изменений не потребует.

Собственно, персистентность там уже есть, а также присутствует проксирование, когда начинка объектов валяется где-нибудь на другой машине, а локально от объекта есть только шкурка.

И, да, ни строчки HTML.

воскресенье, 5 декабря 2010 г.

Газпром^WЛисп: мечты сбываются

Первую детскую мечту я осуществил: Вольво купил. Не, это вторая... Первая была - жена-красавица-умница, но этот вопрос ещё до Вольвы решил.

В общем, настала пора следующей по списку мечты!

Душа давно пела, ещё в школе что-то пытался наклепать на Спектруме в треккере для муз.сопроцессора. Получалось плохо, т.к. вместо музыкалки я запоем читал книжки, а потом увлёкся радиоэлектроникой, компьютерами и программированием.

Но душа продолжала петь. Где-то с полгода назад жена провела тестирование степени оттоптанности ушей медведем: пиликала что-нибудь простенькое на синтюке, а я, не глядя, должен был повторить. Тест показал целесообразность покупки инструмента.

И вот, переехав в страну, где в магазинах есть абсолютно всё, цены аццки низкие, а з/п выше европейской, купил гитару. Вернее, стартер-кит в ипостаси Ibanez IJX121. Ibanez, потому что на ней фигачит уважаемый мной в 90-х годах Abbath из Immortal. Внутри (всё ибанезовское) лежала гитара GRG121EX, 15-ваттный комбик и всякий дешёвый хлам, типа медиаторов, сумок, автотюнера, кабелей.

Пальцы от струн воют, суставы трещат от попыток взять некоторые аккорды (у мну лапищи с короткими толстыми пальцами, заточенные под Емакс, руль горного велосипеда и битьё морд газовым ключём). Жена со снобистским смехом критикует мой деревенский подход и предлагает начать с зазубривания грифа и "В траве сидел кузнечек".

Но я верю, что прорвусь. И буду рубить и жужжать, жужжать и рубить. Ждите труЪ-позерских фоток ;)

2.6.36

Сабж - это вещь!

На моей старенькой Тошибе А100 после апдейта самым неожиданным образом исцелились раньше, якобы, умирающие SD/MMC кардридер и DVD-привод.

Кроме того, улучшилась ситуация с отзывчивостью системы при активном нагибании винчестера. Плюс в арчевский* конфиг ядра по моей просьбе включили поддержку huge pages, так что моя убербыстрая писанина на смеси Си с ассемблером может ещё наносекунд срезать. Кстати, биржи начали интересоваться этой писаниной, больно гистрограммы времянок заманчиво выглядят =)

Я чё-то теперь даже не знаю, надо ли новый бук покупать?.. У этого меня всё устраивает. Экран, конечно, говно полное, но я не фотошопер, всё же. Зато батарея даже после трёх с половиной лет держит около двух часов.

[*] Касаемо Арча: это самый стабильный линуксовый дистрибутив, который я только видел. Ни одной регрессии после постоянных обновлений не замечено, несмотря на арчевскую rolling based-суть. Система просто работает, и в ней всегда свежий софт. Конечно, не сразу после релиза в апстриме всё появляется, пока там пакеты отлежатся в тестинге, но впечатляет сам факт, что я энергию на борьбу с апгрейдом на следующий релиз и его последствий больше не трачу.

RabbitMQ <-> ZeroMQ

Это должно было когда-нибудь случиться, и оно случилось. Чуваки написали бридж между, вероятно, самой популярной реализацией AMQP и самым модным мессейджингом современности. Вот.

суббота, 4 декабря 2010 г.

42 (биржи, лисп и всё такое)

Как известно, у бирж много денег. Это значит, что много денег может быть потрачено на исследования и разработку технологий, приближающих очередной неминуемый крах экономики ещё быстрее. Очевидным решением в борьбе с задержками при приёме и обработке биржевых данных является переход на FPGA, что многие биржи и делают. А если и не делают, то очень зря, это им скоро аукнется. В общем, биржи нанимают классных и дорогих спецов по VHDL и проектированию железа, но результат получается всё равно хуже, чем у среднего пошиба железячников, типа нас. Нет, конечно, мы круты, но только биржа может позволить нанять специалистов мирового уровня с з/п полмиллиона долларов в год. Почему же у нас получается лучше?

Ответ лежит в технологии проектирования FPGA-железа. Само железо достаточно медленное, работает на тактовой частоте порядка 150-200 МГц. Понятно, что если применять последовательный подход, как это делается в программах для обычных компьютеров, то FPGA будет на порядок медленнее. Поэтому в хвост и в гриву используется параллельный подход, когда одни и те же данные, по мере их прибытия в железку, спекулятивно начинают обрабатывать различные логические ядра в расчёте на то, что когда все данные придут, и станет понятно, что это, собственно, за данные, то одно ядро уж точно будет иметь все карты на руках, плюс почти всё содержимое уже спекулятивно обработало. Остаётся только завершить формальности и отправить декодированный пакет наверх.

Так вот, программировать это нереально сложно. Несовершенные человеки делают море ошибок, пишут долго, а в итоге всё равно получается неидеально, ибо мозг гомо сапиенса заточен на последовательное исполнение.

И тут, на белом коне, под грохот барабанов и горнов, со сверкающей саблей в руках выезжает красавец Коммон Лисп, на котором написан декларативный DSL, представляющий из себя описание форматов и набор правил, как эти форматы обрабатывать. Парсеры пакетов, всякие триггеры, редукцию графов и полную параллельность строит машина, которая делает это быстро и без ошибок. В итоге, на долю ручного VHDL-кода остаётся процентов 10 исходников, и то, касаемо технических аспектов функционирования: эзернет, там, или pci-e. Но вся бизнес-логика генерится по декларативному описанию.

В планах ручной VHDL истребить почти полностью, уж слишком дорого обходится его разработка: затяжные глюки, срывы сроков, пени...  Вместо пятерых железячников дешевле нанять одного толкового лиспера :) Ну и надо-то их всего несколько штук, а то они всё работу быстро попеределают и зевать от скуки начнут.

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

среда, 1 декабря 2010 г.

Новости из ОТК

Жена (base os qe в редхате) пишет системтаповский скрипт для создания условий по воспроизведению бага в cups'е. Ужыс, куда власти смотрют?

Архив блога