Установив на домашней машине свежую 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 сможет работать с нашими цитатами. Неплохо также сделать перенос строк скриптом, так как Ванда за нас это делать не будет.
Конвертация полученного файла из Windows-1251 в UTF-8 и обработка его для создания базы данных fortune:
После чего нам остается только нажать на рыбку на панельке правой кнопкой, выбрать «Параметры» и изменить строку записи с «fortune» на «fortune /path/to/bash.org.fortune». Там же, кстати, можно изменить картинку, и вместо рыбки вставить, например, котенка. Если, конечно, найдете иконку 32х24.
Скрипт, который это делает, можно посмотреть на Pastebin.
- Рыбка не плавает, а скорее сжимается и разжимается;
- При нажатии на нее появляется сообщение об ошибке.
Наведя мышку на изображение сжимающейся рыбки, я увидел, что всплывающая подсказка представляет скумбрию «гадалкой», что навело на мысль о старинной программке под названием 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 сможет работать с нашими цитатами. Неплохо также сделать перенос строк скриптом, так как Ванда за нас это делать не будет.
Конвертация полученного файла из Windows-1251 в UTF-8 и обработка его для создания базы данных fortune:
$ iconv -f CP1251 -t UTF-8 bash.fortune > bash.fortune.utf8
$ strfile bash.fortune.utf8
После чего нам остается только нажать на рыбку на панельке правой кнопкой, выбрать «Параметры» и изменить строку записи с «fortune» на «fortune /path/to/bash.org.fortune». Там же, кстати, можно изменить картинку, и вместо рыбки вставить, например, котенка. Если, конечно, найдете иконку 32х24.
Скрипт, который это делает, можно посмотреть на Pastebin.