Рыбка по имени Ванда

Jul 07, 2010 01:44

Статья публиковалась в песочнице Хабрахабра, но инвайта, увы, не получила. Теперь для песочницы я пишу новую, а эту помещаю сюда, чтобы не пропала.

Установив на домашней машине свежую Ubuntu, я немедленно бросился наполнять панель разнообразными апплетами. Большинство из них не представляли для меня особого интереса, но "Рыбка", обещающая плавать по панельке, заинтересовала. Я добавил ее и обнаружил неприятные вещи:
  • Рыбка не плавает, а скорее сжимается и разжимается;
  • При нажатии на нее появляется сообщение об ошибке.
Последнее я воспринял как вызов и немедленно решил выяснить, в чем же дело.

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

Языковых пакетов оказалось не так уж много, но русский (fortunes-ru) среди них имелся и был установлен, после чего Ванда (так зовут рыбку по умолчанию) начала цитировать Ленина и Маркса, чем ввергла меня в уныние и сподвигла на очередное копание в руководстве по fortune. Попутно в папке /usr/share/games/fortunes/ была обнаружена база высказываний; оказалось, что их там преогромное количество, и можно выбрать файл, из которого высказывания берутся.

Я бегло просмотрел имеющиеся файлы: они имели простой формат (высказывания просто разделены значком '%' на новой строчке), но особого интереса не представляли, так что я решил сделать свой файл с цитатами с bash.org.ru, благо они как раз достаточно короткие и местами даже смешные.

Первым этапом в создании базы шуток было написание граббера. Его я написал на PHP, используя асинхронные запросы библиотеки cURL (исходный код - в конце топика). На башорге на момент написания этого постинга было всего 502 страницы, обрабатывая по 10 штук за раз, я довольно быстро (это заняло у скрипта три с половиной минуты) прошелся по цитатам из основного потока (одобренные администрацией). Цитаты из кода я вытаскивал при помощи довольно неприятного для человека, не привыкшего к грабберам, регулярного выражения, но тут мне помогла возможность делать автозамену в Zend Studio: я заменил все пробельные символы на \s+, после чего осталось только наставить шаблонов для номера цитаты (их там довольно много), суммы набранных голосов и даты публикации. Обычно не приходится делать даже этого, но в данном случае div-контейнер не был подписан и не хотелось рисковать. Собранные таким образом цитаты я положил в табличку в MySQL, чтобы иметь впоследствие возможность генерировать файлы нужного мне формата, не дергая лишний раз сервер башорга.

Здесь есть небольшой ньюанс, связанный с кодировками: дело в том, что баш отдает страницы в кодировке Windows-1251, а fortune в Ubuntu хочет работать с текстами в UTF-8 (это стандартная кодировка для Ubuntu). Это надо учесть, и сделать файл для fortune именно в UTF-8. При этом недостаточно просто сделать файл нужного формата: в комплекте с fortune идет утилита strfile, которую надо натравить на получившийся файл - она сделает некий индекс, после чего fortune сможет работать с нашими цитатами. Неплохо также сделать перенос строк скриптом, так как Ванда за нас это делать не будет.

После чего нам остается только нажать на рыбку на панельке правой кнопкой, выбрать "Параметры" и изменить строку записи с "fortune" на "fortune /path/to/bash.org.fortune". Там же, кстати, можно изменить картинку, и вместо рыбки вставить, например, котенка. Если, конечно, найдете иконку 32х24.

Скрипт, который это делает, можно посмотреть на pastebin.

php, компьютерное, ubuntu, linux

Previous post Next post
Up