Wednesday, September 16, 2009

IMAProwl 1.0.0

http://github.com/takuo/IMAProwl/downloads
ようやく1.0.0ということに

  • NKF使うのやめてIconvを使うようにした
  • 日本語以外のメールも正しく通知できるようになった
  • テキスト処理中での例外処理対応を増やして、エラーになってもがんばって通知だけはするようにした
  • 本文がテキストじゃない場合は本文を通知に含めないかわりに、メディアタイプだけ通知するようにした
  • ほんとはテキストのパートを探してテキストを通知したいのだけど、面倒
  • 通知する件名の文字数を指定できるようにした
WindowsではIconvが標準じゃないので、ロードに失敗したらNKF使うようになってます。(たぶん)
iconv.dllを適切な場所に置いとけば問題ないかと。(たぶん)

Debianパッケージとして正式にuploadしてあるので、Debian sidの環境では
apt-get update && apt-get install imaprowl
cp /usr/share/doc/imaprowl/examples/config.yml ~/.imaprowl.conf
などとして、~/.imaprowl.confを修正してお使いください。
(9月17日以降)


既知のバグ
・prowl serverが死んでるときにsendした通知がリトライされない。(fixed in 1.0.1)

Tuesday, September 15, 2009

iconv_mime_decode on Ruby

PHPには iconv_mime_decode()という便利な関数がある。
さすがはPHP.

というわけで、Rubyでも同じような関数がほしかったのでテキトーに実装してみる。
PHPの中は見てないのでどうなってるのか知らない。
def iconv_mime_decode( input, out_charset = 'utf-8' )
while input.sub!(/(=\?[A-Za-z0-9-]+\?[BQbq]\?[^\?]+\?=)(?:(?:\r\n)?[\s\t])+(=\?[A-Za-z0-9-]+\?[BQbq]\?[^\?]+\?=)/, '\1\2')
end
begin
ret = input.sub!( /=\?([A-Za-z0-9-]+)\?([BQbq])\?([^\?]+)\?=/ ) {
charset = $1
enc = $2.upcase
word = $3
word = word.unpack({ "B"=>"m*", "Q"=>"M*" }[enc]).first
Iconv.conv( out_charset, charset, word )
}
return ret ? iconv_mime_decode( input, out_charset ) : input
rescue
# "Error while converting MIME string."
return input
end
end
こんなんでいいかなぁ。

Tuesday, September 8, 2009

IMAProwl 0.9

http://github.com/takuo/IMAProwl/downloads

daemon modeの実装と設定ファイルの位置を変更しました。

設定ファイルは
  1. -c オプションで指定
  2. ~/.imaprowl.conf
  3. `pwd`/imaprowl.conf
  4. `pwd`/config.yml (deprecated)
  5. basename(imaprowl.rb)/imaprowl.conf
の順番で探して読み込みます。

daemon modeはWindowsでは機能しません。

コマンドラインオプション
$ ./imaprowl.rb --help
Usage: imaprowl [options]
-c, --config FILENAME Specify the config file.
-q, --daemon Enable daemon mode.
-d, --debug Enable debug output.

これでdebつくればDebianにuploadできるかもしれない。な。

Saturday, September 5, 2009

IMAProwl 0.8

http://github.com/takuo/IMAProwl/downloads

やっと安定した感があります。
それと、IDLEが使えないIMAPサーバでも動作するようになりました。
たぶん、imap.softbank.jp でも使えます。

0.8での変更点
IDLEが使えない場合、NOOPにより新着チェックするようにした。
NOOPInterval: 15 とか設定しておけば15秒置きにチェック。

0.7.1での変更点
GMail以外のサーバでチェック後に既読にしてしまう問題を修正。

0.7での変更点
不測のブロッキング問題に対処(たぶん直った)。

Tuesday, September 1, 2009

TwiProwl 0.3

http://github.com/takuo/TwiProwl/downloads

いろいろと整理。
基本的にこれ以上はリファクタリングくらいしかしないつもり。


IMAProwlのほうは永久ブロッキングが発生することがあるのでそっちを調査中。
再現性はIMAP Server次第なのでなかなか不具合の原因が掴めず。
単純に切断されるだけなら問題なさげなのだが…。
なおったら更新予定。

Saturday, August 29, 2009

TwiProwl 0.2

http://github.com/takuo/TwiProwl/tree/0.2.1

IMAProwl 0.6 でやったことを一通りこっちにもapply.

rubygems freeだとかHTTP ProxyだとかLoggerだとかPriorityだとか。
API rate limitの面倒はみてない。

Edit: 0.2.1: Priority設定してるとエラーになる問題修正

Friday, August 28, 2009

IMAProwl 0.6

0.5でログの出力にLoggerクラスを使用するようになりましたが、ちょっとデッドロックしないかと不安です。
一応手元では安定してるみたい。

http://github.com/takuo/IMAProwl/tree/0.6.1

0.6でrubygemsとgemで配布されているprowlライブラリを使うのやめました。
ていうかHTTP/POSTのAPI使うだけなのにAPIライブラリもってくるのもなんか大袈裟だな、と。
まぁ本当の理由はHTTP Proxyを使えない作りになってたからなんですが。

というわけでProwlAPI呼ぶときにHTTP Proxyつかえるようになりました。

ついでにProwlにPriorityパラメータを渡せるようになってます。
アカウントごとに設定できます。
キーワードでマッチさせてPriority変えるようなことはできませんし、今後もするつもりもないです。
GMailですとフィルタとラベルがつかえるので、MailBoxを変えたアカウント定義を用意すれば実現は可能かな。

Edit: 0.6.1: Priority が送信されてない問題修正