新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2008-03-17

[Perl]Class::ComponentのHookの使いどころについて

run_hookを呼べば、Hookアトリビュートのついたメソッドを根こそぎ実行し、それぞれの結果を配列で返すみたいだが、いまいちどういうシーンで使うのか。。。

真っ先に思いついたのは、Plaggerのrunメソッドみたいな感じの使い方。
でも、わざわざ各PluginのメソッドにHookアトリビュートを付けるのは、いかにも面倒な感じがする。

......あ。
podを良く見てみたら、register_hookとかいうメソッドがあるんだね><

で、Waspってpmをでっち上げて、register_hook使ってみた。どうやら、予想通りの使いかたができそうだ。


### lib/Wasp.pm
package Wasp;

use strict;
use 5.8.1;
our $VERSION = '0.01';
use Class::Component;
Class::Component->load_components(qw/Autocall::Autoload/);

1;

### eg/test.pl
use lib qw(../lib ./lib);
use strict;
use warnings;
use Wasp;
use Data::Dumper;

my $c = Wasp->new;

$c->load_plugins(qw/Name Age Area Sex Favorite/);

$c->register_hook(say => { plugin => 'Wasp::Plugin::Name',method => 'say'});
$c->register_hook(say => { plugin => 'Wasp::Plugin::Area',method => 'say'});
$c->register_hook(say => { plugin => 'Wasp::Plugin::Favorite',method => 'say'});
$c->register_hook(say => { plugin => 'Wasp::Plugin::Age',method => 'say'});
$c->register_hook(say => { plugin => 'Wasp::Plugin::Sex',method => 'say'});

print Dumper $c->run_hook(say=>undef);


で、結果。

$VAR1 = [
'Name: YellowTurtle',
'Area: Earth',
'Favorite: Pasta, Olive, Coffee',
'Age: 27',
'Sex: I lovin\' it ;-)'
];


これってWebアプリのウィジェットの配置順序とか、カードゲームのデッキとか、そういう物の表現に向いてそうな感じもする。
だけど、run_hookした先が沢山ある場合、register_hookを何度も呼び出す必要がある。正直、これは結構面倒だ。

例えば、各プラグインの同名メソッドにフックポイントを置きたい場合(上記の例がまさにそう)がある。そんな時には、

$c->register_hook(say => {
plugin => [
'Wasp::Plugin::Area',
'Wasp::Plugin::Name',
'Wasp::Plugin::Favorite',
'Wasp::Plugin::Age',
'Wasp::Plugin::Sex'
],
method => 'say'
});

みたいに書けるとありがたいんだけどなあ。

2008-03-16

[視点]サービスを提供するということ

サービスを提供する上で不可欠な事柄として、以下のものが挙げられよう。
・企画
 サービスの根幹となる発想や決まり事、利用者からの要望を取り入れたアイデア等を用意する。
・開発
 企画から挙げられたアイデアや決まり事を形にする。
・広報
 サービスの存在や特長を宣伝する。
・運営
 利用者からの要望、質問、クレーム等の窓口となる。
・運用
 サービスを安定稼働させる。

大抵は、これらの他に会計が加えられるのだろうが、会計はサービスに直接関与しないので、割愛する。
これらの内、どれか1つでもおざなりにしてしまう様では、サービスにとって致命的な問題となる。以下、想定される状況を挙げてみた。

・企画がダメな場合。
 ・よくわからないサービスになる。
 ・使いづらいサービスになる。

・開発がダメな場合。
 ・使いづらいサービスになる。
 ・サービスの質が悪くなる(レスポンスが悪い、見た目が酷い等)。

・広報がダメな場合。
 ・利用者数が伸びない=流行らない。
 ・何故か悪評が付き、悪評だけが独り歩きしだす。

・運営がダメな場合。
 ・利用者からのクレームが殺到。最終的に利用者が激減する。
 ・よくわからないサービスになる。
 ・悪評が付き、他に運営しているサービスにも悪影響を及ぼす。

・運用がダメな場合。
 ・不安定なサービスになる。
 ・サービスの質が悪くなる(レスポンスが悪い、見た目が酷い等)。

最近よく見かけるパターンは、運営と運用がよろしくないというものだ。
というのも、(ここで会計が絡んでくるのだが)経営サイドが運営や運用にあまり投資したがらないのが大きな理由の1つのようだ。
実際、運営や運用というのは、一見生産性が無いように見える。しかし、これらはサービスを維持する上で致命的な役割を担っているのだ。いわば、運営・運用している時点で、失う予定の利益を確保しているわけだ。

是非サービスを提供する側の方々には、骨太な運営・運用を検討していただきたいものだ。

2008-03-13

[ニュース]朝日の「サンゴの敵、大量発生 沖縄で駆除作戦」という話

元記事

20年越しのビッグなギャグだぜ!さすが世界のアサヒ様!やることが桁外れ!

・・・いや、逆に考えるんだ!朝日には20年先まで予知できるような奴がいるって事だ!(笑)

参考
http://www.google.co.jp/search?q=%E7%8F%8A%E7%91%9A+KY
http://d.hatena.ne.jp/keyword/KY

2008-03-12

[JavaScript]Aptana Jaxerというヤツに出くわす

最近では様々なjsやらpmやらincやらが出回り、Ajax黎明期の頃からすれば、大分楽にはなった。それでも、Ajaxバリバリのアプリを書くのはまだ、割と手間がかかる。

で、何日か前にオンラインの友達と「Ajaxサーバとかあったらいいのにな(笑)」みたいな話になったのを思い出し、ふとぐぐってみたら、トンでもなさそうなヤツに出くわした。

名を、「Aptena Jaxer」という。こやつこそ、所謂う「Ajaxサーバ」なのだそうな。なんとキッカイな!
で、こいつなら、サーバサイドの処理もJavaScriptで可能という。ますます面妖なヤツだ。
しかもオープンソースらしい。。。嵐の予感がする。。。!

ややや、gihyo.jpも連載組んでおったとは!

これは是非触れておかなくては!

[ネットライフ]Amazon.co.jpの個人情報収集サービス?

ぼくはまちちゃん!の記事より。

おいらも早速ためしてみたよ!

うーん。一言で言うと・・・
これはひどい

本名つきのメールを送信しようとする辺りが凶悪でス・テ・キ!

3/13 12:20 追記
引数submitにsubmitって渡しても、とりあえず送られないようにしたみたい。
「Eメールを送信」ってボタン押して、ようやくメールが送られるんだ。フヒヒw

2008-03-07

[無電源遊戯装置]ガイギャックス氏、天に召される。。。

/.jの記事。

ついにアバタールになられたのか。。。!
D&Dに直接の思い入れはないものの、その後影響を受けたものを存分に遊んできたわけで。
やはり感慨深い。。。。

[ネットライフ]OpenIDとったど!

それだけ!
使用感は追って書いていきますよ。

2008-03-05

[Perl]名前空間指定のサブルーチン定義

今更ながら学習したのでメモ。

例えば、My::Moduleというモジュールを作ったとして。
そのモジュールをuseしたら、newとかしないでいきなりメソッドをコールできるようにする方法。ようするにWeb::Scraperとかみたいな感じ。


package My::Module;
use strict;
use warnings;

*{"main\::hoge"} = sub {
print "ヨロレイヒー!\n";
};

1;


このモジュールをuseするスクリプトは、以下のようにすることができる。

use My::Module;
hoge();
exit;


実行結果はこんな感じ。

ヨロレイヒー!


使いかた次第では、ちょっとしたフレームワークの軸にもなりそうかも?