22 декабря 2008

отделяя дистрибутивы от котлет

Офигенно радуют в обзорах а-ля "что там нового в недавно вышедшем нашем любимом  дистрибутиве Х" фразы типа "Eclipse обновлён до версии 3.4". Ребята, да что за чушь вы пишете?  Разработчики дистрибутива ни строчки кода не написали для того, чтобы обновился этот Eclipse. Зачастую 1 всё, что сделали дистростроители - собрали его в формате пакетного менеджера дистрибутива или написали правило сборки (в той же Генту даже это делается сообществом). Да, это тоже работа, но к обновлению Eclipse относящаяся косвенно. Если учесть, сколь мало успешных примеров разделяемых между различными дистрибутивами одного семейства репозитариев, по большей части мартышкина работа.
"Улучшенная поддержка вебкамер" тоже не из дистрибутива произрастает, а из ядра. И снова степень участия дистростроителей в этом может быть разной, чаще всего - никакой.
В общем, ковырять вот так вот статейки можно долго и со смаком, в то же время окончательного и однозначного понимания того, что есть дистрибутив и что можно считать заслугами его строителей при релизе, у меня до сих пор нет. Немало в его достижении помогает статья любимого мною автора Алексея Федорчука Что же такое дистрибутивы Linux? Однако есть ещё несколько моментов.
Атрибутом любого дистрибутива является документация к нему, а заслугой создателей - её полнота, актуальность, доступность на родном языке и далее по тексту. Это может быть как руководства администратора, так и пользователя, иногда разработчика или maintain'ера пакета.
Самая же главная заслуга создателей дистрибутивов - интеграция. Интеграция имеющейся у них на руках глины в виде всего зоопарка ПО для создания жизнеспособной (могущей поддерживать себя и свои внутренние процессы типа обновления), по возможности красивой и удобной системы, предоставляющей пользователю окружение для осуществления уже его процессов (рабочих, развлекательных и пр.) Простейший пример - Gentoo (низкая степень интеграции) и Sabayon (высокая степень). То самое "сделать красиво".
Поскольку эта запись найдена в черновиках - прямо вот тут мысль обрывается и возникает вопрос - что ещё можно и должно считать частью дистрибутива, а что - вкладом в него (а вообще - в Open Source мир) со стороны независимых сторонних разработчиков?
  1. Я не говорю всегда - некоторые сообщества дистрибо-фанов и разработчиков именно дистрибутивов могут и контрибутить в различные проекты, особенно полезные именно им. К примеру - SuSE и Kickoff - целое юзабилити-исследование + разработка меню - и всё для того, чтобы улучшить юзерэкспириенс своих потребителей.

my.gpodder.org

Практически "тихо и незаметно" появилась в gpodder одна штука, которая в примечаниях к версии описана так: Support for gPodder web services (upload and download subscription lists). Суть её в том, что можно залить на сайт свой список подкастов и потом в другой экземпляр gpodder (на другом комьютере) загрузить. Само по себе уже хорошо, но есть ещё Podcast Top 50, что хорошо уже не только само по себе, но и тем, что в силу специфики аудитории сейчас там преобладают англоязычные подкасты линуксово-гиково-технической направленности. Чем несомненно стоит воспользоваться.

Вот что говорит об этом сам разработчик, Томас Перл (Thomas Perl):

Yep, I hope that the list is actually something worth to the users that will someday get the current "Top podcasts" list (that uses the PodcastAlley top podcast OPML) replaced with a community-based top podcasts list.

That said, as soon as I rewrite the (currently messy) codebase that is the webservice, I'm going to publish it under an open license, so users should still be able to run their own "my.gpodder.org" server or put up an alternative server in case I turn evil.

Still, for the current main use case (having a community-based top podcasts list), it's best to stay at the my.gpodder.org service, because we take the subscriber count from that data. If you want to just install a copy on your server to sync your (private) podcast list between many machines, you should be able to do so as soon as the code is cleaned up and released.

After that, it's also possible to take feature additions from the community, because the my.gpodder.org is open source then.

Так что счастливого подслушивания.

11 декабря 2008

О (без)полезности ORM

(Вынесено из комментов одного молодого блога.)
ORM штука полезная, но по сути костыль для существующих технологий, используемых в силу инертности мышления и исторических причин (ох уж эти мне исторические причины!). Когда программист хочет хранить свои объекты, а ему дают SQL простигосподи, - он кричит : дайте мне ORM. А надо ему не ORM в большинстве случаев, а что-нибудь типа Gemstone, может быть даже документ-ориентированную БД. Налицо несоответствие мировоззрений. Однако, на данный момент наиболее обкатанными хранилищами данных являются, как ни странно, реляционные базы данных. Вот и тащат их из проекта в проект, когнитивный диссонанс в голове разработчиков растёт, а голова от ног всё больше отстаёт.
В общем, ORM - это когда RDBMS не в ту дырку суют.

10 декабря 2008

Куда растут ноги у Oxite

Про выход Oxite уже лучше меня написали ProgBlog и Москалюк, так что не буду повторятся.
Ну конкурент Wordpress'у и прочее бла-бла - это полезно, хотя и не главное (этих самых CMS и прочих блогинговых движков на основе опять же MVC фреймворка RoR - хоть пруд пруди). А главное в ней то, что она не есть сферическая CMS в вакууме, а очень даже на .Net, что требует соответствующего хостинга (только не надо мне про моно - если виндовый хостинг я себе ещё представляю, то хостинг с моно - нет). И аудитория - держатели standalone блогов и выше - достаточно широка и многочисленна. Так что тут будут и длинный хвост и премиум клиенты. Ещё круче они продают  разве что винду для запуска всяких офисов и 1С, но тут уже подвижки разные есть, так что ситуация с этим более неоднородная.
В общем, на такой вот бесплатной, вроде бы, фиговине Microsoft сделает деньги. Этому нужно учится всем тем, кто задаёт вопросы о заработках на Opensource.

22 ноября 2008

Цена линуксов

Вот тут наши горячие головы и чистые сердца спорят на тему того, что негоже брать за срезы обновлений линукса бабло.
Опаментайтес, пан! (ц) Во-первых, любой труд должен быть оплачен. Во-вторых - это же мечта всех опенсорщиков и им сочувствующих - на этом самом опенсорсе хоть шерсти клок.
Был со мной аналогичный случай. Обратился ко мне как-то человек, и попросил закачать что-то из линуксов. Выходила пара DVD или около. Я их засунул в торрент клиент, назначил время. Взял денег ровно за то время, пока канал был занят закачкой этих торрентов, как за аренду. Не думаю, что был неправ в этом случае. И человек, ко мне обратившийся, тоже так не думал. Потому что - какая у него могла быть альтернатива? Пойти в магазин и заплатить за прошлогодный дистр рублей 300-500 (есть у нас магазин такой - выбор достаточно большой но не совсем свежий). Долго и нудно клянчить на форуме местного LUG'а (дистр был какой-то непопулярный). Купить бюджетный анлим и тянуть неделю. Человек предпочёл получить комплексную услугу (о как загнул :) ) - поиск, закачку, прожиг и доставку до места встречи - за что и проголосовал кошельком, вполне разумной суммой. Кажется, в те же самые 200 руб.
А вы бы согласились оплатить такую услугу, буде она бы вам была нужна?

11 ноября 2008

От добра добра...

...не ищут, понял я, как только попробовал ставить Sabayon. Причин попробовать это было две - лень собирать Gentoo и красивости Sabayon из коробки. Причин отказа от идеи одна - при попытке в выборе пакетов добавить k3b инсталлятор притащил выкинутый ранее гном и ещё стотыщмилионов пакетов. Не люблю мусор, тем более что одним инструментом по приборке в Gentoo временно (надеюсь) стало меньше.
Тем не менее, очень удобно из-под Sabayon собирать Gentoo. Музыка, браузер - не скучно, по крайней мере.
В общем, революции не случилось. Остаюсь на генту.

08 ноября 2008

sys-libs/e2fsprogs-libs

Только сейчас понял, почему вокруг гентушники делают круглые глаза и лихорадочно постят в стиле "А! У нас там Пакет! Блокирует!" Докатилось по портежам из ~ в стабильные ветки. И вот то, что блокирует - это ещё ерунда (при гуглении за минуту находится соотв. баг в трекере генты), а вот то, что оно в таком виде уже в стабильных... It's a crap как по мне.

Gentoo Live USB

Если вы, как и я, решили пойти по джедайскому пути и соорудить себе сабж (по этому хауту), то ставьте стабильный ранний syslinux:

eix syslinux
[U] sys-boot/syslinux
Available versions: 1.76 2.13 3.11 3.20 3.31 (~)3.36 (~)3.51 3.52 (~)3.70 (~)3.71
Installed versions: 3.11(01:17:59 08.11.2008)
Homepage: http://syslinux.zytor.com/
Description: SysLinux, IsoLinux and PXELinux bootloader

иначе можете напороться на грабли.
Завтра буду применять эту Силу, но это уже другая история.

01 ноября 2008

Nokogiri, новый парсер

Вот тут мой земляк пишет о выходе Nokogiri. Первой мыслью было - ну отдельно мне парсер не нужен, а вот для web-scraping'а... ну подождём, когда его к WWW::Mechanize прикрутят.
Так вот, один из авторов парсера - автор WWW::Mechanize, так что интеграция не за горами. Я надеюсь.

Год как один день.

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

31 октября 2008

Друзья и работа

Немного мыслей в сторону, возможно, я никому не открою ими нового. Пока не начал, обращаю ваше внимание на тэги и напоминаю, что я мизантроп.
Никогда не работайте с друзьями.
Именно так. Никогда не имейте дел с друзьями, не делайте business. Друзья могут быть отличными людьми, с которыми приятно общаться и пить пиво, но не тогда, когда речь идёт о деле. "Если хочешь поссориться с другом - одолжи ему денег." А если хочешь разочароваться - дай работу.
Для работы нужен партнёр. Это может быть твой начальник или подчинённый, твой сотрудник. И с ними можно быть со всеми в хороших и даже в дружеских отношениях, от этого только нематериальный бонус (простое человеческое общение) к вознаграждению растёт. Но как только вперёд партнёрских отношений выходят дружеские - обязательно будет какая-нибудь напасть. Через неопределённое время. Подчинённый начнёт отлынивать, сотрудник попросит доделать вот это, а то у него завтра свадьба покойной бабушки, шеф попросит завести по дороге записку любовнице. Или это начнёшь делать ты.
И если партнёру ты скажешь: "Эй, какого чёрта?" - то друг тебе ответит:"Но мы же друзья, так?" Что-то одно обязательно закончится. Тоже через неопределённое время после прецедента, но обязательно.
Это не "крик души" или изложение опыта, сына ошибок трудных (хотя и такого рода опыт есть), а лишь наблюдение тендеции, в которой я стараюсь избегать прецедентов. И заключается она в том, что есть некоторое количество партнёров, с которыми я мало дружен (хотя бы в силу того, что я мизантроп) и с которыми хоть завтра возмусь за новый проект, и определённое количество друзей, с которыми я работать не стану. Приведённые выше примеры вымышлены, так что ни на кого пальцем не показываю, кто догадается - молодец.

23 октября 2008

Rails Rumble 2008

На rubyflow.ru рассказывают, что закончился этот марафон и можно ознакомиться с приложениями-участниками. Несколькими днями ранее я именно так и сделал и должен сказать, что подавляющее большинство из них бессмысленны и бесполезны, то есть УГ. Есть парочка полезных потенциально, и одно, от русскоязычной комманды разработчиков, - безусловно, но именно оно, самое интересное, не закончено, увы.

Git и эзотерические локали

Об этом нигде не видел, а сегодня столкнулся в лоб.
Использую на локальной машине эзотерическую локаль KOI8-R, оставленную там сознательно по некоторым причинам. Соответственно и коммит-сообщения получаются в этой кодировке. И если клиент svn это осознаёт и сам делает что надо, то Git'у надо явно указать

git config --global i18n.commitencoding "koi8-r"

В случае же, если уже сделан коммит с сообщением в неправильной кодировке (что само по себе не страшно), push'нуто в репозиторий (что уже хуже) и, самое главное, в таком виде парализует (о ужас) модуль "Хранилища" в redmine, то лечить так:
$ git reset --soft HEAD^
$ edit
$ git commit -a -c ORIG_HEAD

о чём говорит нам git help reset, и слить эти изменения в репозиторий:
git push -f origin

15 октября 2008

web to pdf

Поделюсь-ка я с вами одной хорошей штукой. Есть такое расширение для FF - PDF Download, позволяющее загрузить любую страницу в виде PDF (и что-то ещё, но сейчас не об этом). Преобразование очень точное, гораздо лучше, чем его выполняет браузер. Всю работу делает онлайновый сервис разработчиков расширения, и обидно, что использовать его можно только через расширение под не сильно любимый мной браузер. Так вот - не только, держите букмарклет.
web2pdf
Use case'ов этому можно придумать много, например, сохранить что-то на потом, чтобы в случае хардкорного оффлайна, когда вокруг только медведи с балалайками, было что почитать. Я лично буду использовать, чтобы откладывать материал для дальнейшего прочтения на моей n810.
И вообще, вокруг этого крутятся разные мысли, впрочем, их уже стоит обсудить с разработчиками сервиса :)

14 октября 2008

Youtube в gPodder

Итак, интересные новости, человек, известный в списке рассылки как Justin Forest добавил экспериментальную поддержку Youtube в gPodder. Пока поддерживаются только каналы пользователей. Вот текст его сообщения:

I've added support for YouTube channels to gPodder. They are treated
like normal video podcasts: mp4 files are downloaded and can by
synchronized with a device (previously gPodder only downloaded useless
swf files). It now recognizes links to YouTube user profiles
("channels"), such as:

http://www.youtube.com/user/BritneyTV

.. and converts them to the corresponding RSS feeds (YouTube doesn't
support feed discovery at the moment).

If anybody is interested, you can download the patched version of
gPodder from here:

http://repo.or.cz/w/gpodder/umonkey.git?a=snapshot;h=refs/heads/patches;sf=tgz

If you don't know how to run gPodder from git, read this:

http://wiki.gpodder.org/wiki/Running_gPodder_from_Git#Quicker

I'd like any kind of feedback and suggestions.

09 октября 2008

Seamless Software Upgrade v4.2008.36-5

Seamless Software Upgrade v4.2008.36-5 is out! at Internet Tablet Talk
Новость так долго промариновалась в Starred Items, потому что всё хотелось добраться до дома и толком сделать backup, и только тогда пробовать, ибо уже сам текст новости настораживает.
Пришёл, сделал. И правильно я соломку подстелил, не больно было падать. SSU привело в моём случае к циклической перезагрузке девайса, лечение - выдирание аккумулятора с целью выключить и перепрошивка.
Делайте выводы.

07 октября 2008

gPodder under Gentoo

Yesterday Thomas Perl and gPodder team released gpodder 0.13.0 "A Thing About Machines", but last gPodder ebuild in portage tree is 0.12.1. But this ebuild fits to 0.13.0 flawlessly, so you can copy it to overlay and use(you must add /usr/local/portage/overlay as part of $PORTDIR_OVERLAY in /etc/make.conf):

>mkdir -p /usr/local/portage/overlay/media-sound/gpodder


>cp /usr/portage/media-sound/gpodder/gpodder-0.12.1.ebuild /usr/local/portage/overlay/media-sound/gpodder/gpodder-0.13.0.ebuild


>ebuild /usr/local/portage/overlay/media-sound/gpodder/gpodder-0.13.0.ebuild digest

>emerge -av gpodder

Happy podcatching!

Mobile devices power management

Сегодня заметил одну очень показательную ситуацию, в продолжение моей тирады про проблемы maemo (таки это ещё не всё и будут продолжения).
Суть в том, что надолго уехал из дома (несколько суток), при этом взял с собой HP iPaq h2210 и Nokia n810. Для первого зарядку не брал, понеже зело тяжела и неказиста во-первых, и понадеялся на правильно реализованную suspemd to ram (далее s2r, режим, в котором отключается всё кроме памяти ради энергосбережения и оставляется память ради сохранения оперативных данных) во-вторых, да и использую его исключительно как плеер, то есть по дороге туда пару часов послушать и обратно так же, в-третьих. Для второго взял, ибо карман не тянет, а s2r в n810 нет, и использую я её активно.
В итоге, прожив (наверное) сколько-то в анабиозе h2210 скончался. Дома, будучи воткнут в зарядку, продемонстрировал hard reset (представьте себе rm -rf / с последующей переустановкой системы). Хвала бэкапу, восстановил до актуального состояния за 10 мин., но это ни разу не заслуга девайса или ОС.
n810 же при низком заряде выключается (традиционным shutdown'ом), то есть все данные сохраняются. При попытке включения в таком состоянии девайс показывает лого и снова отключается, давая понять, что он жив, но голоден. Пока завтракал - зарядил, и поехал по делам.
Вывод - при совмещении преимуществ обоих подходов получаем идеальный. Очень жду s2r в Diablo, тем паче что в ядре Linux эта возможность есть.

04 октября 2008

Barcodes, vCards & bluetooth

На хабре обсуждают технологию обмена визитками при помощи фотографирования двухмерных графических картинок с закодированными в них данными. Технология понятная, в каждом супермаркете работает по миллиону раз на дню. Так вот, пока каждый (именно каждый, а не 60-70-80%) телефон с камерой не будет изначально иметь этот софт (и для этого не надо будет проходить дуболомную регистрацию), позволяющий в 3-5 нажатий запомнить новый контакт (а можно и с фотографией тут же), всю эту красоту ждёт та же участь, что и передачу карточек через bluetooth в винмобайл и прочих - из-за дубовой реализации (а блютус есть в гораздо большем количестве устройств, даже в относительно простых телефонах вроде моего бывшего moto razr V3) забытой всеми. Вот вы знаете, что ваш телефон может принимать-отправлять контакты по BT? А он может.
Так что ещё года 3-4, а то и все 5 (впрочем, если делать как с блютусом - то вообще никогда), если производители озаботятся, а потребители полностью заменят парк имеющихся аппаратов (можно заодно и 3G заюзать, какая оказия) это будет развиваться.

03 октября 2008

Git branch in zsh

Увы, ребята из novemberain зачем-то убили свой сайт, так что ссылку на заметку Show git branch in a command prompt давать не буду, кому интересно - расшарил в гугльридере (хвала кешу гугла). А рассказывалось там, как выводить в приглашении командной строки bash текущий бранч гита.
Захотелось мне того же в zsh, а не тут то было. Штука в том, что prompt expansion выполняется в zsh на старте (попробуйте засунуть туда $(date) и убедитесь ) за исключением 'prompt escapes'. С другой стороны в zsh есть всякие специальные функции типа precmd (выполняется перед выводом prompt), а в качестве эмулятора терминала я использую yakuake, в заголовок вкладки которого можно напакостить написать всё что мне нужно. Так и получились следующие строки в конфиге zsh:

69 function precmd(){
70 GITBRANCH=`git branch 2>&1 | grep '*' | awk -F' ' '{print $2}'`
71 if [ ! -z $DCOP_YAKUAKE_SESSION ]; then
72     [ ! -z $GITBRANCH ] \
73         && dcop yakuake DCOPInterface slotRenameSession $DCOP_YAKUAKE_SESSION "git:$GITBRANCH" \
74         || dcop yakuake DCOPInterface slotRenameSession $DCOP_YAKUAKE_SESSION `pwd | sed "s,^$HOME,~,"`
75 fi
76 }

UPD: Интересная штука - в PS1 подстановка переменных также выполняется на старте, а в RPROMPT перед каждым выводом. Так что в дополнение к предыдущему методу можно ${GITBRANCH} куда-нибудь притулить в RPROMPT, чтобы видно было в любом терминале.

01 октября 2008

Проблемы maemo в средней полосе.

В течение некоторого времени являюсь владельцем nokia n810. И в процессе использования проявляются как положительные моменты, так и откровенные fail'ы, достойные failblog'а. О них и речь. Не обязательно проблемы относятся к самой платформе, некоторые могут быть специфичны для девайса, порядок не связан с приоритетом.

  1. Джойстик внутри выдвижной части. Это неудобно. И место для него снаружи есть. При правильном подходе (если разместить его под логотипом нокии, к примеру) можно конструктивно повысить удобство того же серфинга и сократить количество выдвижений клавиатуры, тем самым повысив надёжность всего устройства. При таком размере и разрешении экрана браузер к тому же крайне сложно контроллить пальцами.
  2. Индикация раскладки. Под абсолютно бестолковую панель с индикатором тратится экранное место. Вариантов море - цвет заголовка окна, апплет в трее, LED индикатор.
  3. Расположение сенсора освещенности. Когда девайс держишь закрытым и за бочка, постоянно перекрываешь его пальцем.
  4. Привязки клавиш. Взяли и выкинули F1-F12. Ладно, в эмуляторе терминала я их добавил. Так половина из них отвечает за что-то другое - полноэкранный режим, громкость и пр. Внешние клавиатуры курят?
    В ту же сторону. Куча архиважых для линуксоидов символов выкинута в прекрасные дали, тот же пайп и табуляция. Нафига тогда было включать эмулятор терминала? Ведь сила шеллов в пайпах и автокомплитах!
  5. Лонг-тапы. Как бы ни много было поводов ругать WinMobile, Long-tap там настраивается, отлично работает и используется везде, к нему привыкаешь моментально. Он органичен. Здесь же он кривой, неудобный и нафиг не нужен разработчику в таком виде. Доходит до того, что контекстное меню проще сделать на одинарный тап (gpodder).
  6. Фееричный фэйл. Вчера задумал красиво расположить файлы на встроенной карте с помщью симлинков. Так вот встроенная карта, до которой руками не добраться, в устройстве под управлением линукс отформатирована в ФС FAT!
  7. Отсутствие нормального (даже стороннего) PIM. Всё, что есть - убого. Даже встроенные контакты по-своему недоделаны и убоги. Девайс, конечно, изначально не был предназначен для какого-либо business применения, но с такой дырой он становится непривлекателен вообще никому.
  8. Довольно странные последние обновления (Diablo). Баг с раскладками в microb, субъективно ставший неудобным менеджер сооединений и пр.

Может быть, что-то забыл. Кому-то сказанное выше покажется мелочами, но по мелочи копится общее отношение к устройству. Должен отметить, что сумма негативных впечатлений от использования WM была на порядок больше. В данной заметке не рассматривается userspace софт.

29 сентября 2008

Blog this!

Чтобы не забыть.
Есть такая штука, как BlogThis! для Blogger'а. Кроме того, оттуда выковыривается ссылка на сам редактор, который удобно засовывать в сайдбар, плазма апплет и вообще куда угодно. Единственный минус - не знает про тэги.

16 сентября 2008

Terra cuculus 2

Убрали дурацкие кнопочки, засунули рекламу, занимающую места больше, чем сама новость. What's next? Ждём поводов для свежих рантов.

15 сентября 2008

Terra cuculus*



Обнаружил такую штуку - большое количество непрочитанных items в фиде "Статьи Компьютерры". Оказывается, добавили в фид пару кнопочек, для удобства пользователей. О, думаю, дай попробую, ради чего это всё. Результат на скриншоте.
WTF, dude?
--
*Земля дураков (лат.)

11 сентября 2008

Блог рубиста

Стараюсь держать руку на пульсе блогосферы, пишущей о Ruby, и вот давеча нашёл свежий блог одного рубиста. Пишет хорошо, читать стоит.

09 сентября 2008

vCard v 2.1 contacts import under symbian

Сбылась мечта идиота, теперь в арсенале и телефон тоже nokia n серии. В связи с чем встал насущный вопрос перенесения контактов из старой связки (Motorola + HP) в новую (n810 + n70). Первым, довольно простым шагом, было перенесение всего в kaddressbook (vCard 3). В n810 книжка в таком виде запихнулась на ура, с картинками и всем чем можно. А симбиан, мало того, что понимает только 2.1, благо в таком формате из адресной книги KDE тоже можно экспортировать, так и его понимает весьма специфично. А именно, по последовательности "\n " (<символ конца строки><пробел>) обрезает поле (или даже весь контакт, не проверял). А значит, требуется эти последовательности вырезать, что и было проделано в vim. А дальше BestvCards и счастливый финал.
Кстати, такой регэксп на чём-то пишется/работает из стандартных тулзов?

28 августа 2008

Норма́льные алгори́фмы Ма́ркова

Как-то, маясь бездельем, читал про применение цепей Маркова (они же Норма́льные алгори́фмы Ма́ркова) для reduce в какой-то документ-ориентированной БД. И вспомнил, что однажды сетовал на их отсутствие под рукой. Раскрыл таблетку и написал:

 1 class Chain < Array
 2 def reduce(input)
 3   each do |link|
 4     while !input.gsub!(link[0],link[1]).nil?
 5       return input if link[2]
 6     end
 7   end
 8   input
 9 end
10 end
11 #Sample
12 c=Chain.new
13 c << [/aa/,'a'] << [/bb/,'b', true] << [/cc/,'c']
14 puts c.reduce('aacccabbaabbbb')

Для простоты link[0] есть L, link[1] есть D, link[2] есть конечность правила.
Больше кейвордов, чем кода, ей б-гу.
PS.: Да, на maemo есть ruby.

defun

Сегодня гугльридер порекомендовал мне Defun. Sёmka, привет!
PS. Я туда подписан, но, видимо, как-то по-другому.

Репозитарии для Maemo

Коротко, чтобы закрыть тему:
http://www.gronmayer.com/it/
http://www.permlug.org/node/3715/

08 августа 2008

n810 и ББ - узы братской любви

Связать ФС девайса и большого брата необходимно, это аксиома.
Связать по проводам - не получилось, да и не мой метод, с девайсом я привык валяться на диване/в ванне, кроме того в районе стола количество проводов и так зашкаливает.
В общем, заклинание против этого - sshfs/samba/NFS/whatever, тем паче что таблетка вообще рассчитана на беспроводную сеть. Ни виндузятской, ни никсовой сети у меня отродясь не было, а sshd запущен и на ББ и на таблетке, так что решение было однозначным.
Немного нетривиальны опции монтирования в случае разных локалей девайса и ББ:

/etc/fstab
sshfs#user@192.168.2.2:/ /home/phoenix/n810 fuse modules=iconv,from_code=UTF-8,to_code=KOI8-R,users 0 0

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

Имя файла при печати из Opera в PDF

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

 1 #!/bin/sh
 2 WATCH_DIR='/home/phoenix/download/nit'
 3 opera -notrayicon &> /dev/null &
 4 pid=$!
 5 #waiting for opera window
 6 sleep 15
 7 #getting opera's window id on start
 8 windowid=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5)
 9 cd $WATCH_DIR
10 #check if opera's pid exists
11 while [ `ps aux | awk '{print $2}' | grep $pid | wc -l` -gt 0 ]; do
12     #waiting for writing file, only 15 sec, then recheck
13     inotifywait -t 15 -q --timefmt '%d/%m/%y %H:%M' --format '%T %f' \
14         -e close_write $WATCH_DIR | while read date time file; do
15         #expressing target filename via current webpage name and trimming noisy "- Opera" suffix
16         name=$(xwininfo -id $windowid |awk 'BEGIN {FS="\""}/xwininfo: Window id/{print $2}' | sed 's/-[^-]*$//g')
17         mv ${file} "${name}.pdf"
18     done
19 done

Недостатки метода - не работает с множественными окнами оперы, требует пакет inotify-tools.
Преимущества - недеструктивность (не требует лезть в кишочки, тем более, что сорцов нет).

05 августа 2008

Nokia n810

Итак, неделю назад пришел девайс. Пока суть да дело, завёл сеть, немного обжил, связал с ББ узами sshfs и стал потихоньку делать выводы.
У платформы неожиданно есть существенные минусы.
1. Браузер. {вырезано цензурой} Очень слабое звено. Кастрирован до неприличия, не умеет Google Gears (равно как и вообще стандартные расширения), существующий билд GG зело старый. Остаётся ждать релизов чего-то не такого {вырезано цензурой} от мозилы. В качестве альтернативы есть Links и Lynx, для мобильных версий сайтов самое оно.
2. Железо. Без небольшого шаманства не работают флешки и прочее USB, ибо режим не USB-host по умолчанию (хотя только ради него и стоило эту дырку делать). Даже после шаманства не работает как надо мышь (об этом стоит написать отдельно), впрочем, она там не сильно нужна, даже если использовать девайс как большой компьютер.

Однако всё это поддаётся исправлению, правда, зависит это от самих облажавшихся гигантов - нокии и мозилы.

Немало и плюсов. Не вдаваясь в мелочи:
1. Настоящий Debian-based Linux. Для меня очень весомый плюс.
2. Приложения! Тысяча и одно с доброй дюжиной крупных и сонмом мелких репозитариев. Для любителей - есть и Ruby и Python. Разработчик не останется скучать и может хакать прямо на девайсе. Все перечислять бессмысленно.
3. Вполне сложившееся комьюнити. Как обычно - англоязычное. Делится на ньюбов - просто пользователей, и матёрых линупсоедов, купивших девайс "на похакать".

Итак, завожу новый тэг n810 и пишу про девайс и всё, что с ним связано. Посты уже зреют.

04 августа 2008

Ещё патчи в gpodder

Ещё 2 патча ушли и были смержены Томасом в gpodder. Один добавляет статистику в CLI:

bin/gpodder -S
I Free space on device /mnt/usb1/podcasts : 196.72 MiB
I Size of episodes to sync: 343.31 MiB
E Need to free at least 146.59 MiB more

Другой фиксит ещё один кусок кода, приводящий к зависанию синхронизации устройства при работе gpodder в неюникодной локали.
Первые шаги с git. Пока не нравится обилием способов выстрелить себе в ногу.

03 августа 2008

Dlink DWA 140

Потребовалось срочно раздать инет с компа (в перспективе - с любого) на один девайс, девайс умеет wi-fi. Пролистал прайсы местных магазинов, увидел сабж, пошукал по гуглю, как оно работает под линем. Нашёл на каком-то убунтушном форуме хауту по настройке. Купил, с поправкой на генту завёл (via ndiswrapper), сделал нат-маскарад. Работает. Попробовал то же организовать под виндой - и не смог. Бестолково там как-то всё. Завелось на минуту и отпало.

26 июля 2008

Про логичность

Крайне трудно инженеру смотреть фильмы, особенно пестрящие логическими нестыковками, особенно если привык не относиться к таким фильмам серьёзно.
Был давеча на Хэллбое. Факт номер раз - во время длительного поединка с Моргуном, лупившего Хеллбоя по морде здоровенным металлическим кулаком, единственное, что произошло с красным - кровь из носу пошла. Факт номер два - когда какой-то человечишка кинул в красного камень, тот заработал серьёзную царапину.
Про разные перемещения во времени интересно смотреть, постоянно сценаристы временные парадоксы создают.
Зато смотреть на красивую, чёткую, логичную схему, как в Иллюзионисте, например, - одно удовольствие.

Фильтрация информационного потока. Тэги в RSS.

Хочется знать всё и быть в курсе, но времени на всё может и не хватить. Перестаём ходить на сайты и читаем всё через RSS. Со временем объём и качество (соотношение сигнал/шум) этого "всего" перестаёт устраивать. Фильтровать!
А теперь помедленнее. Всё дело в том, что нормальные блог движки умеют генерировать RSS для каждого тэга/категории, но несознательные блоговладельцы (вроде меня) дают один фид, зачастую пропущенный через FeedBurner, в который валится весь контент блога. Читать всё лень и некогда, поэтому:

  • Wordpress - к ссылке на нужную категорию добавляем /feed, например так http://blog.alno.name/cats/ruby/feed
  • Blogger - (blog name)/feeds/posts/default/-/(tag name), например http://eveel.blogspot.com/feeds/posts/default/-/ruby
  • Mephisto (blog name)/feed/(tag name)/atom.xml, например http://blog.fiveruns.com/feed/rails/atom.xml

Пока что это всё, что мне успело потребоваться, можете дополнять своими вариантами.

24 июля 2008

Разработка... документации

Заведите отдельного сотрудника для ведения документации продукта. В идеале - еще одного для тестирования продукта перед выпуском. Программисты должны писать код. Если они занимаются тестированием и написанием документации - у них плохо получается и то, и другое, да еще и не удается сосредоточиться на разработке.

Аминь. Взято у dekart'a.
Программеры не видят своих багов, они их пишут. И объяснить в документации очевидные для них вещи - не могут, ведь объяснять очевидное довольно сложно.

13 июля 2008

Про запуск Vim

Решил раз и навсегда упорядочить запуск вима. Для начала xhost + local:root (ну хочется и руту юзать иксовый клипбоард и запускать гуёвый вим). Потом враппер:

1 #!/bin/sh
2 if [ -z $DISPLAY ]; then
3     vim "$@"
4 else
5     gvim --servername "`whoami`$DISPLAY" --remote-tab-silent "$@"
6 fi


Потом запихать его в EDITOR и спать спокойно.

12 июля 2008

6 Optimization Tips for Ruby MRI

Отличный пост про оптимизацию руби кода для выполнения на MRI. Однако, один из советов одно время обходился мне граблями, примерно такого рода:


>> "barbarbarbar".gsub(/buz/,'foo')
=> "barbarbarbar"
>> "barbarbarbar".gsub!(/buz/,'foo')
=> nil

То есть мало того, что данные методы ведут себя по-разному относительно исходной строки, они и возвращают разный результат, если в строке нет заменяемой подстроки. Так что слепое следование этому совету может поломать существующий код, широко использующий method chaining. Я категорически против этого конкретного примера данного совета, хотя совет вообще замечателен и мною широко применяется в жизни.

07 июля 2008

Ruby 1.9.1 && ISO

Чтение новостей наталкивает на мысли, что пора уже активно переходить на 1.9.

03 июля 2008

15 Questions to Ask During a Ruby Interview

Судя по опроснику, я вполне тяну на senior ruby developer.

30 июня 2008

Что в имени тебе...

Вот тут в комментарии к Сёмкиному (шикарному, кстати) введении в Io отметили, что имя плохое у языка.
Имя на самом деле отвратительное. И, вообще говоря, это не единственный пример. По запросам с моим любимым руби приходит порно и драгоценности, поскольку Ruby одновременно и имя и драгоценный камень. Да и один из его родственничков не лучше - Sapphire. У php расширение исходников совпадает с названием, при этом индексируется, в результате вы можете получить hooynya.php вместо искомого. Java вообще и сорт кофе и остров.
Ну вот как-то всё так, может даже ещё ужаснее, сильно не вспоминал.

27 июня 2008

Защитились на отличненько!

Вчера состоялась защита дипломов. Мы с Таппком защитились на отлично, судя по отзывам, были лучшими на комиссии. Тап, тебе за всё огромное спасибо.
В свете этого что-то может произойти с блогом, а может и не произойти.
Итак, может
(не) появиться больше постов ruby/ror тематики (есть пара предложений поработать в этом направлении)
(не) прекратиться на какое-то время постинг (отец грозится ящиком коньяка)
(не) продолжиться работа над gPodder (может не хватать времени)
(не) закончиться RDBMS-related тематика (проект, в котором я активно хардкодил на PL/pgSQL не будет более моим основным)
Точно не прекратится поток прочей околоIT чуши, которую я тут обычно несу в долгий ящик.

24 июня 2008

OpenOffice? Нет!

Формат ODF победил
Open Source оказался сильней
Кому нужен ломтик OOXML'я?

О-о, мой опенофис
Много тормозов и ява машина
О-о, мой опенофис
Ведь он на плюсах, зачем там машина?

Формат ODF победил
Ликует ЛОРовский народ
Кому нужны форматы от Майкрософта?

О-о, мой KOffice
Когда его допилят, все будет отлично
О-о, мой KOffice
Хотя бы открою ODF им прилично
--Voker57 (linux.org.ru)

Это было злорадство. А теперь факты. В OOo 2.4.0(linux) был подготовлен весьма увесистый документ (в родном odt формате) страниц на 200. Открыт и отредактирован в 2.4.1(windows). Открыт в 2.4.0 (linux) снова. Все формулы сжались по вертикали раза в 4, некоторые графические объекты разъехались. Тем самым загубив кучу времени.
Это, чёрт побери, минорные версии, а не MS Office 2003 и MS Office 2008, об обратной несовместимости которых столько кричали! Это, мать их, минорные версии, работавшие над своим родным трижды открытым форматом файла!

19 июня 2008

Ola Bini: Testing Regular Expressions

Вот задался чувак таким вопросом - как тестировать регэкспы, раз всякие тестовые фреймворки тут бессильны.

В комментах несколько разумных мыслей - вынести в отдельный модуль, завести отдельную спеку... А тестить-то как?

Всё время в голове крутилась фраза

Benchmarks?
let your users do it.
-Scaling Twitter

И в комментах похожую мысль всё-таки высказали:
Use a good sample of real examples for both positive and negative cases. Add any terms that fail in production to the tests

Ведь как ни выдумывай, первые куски тестовых текстов будут синтетическими. Так пусть реальный мир сам тестит, автоматически пополняя объём тестовых текстов. Правда, какое-то время это придётся отслеживать мозгом, относя тестовый текст к положительным или отрицательным проверкам, но обычно это не проблема, поскольку часто с помощью регэкспов мы мытаемся формализовать то, что в голове выражается очень простыми словами. Главная проблема в том, что
...переход от неформального к формальному неформален
Соловьёв А. Е.

а значит мы не можем формально тестировать регекспы, но , по крайней мере, можно сильно упростить себе жизнь, автоматизировав сбор test case'ов.

14 июня 2008

Обидели Бэкуса.

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

13 июня 2008

Перевод интервью.

Томас заметил на хабре репост моего интервью и побудил меня перевести его, поскольку из перевода Google translator понял не всё. Так что читать/править тут, это чуть поправленный перевод от гугла.

12 июня 2008

new iGoogleReader

Google Reader для iPhone, представленный не так давно, обновился. Как он выглядел до этого, можно понаблюдать на скриншоте в анонсе, сейчас добавилась возможность Share with note и Email, ссылка на оригинал статьи переехала в заголовок, а Keep unread зачем-то убрали (что очень нехорошо, хотя для того, чтобы не забыть про новость, есть звёздочки).

11 июня 2008

Изобретательность

Хоть в курсе Моделирование Систем рассматривается технология изобретения, чёткое следование пунктам которой позволяет изобрести что-то необходимое исследователю, изобретательность всё-таки свойство ума. Недаром мы знаем китайские пельмени, порох, матрёшки и компас, русские радио, лампочку, ракеты и переодическую таблицу элементов, недаром Задорнов русских продёргивает в своих выступлениях. Определённым нациям это свойствено.
Выглянул в окно - и увидел чудесное. К экскаваторному ковшу, размещённому на тракторе, строители приспособили трос и тягают бетонные блоки как краном.

Engine Yard Express

Вот тут вот отличную штуку раздают. По сути - виртуальная машина, укомплектованная для разработки на RoR и Merb (впрочем, доставить гемов никто не мешает).
На самом деле Engine Yard так рекламирует свои слайсы, отдав на пробу полностью функциональный аналог, лишённый главных преимуществ. Однако побочных применений можно придумать множество.

Браузерные новости

Новостей две, обе замечательные, но разного размера.
1. Opera 9.5 RC - Prepare for launch. Тут и обьяснять ничего не надо, только качать.
2. Появился на свете ещё один браузер - Foxkit. В двух словах - KDE4 + QtWebKit. То есть что-то вроде Midori, про который я уже писал, но уже "по-нашему, по-бразильски!" Пока он в версии 0.0.1, то есть никаких активов, но горы потенциала.
С другой стороны, с такими зависимостями можно обойтись и конкьерором, тот тоже умеет WebKit. В общем, подожду, когда на моём десктопе окончательно приземлится KDE4, может Foxkit и станет моим вторым браузером.

07 июня 2008

Ещё про работу с образами дисков

Вот как-то я писал, как можно мигрировать ФС виртуальной машины из-под VirtualBox на реальное железо (впрочем, вообще из виртуальной машины наружу). Недавно опубликованная статья является отличным дополнением в плане работы с произвольной конфигурацией разделов виртуального диска.

Плюрк

Это этот... как его?.. Плюрализм!

Вот там в правой колонке внизу появилась ещё одна хреновина - виджет с плюрка. Там же можно меня зафрендить. Тыкайте туда, объяснить словами, что это и зачем, трудно.
Меня неоднократно звали на твиттер, я сам регался на других тлогах - всё не то. Этот сразу захотелось пощупать и прочее. Что примечательно, я в этом был сильно не одинок.
Сервису много чего не хватает, надеюсь, это дело времени. Что там точно есть - это отличная идея. Теперь осталось добавить мощностей (видимо, из-за них IM бот отваливается всё время), нормальной резиновой вёрстки, совместимости с браузерами, и, главное, API.
В общем, я уже оценил. Зову вас.

Этот новый новый скин

Ну вот, буквально вчера выпустили нечто типа превью будущего интерфейса оперы, и уже сегодня выпустили новый билд, учитывающий пожелания пользователей ("300 skin comments in a day!").
Практически всё, что мне не нравилось - отмечено к изменению. Иду пробовать.
PS: он мне определённо нравится, хотя ещё есть что улучшить. Например, контрастность иконок.

06 июня 2008

Кто такой Maglev

Для въезда в тему рекоммендую заметку, всё хотел подобное написать, да руки не доходят сейчас не до чего.

20% waste of time

Вот в гмайл всякого разного добавили.Какое-то оно бестолковое всё.
1. Хорошо
2. Без разницы. Мне хватает просто звёздочек.
3. Без разницы
4. Как представлю, сколько это потребует ещё тормозного javascript'а, страшно становится.
5. Они и так как в Vim'е
6. см п 4.
7. Без разницы
8. Без разницы, использую стационарный клиент.
Итого только одно действительно полезно. Что-то тут не то...
Полез в новинки, добавил кастомную дату-время и быстрые ссылки. Больше ничего полезного там нет.

05 июня 2008

История

Вот тут все историями меряются, для zsh этот трюк выглядит так (ну и моя хистори заодно)



 1 >cat ~/.zhistory|cut -d ';' -f 2- 2>/dev/null| awk '{a[$1]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head
 2 769 cd
 3 148 svn
 4 147 dcop
 5 131 cat
 6 88 grep
 7 85 W
 8 70 checkout
 9 61 lsa
10 61 killall
11 59 htop
12
13 >alias | grep W
14 W='wget -c -t 0'
15 > alias | grep lsa
16 lsa='ls -l --color=always --classify'
17 > alias | grep checkout
18 checkout='cd somedir; svn co somerepo'

Читая вслух. Метапрограммирование в руби.

Найдено в черновиках.
А вот наткнулся сейчас на презентацию по метапрограммированию в Ruby.

In fact, classes are just instances of Class bound to a constant. Their special classyness is hidden deep in the C code of Ruby which adds to the overall confusion when trying to grok the tiny details of Ruby’s OO.
...
It’s just that the things used in the C code to make Ruby work don’t map conceptually very well to Ruby’s high-level abstractions. It really doesn’t matter most of the time, through.

Тем не менее хочется стукнуть кулаком по столу и воскликнуть:"Доколе!", поскольку одно время упирался в такие места довольно часто.

Подчёркивания и красота

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

04 июня 2008

Google Reader, ещё -2 в карму

Недавно заметил, что у гугльридера ещё одно странное появилось, странное заключается в том, что Starred && Shared Items, если их застаррить или зашарить в Extended View, не отмечаются прочитанными при прокрутке. Страшно раздражает, дополняет мой список недостатков Google Reader.
Ещё одна не совсем понятная штука эти новые заметочки, которые "Share with note". Все вокруг сразу стали про какую-то социальность говорить. Нееет, вот если бы с помощью этого можно было обсуждать новости, и с каждой новой заметкой новость бы всплывала и можно было бы ответить на комментарий - вот это была бы социальность. А так - фигня какая-то.

03 июня 2008

gPodder и я в интернетах

Вот мы всё-таки пересеклись с Рахимом ака freetonik и он меня немножко поспрашивал, а я ему немного поотвечал про gPodder. Теперь меня ещё и в лицо знают на хабре Кстати, можете клюнуть в карму меня и его. Заодно можете подписаться на его замечательный блог о подкастинге.
Ждём-с несвежих помидоров.

01 июня 2008

Fucking nigga!

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

30 мая 2008

Opera && Gears

Opera extends Gears support
Вот прямо так и вижу, как благодаря этому наконец-то стану гугльридер читать в дороге...

27 мая 2008

Снова про кривизну мира.

Вот однажды привычно плевал ядом в файерфокс, а сегодня такую же картинку на том же месте мне выдал вебкит.

21 мая 2008

VerveEarth

Вот однажды SolarWind писал про VerveEarth, да и давно читаемый StraNNicK уже там.
А сегодня мне по этому поводу захотелось воскликнуть словами старого советского анекдота: "Рабинович! Я слышал, вы в партию вступили!" Ибо свалилось мне в ящик письмо с предложением вступить тоже и чудесным футером:

*This message is an unsolicited request that you join VerveEarth.com. Verveearth will only contact you at this email once in this regard. You can opt-out of future communications from VerveEarth by clicking the following link:

и ссылкой для отписки.
В связи с чем сразу несколько поводов закипеть.
1. Это уже спам.
2. Нафига мне ещё один большой брат.
3. Мой блог вообще не имеет никакого отношения к своему и моему географическому расположению.
4. Я чёртов мизантроп.
Так что вертел видал я в гробу этаких непрошенных стартаперов.

15 мая 2008

Консольности

Нашёл тут в собственных Starred Items ссылочку на пост про лучшие версии любимых консольных тулз для nix. От двух радостно визжа пускаю пузыри, всем остальным предпочитаю что-то другое.


ack
Даёшь рефакторинг! Идеальный вариант grep'а применительно к исходникам. Игнорирует версии, временные файлы, (не) видит файлы определённого языка (вроде все языки, на которых я пишу, покрыты). Совместим с грепом. Слов не хватает, такая прелесть.

htop
Опять радость. Сегодня по дороге слушал подкаст "L-talks"(да, вас слушают до конца, хотя в третий раз тематика этого опроса приелась), в котором упоминали про выход новой версии. Пользуюсь им очень давно, наконец-то вернули переключение номера отправляемого сигнала с цифровой клавиатуры, теперь послать kill -9 снова стало просто и быстро. В целом удобнее, нагляднее, лучше.

String!=Array и уникальность

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

'asdasdadsadasdaffw'.split('').uniq.size

Сомнителен способ разбиения строки в массив. Ведь это поиск и только потом разделение. Стандартный метод to_a запихивает всю строку в один элемент массива (что довольно странно согласуется со способом адресации элементов строки подобно массивам, например str[5]). Можно итерироваться по строке, как по массиву, и складывать букавы во временный массив и считать, но бережный к кодировкам метод each_char есть только в 1.9 версии.
Больше всего удивляет именно to_a. Наводит на мысли об отсутствии единого дизайна. Или дыру в моей голове.

12 мая 2008

Мужикальная пауза

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

Awk: панк
С: классический хард-рок
C++: heavy-metal
Ruby: брит-поп, nu-metal
Shell: русский рок

06 мая 2008

midori 0.18

Тихо и незаметно обновился браузер midori до версии 0.18, что делает меня невероятно счастливым, гладким и шелковистым, и вот почему.
Midori - самый простой и идейно правильный способ использовать движок webkit на Linux с минимумом зависимостей. Никакого гнома, как в случае с эпифани или толстой библиотеки, как с Qt 4.4. С другой стороны большой минус - проект сырой и пестрит недоделками. Так вот в версии 0.18 закрыли самую раздражающую меня - размер шрифта теперь можно менять.
А с чего такая страсть к webkit'у? Потому что это единственный движок, который правильно и быстро умеет показывать Google Reader. Будем честны - Firefox - никудышный и медленный сам по себе браузер, умеющий тормозить на ровном месте, Опера, хоть и быстра и точна в рендеринге, на Google Reader смачно садится в лужу по обоим параметрам. Так что midori - идеальный браузер-для-Google.
Ждём поддержки куков и (proxy|cache). Но это уже удобства.

03 мая 2008

Смените ваш Firefox на браузер...

Вот тут почти вышла Qt4.4, и в changelog'е тролтековцы льют бальзам на моё сердце:


**********************
* A NOTE ON BROWSERS *
**********************

Please note that Firefox 2.0.0.13 does not display significant portions of
this page. Please use IE, Opera or Safari to view this URL instead.

Грамотность мата

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

25 апреля 2008

nxfree && nxclient

Замечательно. При включении USE флага ствится клиент nxclient, который блокирует сервер. Первый раз вижу такой бред:

[0:0]init.d> E -av nxserver-freenx
These are the packages that would be merged, in order:

Calculating dependencies... done!
.....
[ebuild R ] net-misc/nxserver-freenx-0.7.2-r2 USE="arts nxclient* -cups -esd" 0 kB
[ebuild N ] net-misc/nxclient-3.2.0 3,773 kB
[blocks B ] net-misc/nxclient (is blocking net-misc/nxserver-freenx-0.7.2-r2

Что-то не то творится в датском королевстве. Хорошо хоть, на машине, на которой предполагается запускать клиента, стоит убунту.

22 апреля 2008

Udev usb-flash automount

Организовал монтирование флешек с помощью udev + /etc/fstab. Причин для такого подхода несколько:
1. Ужасный экспириенс от демонов автомонтирования в suse (и ещё более ужасный - от mandriva)
2. Любовь к юниксвею и бритве Оккама
3. Особенности опций mount (8)
4. Я отставший от жизни маргинал и не знаю, как это делается в правильных остальных дистрибутивах
Реализуется всё один правилом для udev:


1 kernel=="sd[a-z]", name="%k", symlink+="usb%m", group="users"
2 action=="add", kernel=="sd[a-z][0-9]", symlink+="usb%n", group="users", name="%k"
3 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/mkdir -p /mnt/usb%n"
4 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/sed -i '$a\/dev/%k /mnt/usb%n vfat rw,noauto,noexec,nodev,noatime,users,iocharset=koi8-r,codepage=866,uid=1000,gid=100 0 0' /etc/fstab"
5 action=="add", kernel=="sd[a-z][0-9]", run+="/bin/mount /dev/%k"
6
7 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/umount -l /dev/%k"
8 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/rmdir /mnt/usb%n"
9 action=="remove", kernel=="sd[a-z][0-9]", run+="/bin/sed -i '/\/dev\/%k.*/d' /etc/fstab"

идея которого проста - при появлении устройства создавать для него строку в /etc/fstab (потому что только так можно заюзать опцию users, позволяющую омонтировать устройство кому угодно, а не только руту, от имени которого оно будет смонтировано udev'ом) и монтировать, при извлечении - удалять строку.
Юзабельность - отличная. Само монтируется, при наличии нормального DE можно добиться создания ярлычков и открытия окон, легко отмонтируется (из трея например штуками типа kwikdisk).

Пугливый питон

File "/usr/lib/python2.5/encodings/koi8_r.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position 19: character maps to

Знакомо? А всё потому, что какой-то имбецил решил, будто мне, как пользователю, будет очень приятно, если программа, автор которой не подозревает о существовании кодировок, отличных от utf8, будет валиться из-за того, что стандартный модуль написан по принципу юнит-теста "Fail first".
А вот ежели заменить в этом пресловутом koi8_r.py errors на 'ignore' (то есть независимо от того, как предполагает это делать разработчик, игнорировать все ошибки), то всё работает (грязный хак, ибо накипело). "Выполняется любой ценой", что и есть, мать их, правильное поведение для пользовательского приложения.
Вот представим себе ушастого, вчера оторвавшегося от подола матушки-винды, пользователя. Запускает он программу, а там такое. Плюнул, ушёл. Или полез докапываться до истины, написал разработчику. Тот ни в зуб ногой, типа моя твоя не понимайт. И он таки прав, у него такая ситуация принципиально не возникает, потому что он, например, говорит на iso-8859-1. Плюнул, ушёл.
Ненавижуидиотов.

16 апреля 2008

Про GIMP

Второй раз уже в ридере пробегает новость (вторая - вот эта, первую уже потерял) заставляющая вспомнить байку от sdfgh153:

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

А вы говорите, фотошоп. Отличная тема для спекуляций, но все они сводятся к моей любимой фразе - все зависит от круга задач.

Сайт для расширения сознания

Категорически пропустив торжественный вынос тела (чтобы низко не летало), сообщаю вам пренеприятнейшее известие: запущен defun.ru. Памятуя о том, что даже мимолётный трёп в джаббере с одним из основателей расширил моё сознание настолько, что оно ускорило один из моих прототипов в 3500 раз, - настоятельно рекоммендую.
Расширивать и углубливать!

03 апреля 2008

Я не люблю Google Reader за

Про преимущества гугльридера понаписано немало, про недостатки молчат почему-то. А переодически возникающие раздражения забываются, а осадочек остаётся. Так вот чтобы не забыть и, возможно, как-то побороть, напишу про то, что мне не нравится в Google Reader.
Чертовски медленный. Достаточно быстро он работает только в webkit based браузерах, и, с большой натяжкой, в последних публичных бетах огнелиса(в котором переодически отваливаются кейбиндинги). Это для меня огромный минус, ибо для меня http=opera.
Отсутствуют фильтры. Из-за этого некоторые ленты читать невозможно, ибо информационный overhead, который ничем не отсекается. Сторонние сервисы фильтрации либо убоги, либо не работают с кириллицей. Or both. Довольно странно, с учётом того, что в rss используется utf.
Дубликаты. Есть блоги, есть планеты блогов, есть непустое пересечение блогов и планет. Отписаться от чего-то одного тоже нельзя, ибо перекрываются не всегда полностью. Например, из этого блога только часть постов уходит в планету Runix (посты с тэгом linux). Человек, читающий и планету и меня мои посты с тэгом linux будет видеть дважды. Или даже трижды, с учётом следующего пункта.
Shareflood. Друзья расшаривают посты, которые ты читаешь и сам. Самый яркий пример - bash.org.ru.

02 апреля 2008

Запросы. Хранимые процедуры. Производительность.

Пост сквозь спички в глазах, потому сумбурный.
В ходе эксперимента установил, что запросы (на чистом sql) выполняются немного медленнее, чем хранимые процедуры.
Есть запрос, есть хранимая процедура, которая в цикле возвращает результаты того же запроса построчно (RETURN NEXT). Запрос выполняется за 75-85 мс с вероятностью 75% (приблизительно), процедура - 55-75 мс. К чему бы это?
Ладно, если уж пишется спагетти-код, то на эту мелочь можно и закрыть глаза. Интереснее следующее - первое выполнение запроса занимает около 450 мс, что закономерно, ибо составляется план выполнения запроса. При создании процедуры план (как я понимаю) сохраняется вместе с ней. Вопрос в том, насколько часто при использовании чистого запроса будет составляться его план? Если используется много чистых запросов? Много серверов приложений?

27 марта 2008

Смена предпочтений. Yakuake. Lftp.

Долгое время открещивался от замены Konsole Yakuake'ом. Даже писал скрипт, чтобы эмулировать его поведение. И всё в силу несомненно субъективных причин. Каких-то там пустяков мне в нём не хватало, вроде сеансов. После длительного использования zsh обнаружил, что они не особо и нужны с грамотной системой альясов и вообще использованием всей мощи оболочки. Так что теперь разграничение и синергия. Например, за счёт гораздо более удобного DCOP интерфейса. Хотя думаю, что с переездом на KDE4 возможен обратный переход, уж больно мне там Konsole понравилась.
Так же неохота было разбираться с lftp. Ну что такое, в самом деле, как это может быть консольным... Может, и довольно удобно, опять же с грамотными альясами. К опробированию подвиг один очень капризный и избалованный ftp сервер с полезным контентом. Ничто не дало мне такой гибкости, чтобы общение с данным сервером было удобным. Да и возможности набрать очередь закачек на неделю вперёд и ограничить канал, когда нужно побраузить, многого стоят. Ещё бы как-то обзор был удобнее... стоит над этим подумать.

Обновления weechat плагинов

Вчера в джаббер постучался Ugolnik(оказавшийся русскоязычным и близким по многим интересам человеком), и нанёс непоправимую пользу моим скриптам-плагинам для weechat - указал на пару ошибок и предложил пару идей. А сегодня опробовал и проникся их реализацией. В связи с чем выкладываю актуальные версии: tray.rb, nickserv.rb. Следите за анонсами.

Изменения:

  • Несколько фиксов
  • Даблклик по иконке поднимает терминал и переключает во вкладку с вичатом (для konsole и yakuake)
  • Опция term_type { yakuake, konsole, other }, по умолчанию other, для правильного манипулирования терминалом
  • Правильное отслеживание активности - иконка не активируется при открытом терминале с вичатом (не учитываются прочие вкладки терминала - для konsole и yakuake), деактивируется при открытии терминала (аналогично)
  • Все обработчики сообщений теперь опциональны (опции handle_*)

Чувствую я, пора писать мануал. Скрипт пошёл в массы...

20 марта 2008

Фантастика

1954 Айзек Азимов «The caves of steel» — «Стальные пещеры»
1980-е - первые исследования СПИДа

gpodder - вести с полей

А точнее, из мейллиста разработчиков.
В одном из своих выпусков подкаст обзор *nix блогов обозрел и мой пост про gpodder, который, по мнению ведущего, слишком медленный. В ближайшем релизе планируется существенно уменьшить время старта программы. Соответствующие изменения уже внесены в svn trunk.
Как обычно, релиз следует ждать в конце месяца, особо нетерпеливые могут ставить из svn.

Ошибки и method chaining

If you can make one heap of all you winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve you turn long after they are gone,
And so hold on when theirs nothing in you
Except the Will which says to them: "Hold on!"
R. Kipling. If

Прочитал однажды заметку о минимизации ошибок (вот вам ещё продолжение), внутренне покивал и занёс в шареды. А сегодня окончательно оформилась мысль, когда читал список изменений в ruby 1.9.
Когда я писал плагины к weechat'у, столкнулся с невозможностью использовать method chaining везде, где этого хочется. А всё почему? Потому что такая архитектура, дизайн, если хотите.
Конкретнее. Возьмём какую-нибудь функцию строки, например


str.gsub!(pattern, replacement) => str or nil
str.gsub!(pattern) {|match| block } => str or nil

Она возвращает строку или nil. А это, чёрт побери, объекты разных классов! И если вдруг вернулся nil, то вся правая часть цепи после него идёт нафиг, и сам скрипт идёт нафиг, ибо NoMethodError. Если бы она возвратила пустую строку, то вся цепь бы тихо умерла, никому ничего не сказав, а скрипт бы дальше пошёл. Но не судьба. В итоге - нарастание уродливых if'ов там, где они нафиг не нужны.

Блоки

Коротко и сумбурно, ибо спать пора.
Читать блок=составной оператор.
Что-то меня стукнуло про блоки задуматься. Куда не плюнь - каждый пытается выдумать какое-то своё супер-пупер-охуенное-единственно-красивое-и-элегантное обрамление для блоков (это как с системой стартовых скриптов в линуксе, в какой дистриб не плюнь - везде своя).
А мысль началась с питона, блоки в котором мне не нравятся, хотя некоторые считают, что так короче (типа KISS и всё такое) и нагляднее. Сразу вспомнилось чудесное, очень точно описывающее поведение питона относительно этого.
Руби, хоть и хороший язык, но синтаксис у него - говно, и блоки не исключение. Начинаются одним способом, заканчиваются другим.
Школьная любовь, Паскаль... Begin и end, как много этих буков... Писать мне лень их до сих пор. Но уже начинаются и заканчиваются единообразно (нормальными словами из английского языка) и чётко видно, где начало, где конец блока. Что важно, если учесть, что "заголовок" блока может быть весьма длинным (как в PL/SQL: for var in select... и далее трёхстраничный селект).
Баш, ну это вообще не язык программирования, даже блоки об этом говорят. Ну взять хотя бы их окончания: done, esac... так и хочется сказать громкое fi.
И наконец, что мне всегда нравилось - блоки в C подобных языках. Парные скобки, начинаются и заканчиваются единообразно (одним видом скобок и для любых конструкций), видно, где начало и конец, печатать мало, а если это ещё и визуально приправить грамотно, то и читать станет удобно. Вот с последним пунктом у всех без исключения виденных мною редакторов очень туго. Чуть лучше у Kate и производных, но всё равно не то.
Вот так вот, нет пророка в своём отечестве.

19 марта 2008

Ruby и платформы

Ну вот, после этого поста с учётом этого блога руби теперь окончательно стал восприниматься мной как мультиплатформенный универсальный язык.

Глупый виндовс робко прячет

...пИнгвин - смело достаёт!
Читал и плакал... И это одно из средств защиты.

16 марта 2008

Свободные новости.

Достали уже всякие псевдоновостные ресурсы "про опенсурс" друг у друга новости перепечатывать. Доходило до смешного - после того, как я скачал линуксформат за прошлый год, они ещё неделю публиковали эту "новость". Сейчас вот популярна тема "Опубликована концепция развития свободного ПО в РФ". А что, никого не задевает, что сначала сей документ был выложен в формате doc, закрытом ещё месяц назад, и сейчас лихо заменён на rtf, как будто так и было, а на странице с документом он всё ещё называется концепция.doc?

Бложенны нищие духом

Отслеживая фид с тематическим поисковым запросом по блогам всё больше убеждаюсь в полнейшей неадекватности ЖЖ как источника информации.

09 марта 2008

Google Gadgets

Всё-таки они меня разочаровали, что не допилили должным образом встроенные гаджеты, которые радостно сообщают, что в окне iframe'а они отображаться не хотят (по-русски сообщают, но это слабое утешение), следовательно, в веб-страницу их вставить нельзя. Сторонние льзя, родные нельзя. А жаль, такая красота могла бы получиться... Уже как минимум одно применение вижу, но мечтаю про себя.
UPD: ну и второе тогда уж - в плазму КДЕшную вставлять.

01 марта 2008

Unicode и код

С некоторых, у кого-то давних, у кого-то недавних пор языки стали поддерживать исходники в юникоде. Экая красота вместо sum(array) влепить ∑(array) и балдеть от читаемости и самодокументированности. Потом пошёл ропот на тему переменных, названных на каком-нибудь суахили или санскрите. Ну и вот тут идея возведённая в абсурдный абсолют. Читал и в истерике бился об клавиатуру. Потом задумался - а нет ли возможности нарисовать такой DSL на Ruby?

Скриптинг и GUI

-А бить будут не по паспорту а по морде.

В своё время исключил из ридера rss одного блога. А недавно он меня снова нашёл.
После весьма эмоционального предисловия пошёл смотреть презентацию (кстати, создателям сервиса презентаций руки надо оторвать и пришить обратно к плечам) про шузы, был впечатлён простотой и нативностью.
Однако контраргументов с прошлого раза не поубавилось, и я всё так же могу сказать - а зачем оно мне, если у меня есть Qt? Там и визуальное проектирование, и компилятор пользовательских интерфейсов и знакомые парадигмы, и множество компонентов... И как следствие первых двух пунктов, и самое главное отличие - отсутствие необходимости писать код GUI вручную. Вот опять же товарищ рассказывает, что они уже бороздят просторы мобильных WinCE утройств...
В общем, есть над чем подумать.

26 февраля 2008

gPodder 0.11.0 и bluetooth

Мы строили-строили, и, наконец, построили
Вышел в свет gPodder 0.11.0. Много нового-полезного, наконец-то правильная синхронизация с mp3 плеерами на ФС FAT, обновления переводов и прочее.
Одних лечим, других калечим.
Видимо сильно желанная автором фишка по отсылке файлов через bluetooth не работает (или в скором времени перестанет работать в реже обновляющихся дистрибутивах), поскольку полагается на раннюю версию gnome-bluetooth, из которого недавно была исключена и вынесена в другой пакет нужная функциональность. Впрочем, проект жив и восприимчив к багрепортам, так что исправление - дело времени.
В целом, релиз приятный.

22 февраля 2008

WeeChat и Ruby плагины. Иконка в трее для скриптов.

Тихо и незаметно произошло одно небольшое событие: модераторы разместили мои два плагина на странице плагинов IRC клиента Weechat. И интересных моментов тут сразу три.
Первое. Почему Weechat? Потому что он вытеснил-таки из моего сознания irssi, когда я искал удобный консольный клиент, поскольку в использовании приятнее и поддерживает скриптинг аж на 4 языках (в irssi - 1). API для скриптинга не так богат, но вполне достаточен.
Второе. Плагины написаны с целью попробовать разные динамические фишки языка Ruby. Код сырой, works-for-me и без гарантий красоты и качества ;)
Ну и третье, самое интересное, ради чего всё и затевалось - один из плагинов добавляет в консольный клиент поддержку графических уведомлений и иконку в трей (в общем случае - в любой, тестировалось на kde). Для меня это было единственным, что не позволяло отказаться от громоздких графических клиентов. Делается это с помощью утилиты Konch, интересной, впрочем, не только этим. Так что скриптерам - советую.
UPD: С помощью Andrey удалось найти несколько ошибок, также он подсказал несколько идей. Итог - скрипты растут, и на странице плагинов остаются неактуальные(новые принимаются медленно). Поэтому завёл актуальные версии: tray.rb, nickserv.rb. Следите за анонсами.

Давайте включим режим DHCP

Вот тут один товарищ публикует якобы образовательные посты для начинающих линуксоедов. В частности Консольные команды. Часть 8, Работа с сетью..
Я, было дело, все эти портянки мимо глаз пропускал, да зря. Смешные они. Вот например там предлагается включить режим DHCP. Пытался было намекнуть в комментарии, что описание-то неправильное. Комментарий был удалён, более того, по почте пришёл ответ, показывающий всю глубину непонимания. Мол, у нас тут кнопочка, а там галочка, а вашу матчасть оставьте при себе.
Самое обидное, что всю эту чушь придётся читать в рамках планеты RuNix.
В общем, ткните в эту кнопочку, чтобы включить режим DHCP.

20 февраля 2008

Shared Items

Стал пользоваться Гугль Ридером (без комментариев), в связи с чем решил воспользоваться и виджетом для расшаренных item'ов. Так что оно теперь поселилось сбоку в этом блоге. И сразу пара дисклеймеров: я читаю баш, а поскольку в каждой шутке есть доля шутки, некоторые цитаты я расшариваю. Обычно это адресовано людям с определённой степенью понимания. И второе - иногда я расшариваю для друзей весьма специфичные вещи.

Популярное и Google reader

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

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

2. Решение в таком конкретном приложении как Гугль ридер не допилено до конца. Вместо того, чтобы помещать item'ы в фид каждого френда можно было завести виртуального френда, назвав его, допустим, "Общие" и валить туда расшаренные более чем 1 человеком новости. Всё было бы удобнее чем сейчас.

14 февраля 2008

09 февраля 2008

PL/Ruby

Есть такая штука как процедурный язык хранимых процедур для СУБД. Для Postgresql обработчиков этих языков написали около десятка, есть и для Руби.
Концептуальный его недостаток в том, что его можно неправильно приготовить, что с успехом делают некоторые дистрибутивостроители. Скажем, вот такой вот код

1 create or replace function rtype(first int4, second varchar) RETURNS varchar as '
2 first + second.to_i
3 ' language 'plruby';
4 select rtype(1, '5');

правильно выполняется на моем локальном сервере, но не принимается девелопмент сервером, на котором PL/Ruby поставлен из пакета. Значит, надо правильно его собрать, как минимум
ruby extconf.rb --enable-conversion
ну и для особенных ценителей есть ключи --enable-network и --enable-geometry.
Чтобы собрать нужен сорец. А поскольку оффсайт отдавал только мануал, я сбил ноги в кровь в поисках сорца хоть в каком-либо виде, хоть в src.rpm, пока не вспомнил, что сижу на величайшем зеркале сорцов всея Open Source. В общем, брать тут http://distfiles.gentoo.org/distfiles/plruby-0.5.1.tar.gz
Рубить всегда! Рубить везде!

08 февраля 2008

Elive 1.0 Gem

Что я могу сказать - не пожелаю такого и врагу.
Как белый человек, избалованный всякими хорошими инсталляторами, выбрал при запуске русский. Пошла инициализация всего, загрузились дрова от nvidia. И сообщения в консоль на абракадабре. Ну, думаю, с кем не бывает. А вот dm порадовал - просто не пускал. Как же так? Оказывается, в настройках xorg выставлена только 1 раскладка - русская, в то время как логин - пароль само собой на латинице. Впрочем, это я тоже пережил, скопировав строчку из своего конфига (залогинившись в виртуальной консоли). Дальше - веселей. Напрочь не работали многие клавиши, даже в латинице, что обнаружилось в эмуляторе терминала. Хотел было опять залезть в конфиг иксов - а не тут то было, переключение в виртуальную консоль тоже не работало. В общем, магический Alt+Ctrl+Backspace и shutdown -r now.
Теперь у меня есть еще одна подставка под кружку.

07 февраля 2008

Metalog врёт, а значит мы умрём

Из документации Metalog:

* command = : run a program or a shell-script when all
conditions are met. This directive is not incompatible with logdir : a
message can be both logged and passed to an external command.

Тем не менее такой вот кусок конфига
new_outgoing_conns :

regex = "out_conn"
logdir = "/var/log/out"
command = "/usr/local/sbin/timestamp.sh"
break = 1

доказывает обратное - логи пишутся, а команда не исполняется.
Вот и верь после этого документации.

Неграмотные валидации

Типичнейший пример неправильного пользования валидациями:

В первую же неделю своего изучения рельс я увидел скринкаст, как избежать таких ошибок. Возможно, это было что-то из railcast'сов
Так что rubyplus.org я, пожалуй, смотреть не буду.

06 февраля 2008

Миграция виртуальных машин VirtualBox на реальное железо

Маленькая заметка на полях, пока не забыл, как сделал.
Обкатав какое-то время Ubuntu в виртуальной машине решил перенести на нормальное железо. По возможности обойтись unixway, а не кувырками а-ля скопировать по ssh.
Образ диска виртуальной машины был фиксированный и имел 1 раздел.
1. Конвертиртация в dd формат.
wget http://www.virtualbox.org/download/testcase/vditool
export LD_LIBRARY_PATH=/opt/VirtualBox
./vditool COPYDD /home/vm/Kubuntu.vdi kubuntu.dd
2. Монтирование.
mount -o loop,offset=32256 /home/phoenix/kubuntu.dd /mnt/temp
Теперь пациент готов, можно пересаживать загрузчик, файловую систему и так далее.

05 февраля 2008

Gpodder 0.10.4+svn и mp3 плеера

Допилил таки в Gpodder'е синхронизацию с плеерами на ФС vfat. Теперь он для меня окончательно стал полностью пригодным к использованию. Остаётся ещё много недоделок с usability, но это уже не ко мне, я GTK никогда в руках не держал.
Патч сделан на основе ревизии 560, желающие могут проследовать в wiki или подождать официального среза.

Gentoo on crutches

Что-то не ладится в дастком королевстве. Во время сборки чего-то вылезла ошибка, make жаловался на отсутствие ar. При том, что binutils в системе стояли.
Воткнул офигенный костыль - сделал симлинк на ar в папку с компиляторами, заработало.
Как-то это всё подозрительно. В данный момент всерьёз задумываюсь над тем, чтобы перейти на Kubuntu. На рабочей станции Ubuntu показала себя совсем неплохо, почти всё нужное мне там нашлось. Настораживает разница идеологий. Буду пробовать.

04 февраля 2008

Про контекстную рекламу

А в углу gmail'а реклама уныло предлагала поставить IE7, не подозревая, что открыта в Опере под Gentoo...

01 февраля 2008

Аггрегируй это.

Проблема
Уже в стародавние времена в STL языка C++ была функция для подсчёта элементов, удовлетворяющих условию. В SQL этому, по идее, должны служить аггрегатные функции (аггрегаты), однако там есть лишь элементарные count.
А они и не умеют, поскольку могут принимать только 1 столбец. А нам надо туда же передавать и значение для сравнения. И решение есть, неизящное, но надёжное.
Решение


 1 create or replace function inc_if(
 2     count int8,
 3     arr anyarray
 4 )
 5 returns int8 as
 6 $$
 7 declare
 8 begin
 9     if (arr[1]=arr[2]) then
10         return count+1;
11     else
12         return count;
13     end if;
14 end
15 $$
16 language 'plpgsql';
17
18 CREATE AGGREGATE count_if
19 (
20 BASETYPE=anyarray,
21 SFUNC=inc_if,
22 STYPE=int8,
23 INITCOND=0
24 );


Использование

Удобно использовать при группировке:
select count_if(ARRAY["passed_exams", 0]) from students group by id_group;
Вот вам и количество кандидатов на отчисление в каждой группе (чёрный юмор).

Недостатки
  • Накладные расходы на создание массивов. Не лечится. Аггрегаты принимают 1 столбец.

  • Необходимость создания агрегата для каждого потенциально нужного условия, негибкость. Возможно решение в виде использования динамических языков (PL/Python && PL/Ruby), передачи условия внутрь аггрегата с последующим его вычислеием (eval).