Archive for July, 2008

Jabber Bot

Just for fun написал простенький движок для создания джаббер ботов. Использовал xmppy, стоит заметить, что написана она очень не по-питоновски, сразу видно у автора какой-то сишный бэкграунд. Документация тоже мягко говоря не очень, приходилось спецификацию протокола XMPP читать чтобы понять, как эта библиотека работает. Собственно вот результат: jabber bot mini-framework on Python Использовать следующим образом:
from jabberbot import JabberBot
bot = JabberBot("example@example.com", "password", "BotName")
bot.setConference("example@conference.example.com")
bot.run()
Сейчас бот ничего не будет делать, кроме того как логиниться и заходить на конференцию. Чтобы расширить его функциональность, нужно написать класс-расширение. Например мы хотим чтобы на команду “!торт <ник>” бот отвечал: “<имя_бота> смачно кидает бисквитный трот прямо в лицо <ник>”, тогда класс будет выглядеть так:
from jabberbot import CommandExtension
class CakeExtension(CommandExtension):
    def process(self):
        if self.options:
            return "/me смачно кидает бисквитный торт прямо в лицо %s" % self.options
        else:
            return None
и результирующий код будет такой:
from jabberbot import JabberBot, CommandExtension

class CakeExtension(CommandExtension):
    def process(self):
        if self.options:
            return "/me смачно кидает бисквитный торот прямо в лицо %s" % self.options
        else:
            return None

bot = JabberBot("example@example.com", "password", "BotName")
bot.setConference("example@conference.example.com")
bot.extensions.append(CakeExtension("торт")) # Добавляем наше расширение
bot.run()
В конструктор расширения передается название команды, само расширение наследуется от CommandExtension. Префикс команды задается константой jabberbot.CMD_PREFIX и по умолчанию — “!”. В self.options расширения записывается весь текст который следует после команды. Возможно переопределить функцию CommandExtension.check(text), в своем расширении, если вы например хотите делать проверку на какое-то слово во всем сообщении. Функция в качестве параметра получает сообщение пользователя и возвращает True, если оно соответствует команде расширения(а именно если строка начинается с команды), иначе False. Безусловно это достаточно простой пример, но более сложный/полезный/интересный функционал уже дело техники и вашей фантазии, легкий API вам предоставлен :)

My Macbook

Macbook

Теперь я являюсь счастливым обладателем макбука, с него сейчас и пишу этот пост :) Пока впечатления исключительно положительные, хорошая сборка, ничего не скрипит, он достаточно компактен. Стильный минималистичный дизайн, без лишних кнопок, кучи мигающих индикаторов и наклеек, которыми пестрят большинство современных ноутбуков. На Mac OS тоже пока нареканий нет, юниксподобность — это большой плюс для меня. Кстати тут Eclipse 3.4 запустился вообще без каких-либо проблем и дополнительных настроек. Еще радует то, что в стандартной поставке Mac OS идет с Python. Была возможность купить за те же деньги в США макбук про, но ждать нужно было до сентября, решил взять сейчас обычный макбук, к тому же в ближайшее время новый макбук про выйдет, так что потом можно будет подумать о замене, где нибудь через год. Теперь неплохо бы wi-fi сеть дома настроить, а то пока сижу на gprs с телефона через bluetooth. Кстати обнаружил, что под одним джаббер аккаунтом можно с нескольких компьютеров одновременно сидеть, просто указать разные ресурсы, например macbook и desktop, весьма удобно. Так что многоуважаемый Слон, вот вам еще одно преимущество Jabber перед ICQ.

Caterpillar & Lily

Today made some photos.

Nice, isn’t it ? :)

Just an ordinary lily.

Python Markdown

As you know I’m working on improvements of Python Markdown implementation in terms of Google Summer of Code 2008. Markdown is a markup language, which was originally created by John Gruber and Aaron Swartz, and implemented in Perl. Today there are a lot of different Markdown implementations, for almost all popular languages. The main aim of markdown — maximum readability, markdown is simpler than (X)HTML and widely used in different services, where users can publish some texts(i.e blogs, in some blogs users can write comments/posts, using Markdown).

 

Apple site

Just now tried to see retail stores page on apple.com, but it says “Hmm, the page you’re looking for can’t be found.” Didn’t expect such blunder from a big company like Apple. Sent them a bug report :)

Update: wow, they fixed it in 10 minutes or so, good job :)

Eclipse Ganymede

Решил попробовать новый eclipse, многие активно его пиарили типа работает быстрее, куча всяки новых фич, даже инструменты для UML моделирования добавили. Звучит неплохо. Запускаю на jre 1.6 — сначала все хорошо, просит выбрать воркспейс, загружается более чем до середины и на Loading Workbench выдает ошибку, никакого описания, смотрите логи. В логах — “!MESSAGE Application error” и листинг стека — очень помогло. Хорошо, попробовал запустить с jre 1.5 — то же самое. Ну думаю, может тогда gcj попробовать, пусть разработчики на нем и не тестировали, но с чем черт не шутит, пробую, грузится значительно дольше, выдает какую-то мелкую ошибку, но работает! Странно, очень странно. Ладно, пытаюсь установать pydev, потому что использую его исключительно как IDE для Python, вроде бы хорошо, все зависимости есть, скачался и устанвливается, но в конце инсталляции выдает ошибку. Нда.. К черту этот новый eclipse, остаюсь на 3.3, разбираться что там не так ни времени ни желания нет, вобщем разачаровал он меня.