通知三昧

ニッチ過ぎるのか、あんまり話題じゃないので書いてみる。Growlの話。
GrowlっつーMac OSXのソフトウェアがあります。リンク先の"Screenshot"を見ればわかるが、よくメーラが「メール*通届きましたよ」なんてバルーンを出すでしょう。あと、あれだよ、Windowsの「使用していないショートカット」。ああいうちょっと出るバルーンだけをやるソフトウェア。プラグインで他のアプリからの通知にも対応したり、通知だけを送るコマンドもあるから、これを他のアプリから起動するようにして、「iTunesの曲が変わりますよ」「DHCPリース更新しました」「コンパイル終わりました」などの、「いちいちウィンドウを出してチェックしたり、メールで送ってもらう程の事じゃないんだけど、一応知りたい」くらいの情報を表示する。恒例のいい加減な例だと

% ./configure && make && make install && growlnotify "Build suceeded"

なんてやって放り出してメールを書いていれば、画面の端にメッセージが浮かんできて(もちろん今のフォーカスを奪ったりしない)、はいはい後で見ます、とメールの続きをそのまま書いているうちに、勝手にフェイドアウトしてくれる。古い人にわかりやすく言うと「なんでもbiff」です(笑)。あ、biffは消えないか。
で、これが結構癖になる。Web、RSS、メール、IMなどなど、今現在の情報を受け取るサービスは多いんだが、こういう通知を受けとる「だけ」のツールは意外にない。意外に、そう使いたいものが多い気もする。例えば未読。「RSSリーダが未読ですよ」と来るのはいい。が、クリックしない限りいつまでも「未読ですよ」と表示してるのは、ちょっと厭味な気がしませんか。
Growlの有名(笑)な例を挙げよう。RubyのTDD支援ツール群ZenTestのautotest。ディレクトリを監視してて、変更があると勝手にテストを走らせてくれるツールなんだが、リンクを飛んだ先の動画にあるように、勝手に動いてテスト成績だけGrowlに飛ばしてくれる。同様に典型的な例はCIの結果もあるかね。Yahoo widgetsにちょくちょくある。あとは、CVSなどのコミットログメールもあるだろうな。詳細はdiff引けばいいんだもの。
もう少しだけ(笑)プログラミングから離れると、きょうび無いかも知らないが、ファイル転送中のquota監視とか。「あー、そろそろやばくないすか」なんての。あるいは、今syslogなんかに投げているdaemonの愚痴や嘆き(笑)にも、向いているのがあるかもしれない。GrowlにはHardware Monitorってのが付いてきて、これを走らせておくと、デジカメやらCDROMマウントはもちろん、スリープ後に無線LAN再接続なんてのも表示してくれて、結構助かる。
アプリケーションだとダイアログ、随時裏で起動しているプログラムだとログファイル、という情報通知手段があるけれども、他にポップアップという手段もある。ここまではまあ、普通。前からしくみとしては作ってあるものもあるし。でも、これを1つのサービスとして使えるのは、簡単な割になかなか便利だなと思った。好いところは、

  • 読むけれど、今は真面目に読まなくていい(横目でいいし、今の作業はほぼ中断されない)
  • 横目だけど、連絡があるので、安心はできる
  • 消さなくていい。自分で消える (元の情報は別のファイルやメールにあるんだから勝手に消えて全然OK)
  • 未読処理しなくていい (勝手に消えるし、必要ならどうせまた来る)
  • 大量に来ても割と平気 (消えるから)
  • 統一されている(意外に大事。横目の目線があちこち言ったら、横目にならない)

かな。まあ、元々はnotification centerで遊んでただけなのかもしれないけどね(笑)。あと見ためも大きいな。
最近は世界に散らばる小人さん(笑)のおかげで、他のプラットフォームでも似た実装があるみたい。

Windowssnarl以外は全てコマンドラインからも飛ばせる(SnarlDIS.exeがそうなのかもしれない)。上と対応させてプラットフォーム名で書くと、

 MacOSX: % growlnotify -m "message" "title"

  Gnome: % notify-send "title" "message"

    KDE: % dcop knotify default notify eventname "title" "message" '' '' 16 2

Ruby bindingはruby-growlruby-snarlruby-libnotifyがある(全部RubyForgeにある)。Growlリモートホストからも簡単な認証付きのUDPで投げられる(ruby-growlGrowlが無くても動く)し、ruby-libnotifyはGtk+のストックアイコンも使える(--icon=gtk-yesのように指定)など、詳細はいろいろありますが。どれにしろ、使いではある気がするにゃあ、という話。通知をUDPで待ってそれぞれのプラットフォームでnotifierを起動するdaemon/サービスを書けば、どこでもノーティファイ。とかなんとか。


...という、上の話は、お気付きの通り、Growl以外、ほとんどそのZenTestのautotest/内を見て初めて調べたんですがね(笑)。あの動画みたいにやりたくて増えたみたい(笑)。やっぱ動画重要。なのでlibnotifyのをテケトウにでっちあげてRubyForgeのpatchに投稿しておいた。入れてくれるといいな。