WiLiKiでChangeLogが続けられるのか挑戦。
XMPPクライアントをまっさらのschemeで書くのに挫折したので、
かわりにloudmouth
をchickenから呼べるようにした。
マニュアルはないけど、C API
を移しかえただけなので、
サンプルのloudmouthのコードそのまま持ってくれば動く。
オウムがえしするだけならこんな感じ。
コールバックの形式だけは普通にforeign-lambdaできないので、
ヘルパーマクロを使って、
(lm:define-message-handler
presence-cb
(conn mes data)
(begin ここにコールバックの内容))
(lm:call-with-message-handler
presence-cb #f #f
(lambda (handler)
(lm:connection-register-message-handler
conn handler
*LM-MESSAGE-TYPE-PRESENCE*
*LM-HANDLER-PRIORITY-LAST*)))
みたいに書く。
コールバックの第一引数がvoid*なものだから、
データの移送はかなり面倒なことに。
これをscheme-objectにすると、gcされちゃう。
これを使ったtwitter->xmppボットは安定動作しているようなので、
モジュール部分だけ公開してみる。
CLだとcl-xmppなんてのがあって、
asdf-installで簡単インストールできたりしてちょっと羨ましかったり。
gravatar api
がidenticonに対応している点を読み飛ばしていたので、
gravatar.elにコードを付け足した。
gravatarはほかにもmonsteridやwavatarsにも対応してるらしいので、
選べるように。
identiconというのはユニークなアイコンを生成する手法のひとつ。
詳しい説明はRadium Software - identicon
でされてるので、特に付け加えることはないかな。
ちなみにfirefoxにもIdentFavIcon
というアドオンがあって、
faviconが無い場合はfaviconを自動生成してくれる。
ソースを読んでみると、
javascriptでcanvasに書き込んだりしていてなかなか面白い。
外部のサーバにアクセスもしないし、軽いのでお勧め。
そういえば、DISQUSのアカウントを作成するときに、
何も指定せずともアイコンが入っていた。
もしかするとgravatar
に対応してるのかもしれない。
gravatarというのは個人のアイコンをストアするだけのサービスで、
アプリケーションが対応していれば、
アイコンを各サービスごとにアップロードしないで済むというもの。
CPANやgithubがこれを使っているので、
ソフトウェアの開発をしている人ならば、
知っている人も多いのではないだろうか。
というわけで以前書いたgravatarのgnus用のスクリプトを置いておく
.emacsに
(require 'gravatar)
(setq gnus-gravatar-directory "~/.emacs-gravatar/")
と書いておくと、
ニュースやメールのFrom行から送信者のgravatarアイコンをダウンロードしてフィールドに挿入する。
いってみればX-Faceのウェブ版のようなものだろうか。
ときどきすごいアイコンを登録している外国人がいて、
真面目な議論をしているときにふきだしてしまうことがある。
あんまりにもさみしいのでコメントをつけられるようにしてみた。
自前で書くのも面倒なので、
DISQUS
と言うサービスを使ってみることに。
friendfeedも公式に対応してるみたいなのでメンテも楽そうだ。
なかなかおしゃれな掲示板なのだが、
動作がかなり重い。新しいマシンが欲しくなるくらいだな、こりゃ。
uimからYahooのかな漢字変換
で変換できるようにした。
--with-curl --with-expatつけてビルドすること。
利用にはAPIキーが必要なので http://developer.yahoo.co.jp/ で登録する必要あり。
変換を開始する前にuim-pref-*からAPIキーを入れないとクラッシュするよ。
変換効率はまあ、あれだ。それと、学習機能がないのは残念。
予測入力もできるらしいけど、
このパッチもcanna.scmベースですので以下略。
それと、
文節の区切りを指定したい場合は、テキストを半角スペースで区切ってください。
とあるけど、区切って欲しいところにスペースをいれると、
関係無いところでさらに文節区切りが発生するらしく、
文節区切りを移動させていくと妙な挙動をするようになる。
これはなんとかしないといけないところ。
というか、sigschemeだけでssaxやろうとしたけど、
--enable-hygienic-macroつけてビルドするとgccがメモリ食い尽くして落ちるし、
readは(quote @)通さないので仕方なくexpatにしたんだよな。
なんとかならないんですかね。これ。