This domain may be for sale!
Mooseを使うべきでない理由とMooseを使う理由 twitterにでも書いて終りにしようと思ったけど140文字じゃ無理なんで。 Mooseの欠点やら利点やらMouseがどうだとかは今更感過ぎて割愛するし、下手な抽象的な表現も面倒なんでしない。 あなたが、再利用性の高いライブラリを作りたい場合はMooseを使うべきではない。 なぜならMooseはフレームワークだからであるからだ。 たとえ有用な再利用性の高いライブラリを作ったとしても、Mooseというフレームワークに依存してしまっては、あなたの有用なライブラリを選択してもらえない事もあるだろう。 誰かが小さいスクリプトを書くために、あなたが書いた有用なライブラリを使う事で楽が出来るとする、だがMooseというフレームワークに依存したばっかりに、その有用なライブラリの後ろに控えるものの大きさに臆して選択してくれないかもしれない。 もちろんM
taro-nishinoさんによるlestrratさんの記事の邦訳Mooseの為か、そうでないのかを元にして本人が書いてるっぽい感じに改変してみる。 ちなみに原文見てない。 JPAとしてもMooseに関する話をしてたと思うけど、もうちょっとだけ書かせてください。 「Mooseデベロッパもうちょっとスタートアップのコスト、使用メモリサイズ等に気を使って欲しい」 という事を思ってる。 俺はエンジニアのつもりだし。Moose好きだしMooseの空気感とかわかってるし「メモリもっと足せばいいよ」とか言うのもそりゃわかるよ。 でもさ、Moose使うかHASHにぶっ込めばいいか、他の言語使えばいいやって人の方が多いんだよ。そもそもエンジニアじゃない発注する側の人なんかそんな都合関係無いし。 そういう人達は、ベンチマークとかの数値でしか判断出来ないから、なんでMooseを使いたいのかと言った事情が無くM
Shawn Moore(Sartak)の講義でした。同時通訳。 感想。 超楽しかった!!sartakがとてもいい人だった!ちょっとした質問でもコード書きながら教えてくれた。 もっとみんな受けたらいいのに!もう終わっちゃったけど! 機能毎に、講義→実習→講義→実習、の繰り返し。 これがとても楽しかった。 1日最後まで楽しくコード書いて過ごせた。 実習の内容も、既にあるテストが通るようにモジュールを作成してテストが通ったら「やったー!」みたいな。 gitに資料があるのでみんな落としてやったらいいよ!ccのライセンスで公開してるので。 きっとtestファイル自体もキレイに書いてあるはずだから見たらいいと思うよ JPAにすごい感謝でした。3日間全部受けておけば良かったと思った。 以下メモ。 Part0: Mooseのコンセプト perl6からいろんなアイディアをもらってる まずはざっくりMoose
最近Catalystをご無沙汰してたのでリハビリがてらJPA セミナーでも紹介されていたCatalyst::Controller::ActionRoleを触ってみました。 要はこのコントローラを継承することでMoose::Roleで書いた機能をメソッド attributeで呼べるようになります。 lib/MyApp/ActionRole/Bar.pm package MyApp::ActionRole::Bar; use Moose::Role; after execute => sub { my ($self, $controller, $c) = @_; my $body = $c->response->body || ''; $c->response->body($body . 'Bar'); }; 1; lib/MyApp/Controller/Foo.pm package MyA
Moosification: Catalyst 5.8に移行した際にちょっと気づいた事。 最初からMooseベースでアプリケーションを作るというのは、実務ではなかなか難しいのはわかります。一般論は JPA #02で話すのでおいておきますが(参加申し込みは今日5/12までですよ!)、5.8 からMoose化したCatalystであった問題・注意点をちょっと書き出してみます。 1. use Catalyst Catalyst::Upgradingを読んでいると package MyApp; use Moose; extends 'Catalyst'; __PACKAGE__->setup(qw/ ConfigLoader /); という表記が見られるが、これは気をつけないと駄目。 自分が直面した問題は、path_to()等を使った時に起こった。path_to() は現アプリのルートディレクトリ
CPANTSは情報の宝庫 Perlを使う最大の利点といわれるCPANですが、CPANは単なるモジュール置き場ではありません。CPANはまたPerlの利用状況を知るうえで不可欠な統計情報を得る場でもあります。そのような統計情報のいくつかは、いわゆるCPAN検索サイトからも確認できますが、より突っ込んだ情報が欲しい場合はCPANTS(CPAN Testing Service)と呼ばれるサイトを確認するのが便利です。 国内ではnipotanこと谷口公一氏が始めた「輝け!全日本最強 CPAN Author 決定選手権」のネタ元として知られていますが、このサイトでは個々の作者やモジュールの品質だけでなく、そのモジュールが実際にどこで使われているかという情報を得ることもできます。 たとえば前回取り上げたロール関連のモジュールの利用状況を調べてみると、古き良きExporterを依存モジュールとして取り上
HTTP::Engineの今とこれから 昨年末にHE con #1 が開催されてから久しいですが、あの前後で話題になっていた 「HTTP::Engineは依存が大杉メモリ食いまくり」な件に関しては、Shikaという回答を出し、その後Mouse版の0.1.1をリリースしました、 そして最近Stevanから「Any::Mooseはどうか? lang:en」と言った話も有り、現在Any::Mooseに依存した0.1.4を出すべく0.1.4_xをCPANにあげています。 クラスビルダーにMooseを使うか捨てるか論争は、0.1.4にて妥協出来る所に落ち着いたんじゃないかなと思います。 Any::MooseやMouseが細かい所で挙動が変わるかどうかは今のところわかりませんが、少なくともHTTP::Engineで採用した事により安定する方向になるんじゃないでしょうか? もちろんより高い互換性の為の変
Perl界隈の期待の新刊「モダンPerl入門」。読んじゃいました。 モダンPerl入門 (CodeZine BOOKS) 作者: 牧大輔出版社/メーカー: 翔泳社発売日: 2009/02/10メディア: 大型本購入: 23人 クリック: 465回この商品を含むブログ (112件) を見る Perl基礎の表層を一通りなめたものの、初心者からなかなか抜け出せない僕のような人のためにかかれた本ですね。感動しました。読んで満足してこのまま終わってしまいそうだったので、書いてある内容を実践してみてようと思います。 注意 調べながら書きながらなので間違っている箇所もあるかもです。ツッコミお待ちしております。 Moose と Class::MOP の機能をおそらく混同してます。すいません。 Mooooooose モダンPerl入門は "Class::Accessor::Fast と Moose" という
Perl OOP に interface, abstract の概念を持ち込む role, requires, with の話です。 Moose::Cookbook::Recipe10 - The Moose::Role example - metacpan.org ソースコード ちょっと変えてあります。 package Equivalent; use Moose::Role; requires 'equal_to'; sub not_equal_to { my ($self, $other) = @_; not $self->equial_to($other); } package Comparable; use Moose::Role; with 'Equivalent'; requires 'compare'; sub equal_to { my ($self, $other) =
拡張可能な default と同等の機能である builder です。 Moose::Cookbook::Recipe9 - Builder methods and lazy_build - metacpan.org ソースコード package BinaryTree; use Moose; has 'node' => ( is => 'rw', isa => 'Any' ); has 'parent' => ( is => 'rw', isa => 'BinaryTree', predicate => 'has_parent', weak_ref => 1, ); has 'left' => ( is => 'rw', isa => 'BinaryTree', predicate => 'has_left', lazy => 1, builder => '_build_child_tre
Moose::Cookbook::Recipe7 - Making Moose fast with immutable - metacpan.org 今度は make_immutable について。 ソース package PointImmutable; use Moose; has 'x' => (isa => 'Int', is => 'ro'); has 'y' => (isa => 'Int', is => 'rw'); __PACKAGE__->meta->make_immutable; package PointNoImmutable; use Moose; has 'x' => (isa => 'Int', is => 'ro'); has 'y' => (isa => 'Int', is => 'rw'); package PointCAF; use base qw(Cla
Moose::Cookbook::Recipe6 - The augment/inner example - metacpan.org 次はネストする呼び出しである augment, inner についてです。 ソースコード package Document::Page; use Moose; use Perl6::Say; has 'body' => ( is => 'rw', isa => 'Str', default => sub { '' } ); sub create { my $self = shift; $self->open_page; inner(); $self->close_page; } sub append_body { my ($self, $appendage) = @_; $self->body($self->body . $appendage); } su
次は Recipe5 也。 ソース package HTML::Location; use URI; sub __as_URI { my $self = shift; return URI->new( $self->uri ); } package Request; use Moose; use Moose::Util::TypeConstraints; use HTTP::Headers (); use Params::Coerce (); use URI (); subtype 'Header' => as 'Object' => where { $_->isa('HTTP::Headers') }; coerce 'Header' => from 'ArrayRef' => via { HTTP::Headers->new( @{$_} ) } => from 'HashRef' =
Moose::Cookbook::Recipe4 - Subtypes, and modeling a simple Company class hierarchy - metacpan.org ソースコード 少しテストを加えてます。 package Address; use Moose; use Moose::Util::TypeConstraints; use Locale::US; use Regexp::Common qw(zip); my $STATES = Locale::US->new; subtype 'USState' => as 'Str' => where { (exists $STATES->{code2state}{uc($_)} || exists $STATES->{state2code}{uc($_)}) }; subtype 'USZipCode' =>
さらに Recipe3 です。 ソース package BinaryTree; use Moose; has 'node' => (is => 'rw', isa => 'Any'); has 'parent' => ( is => 'rw', isa => 'BinaryTree', predicate => 'has_parent', weak_ref => 1, ); has 'left' => ( is => 'rw', isa => 'BinaryTree', predicate => 'has_left', lazy => 1, default => sub { BinaryTree->new(parent => $_[0]) }, ); has 'right' => ( is => 'rw', isa => 'BinaryTree', predicate => 'has_ri
もの凄い乗り遅れた感ですが僕も Moooooooooooooooooose してみる。 とりあえず Cookbook をやってみる事にしてみました。 Moose::Cookbook::Recipe1 - The (always classic) Point example. - metacpan.org ソース まぁ適当にテストとか追加してある。 package Point; use Moose; has 'x' => ( isa => 'Int', is => 'ro' ); has 'y' => ( isa => 'Int', is => 'rw' ); sub clear { my $self = shift; $self->{x} = 0; $self->y(0); } package Point3D; use Moose; extends 'Point'; has 'z' =>
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く