kumaryu日記
2009-03-23 しょんぼい
_ [Ruby] MacRubyつかえない
MacRubyで2chブラウザ的なものを作ってたんですよ。実況用の。
RubyCocoaの時も思ったんだけどなんでこんなにドキュメント無いの!?
KVCってのをやるのには、普通にattr_accessorとかやればいいみたいなんだけど、それで作ったメソッドで値を設定してもなぜか監視してるオブジェクトに通知がいかないみたい。
たとえば
class BBS def initialize @name = '' end attr_accessor :name def update(sender) self.name = '名前更新' end end
みたいなことをやっても、updateを呼んだときになぜかnameを監視してるオブジェクトに通知がいかないみたい。なんでだろう。
self.setValue('名前更新', forKey: 'name')
とかやると通知されたんだが。
まあこれは俺がKVCについてよく分かってないからこんなものかもしれない。使いかた間違ってんのかもしれないし。
あとopen-uriとかnet/httpを使おうと思ったらなぜかEOFErrorが飛んでくる。どうもソケットからの読み出しが出来ないっぽい。うお、確かにI/Oは問題あるって話だったけどこれは困るなぁ。
でもCocoaで簡単にダウンロードしてくるクラスとかあったのでとりあえずはこれで。
それはともかく、MacRubyには他にも致命的な問題があった。
それは文字エンコードの扱いがめちゃくちゃすぎること。
1.9ベースなのに、encodeとかforce_encodingとかやってもさっぱり反応しない。いや恐いのはエラーもでずに一見動いているんだが、実際中身はめちゃくちゃ。
encodeしてもエラーはでないが、実際に文字コードの変換はされず、Iconvは何故か落ちる。
nkfが動いたからまあいいやと思ったら、文字列のエンコーディングがめちゃくちゃなので、正規表現にUS-ASCII外の文字を渡すと、マッチ結果がぶっこわれた文字列返してきやがる!
これはマジでつかえねー。せめてUTF-8ぐらいは動いてくれればいいのに英語しかつかえねーとかゴミすぎる。これだからアメ公は!
外部ライブラリのOgreKitとか使えばいけんのかなーと思ったんだが、Rubyつかってんのに正規表現がネイティブで使えないとか苦痛すぎね?いまからレスとかパースしようとしてんのにさ。
というかObj-Cのクラスしか使えませんというなら最初からObj-Cでいいよ。
そんなわけであきらめてRubyCocoaで書き直し。まだコードはそんなに書いてなかったので乗り換えるのは簡単だった。
うーん、RubyCocoaと比べるとinitializeがそのまま使えるとかNSObjectからいちいち継承する必要が無いだとか、MacRubyが便利なのは確かなんだよねぇ。
しかし日本語が実質的に使えないとか、I/Oがダメっぽいとか、まだまだな感じだ。
あと拡張ライブラリは、mkmfがコンパイラが入ってねーとかよくわからん事を言い出したので全然だめ。
開発は活発なようなので改善されていくことを望もうか。