March 27, 2009

Growl ネットワークプロトコルの話

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

growl

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

growl_udp

この flags を big endian のバイト列として渡すか little endian のバイト列として渡すかで Growl の挙動が変わってくる。
僕の Mac で意図した通りに動作させるには flags を little endian としてセットして Growl に渡す必要があった。
しかしそうすると今度は PowerPC のほうで正しく動かなくなってしまう。
そもそも Growl のネットワークプロトコルのほうで flags のエンディアンをどっちかに決めておくべきなんだと思う。
ネットワークプロトコルがマシンのエンディアンに依存するってどうなの。

参考:
Network Protocol Format

追記:

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

やっぱバグですね。

March 22, 2009

読書: Amazon EC2/S3クラウド入門

Amazon EC2/S3クラウド入門 Amazon EC2/S3クラウド入門
学びing

秀和システム 2008-12
売り上げランキング : 1837

Amazonで詳しく見る by G-Tools

わかりやすくて良かったです。

EC2 や S3 なんかについては、なんとなくしか知らなかったのですが、これ読んで知った気になれた。文字通り「知った気になれた」だけで、実際に使う段になってまたいろいろ苦労するんだろうけど、知った気になれていると不安がかなり減るので良い。「ああいうふうにやって、あそこに気をつければいいんだな」みたいに、自分が実際に作業をしているところをイメージできるようになった。

僕を含め多くの人は、よくわからないものをデフォルトで怖がる(または敬遠する)ように初期設定されているんだと思う。

March 17, 2009

Termtter 合宿 and Ruby 温泉 in 滋賀

3月14日・15日に Termtter 合宿 and Ruby 温泉 を滋賀県の琵琶湖のほとりで行いました。
Ruby 温泉 2009 March in 滋賀

非常に充実した二日間でした。
頑張った甲斐あって、初のメジャーバージョンである Termtter ver.1.0 をなんとかリリースすることができました(ちなみに現在の最新バージョンは ver.1.0.1 です)。
参加者の皆さんお疲れさまでした。
特に、幹事としていろいろやってくれた hitode さん、ありがとうございましたー。

以下は当日 Termtter の現状を説明するために作った資料です。

合宿で撮った写真をいくつか載せておきますね。

photo photo photo photo photo photo photo photo photo photo photo photo photo photo photo photo

あとでいろいろ思い出して書くと時間かかるから合宿中にブログ書くべきだったかもなぁ。

March 15, 2009

Termtter の hook まわりの話

Termtter の hook 周りが大変ごちゃごちゃしてきた感が。。
ごちゃごちゃしてきたというか、方向性が見えないというか。
コマンドの実行から画面への出力という流れを hook だけでやろうとしたのに無理があったように思う。

あれこれ改善案を模索して、いきついたのが以下のような案。

  • output というメソッドをどっかしら(Termtter::Client かな)に定義する
  • コマンドの内部処理にて、Twitter からデータを取得したら、それを特定のデータ形式に変換したものを引数として output メソッドを呼び出す
  • 要は、output メソッドは Twitter データの共通の出力先みたいな感じ
  • この output メソッドの内部でフィルタリング処理とかログとしてDBに保存する処理とかを行う

photo

Termtter ver.1.0.0 がリリースされました!

Termtter 合宿 in 滋賀にて、Termtter ver.1.0.0 がリリースされました!

http://rubyforge.org/projects/termtter/

合宿帰りの電車(JR湖西線)の中で無事リリース作業を終えることができました。

photo

みなさんお疲れさまでしたー。

March 12, 2009

読書: 入門Mercurial

入門Mercurial Linux/Windows対応 入門Mercurial Linux/Windows対応
藤原 克則

秀和システム 2009-01
売り上げランキング : 70880

Amazonで詳しく見る by G-Tools

ふと神保町の本屋で見かけて、読みたくなったので買ってみました。

Mercurial ってほとんど Git と一緒ですね。
基本操作はかなり似てる。
hg clone コマンドでソースを取ってきて hg commit コマンドでコミット、そして hg push でリモートリポジトリに反映する。
Git と同じだ。
リモートリポジトリの最新のリビジョンをローカルに反映させるには、hg pull コマンドでソースを取得し、hg update コマンドで作業ディレクトリを更新する。
hg pull はデータを取ってくるだけで、作業ディレクトリは更新されない。
hg pull は git でいうところの git fetch か。
で、hg update が git checkout か。

ブランチの考え方・扱い方についてわかりやすく書かれていて参考になった。
分散バージョン管理システムは Git しか使ったこと無いけど Mercurial もなかなかよさそうだなと思った。
Mercurial を使わずとも、分散バージョン管理システムがどういうものなのかよくわかってないって人にも本書はおすすめ。
会社に置いておこう。

にしても、なんで Mercurial のコマンドは hg なのか。

March 7, 2009

hatebu_monkey

hatebu_monkey は、表示しているページの はてブコメント を表示する Greasemonkey スクリプトです。

hatebu_monkey.png

インストールは以下のページから。

hatebu_monkey for Greasemonkey

これ、非常に便利です。
僕は日常的に使用しています。
右下の青くて四角い所にマウスカーソルを持っていくと はてブコメント が表示されます。
初回表示時にデータを取りに行きます。

hatebu_monkey_hidden.png