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), сделал нат-маскарад. Работает. Попробовал то же организовать под виндой - и не смог. Бестолково там как-то всё. Завелось на минуту и отпало.