Hatena::Grouptenmon

ひこにっき

2012.02.20

Mojoliciousのhookを使う

17:10

MojoliciousのControllerをDumpしてみたらbefore_dispathとかもうあからさまにhookなものを見つけてしまった。調べてみたらちゃんとドキュメントにも書いてあった…。ということで、デフォルトのstashに何かを突っ込むのは、以下のようにも書けた。

package MyApp;
use Mojo::Base 'Mojoicious';
use DateTime;

sub startup {
    my $self = shift;
    $self->hook( before_dispatch => sub {
        shift->stash( now => DateTime->now );
    });
    my $r = $self->routes;
    $r->route('/:controller/:action')->to('default#default');
}

1;

コード的にもほとんど変わらないけれど、こっちのほうが素直な感じがする。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20120220

2012.02.16

Mojoliciousでデフォルトのstashを設定する

19:24

要するに now => DateTime->now をstashに設定しておきたい話。デフォルトテンプレートエンジン(Mojo::Template)を使っている場合は、helperに設定すればいいだけなのだが、Text::Xslateを使っているときは、どうもそうは行かないらしい。

dispatchやrenderをオーバーライトしてしまおうかとも考えたが、そこまでしなくてもなんとかなる。

package MyApp;
use Mojo::Base 'Mojolicious';
use DateTime;

sub startup {
    my $self = shift;
    my $r = $self->routes;
    $r = $r->under( sub { shift->stash( now => DateTime->now ) } );
    $r->route('/:controller/:action')->to('default#default');
}

1;

チュートリアルに認証の例があるが、それを全体に適用している。underは新しいroutesを返すので、そこに対してルールを設定する。

defaultsじゃダメなのか

リクエストごとに更新して欲しいので、下記ではうまく行かないらしい。

    # :
    $self->defaults( now => DateTime->now );
    # :

Mojo::Templateの時は

helperに入れるだけ。

    # :
    $self->helper( now => sub { DateTime->now } );
    # :
<%= now->ymd %>

hook

hookも見つけたので次のエントリに書いた。hookのほうが素直な感じがする…。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20120216

2012.01.18

MojoliciousのJSON handlerでJavaScript-UCS変換

14:39

render_jsonで日本語を使いたくて、別にutf8で出てるんだから良いっちゃ良いんだけど、何となくJavaScript-UCSに変換したくなる件。

なんかもっと良い方法がありそうでならないんだけど…。

つまるところ最大の問題点は、「結局Mojoliciousのコード読んだから上記のコードが書ける」って話で、まぁ薄いフレームワークなんてモノはコードが簡単に読めるから良いんだと思うけれど、何かこう釈然としない。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20120118

2011.11.07

PSE

11:45

Photoshop Elements 10の試用版を入れようと思ったら、Case sensitiveファイルシステムではダメと言われた。8の時も同様だったのであきらめたのだけれど、10でもダメらしい。確かLightroomでは大丈夫だったので、新バージョンは期待していたのだけれど、とても残念。これからもPixelmatorで頑張る。

cf. PSE - ひこにっき - tenmonグループ

とはいえ、PSEであれば、Pixelmatorでもだいぶ追いついてきたと思う。起動は速いし、文句は無い。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20111107

2011.10.22

学習

17:06

小さな子たちの学習過程を見ていると、後付けの学習努力は、本来備わっている学習アルゴリズムに太刀打ち出来るのだろうかという点について疑問に思う。まぁ、とはいえ、この歳になってしまったら他に方法は無いのだけれど。

いや、本当に無いのだろうか。そもそも、「本来備わっている学習アルゴリズム」は、別に消去されるようなものではなく、一定の手順で活用可能なのでは無いだろうか。

# 忙しいので余計なことを考えている件について

いや、まてまて

良ーく考えてみると、なんか能力的には衰えたりはせず、あまり変わらないのではという気もしてきた。

赤ん坊は最初言語を喋れないが、徐々に学習した後1〜2年後に喋れるようになる。これは凄い事のようだが、じゃあ大人を、言葉の分からない国に1〜2年くらい放り込んでおけば、まぁおそらく喋れるようになっているだろう。もちろん、赤ん坊はほとんどゼロベース、大人はそうではない、という違いはあるけれど、どちらにしても凄い事ではあって、大きく見たら大差はない気がする。

# と数ヶ月後に追記してみる。忙しいので。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20111022

2011.10.14

YAPC

11:16

チケットはとってあるのだけど、行けそうにない。残念。今年は寄付って事になりそう。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20111014

2011.08.31

Teng::Schema::Loaderでスキーマ定義を省略する

18:19

開発中なので、ちゃんとしたスキーマ定義は省略したい(変わりそうだし)のだけれど、いちおうモデルクラスは作りたくて、プロダクトでもモデルクラスだけ直せば大丈夫と言うことがやりたい。

http://search.cpan.org/perldoc/Teng::Schema::Loaderの例は、スクリプト一本で何とかするときに使えそうだが、モデルクラスは定義しつつLoaderも使うというような、中間辺りをやりたい。

ついでに*_atのinflate/deflateを仕込みたい。

usage

use My::Model;
my $m = My::Model->new;
my $item = $m->single( 'table', { id => 1 } );
トラックバック - http://tenmon.g.hatena.ne.jp/aql/20110831