Добрый день!
Начав использовать python в своих адмниских целях, а-ля написание несложных скриптов, не мог нарадоваться простоте этого языка. Почти сразу же возникло желание попробовать написать полноценное приложение на python. Но никак не мог придумать, что б такого создать чтобы это было интересно и полезно не только для меня. Идея пришла после прочтения этого топика на хабре, к сожалению он сейчас не доступен, но, если кратко, речь идет о отображении цитат с сайта forismatic.com при открытии консоли.
Я решил, что было б неплохо написать апплет для gnome, который будет показывать эти же цитаты, но с помощью уведомлений. Тогда б не пришлось открывать новую консоль, чтоб прочесть очередную цитату. Результат мне понравился, и захотелось поделится им с сообществом.
Сам апплет представляет собой обычную иконку на gnome panel.
При нажатии на иконку левой кнопкой мыши появляется цитата в виде всплывающего уведомления. Но деже если по апплету не кликать, то уведомления с цитатами все равно будут появляться каждые 30 мин (по умолчанию).
Все настройки сведены в небольшое меню.
С помощью меню можно:
Нажатием средней кнопки мыши на иконке апплета будет открыта страница с последней цитатой на forismatic.com. Действие дублируется с помощью пункта меню ShowQuote.
Апплет написан на pygtk. Все дополнительные модули которые пришлось использовать входят стандартную набор python, поэтому проблем с зависимостями быть не должно.
Цитаты забираются с помощью API в виде xml и после парсинга сохраняются в ключах Gconf по адресу
В создании апплета очень помогла эта статья, с которой и был успешно слизан шаблон для апплета.
Пока я могу выделить только одну глобальную проблему — зависание всего апплета во время получения очередной цитаты с сайта. Как я понял, перечитав уйму тематических форумов, решить это можно только используя многопоточность (threading). Выделить один поток для прорисовки графики, а второй поток для работы с API.
Второй пункт в TODO листе — сделать систему сообщений об ошибках. На данный момент в отладочном режиме ошибки выводятся только в stdout. А в режиме апплета уведомления об ошибках и вовсе отсутствуют. Если кому-то еще программка понравится, то постараюсь найти время и доработать.
Не могу не пожаловаться на сам GTK и его странную обработку кликов мыши из-за которой провалилась красивая идея с открытием сайта по двойному клику. Возможно это и правильно, что перед тем как генерировать событие 2BUTTON_PRESS происходит генерация и двух событий BUTTON_PRESS, но из-за этого я так и не придумал нормального способа повесить различные действия на одиночный и двойной клик мыши.
Если кто-то из хабр-сообщества подскажет как это реализовать буду очень признателен.
Была идея создать deb пакет, но, к сожалению, после вечера проведенного за чтением документации, так и не понял как это сделать в случае с python. Поэтому для установки апллета можно скачать исходники с github.com или launchpad.net и вручную скопировать файлы в нужные папки:
Для пущей уверенности я бы рекомендовал перезагрузить gnome
После этого в меню ПКМ->добавить на панель появится Forismatic Applet.
Это мой первый опыт в программировании GUI приложений, поэтому я надеюсь, что критика будет конструктивной и не сильно строгой.
Естественно, все найденные баги постараюсь учесть и исправить.
UPD: Добавил deb пакет(спасибо fenrirgray), скачать можно с тех же github.com и launchpad.net. Например, ссылка с последнего ForismaticNotify_Applet_0.7b-1_all.deb. Но, все же лучше будет перейти в репозиторий и там скачать, чтоб быть увереным, что это последняя версия пакета.
Начав использовать python в своих адмниских целях, а-ля написание несложных скриптов, не мог нарадоваться простоте этого языка. Почти сразу же возникло желание попробовать написать полноценное приложение на python. Но никак не мог придумать, что б такого создать чтобы это было интересно и полезно не только для меня. Идея пришла после прочтения этого топика на хабре, к сожалению он сейчас не доступен, но, если кратко, речь идет о отображении цитат с сайта forismatic.com при открытии консоли.
Я решил, что было б неплохо написать апплет для gnome, который будет показывать эти же цитаты, но с помощью уведомлений. Тогда б не пришлось открывать новую консоль, чтоб прочесть очередную цитату. Результат мне понравился, и захотелось поделится им с сообществом.
Кратко о программе
Сам апплет представляет собой обычную иконку на gnome panel.
При нажатии на иконку левой кнопкой мыши появляется цитата в виде всплывающего уведомления. Но деже если по апплету не кликать, то уведомления с цитатами все равно будут появляться каждые 30 мин (по умолчанию).
Все настройки сведены в небольшое меню.
С помощью меню можно:
- Выбрать одну из двух тем — голубую(стандартная для сайта forismatic.com) и черную.
- Изменить язык на котором будут показаны цитаты (английский или русский)
- Изменить временной период между показами цитат (в диапазоне 5-300 мин).
Нажатием средней кнопки мыши на иконке апплета будет открыта страница с последней цитатой на forismatic.com. Действие дублируется с помощью пункта меню ShowQuote.
Технические детали
Апплет написан на pygtk. Все дополнительные модули которые пришлось использовать входят стандартную набор python, поэтому проблем с зависимостями быть не должно.
Цитаты забираются с помощью API в виде xml и после парсинга сохраняются в ключах Gconf по адресу
/apps/panel/applets/applet_id/pref/
. Это позволяет запускать сразу несколько копий апплета с различными настройками. Окно настроек (Preferences) создано в программе glade. В создании апплета очень помогла эта статья, с которой и был успешно слизан шаблон для апплета.
Недостатки.
Пока я могу выделить только одну глобальную проблему — зависание всего апплета во время получения очередной цитаты с сайта. Как я понял, перечитав уйму тематических форумов, решить это можно только используя многопоточность (threading). Выделить один поток для прорисовки графики, а второй поток для работы с API.
Второй пункт в TODO листе — сделать систему сообщений об ошибках. На данный момент в отладочном режиме ошибки выводятся только в stdout. А в режиме апплета уведомления об ошибках и вовсе отсутствуют. Если кому-то еще программка понравится, то постараюсь найти время и доработать.
Не могу не пожаловаться на сам GTK и его странную обработку кликов мыши из-за которой провалилась красивая идея с открытием сайта по двойному клику. Возможно это и правильно, что перед тем как генерировать событие 2BUTTON_PRESS происходит генерация и двух событий BUTTON_PRESS, но из-за этого я так и не придумал нормального способа повесить различные действия на одиночный и двойной клик мыши.
Если кто-то из хабр-сообщества подскажет как это реализовать буду очень признателен.
Установка
Была идея создать deb пакет, но, к сожалению, после вечера проведенного за чтением документации, так и не понял как это сделать в случае с python. Поэтому для установки апллета можно скачать исходники с github.com или launchpad.net и вручную скопировать файлы в нужные папки:
sudo cp -a ForismaticApplet /usr/share/
sudo cp forismatic_notify.server /usr/lib/bonobo/servers/
Для пущей уверенности я бы рекомендовал перезагрузить gnome
После этого в меню ПКМ->добавить на панель появится Forismatic Applet.
Послесловие
Это мой первый опыт в программировании GUI приложений, поэтому я надеюсь, что критика будет конструктивной и не сильно строгой.
Естественно, все найденные баги постараюсь учесть и исправить.
UPD: Добавил deb пакет(спасибо fenrirgray), скачать можно с тех же github.com и launchpad.net. Например, ссылка с последнего ForismaticNotify_Applet_0.7b-1_all.deb. Но, все же лучше будет перейти в репозиторий и там скачать, чтоб быть увереным, что это последняя версия пакета.