前々からそのうち遊んでみようとは思ってたものの特にネタも思い付かなかったので手をつけてなかったのだけど、BlogFSに丁度良さそうだし、ちょっとやってみることにした。RubyでいじるFUSEってファイルシステム作るくらいだからやっぱCとかC++とかで書くもんなんだろう、とぼんやり思ってたんだけど、そう言えば前にハチロクの卒研発表会でRubyで実装したとか言ってたよなぁ、あとhatenafsはそう言えばPerlだったっけなぁ、と思い出した。なんだ普段使ってるので書けるな。軽くググったらRubyでもFUSEのライブラリがあるらしい。...makeでコケた。Rubyのfusefsに問題があるのかもしれないしMacFUSEだからそのせいかも知れないしなんかfusefsの情報古いのしかでてこないなーあー面倒くさいや。僕らのMacRubyさんがいるじゃないかRubyからFUSEを使う方法をもう少し調べるとか、Perlから使う方法を調べるとか、そっちに進んでも良かったんだけど、もっとお手軽な方法に気が付いた。MacFUSEをインストールするとMacFUSE.frameworkが入る。ことは、とりあえずObjCからは簡単に使える。ObjCで書くのはまぁいいけど、正直AtomPubの扱いとか文字列の処理とか面倒くさすぎる。ObjCのフレームワークがあるってことは...MacRubyから使えるじゃないか。Luaでファイルシステムを実装しよう(MacFUSEで)」あたりを参考にとりあえず実装してみた。これをmacrubyコマンドで実行する。0.4でも動くとは思う(未確認)。/Volumes/NamakeFS/honne.txt寒いので冬眠したいOK、OK。ちなみにこれだけでFinder上にもNamakeFSディスクがマウントされて、ちゃんとCocoaアプリとかからでも開ける。思ったより簡単だった。HotCocoaでアプリ化しちゃえば配布できる形にするのも楽だし、ファイルシステムを作るの自体はObjCの作法に則る必要があるけど、中のロジックはRubyで書けるから、RubyのAtomPubのライブラリも使えるしObjCだと本当に面倒な文字列の処理もさくさく実装できる。MacRubyでやるってのがまぁ難点と言えば難点だけど。開発環境としてはまだアレげだし。RubyCocoaでやりゃいいって話ではあるんだけど、ねぇ...まぁ、いっか。関係ないけど、Luaが意外とすんなり読めた件。中でやってることはまんまObjCだからってのもあるけど。Luaもいじってみようかしら。end違いは一点、MacRuby版でクラスの定義を書き換えたとき、新しく作られるオブジェクトには影響するけど、既にあるオブジェクトには影響しない。RubyCocoa版はクラスの定義を書き換えるとそのクラスの全てのオブジェクトに影響する。Rubyは全てのオブジェクトがメタクラスのオブジェクトを見てるけど、ObjCのオブジェクトはそれぞれが関数ポインタか何かでメソッドを保持してるってことかな?RubyCocoaにおける「Cocoaのオブジェクト」って結局「(ObjCのオブジェクトを内部に持った)Rubyのオブジェクト」だけど、MacRubyのオブジェクトは全てが「ObjCのオブジェクト」なので、若干CRubyと挙動が違ってくるみたい。ところで、上のコードはインスタンスメソッドを書き換えてるんだけど、ふと思い立ってこんなコードを書いてみた。#<Sloth:0x80063c740>"string"MacRubyだと、Sloth::newの実装が差し換えられた。RubyCocoaだとどうだろう。id=0x3734a0>"string"あれっ。