2004-09-05 ========== ひたすら面白くない日々と、ひたすら面白いことを考える日々 -------------------------------------------------------- Reference URI: http://lowreal.net/logs/2004/09/05/1 Written Time: 2004-09-05T04:26:53+09:00 Tags: life 土曜日は朝から「なんで土曜日に学校なんかいかなきゃいけないんだ。しかもあの糞学校に 」と考え、日曜日は「あぁまた明日から糞学校か」と凹み、平日は淡々と脳みそがやせてい く日々である。 ○×+運 ------- Reference URI: http://lowreal.net/logs/2004/09/05/2 Written Time: 2004-09-05T04:36:13+09:00 Tags: life どこの大学に入ってもインチキ野郎が大量にいるんじゃないかと思うこの頃。周りに誰がい るかとかそういうのって全部運じゃないか…… じゃあどこにインチキ野郎がいないかって言ったら、いないとこなんてないんじゃないかと 思うこの頃。どれぐらいいるんだろう。 関係ないけど、妙に気取ってる人が苦手だ。すごいくだらないんだけど、高校生なら「高校 生らしく」するべきで、たかが粋がってるだけの高校生が「飲みいこうぜ、のみ」とか言っ てるのはなんか胡散臭いって思うような。別に粋がってるやつだけじゃなくて、言葉(文字 )遣いが気取ってたり、格がないのに一人称が「私」だったりするとなんかめげる。 人のこと言ってるんじゃねぇよ。 さて、自分で判断できないことはどうやって直せばいい だろう。 php ? ----- Reference URI: http://lowreal.net/logs/2004/09/05/3 Written Time: 2004-09-05T12:44:32+09:00 Tags: prog domxml は PHP (PHP: Hypertext Preprocessor) 5 で使えなくて、DOMDocument とか XSL は 4 では使えないってか。ローカルで xslt_pro cess のロードするときのパスがオカシイのでいちいち fopen する必要ありまくりですか。 めんどくさい。 Ruby プラグインっぽいもん ------------------------- Reference URI: http://lowreal.net/logs/2004/09/05/4 Written Time: 2004-09-05T14:26:07+09:00 Tags: prog 別ファイルに定義されたクラスを動的に読み直したいのだけど、どうやっていいやら。単に eval とかやると同じクラス名はもう使ってるぜ?って警告されるわけだし、Class::new do ... end は違うくさいし、remove_const はメソッド内から呼べない*1 し。 プラグインみたいな。ずっと動きっぱなしのプログラムで、ある一部分だけソースからもう 一度読み直してやりたい。 # ML の過去ログで面白いのハケン [[ruby-list:27327] Haiku](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/27327). こういうの好き class PluginManager def initialize @plugins = {} end def class_na me(filename) File::basename(filename, ".rb").capitalize end def load (filename) class_name = class_name(filename) eval(open(filename) {| f| f.read }, binding) # インスタンス作成して @plugin に突っ込む。 e val("@plugins[class_name] = #{class_name}::new") end def unload(filename) class_name = class_name(filename) PluginManager.class_eval("remove_c onst(:#{class_name})") @plugins.delete(class_name) end def each @plugins.each do |k,v| yield k, v end endendpm = PluginMa nager::newpm.load("foo.rb")f = PluginManager::Foo::newpm.unload("foo.rb")f = Plug inManager::Foo::new # => uninitialized constant PluginManager::Foo (NameError)=be gin# foo.rbclass Fooend=endみたいな感じかなぁ……もっとスマートにできるような気がする。しかもコレだと Plugin Manager の外からロードしたクラスにアクセスできる(丁度上の f のように )んだよね。もう一個 Plugin クラスとか作ってその中にロードしたクラスのイ ンスタンス突っ込んでやろうか。 Ruby PluginManager と命名規則 ----------------------------- Reference URI: http://lowreal.net/logs/2004/09/05/5 Written Time: 2004-09-05T19:00:26+09:00 Tags: prog 外側からアクセスできるのはそんな大きな問題にはならないような気がするので、このまま 実装してこう。まぁクラスオブジェクトを適当に突っ込んだらすぐに remove_const すればいいような気がしないでもない。この辺考えよう…… 前回ロード時のファイル日時と比べて更新されてたらリロードするメソッドとかとか。 ちなみに結構命名規則がいいかげんな感じで統一してたりする。クラス名とかモジュール名 は単語先頭を大文字にする(どっちにしろクラス名先頭は大文字だし)形で、メソッド名と か変数名はアンダースコアで単語つなぐ、ってのを基本として適当に単語作ったり略したり 。 foo_bar: 普通 FooBar: WinAPI とか、C とかっぽい気がする。読み難いし書きづらいし間違いやすい。 FOO_BAR: 定数 fooBar: なんかダサい Foo_Bar: Foo_bar: あんまり見かけない 激しくダサい どうでもいい話だ。でも Ruby のメソッド名に大文字が混ざってると違和感! Javascrip t だといろいろ混ざったりとか……キタネ ていうか、インスタンス作ったらすぐに remove_const やってもいいのかな。