понедельник, 14 июня 2010 г.

trivial-xmpp 0.1 release

Использую в одном своем проекте обмен по протоколу XMPP, решил выделить это дело в отдельную библиотечку, trivial-xmpp, может кому-то еще пригодится. Пробовал CL-XMPP, не очень понравилось - зависимостей много и прочих мне не нужных наворотов.

Пришлось включить в библиотеку модифицированные версии XMLS и CL-SASL. CL-SASL избавлена от зависимости от IRONCLAD, из-за 2-х функций тянуть такого монстра - ужос! Лёгонький MD5 справляется прекрасно.

Зависимости: MD5, CL-BASE64, CL+SSL.

Исходный код: svn co svn://gzip4.pp.ru/proj/trivial-xmpp/tags/rel-0.1

Простейший пример использования:

(defun jabber-bot ()
  (let* ((socket (usocket:socket-connect "xmpp.ru" 5222))
         (stream (usocket:socket-stream socket)))
    (unwind-protect
         (progn
           (setf stream (xmpp:xmpp-connect stream "trivial-xmpp" "xmpp.ru"
                                           "secreet" :resource "jabber-bot"))
           (loop for message = (xmpp:parse stream)
              while message
              for to = (loop for a in (xmpp:node-attrs message)
                          when (string= (first a) "from") return (second a))
              do (xmpp:send (xmpp:message to "hello world" :type :chat
                                          :subject "jabber-bot") stream))
           (close stream))
      (when socket (usocket:socket-close socket)))))

6 комментариев:

  1. А чем, собственно, не устраивает ironclad? А то ведь получается, что бы поставить многие вещи надо ставить и ironclad и md5, т.е. как бы избыточность на лицо, а установка усложняется. Судя по TODO ironclad можно ожидать, что так появится поддержка base64 и тогда можно было бы смело выкидывать md5 и cl-base64, а вместо них использовать ironclad. Как бы для уменьшения размеров зоопарка.

    ОтветитьУдалить
  2. >> из-за 2-х функций тянуть такого монстра - ужос!

    ironclad в данный момент выглядит как претендент на роль стандартной криптографической библиотеки, на его фоне md5 - костыль.

    >> Зависимости

    А я думал что trivial это когда нет зависимостей :)

    ОтветитьУдалить
  3. >> А чем, собственно, не устраивает ironclad?

    ironclad меня устраивает, если его использовать по назначению, т.е. криптографией заниматься, а не для вызова фунции, преобразующей вектор байтов в hex-строку ;-)

    >> ironclad в данный момент выглядит как претендент на роль стандартной криптографической библиотеки, на его фоне md5 - костыль.

    я ни в коем случае не хотел умалить важность ironclad, просто мне он не нужен в библиотечке, где практически нет никакой криптографии.

    >> А я думал что trivial это когда нет зависимостей :)

    не знал, может я и погорячился с названием... хотя, если ограничиться insecure коннектом и anonymous login, можно будет выкинуть все зависимости :)

    ОтветитьУдалить
  4. > я ни в коем случае не хотел умалить важность
    > ironclad, просто мне он не нужен в библиотечке,
    > где практически нет никакой криптографии.

    Да дело не в этом. Сейчас для CL есть проблема с ручной установкой библиотек, ибо это муторно, а нормальный "автоматический способ" только в Gentoo есть. Основа проблемы в том, что в CL очень много очень мелких библиотек. Что бы развернуть, скажем, lisper.ru надо поставить около 70 библиотек. Было бы хорошо, если бы мелкий функционал собирался в достаточно крупных пакетах, покрывающих свою область. Это существенно бы упростило установку пакетов.

    ОтветитьУдалить
  5. да, 70 библиотек - жесть. но, помоему, это проблема только мейнтейнера, разгребать такую кучу. хотя, мне трудно судить, в моей песочнице пока хватает asdf-install. То что много мелких библиотек, да, проще написать на коленке свой велосипед, чем разбираться в чужом коде, особенно мертвом и outdate. А с другой стороны, неужели в CPAN или в питоне, да даже в Java, не так?

    А собирать мелкие библиотеки в крупные пакеты - кто мешает-то, всё в наших руках ;)

    ОтветитьУдалить
  6. Поддерживаю предыдущих ораторов. Ironclad не такой уж и монстр, если присмотреться, и все такие интересные функции лучше иметь в одном месте.

    ОтветитьУдалить