2005年06月11日

HTTP::MobileAgent:サブクラス検知でいきなりつまづく

Posted by nene2001 at 15:28 / Tag(Edit): / 2 Comments: Post / View / 2 TrackBack / Google Maps このエントリーを含むはてなブックマーク
先に書いたHTTP::MobileAgentアーキテクチャ改修提案ですが、まだ本家には連絡していません。
とりあえず何か形がないと言っても流されるかもしれないので...。
とはいえ、今ある機能を全部再現してから提案、となると、元々一人メンテナ無理でしょ、というアタリから出てるのに本末転倒なのでアレですが、とりあえず最低限のアイデアの実現の目処は立ててから提案するかなと。

で、サブクラス・プラグインの自由な別開発、新規開発を可能にするための自動検知機構ですが、いきなりつまづきました。
こんな感じの実装を考えていたのですが(これはサブクラスの例ですが、プラグインも同じ)、
HTTP::MobileAgent.pmのimportメソッド
sub import{
    my $install_dir = __FILE__;
    $install_dir =~ s/\.pm/\/SubClass/;
    opendir (DIR,$install_dir);
    foreach my $file (readdir(DIR)){
        if (($file =~ /^(.+)\.pm$/) && ($1 ne 'NonMobile')) {
            my $subclass = "HTTP::MobileAgent::SubClass::$1";
            eval "use $subclass;";
            push (@subclasses,$subclass);
        }
    }
    foreach my $eachclass (@subclasses,"HTTP::MobileAgent::SubClass::NonMobile"){
        $eachclass->init();
    }
}
これで、一応うまくいくんです。
呼ばれているHTTP::MobileAgent.pmと同じライブラリツリーにインストールされているサブクラスは、自動検知できる。
いくんですけど、よく考えたら、サブクラスって、同じツリーにインストールされるとは限りませんよね。
PATHが通っているところならどこにでもインストールされる可能性があるわけで、特に開発環境でなんか、本番とは違うところにPATH通して開発中のプラグインとか置きたい、とか思うかもしれないのに、この方法だとそういうサブクラス・プラグインは検知されない。
同じようなことを、全てのPATHに関して自動検知してやろうとすると、@INCの全てのパスについてディレクトリ内調査してやらないといけない事になり、非常に効率が悪い。というか、実用性ゼロ。

できればプラグイン・サブクラスの自動検知にはこだわりたい...あるいは、他の方法でもいいんだけど、本体とサブクラス・プラグインの開発は独立しつつも、インストールさえすれば協調するようなやり方を何とかしたい、んですけど...。
誰かいいアイデアないですか...。

[composed and posted with ecto]

Related query words in Google & Yahoo
Related Books from Amazon
Trackback to this entry
TrackBack URL :
Trackbacks
サブクラス発見ロジック
Excerpt: HTTP::MobileAgent:サブクラス検知でいきなりつまづく - ここギ...
Weblog: Lost-Season
Tracked: 2005年06月13日 00:37
HTTP::MobileAgentのアーキテクチャ改修案、本家に取り込んでもらえそう
Excerpt: ...といっても、俺の実装を採用してもらえそう、ということではなく、こ...
Weblog: ここギコ!
Tracked: 2006年07月14日 23:09
Comments

こんにちは。
Catalystが使ってるModule::Pluggable::Fastの
ロジックって、たぶん@INC全部見てると思うんですが、
あれと同じようなロジック組んでSledge::Plugin以下
探させたら、

Benchmark: timing 100 iterations of find_pluins...
find_pluins: 2 wallclock secs ( 2.06 usr + 0.13 sys = 2.19 CPU) @ 45.66/s (n=
100)

こんな感じでしたけど、どうでしょう。

Posted by: kato at 2005年06月13日 00:51

うーん...。
こんな話題ふっときながら、恥ずかしながらなんですけど、あまりいろんな面での経験とかってないんですよね...。
だから判断付きかねるなあーと。

最初の判定にどれだけ時間かかっても、mod_perlやFastCGIだったらそれほど問題はないと思うんですけど、
HTTP::MobileAgentってモジュールの性質的にCGIでもよく使われると思うんですよ...。
CGIで使ったからっていって、少々負荷が上がったからといって使えなくなるようなモジュールじゃ困るなあ、と思うんですが、
かといってどの辺から使えねー!になるのかが経験がなくて判断つきかねるって感じで。

こいつの場合、SubClassとPlugin両方探しにいきますしね...。

今思いついたんですけど、__FILE__下はとりあえず見に行って、後はCGIとかなら環境変数でサブクラス・プラグインが指定されてればそれだけを読んで、指定されてなければ@INC全部見に行く、とかって仕様にしようかな...。


Posted by: ねね at 2005年06月13日 01:30
Post a comment












Remember personal info? 
2005年06月
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

About Me

Navigation

Search
Google
Web
kokogiko.net
Archives
Recent Entries
Recent Comments
Recent Trackbacks
Generic Viagra(Generic Viagra)
Update Pingを受け付けるサーバの実装
Adobe もクラウドをはじめた!各社のクラウドサービスの特徴は?(ラボブログ)
Amazon EC2のランニングコストはそんなに安くなかった
「ここギコ!」の人が涙も出ないような状況になっていることについて(僕だけが幸せになればいいのに。)
人員がクラスタ化できている職場と言うのはうらやましい そろそろ限界です
GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(ここギコ!)
GoogleMapsと連動したいなら幾何データ型よりPostGIS
GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(ここギコ!)
「ジオメディアサミット関西」が開催されます。
GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(ここギコ!)
MySQL4.1以降での空間情報の扱い方
なんか天から2兆円降ってくるらしいので みんな思い思いのところに募金なり寄付するのはどうか(ここギコ!)
「冷静に」「熱く」「マジ反論」でこの内容はある意味すごい
「亡びつつある日本の言語」と「日本語」、そして「普遍語」につらつら思うこと(ここギコ!)
国連人権委、アイヌ・琉球文化の保護を日本に勧告
「亡びつつある日本の言語」と「日本語」、そして「普遍語」につらつら思うこと(ここギコ!)
政治と祭祀が不可分と考えるなら、全ての祭祀を引き受けるのが筋
「亡びつつある日本の言語」と「日本語」、そして「普遍語」につらつら思うこと(ここギコ!)
Googleさんの技術でアイヌ語訳ができないだろうか
Hatena bookmarked
My del.icio.us

Banners

Syndication
Powered by
Get it!!