Perl Best Practices届いた

Perl Best Practices届いたので読む。

ProductName Perl Best Practices
Damian Conway
Oreilly & Associates Inc / 3034円 ( 2005-08 )


サイン本うらやましいっす。

麺匠 呉屋

潤という新潟ラーメンの店にいったら、改装中で休み。向かいにあった店にはいった。汐ラーメン。

呉屋 汐ラーメン

フライパンで焦げ目をつけた豚トロっぽいのがいい感じだったが、全体的にあっさりというか塩がたっていた感じが。

Catalyst::Plugin::TagCloud

この前書いたのイマイチ かつYAPCのCatalyst話参考になったので、早速書き直してみた。

__PACKAGE__->config(
        tagcloud =>{
                levels => 10,
                limit => 3
                }
);

な感じでレベルとリミット設定できるようにした。

でも、実際に使ってみると、

sub default : Private {
    my ( $self, $c ) = @_;

my $tags = [
        {tag=>"tag1",url=>"url1",count=>5},
        {tag=>"tag2",url=>"url2",count=>15},
        {tag=>"tag3",url=>"url3",count=>8},
        {tag=>"tag4",url=>"url4",count=>20},
        {tag=>"tag5",url=>"url5",count=>3}];

my $html = $c->create_tagcloud($tags,"html_and_css");
    # Hello World
    $c->response->body( $html );
}

みたいに配列のリファレンスを用意しないといけないのが駄目ゲ?セーフゲ?わからん。

  • testとか書いてない(今後覚える、というかやる)
  • blahが多い(blur派だからしょうがない?)
  • Module::Starterつかうべしなのにh2xsではじめてしまった。

な感じで、やりかけだけど、ココから落とせます。もっと、小洒落たやりかたがあれば指摘してもらえると助かります。

YAPC行ってきたヨ (2)

楽だ

XSの話とCatalyst関連の話題が面白かった。XSのサンプルは後でいじってみる。科学技術計算系のゴリゴリやるやつはやっぱCとか書けるようにしといたほうが幅が出ていいのかナァなんて思っているのでこれをきっかけに少し頑張ってみるかな。

Catalystは最近プラグインつくってみたかったりするので今日の話はなるほどなところが多くて参考になった。

Larry WallのKeynoteは面白かったが、深すぎてついていけないところが多々あった。

ヤップク

そして、気になるといえばYAPC::Asia 2006 Tokyoも気になる。面子が、、、、

豪華すぎ

とってもとっても行きたいが平日なんだよね。

でYAPCの読みなんだけど、「ヤップクニセンロク」って勝手によんでるんだけどホントはどう読むのが正しいのだろか?

追記060330

ヤップシーって読むそうです。

  • × ヤップク
  • ○ ヤップシー

あとKwikiをケーウィキとよんでたんだけどクウィキって読むみたい。

YAPC行ってきたヨ

今日明日と仕事を放棄してYAPC行ってます。面子がね、やっぱヤバイし、実際中身も濃かったヨ。

YAPC2006

色々メモッたけど、をを!と思ったのが、mixiってLAMPなのねってことと、高橋メソッドのプレゼンって、目にくるねということと、ダミアンの話は凄く面白くて、特に印象に残ったのはモジュールはh2xsでなくModule::Starter つかって書き始めましょうと正規表現にはxmsつけましょうって話

あとで試してみよう。

Larry Wallのサイン入りラクダ本はあったけど、Damian Conwayサイン入りベストプラクティス本はなかった。

ProductName Perl Best Practices
Damian Conway
Oreilly & Associates Inc / 3034円 ( 2005-08 )


Amazonで早速購入した。

今日の桜

sakura030628

もうちょい。でも今夜は雨だからなぁ。

Plagger+Last.fm

last.fm-ripperとPlaggerを組み合わせればiPodにいれてlast.fmを聴けるんじゃないかと思ったり。

そうすると、車の中でlast.fmチェック出来るのでかなり嬉しいかも。

ただpodcastingさせるだけだったらPlagger使う必要ないかな?じゃぁ曲リストをgmailなんかに送ればいいのか(これも意味あるのかわからん)

それともmixiでおすすめ曲のタグの探してきてそのラジヲを追っかけるとか、なんかそんなフィルター入れた使い方をするとおもしろいのかな?または、last.fmにこだわらないで適当にフィルターかけてjuno recordsの視聴mp3とってくるとかでもいいかも。

Catalyst::Plugin::TagCloud

CatalystのTagCloudのプラグイン欲しいナァってことで、Catalyst::Plugin::Markdownをまねして作ってみた。Catalyst::Plugin::Markdownのソースがさらりとしているので、この部分とアノ部分いじればOKね、、、みたいのはわかるんだけど、何故動くのかさっぱしわからん。

結局、コードを書くよりも出来たコードが何故動くのかを理解する(したふり?)にほとんどの時間を使ってしまった。

  • Class::Data::Inheritableって何ヨ?
  • NEXT.pmさっぱしわかんね。

ほとんど上の二つのお勉強だ。

プラグイン自体はCatalyst::Plugin::TagCloudという名前で、

package Catalyst::Plugin::TagCloud;

use strict;
use warnings;
use base 'Class::Data::Inheritable';
use HTML::TagCloud;

our $VERSION = '0.01';

__PACKAGE__->mk_classdata('tagcloud');
__PACKAGE__->tagcloud( HTML::TagCloud->new );

1;

とかやっておいて、コントローラーに

use Catalyst qw/-Debug ConfigLoader Static::Simple TagCloud/;

とプラグインを追加しておけば、$c->tagcloudはHTML::TagCloudのインスタンスなので

sub default : Private {
    my ( $self, $c ) = @_;
    $c->tagcloud->add("tag1","url1",10);
    $c->tagcloud->add("tag2","url2",15);
    $c->tagcloud->add("tag3","url3",50);
    my $html = $c->tagcloud->html_and_css(10);
    # Hello TagCloud
    $c->response->body( $html );
}

と書けばめでたくタグクラウドが出力されている。

で、Class::Data::Inheritableって何ヨ?ってことだがココみてなんとなく納得した気になったり。でも、ちゃんとわかってないのかも、、、、なんで常にインスタンスが返ってくるのか実はよくわからん。 HTML::TagCloud->newってなんどもnewされないのは何故だろうか。

sub setup {
    my $c = shift;

$c->config->{markdown}->{empty_element_suffix} ||= '';
    $c->config->{markdown}->{tab_width} ||= '';

return $c->NEXT::setup(@_);
};

1;

で、Catalyst::Plugin::Markdownにはさらにsetupっていうメソッドがあって、NEXT.pmが使われている。これはココのメルマガアーカイブでかなり納得したんだけれども、$c->config->{markdown}->{}がどうしてmy $html = $c->markdown->markdown($text);に関わってくるのかさっぱりなままだ。

結局今回のプラグインだとnewするときにlevelsの設定が出来ないので常にデフォルトの24であんま使えん。

my $cloud = HTML::TagCloud->new(levels=>10);
みたいなのを$c->config->{tagcloud}->{levels}みたいなのをnewするときに指定してやりたいが、なんかいまいち。というより、そもそもClass::Data::Inheritable継承する必要がないような気がしてきた。

もうちょい、他のプラグイン読んだりしてちゃんと理解しないとあかんっぽい。勢いとまねまねで初めて書いたプラグインはやはりダメダメだったヨ。