bitlbee の文字化け問題

Posted by yoosee on Debian at 2007-09-29 22:00 JST

*1  bitlbee は一部変換出来ない文字があると全部化けるのが困る

最近は AIM, Gtalk (+twitter) は全て bitlbee 経由の IRC クライアントで使っているのだが、bitlbee では utf8 のハンドリングで一文字でも変換に失敗するとメッセージ全文が文字化けしてしまう。文字コード変換をしている bitlbee/util.c を見ると、do_iconv(...) 内で iconv() が (size_t) -1 を返したときの事後処理が全くないから、そりゃ化けるだろうという感じではある。

特に鬼門かつ頻繁に出るのが "〜" (0x2141) なわけだが、ad-hoc にこれだけでもエスケープするコードを書いて逃げるのがいいか。真っ当に対応するならどうするべきだろう。

*2  Pidgin (aka Gaim) での対応

と言う事で Pidgin ではどうしてるんだろうと思ってみてみたら、libpurple/desktopitem.c 内で glib の g_convert(...) を使ってる。で、glib の gconvert.c では iconv() の EILSEQ エラー(入力に無効なマルチバイト文字列がある) の場合はその先の文字列を継続して変換しているっぽい。真面目に自前で書くと結構面倒そうだが、Glib 以外にこの手の iconv wrapper で良いのは無いかな。

*1  Zwitter preview release 2 できたよー - tDiary::mozurin

ZwitterBitlbee を使っているので Twitter Client は IRC client で充分だと思っていたが、ふと入れてみた Zwitter がとても使い易く楽しいので紹介。カーソルキーと決定・クリアボタンのみで、Recent log から個々の Friend の timeline 、更にその友人一覧を閲覧し、そこから Friend 登録も出来る。片手でぽちぽち見て回れるのがとても気楽。また WILLCOM の位置情報を付けての投稿も手軽にできる(自動投稿は未実装のようだけど)。自動更新や記事投稿後のサスペンドなんかは、さすが分かってるなという感じ。

ファイルを任意の場所に展開して実行後、Twitter の ID, Password, データの置き場所を設定して再起動すれば使えるようになる。展開後のサイズが約 4MB と大きいが、これは位置情報から住所を出す zipcode.bin が含まれているからなので、位置情報を GoogleMaps 形式や TwitterMap 形式で出すのであれば消してしまっても大丈夫かもしれない。

データとして保存される timeline log や icon 情報は個々は大したサイズではないが、使いつづけると数MB程度にはなりそう。現在は 641KB 。miniSDカード側にデータと一緒に置いても特に問題なく使えているけど、時々(特にサスペンド後の操作時に)突然死するのがプログラム側の問題なのか SD 側の問題なのかは不明。

使っていて気になるのは、最大件数の20件取得時にはステータスの更新に数分かかること。また Friend が 100 を越える人の Friend list を取得すると、10分くらい殆ど返答が無い状態になる。
まぁこれは基本的に私の契約速度が遅いから (〜30kbps) なので仕方がないし、Twitter API 仕様書 にある since を使っての時間差分取得やアイコンのキャッシュもしているようなので、これ以上の高速化は難しそうかも。今は全情報取得後に表示されるので、アイコン取得確認時にはアイコン非表示で先行して情報表示だけしてしまうと言うのができると多少ましになるかもしれないが。もしくはプログレスメーターを表示するとか。

あとはリリースノート(?)にも書いてある通り、一部の (例としては tokyoforecast の) PNG アイコンが表示できてない事と、たまに突然死するのが気になる不具合。使う上ではあまり困ってはいないけど。

*1  Bitlbee の接続時認証を自動化する

Bitlbee は各種 IM を IRC に統合してくれるしごく便利なソフトなのだが、接続のたびに identify password と入れるのが面倒だった。Windows で使っている IRC クライアント Cotton のサーバ設定には接続時コマンドを送る機能があったので、
privmsg &bitlbee :identify password
と設定したら自動的に繋がるようになってますます便利に。

*2  Riece でも同じ事をしたいと思ったが

Riece では接続時の処理として :function を定義できるようなのだけど、これは riece-open-server から irc を over ssh tunnel する際などに呼ぶものらしく、接続後にサーバにコマンドを送るという感じの処理ではなさそう。どこかで hook をかませばなんとかなるんだろうけど。

bitlbee と irc client の間に nadoka や tiarra のような irc proxy をかませば済む上にログまで取れて一石二鳥な話ではあるのだが、bitlbee 自体の daemon mode がお勧めされていない現状では、実質城中常駐モードになるそうした使い方にはちょっと不安が残る。

*1  BitlBee - An IRC to other chat networks gateway

Day Tripper の記述を読んで、IM - IRC gateway の BitlBee を導入した。
BitlBeeとはインスタントメッセンジャーとIRCをつなぐゲートウェイサーバーです。
これを使うとIRCクライアント一つでMSNメッセンジャーやGoogle Talkも使えるし、おまけに大ヒット中のTwitterをJabber経由で投稿できるのでウハウハじゃね?nofuture.tv - BitlBeeを使ってXchatでIRCとMSNメッセンジャーとTwitterをひとまとめにする
実際うはうはだった。IM のクライアントを IRC に集約できてかなり便利。もちろん Twitter - IM も BitlBee から使える。IM 周りの対応は Gaim のコードから派生して作りこんだものらしい。

インストールは上記サイトにある通り、Debian ならば
 # aptitude install bitlbee
で完了。標準では 6667 を listen しようとするので、変更するなら dpkg-reconfigure bitlbee とするか、手で /etc/bitlbee/bitlbee.conf と /etc/inetd.conf を編集する。AuthMode は標準で Open (誰でも接続・利用可能) なので、利用形態にあわせて Closed や Registered にしておくのが良いだろう。なお root 権限が無い場合は、付属の bitlbeed.c.gz 使うことで利用できるようだ。要は socket を 開いて常駐し、 bitlbee を kick するだけのプログラムのようだが。

IRC クライアントは Linux では riece と xchat (IRC over SSLを使う用)、Windows では Cotton を使っている。どれも複数サーバ対応で、問題なく接続が出来た。パスワードその他は平文で飛ぶので、インターネット経由で繋ぐ際には ssh tunnel でも使った方が良さそうか。

*2  BitlBee の使いかた

使いかたは上記サイトにある通りで、基本的に help と打てば使いかたに関しての色々な情報を得ることが出来る。まずは
 register <password>
でパスワードを設定する。ここで設定したパスワードは、次回接続時に identify コマンドとともに呼び出すもの。続いて IM のログイン情報を登録。AIM の場合は
account add oscar <account> <password> login.oscar.aol.com
と言った感じ。AIM では空白を含むアカウント名を使っているのだが、"〜" で囲んだら問題なくログインできた。登録後は
 account list 
で番号を確認し、
 account on 0 
のように接続する。接続時に inactive な buddy はリストに上がってこない。メッセージの送信は private message にしてもいいし、root window で nick: message と言う具合にしても送れる。問題なく繋がったら忘れずに save しよう。

twitter の更新も問題なく出来たし、twritter からの update もちゃんと表示された。日本語も set charset iso-2022-jp 設定で大丈夫(たぶん裏で utf-8 に変換してるのだろう)。欲をいえば Skype chat にも対応してほしいが、プロトコルが非公開ということもあるし難しいか。

ちなみにこのプログラムは inetd 経由で起動するものなので、非接続時は IM サーバ側からも接続されていない状態になる。IRC proxy は常駐するのが普通なので感覚の違いにちょっと注意した方が良さそう。常駐する Daemon mode もあるようだが、現時点では experimental としてお勧めは出来ないとされている。

また、BitlBee 公開サーバ もあるようだ。もちろん第三者のサーバにIMアカウント情報を預けることになるし、通信も基本平文のままなので利用は慎重に。

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

Monthly Archives

Select Month to read
  

Ads

Recent Entries

Related Sites