26 June '2007 - 20:39 | 技術動向 RubyCocoa が楽しい件
Cocoa も Objective-C もまったく触ったことがないし、勉強もしてないので、なにがどうなのかは詳しくは知らないけれど、面白そうなので、先週から RubyCocoa で遊び始めた。
そもそも Cocoa の作法はまったく要領を得ない上、ruby のスレッドと NSThread の整合性の問題で、ちょっとヘマをすると core 吐きまくってあっという間に数ギガを消費してしまい、週末は rm -f /cores/core.* って何度タイプしたか分からないのだけれど、それはそれ。
で、なにからやってみようか考える。先日、温度がどうとかって言ったから、まずは温度を表示するコマンドを作ってみよう。
とりあえずアップルのサイトを調べてみたら、IOKit というのを使うと欲しい情報が取れることが分かったので、これを使う方法を探してみる。が、どうも簡単そうじゃなさそうな感触。
かわりに、bundle を作って Objective-C メソッドを ruby から呼べるようにする方法を発見したので、それを試してみる。
Objective-C で SystemManagementControl クラスを作って、そいつを ruby から呼んで、温度情報を取得してみたらあっさりと動いた。うーむ。こんなに簡単に ruby extension が書けるなんて、あまりに素晴らしす。
というか、これはこれで収穫だったのだけれど、そんなことがやりたかったわけではない。bundle なんて使わずになんとかしたい。
そこで、まずは勉強のために、既存のフレームワークで簡単そうなやつを使ってテストしてみることにする。WebKit なんていいんじゃまいか。
ブラウザを作るとなると、たぶん nib とかなんとか面倒なことになりそうなので、まずは GUI なしで遊びたい。GUI なしでどう遊べるだろう。あ、スクリーンショットでも取ってみるかな。見えなくてもいいし。
というわけで http://developer.apple.com/documentation/Cocoa からリファレンスを探して読みながら、でっちあげてみた。現時点での成果は http://n.h7a.org/hacks/rubycocoa/webshot.rb に置いておく。中川先生、ありがとう。
$ ruby webshot.rb google.com yahoo.com apple.com microsoft.com n.h7a.org/blog
http://google.com ... saved
http://yahoo.com ... saved
http://apple.com ... saved
http://microsoft.com ... saved
http://n.h7a.org/blog ... saved
$ ls *.png
apple.com.png microsoft.com.png yahoo.com.png
google.com.png n.h7a.org_blog.png
こんな感じで指定のサイトを png にして保存する。
PDF にして吐くと CSS が無視されるとか、フラッシュがちゃんと表示されないとか、細かいバグはもし原因が分かったら直すってことで。理由を知ってる人は教えてください。
ちなみに RubyCocoa 0.11.1 が入ってないと動かない。Leopard には入ることになってるけれど、秋まで待てない人は今すぐにいれるべし。
で、なんだっけ。
あ、そうだ、IOKit を bundle とか作らずに使う方法を見つけなくては。たぶん、C の関数と構造体を扱う方法が RubyCocoa に用意されてるだろうから、それを探してみればいいんだろうな。
いやー、楽しいなあ。