Growl は UDP を使ってデータを送ることでポップアップを出したりできて便利。
いろんな言語で簡単にバインディングが書ける。

Ruby だと ruby-growl というライブラリがあって、これを使って簡単に Growl のアレを出せる。
でも問題があって、僕の Mac(Intel)だと priority の指定が効かない。
Growl は5段階の priority を指定できて、それによってポップアップの色を変えたりできる。
古い Mac(PowerPC)だと問題ないみたい。
指定した priority のポップアップがちゃんと出る。
おそらくマシンアーキテクチャによって挙動が変わるんだと思う。
それが ruby-growl 側の問題なのか Growl 側の問題なのかがよくわからない。
さっき言ってた priority は flags と呼ばれるデータとして Growl に渡される。
flags は 16bit のデータで priority はこのうちの 3bit を使って表される。

この flags を big endian のバイト列として渡すか little endian のバイト列として渡すかで Growl の挙動が変わってくる。
僕の Mac で意図した通りに動作させるには flags を little endian としてセットして Growl に渡す必要があった。
しかしそうすると今度は PowerPC のほうで正しく動かなくなってしまう。
そもそも Growl のネットワークプロトコルのほうで flags のエンディアンをどっちかに決めておくべきなんだと思う。
ネットワークプロトコルがマシンのエンディアンに依存するってどうなの。
追記:
Peter Hosey 氏曰く、
> * are the two-byte fields (flags and the various lengths) in network
> byte order?Yes.
is it possible to send Growl message from pure C daemon program? – Growl Discuss | Google Groups
やっぱバグですね。






















