Ruby言語やLinuxのネタが多いです。
January 01, 2004 [おもひで]
■ [Ruby-GNOME2] 久々にGType vs Rubyのクラスで悩む
GObjectではgtk_hoge_get_type()みたいな関数(実際はそのマクロのHOGE_TYPE_FUGA)を呼び出すことでその型(というかクラスと言って良いと思うんだけど)が何者かを知ることができる。実際はGTypeというIDが返される。
でも、この*_get_type()というのは1度呼び出されないとそれが何者かどうか確定しない。
実際、アプリケーションが全てのウィジェット(クラス)を扱うわけではないから、このようなLazyな実装はとても都合が良い。
■ ところで、Ruby-GNOME2では初期化時にGTypeとRubyのクラスを紐づけてしまう。そう考えるとそれだけでRuby-GNOME2はC言語版に比べて大層重い処理をやってしまっていることになる。
とはいえ、そこでProperty等の情報を取得してメソッドに自動変換したりしてるのでやむを得ないと思うし、その程度のことなら現在のCPU速度を考慮するとあまり気にしないでイイと思ってる(開き直り)。今のところ他にもいろいろやらなきゃいけないことも多いしね。
でも、このことで1点、困ったことにぶちあたってしまった。
というのは、hoge_get_type()という関数が公開されていないものがあるのだ。
ある特定の関数から呼び出されるようになっていて、いつそのGTypeが確定できるのかがモノによってマチマチだ。
具体的にはGdkの環境依存のクラス(X11, LinuxFB, Win32)のところがそうなってる。もちろん、環境依存の部分は隠蔽すると考えるのであれば、そもそも実装する必要はないんだけど、GTypeとRubyのクラスが1:1にならなくなるのでなんか気持ち悪い。特にGTypeからRubyのクラスに変換するときに、環境依存のGTypeがきちゃうとそれを環境非依存のRubyクラスにマッピングしてあげる必要も出てくる。
■ あ、そうか。逆に言えば、先にRubyのクラスだけ定義しちゃって、確実にGTypeが決まった後にRubyのクラスとGTypeをマッピングできれば良いのか。GOBJ2RVALあたりか。うーん。
■ [Fedora] MozillaでFlashプラグインが動かない
友人からの年賀状Flashを見ようと思ってFlashプラグイン(Shockwave Flash 6.0 r79)をインストールしたんだけどどうにも動かない。何でかなーと思って-gオプション付きでmozillaを起動したら以下のようなメッセージが。(LANG=Cにしたのは文字化け対策)
# export LANG=C # mozilla -g LoadPlugin: failed to initialize shared library /usr/lib/mozilla/plugins/libflashplayer.so [libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory] LoadPlugin: failed to initialize shared library /usr/lib/mozilla-1.4.1/plugins/libflashplayer.so [libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory] LoadPlugin: failed to initialize shared library /usr/lib/mozilla-1.4.1/plugins/libflashplayer.so [libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory]
■ なるほど、ということで、compat-libstdc++-7.3-2.96.118.i386.rpm, compat-libstdc++-devel-7.3-2.96.118.i386.rpmをインストールして再起動したら無事動作した。
