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;
|;
2012年 08月 02日

関連エントリー (画像)

Chrome やら Firefox やら、requestFullscreen に対応しつつあるブラウザでは写真をクリックしたときにそれを使うようにした。Mac の Chrome だと結構いい感じに動く。

今までページ内に Lightbox っぽく表示していたけれど、これだと画面のサイズによっては、ページにそのまま表示されている場合よりも小さく表示されることがあって、これじゃない感が強かった。フルスクリーンだと画面を基準にして最大限努力していますという感じになる。

requestFullscreen の仕様はぜんぜん読んでないので、フルスクリーン化したときのスタイルの計算方法がよくわかってない。

使っているライブラリ (jQuery colorbox) の場合、表示するときに画面サイズを計算して width と height を埋めてしまうので、fullscreenchange で計算させなおしている。document.fullscreenElement にオブジェクトが入っているかどうかでフルスクリーン化されているかどうかがわかるみたいだ。今回の場合、colorbox が閉じられた場合はフルスクリーンモードも終了するようにしてある (逆にフルスクリーンモードが終了したら colorbox も閉じるようにしてある)。

ホバーしたとき、クリックしたらフルスクリーンになりますよってわかるようにすべきだろうけど、いいアイコンとかがない。

2012年 08月 03日

関連エントリー (画像)

名糖 レモンティー 720g - 名糖産業

名糖産業

3.0 / 5.0

この缶に入ってる甘いレモンティーが昔から好きだけど、あんまり買える機会がないのでアマゾンで買ってみた。だいぶ捗る。

2012年 08月 04日

関連エントリー (画像)

2012年 08月 05日

関連エントリー (画像)

2012年 08月 06日

日曜日は氷川女體神社に行った。武蔵國一宮、氷川神社には行ったことがあったので、対になるところへ。電車で東浦和まで行ったあと、駅から歩いたのだけれど、炎天下の中1時間ぐらい歩いてようやく着いた。しかし残念ながら本殿は改修中で、仮殿が設置されていた。祭祀場が復元(?)されていたのがおもしろかった。

本来であればバスで行くべきであると思うが、歩くのも悪くなくて、途中目に入った神社にも立ち寄ったり、ちいさい川沿いを歩いたりするのは楽しかった。行きはともかく、帰りも歩いたのはだいぶ辛かった。何度かコンビニに入って涼んだり、飲料水を買って飲んだりが必要だった。

2012年 08月 07日

関連エントリー (画像)

2012年 08月 08日

関連エントリー (画像)

2012年 08月 09日

関連エントリー (画像)

2012年 08月 10日

関連エントリー (画像)

gerry++

どうしても映画に出てくるようなハッカーになりたいのであったが、しかし技術力もなければ勇気もない、そのうえオレは無能。そこでこのツール。アイムハッカーの出番だ。これを使えば誰でもハッカーを気取れるぞ。

2010年のYAPCで映画にでてくるハッカーになりたい という発表をしましたが、なんとなく動かすには敷居が高く感じられるとともに、直接 stdin を読む仕様であったため使えないケースも多く、僕は殆ど使わなくなってしまいました。

先日 uutransfer という screen のログから出力を拾ってほげほげするみたいなツールを書いてから、そういう仕組みをもうちょい応用できないかと考えた結果上記のようなものができあがりました。

簡単にまとめると「tail -f してるアクセスログをリアルタイムで解析してなんかソレっぽく表示するツール」です。

ImHacker というふざけた名前ですが、それは置いといて、node で動くように全部 JavaScript で書いてあります。

使いかた

基本的には GNU screen 上で動かすことを考えて作ってあります。screen 上で、まぁとにかく適当なサーバに ssh で入って (後述しますが mosh だとダメです) アクセスログを tail -f しときます。

ImHacker 自体は次のようにして起動します。

git clone git://github.com/cho45/imhacker.git
npm install
node app.js

起動して http://localhost:2012/ にアクセスすると、まず最初は設定ダイアログが開くので、アクセスログのフォーマットを指定します。Apache の LogFormat の行をそのままコピペしたら使える感じで作ってあります。設定したら Save を押してダイアログを閉じます (localStorage に設定を保存するので、次からは開きません)

アクセスログを tail -f しているウィンドウの番号に対応する数字のボタンを押します (右上の screen window と書いてあるやつ)。するとログの解析がはじまります。

とりあえず動かしてみたいなら、http://localhost:2012/#demo とするとデモモードで動きます。

コンセプト

  • イマ! この! tail -f している! まさに! この! ログを! カイセキ! したいんだ! という感じなので screen からログをひろいます
  • ほとんど全ての処理をクライアントサイド (ブラウザ) で行うので、拡張しやすいです。なんかカッコイイグラフを増やしたい。
  • もともと来年の YAPC (今年は応募してない) で話すネタを作るつもりだったんですが Perl が一切使われてない

現状の機能

  • req/sec の時系列推移
  • レスポンスタイムのグラフ化
  • リクエストメソッドの統計
  • レスポンスステータスの統計
  • 遅いレスポンスをかえす path をリスト
  • 500 エラーをかえしている path をリスト
  • IP アドレスによる時系列トラッキング
    • まぁまぁのアクセスがあるサイトでやると楽しいとおもうのでやってみてください

備考

  • mosh だと、サーバ側で特殊なことをしていて、クライアント側では部分書き換えをするみたいなことをしているみたいで、screen のログに「見たまま」記録されないので ssh を使う必要があります
  • screen 上で動かさなくても、./bin/imhacker-in というコマンドに出力をパイプすると、全クライアントにその内容が送信されるようになります。すなわち tail -f /var/log/access_log | ./bin/imhacker-in としても良いです
  • bootstrap をつかってみました
  • 最初は Perl で作ろうとおもったけど socket.io を使いたかったのでやめた。あと node のほうが動かすのが簡単そう
2012年 08月 11日

関連エントリー (画像)

2012年 08月 12日

関連エントリー (画像)

2012年 08月 16日

関連エントリー (画像)

2012年 08月 20日

gerry++

2012年 08月 21日

関連エントリー (画像)

gerry++

2012年 08月 22日

gerry++

2012年 08月 23日

gerry++

2012年 08月 24日

gerry++

2012年 08月 27日

gerry++

2012年 08月 30日

gerry++

2012年 08月 31日

gerry++