Catalystの画像描画モジュールを探し回ってたときに見つけて面白そうだと思っていた、Catalyst::View::GraphVizを使ってみた
まずはインストール。GraphVizのサイトにRPMがあったのでそれを利用した。perlモジュールはcpanから。ちなみにGraphVizモジュールの作者はYAPCで公演してた。
$ rpm -Uvh /home/kzfm/graphviz-2.8-1.fc1.i386.rpm
$ rpm -Uvh /home/kzfm/graphviz-devel-2.8-1.fc1.i386.rpm
$ cpan -i GraphViz
$ cpna -i Catalyst::View::GraphViz
さて、ここからcatalyst
$ catalyst.pl Gview
$ cd Gview
$ ./script/gview_create.pl view GraphViz GraphViz
ってやって、Root.pmをいじるが、とりあえずデフォルトで出力させてみた。
sub default : Private {
my ( $self, $c ) = @_;
my $g = GraphViz->new();
$g->add_node('kzfm');
$g->add_node('yuki', label => 'NewComer\nyuki');
$g->add_node('hana', label => 'hana\nDog');
$g->add_edge('kzfm' => 'yuki');
$g->add_edge('kzfm' => 'hana', label => 'pet');
$g->add_edge('yuki' => 'kzfm');
$c->stash->{graphviz}->{graph} = $g;
if(!$c->res->body) {
if($c->stash->{template}) {
$c->forward('Gview::View::TT');
} elsif($c->stash->{graphviz}->{graph}) {
$c->forward('Gview::View::GraphViz');
} else {
die("No output method!\n");
}
}
}
タグの関係を視覚化したり、スキーマ書いたり色々使えそう。論文とか化合物の類似性の視覚化とかでもいいいかも。階層クラスタリングが見にくい場面とかでこういった方法取れるかな。
Catalyst使わないでblosxomのタギングプラグインに組み込むというのもありかな。image mapでだせるのでおもろいかも。
Ajax使ってる例もあったので、Catalyst+Prototype.jsでやるのも面白いかと思ったり。