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).

Дураки

Хороший повод пересмотреть поговорку, что в России, мол, две беды - дураки и дороги.
Дураков несоизмеримо больше.
Сегодня два провайдера основательно сели в лужу (на мой суровый уральский взгляд). Крупнейший пермский провайдер "Первый пермский интернет центр" стал частью московской тм "Стрим". Соответственно была изменена сетка безлимитных тарифных планов. Переключение было назначено на 1 января, для особо опоздавших - пересдача 1 февраля.
Как я и ожидал, в Полночь по местному времени (GMT+5) соединение дропнулось. Установить соединение по новому ТП удалось... да-да, в Полночь по московскому (GMT+3). Золушка, мне кажется, такую волшебную Полночь не пережила бы, доведись ей зависнуть на два часа без сердцебиения, например.
Какие там дороги, если элементарной географии не знают такие "уважаемые" компании.