2012年 08月 01日

関連エントリー (画像)

パナソニック ラムダッシュ メンズシェーバー 3枚刃 黒 ES-ST23-K - パナソニック(Panasonic)

パナソニック(Panasonic)

5.0 / 5.0

高校生ぐらいのときからずっと使っていた電動髭剃りがさすがに結構駄目になってきて、肌は荒れるわ綺麗に剃れないわという感じだったので、ようやく購入。十分満足です。

トゲトゲしててモンスターっぽくてカッコいいです。

パナソニック ドルツ リニア 音波振動ハブラシ 白 EW-DL11-W - パナソニック(Panasonic)

パナソニック(Panasonic)

4.0 / 5.0

普通の歯ブラシで奥歯を磨くのが苦手でうまく磨けていない自覚があって、電動歯ブラシで解決したらいいなあと思い購入してみた。電動歯ブラシははじめてなので、この製品が良いかどうかはあまりわからないけど、奥歯を磨くのは圧倒的に楽になった。

今まで普通の歯ブラシで磨いていたときは、だらだら長くやっていたけど、電動だとさくさく終わってちょっと物足りない気がしてしまう。歯磨き粉をつけないせいもあると思う。

カルカソンヌ (Carcassonne) ボードゲーム - Carcassonne

Carcassonne

5.0 / 5.0

友達がいないからボードゲーム買ってもしかたないという思いもありつつ、それにしてもボードゲームをものすごいやりたい気持ちが高まって、カルカソンヌを買ってみた。カルカソンヌは

  • 2人からプレイ可能
  • ときどき耳にする (名作らしい)
  • レビュー見ても評価が高い
  • ルールが簡単 (らしい)

という理由から選定した。実際数ゲームを2人でやってみたけど、期待通り面白い。ルールは難しくないし、ポイント計算も1ゲームやれば覚えられるレベルだった。何よりタイルを並べていっていろんな形の町と道ができていくのが面白い。あと手元に何も隠すものがない、というものなんとなく心理的に楽に感じる。

早速追加キットが欲しくなった。

Plack::Session::Store::File でできるだけセッションファイルを作らないようにする

Plack::Session::Store::File はお手軽でちょっとしたものを作りたいときに便利なんですが、いかんせんアクセスしただけでセッションファイルを作りまくるのは嫌なのでなんとかしたい、という話です

結論からいうと以下のようにすればいいようです。ここでは MessagePack を使ってますがシリアライザ自体は別になんでもよくて、serializer に指定するサブルーチンで、$session に値がなければ書きこまないようにしただけです。

この場合、セッションに値を一切入れない場合毎回セッションIDが変化する状態 (不定) になります。CSRF 対策なんかでセッションIDを流用している場合は、セッションIDを確定させるため POST 前の画面を開いた時点では、セッションに適当な値を書きこむ必要があります (セッションを使うところではセッションに値を書くことで明示的にそれを示す)。

my $MessagePack = Data::MessagePack->new;
$MessagePack->canonical;

builder {
    enable "Plack::Middleware::Session",
        state => Plack::Session::State::Cookie->new(
            session_key => 's',
            expires => 60 * 60 * 24 * 365,
        ),
        store => Plack::Session::Store::File->new(
            dir => config->root->subdir('session').q(),
            serializer   => sub {
                my ($session, $file) = @_; 
                return unless %$session;
                my $fh = file($file)->openw;
                print $fh $MessagePack->pack($session);
                close $fh;
            },
            deserializer => sub {
                my ($file) = @_; 
                eval {
                    $MessagePack->unpack(scalar file($file)->slurp)
                } || +{} 
            },
        );
        $app;
|;