2006年12月アーカイブ

午前中のうちに大掃除で残っていた窓拭きを終え、長野の山奥より下山してきた父上と新宿伊勢丹の西櫻亭にランチに行ってきました。

実はAGIOが混んでいて並んでいて、妥協策で行ったのですが、これが結構おいしかったです。

2006123001.jpg

お店のおすすめはメンチカツ、ハンバーグステーキ、リブロースステーキなどいわゆる洋食。
メンチカツに牡蠣のグラタンが添えてある、おすすめランチを頼んでみました。

2006123002.jpg

育ちざがりの三十路オーバーにはちょっと量が少なかったですが、メンチカツはサクサクでおいしかったです。
全体的にお値段が少々お高いので、毎度毎度行くのは厳しいですが雰囲気もよく大変楽しめました。

ゴチでした。>父上

新宿伊勢丹 洋食 西櫻亭
03-3354-6941
11:00~22:00 (ラストオーダー:21:15)

各位

プリンターがタイミングよく壊れたので今年の年賀状は猛烈に遅れる、
もしくは大変つまらないものになります。
あしからずご了承ください。

追伸: 毎年のことだろ?という余計なツッコミはご遠慮ください。


大掃除も順調に進み、今年はちゃんと年賀状を出そうと思った次第です。
ところが大掃除の際、配線をはずしていたプリンタを接続して、電源を入れたところ・・・

エラーが発生しました
電源を入れなおしてください

と、液晶に表示されます。
言われるがまま、電源オンオフを繰り返したのですが、そもそもプリンタヘッドがビクともしません。
(ちなみに機種はCanonのMP770 2004年ごろ購入)

仕方がないのでサポートに電話したら、すぐ送れと。
ただし、年末で混み合っているので修理に時間がかかり、年明けになると。

みなさん普段プリンターを使わずに年賀状専用機として使ってるいるようです。

保証期間はすでに切れており、修理費を聞くと結構な値段がかかりそう。
と、そのとき目に入ったのがヨドバシワランティの保証書。
そう。普段は入っていないヨドバシワランティに奇跡的に入っていたのですよ。

ちなみにヨドバシ・ゴールドポイントワランティとは、購入時にゴールドポイントの5%を支払う代わりに5年間の延長保証がきくサービスです。

いやぁ。備えあれば憂いなしです。
無事無料で修理と相成りました。

というわけで、今年の年賀状が遅れるのは不可抗力なのでよろしくお願いいたします。

フレイヴァー・ボッサ・ケースIV
ミュークリップス
コロムビアミュージックエンタテインメント (2006/12/20)
売り上げランキング: 12797

この前TSUTAYAで流れてて即買いしたのがコレ。

誰もが知ってる曲をボサノバアレンジで・・・というありがちな企画シリーズの第四弾です。
今回も洋楽を聴かない人でもCMなんかで聴いたことある曲がいい感じでアレンジされてます。

ちなみにトラックリストは

  1. Need To Be In Love / Carpenters
  2. Say A Little Prayer / Aretha Franklin
  3. Rock With You / Michael Jackson
  4. Isn't She Lovery / Stevie Wonder
  5. Temptation / ?
  6. Lovefool / Cardigans
  7. Looking For Your Love / ?
  8. You Are The Sunshine Of My Life / Stevie Wonder
  9. Every Breath You Take / The Police
  10. So Far Away / Carole King
  11. Close To You / Burt Bacharach & Hal David
  12. You've Got A Friend / Carole King
  13. Ribbon In The Sky / Stevie Wonder

何曲か誰の曲かわからないのがありましたが、多分オリジナルかと。間違っていたら教えてください。

最近、ボサノバのコンピ物ばっかり買ってる気がします。
年末で忙しいときにこーゆーの聴いてホッと一息、リフレッシュしてみませんか?

ちょっと前の記事で

米タイム、今年の人は「あなた」 - NIKKEI NET
 【ニューヨーク16日共同】米誌タイムは16日、年末恒例の「パーソン・オブ・ザ・イヤー」(今年の人)を発表、世界中の各個人がインターネットを通じて情報や動画を自由に発信し、それが世界に大きな影響を与える時代に入ったとして、一般市民を指す「あなた」を選んだ。

って記事があったのですが、今日六本木のツタヤに寄ったら売っていたので買ってみました。

2006122302.jpg

パソコンのモニターの部分に銀紙のような反射板が使われていて、そこに自分の顔が写るようになっています。

中身は買ってきたばかりで読んでないのですが、なるほど面白い試みです。

思えば、今年はblogで個人が文字を発信するのが当たり前となり、Podcastで個人の音声の発信が広まる前に、YouTubeで個人が動画を発信する時代の幕開けになったわけです。

さらに海外ではMySpace、日本でもmixiといった個々が直接つがなるSNSが浸透して個々の口コミがマスメディアからの発信と同等、もしくはそれを超える力を持ち始めてきてる気がします。

集合→個

という情報の伝わり方じゃなくて

個→個→個→... = 集合

という情報の伝わり方になってきたってことかなと。

というか、約10年前にインターネットが普及し始めた頃からそんな時代の兆しはあったのですが、今年はそれが一般の人たちにまで浸透したのが実感できた年だってことなんでしょう。

じゃあこの次は?ってことなんですが、今は集合が解体されて個と個が集まってコミュニティが生まれている状態で、次はコミュニティとコミュニティがつながって新たな集合が生まれるんじゃないかと漠然と思っていたりします。

で、またそれが解体されて・・・の繰り返しなのではと。そのタイミング、タイミングで新たなコミュニケーションの道具や技術が介在されていくと。

なんとも面白い時代です。

ちなみに過去のPerson of the Year

2006122301.jpg

夜中にコーヒー豆が切れたら六本木のスターバックスに買出しに行ってます。朝までやっているので非常に便利。

で、今夜もすっかり12時過ぎてると思い込んで買いに行ったら、時間を勘違いしていたらしく渋滞に巻き込まれました。
時期が時期だけに一人では非常に居辛かったので、そそくさと帰ってきました。

何か妙に負け犬感が漂っていたので、鬱憤晴らしにバッティングセンターで特打ちしてきました。

そんなクリスマスイブイブでした。

以前

Catalyst::Model::DBIC::Plainでのトランザクション管理

というエントリーを書きました。
Catalyst::Model::DBIC::Plainってあたりが時代を感じさせます。

Cookbokにもありますが現在のDBIx::Classでトランザクションを管理する場合には$schema->txn_do($coderef)を使うとトランザクションの開始からコミット、ロールバックまでやってくれます。

my $schema = CD::Schema->connect(...);
$txn = sub {
    my $artist = $schema->resultset('Artists')->create(
        {
            name => $name,
        }
    );
    my $album = $schema->resultset('Albums')->create(
        {
            title => $title,
            artist => $artist->id,
        }
    );
}

eval { $schema->txn_do($txn); };

if ($@) {
    if ($@ =~ /Rollback failed/) {
        die "rollback failed: $@"
    }
    else {
        die "rollbacked: $@"
    }
}

Catalyst::Model::DBIC::Schemaで使うときには

sub do_add : Local {
    my ( $self, $c ) = @_;

    ...

    my $txn = sub {
        my $artist = $c->model('CD::Artists')->create(
            {
                name => $c->req->param('name'),
            }
        );
        my $album = $c->model('CD::Albums')->create(
            {
                title  => $c->req->param('title'),
                artist => $artist->id
            }
        );
    };
    $c->do_txn($c->model('CD'), $txn );

    eval { $c->model('CD')->schema->txn_do($txn); };
    if ($@) {
        if ( $@ =~ /rollback failed/ ) {
            $c->error("rollback failed: $@");
        }
        else {
            $c->error("rollbacked: $@");
        }
    }

    ...
}

これを毎回やるのは面倒です。

で、MLを見てたらMST曰く

[Catalyst] Best practice for using transactions?

You could always subclass Catalyst::Controller's _DISPATCH private
action like

sub _DISPATCH {
my $self = shift;
my ($c) = @_;
$c->model('DB')->schema->txn_do(
sub {
$self->next::method(@_);
}
);
}

つまり_DISPATCHメソッドをオーバーライドしたMyApp::Base::Controllerとか継承して全てのディスパッチに対してトランザクションを組んじゃえ・・・というとっても豪快な解がありました。

ボクの場合は局所的に使いたいのでプラグインを作ってこんな感じにしてます。

package MyApp::Plugin::Utils;

use strict;
use warnings;

sub do_txn {
    my ( $c, $model, $txn ) = @_;

    eval { $model->schema->txn_do($txn); };
    if ($@) {
        if ( $@ =~ /rollback failed/ ) {
            $c->error("rollback failed: $@");
        }
        else {
            $c->error("rollbacked: $@");
        }
    }
}

で、MyApp.pmでロード

package MyApp;

use strict;
use warnings;

use Catalyst::Runtime '5.70';

use Catalyst qw/
    -Debug
    Dumper
    StackTrace
    ConfigLoader
    Static::Simple
    +MyApp::Plugin::Utils
/;

...

で、コントローラでこんな感じ

sub do_add : Local {
    my ( $self, $c ) = @_;

    ...

    my $txn = sub {
        my $artist = $c->model('CD::Artists')->create(
            {
                name => $c->req->param('name'),
            }
        );
        my $album = $c->model('CD::Albums')->create(
            {
                title  => $c->req->param('title'),
                artist => $artist->id
            }
        );
    };
    $c->do_txn($c->model('CD'), $txn );

    ...
}

・・・あまり短くなってない orz
・・・けどエラー処理は一箇所にまとめられます。

もちろんInnoDBなどのトランザクション対応なデータベースエンジンを使わなければ意味はありません。


何を隠そう、秘密結社だとか政府の陰謀だとかの話が大好きです。

フリーメーソンだとかテンプル騎士団だとかCIAの陰謀だとか聞くだけでゾクゾクします。

で、酒の場や合コンでここぞとばかりに話して、知ったかぶりと煙たがられるタイプです。

確か父親の本が結構こういうの多かった記憶があるので、その辺の影響っぽいです。

というわけで、今日の昼休みにM君とランチに行く途中で、竹書房の前を通ったときにこの本の広告が張り出されてました。

たまたま二人とも「やりすぎコージー」の都市伝説コーナーを見たのをきっかけに昼休みの間、都市伝説談義に花が咲いたわけです。

で、早速会社の帰りに本屋に行って買ってきました。

大した厚さではないので帰りに歯医者に立ち寄る間と歯医者からの帰り道歩きながら読んでたら読み終わっちゃいました。

千円札に秘められたフリーメーソンの暗号だとか「かごめかごめ」の童謡に秘められた徳川埋蔵金の本当のありかだとか、結構面白いネタもあったのですが、ちょっと思い込み激しすぎるなぁと思ったりしたのもチラホラでした。

まぁ、話半分(いや1%くらい)で読む分には楽しめます。

そういや小学生のときの友達で人の話を聞くたびに

「うそっ?」

って言うのが口癖のやつがいたのですが、彼は口裂け女に遭遇したけど自転車で逃げ切ったと言い切ってました。

「うそっ?」

最近早寝早起きです。
といっても、AM1:00就寝、AM6:00起床なので普通の人にとっては多分正常なサイクルかもしれませんが、ボクにとっては奇跡のようなサイクルです。

で、よく、早起きは三文の徳と言いますが、そもそもの語源は「早起三朝當一工」という中国の言葉で三日早起きすれば一人分の仕事ができるという意味だそうで、早起きすると得をするというよりも、いつもより早く起きて多く仕事をすれば得をするという意味に近いのかなと思ったりもします。

で、ボクの場合何かしら得があったかというと、特にないです。
だって早起きはするけど早寝もしてるので労働時間はさほど変わらないからです。
強いて言えばゴミをちゃんと出せるようになったことくらい。

ちなみにこんな記事も。

スラッシュドット ジャパン | 「早寝早起きは三文の得」はウソだった?
ハーバード大付属ベスイスラエル病院の研究者らが、Early to bed and early to rise makes a man healthy, wealthy and wise (早寝早起きは健康、富、賢さの源)という、有名な英語の格言が果たして本当かどうかを検証し、Canadian Medical Association Journalにその結果を発表した(要旨, 本文,PubMed)

これはベンジャミン・フランクリンがのこした格言であるが、彼らはこの「フランクリンの仮説」を検証するために疫学調査を行い、「早寝早起き(23:00前就寝、6:30前起床)」「早寝遅起き」「遅寝早起き」「遅寝遅起き」のそれぞれのグループ間で、死亡率(健康)、年収(富)、修学年数(賢さ)に差が見られるかどうかを検証した。その結果、世間の予想に反してグループ間に差が認められない、すなわち、フランクリンの仮説が間違いであることを明らかにした。

なるほど。
まぁ、朝に仕事する方が気持ちがいいことは気持ちがいいです。

一昨日親知らずを抜いたおかげで週末予定0でした。
昨日はのた打ち回っていましたが今朝になってようやく落ち着きました。

で、毎年毎年、年末の大掃除をさぼってるボクですが、今年は前倒しで始めました。

今年のテーマは「捨てる」。

物持ちがいいっていうか、物を捨てられない性分が災いして10年以上物が貯まってます。

まずは衣類。
まぁ出てくる出てくる。
明らかに入らないであろうジーンズや、夜遊んでた頃の恥ずかしい服など片っ端から捨ててます。

とりあえず一段落して、次は家電に取り掛かろうと思います。
問題はフルタワーのケースが6個と17インチのブラウン管ディスプレイが2個・・・処分するの大変そうだなぁ。

続いてダンボール、書籍、書類、最後に空いた部屋にDJブース設置と続くわけですが早くも年内に終わらせるのは不可能な気がしてきました。

2006120701.jpg

久々にご飯を食べに新宿駅まで行ったらライトアップされてました。

Chained Actionを使った例でこんな記事がありました。

/user/
    ユーザー一覧
/user/add
    ユーザー追加
/user/[ユーザー名]
    [ユーザー名]の詳細
/user/[ユーザー名]/edit
    [ユーザー名]の編集
/user/[ユーザー名]/delete
    [ユーザー名]の削除

というURL構成を再現するのに

package MyApp::Controller::User;

use strict;
use warnings;
use base 'Catalyst::Controller';

sub _parse_PathPrefix_attr {
    my ( $self, $c, $name, $value ) = @_;
    return PathPart => $self->path_prefix;
}

sub root : Chained('/') PathPrefix CaptureArgs(0) {
    my ( $self, $c ) = @_;
}

sub instance : Chained('root') PathPart('') CaptureArgs(1) {
    my ( $self, $c ) = @_;

    $c->stash->{user} = $c->req->captures->[0];
}

sub list : Chained('root') PathPart('') Args(0) {
    my ( $self, $c ) = @_;

    $c->res->body( ref($self) . '->list' );
}

sub add : Chained('root') PathPart Args(0) {
    my ( $self, $c ) = @_;

    $c->res->body( ref($self) . '->add' );
}

sub view : Chained('instance') PathPart('') Args(0) {
    my ( $self, $c ) = @_;

    my $user = $c->stash->{user};
    $c->res->body( ref($self) . "->view $user" );
}

sub edit : Chained('instance') PathPart Args(0) {
    my ( $self, $c ) = @_;

    my $user = $c->stash->{user};
    $c->res->body( ref($self) . "->edit $user" );
}

sub delete : Chained('instance') PathPart Args(0) {
    my ( $self, $c ) = @_;

    my $user = $c->stash->{user};
    $c->res->body( ref($self) . "->delete $user" );
}

1;

非常に便利。
肝は_parse_PathPrefix_attrでPathPrefixという独自アトリビュートを作ってpath_prefixにディスパッチするところ。

さらにこんなことをしたい場合は

/user/[ユーザー名]/bookmark
    [ユーザー名]のブックマーク一覧
/user/[ユーザー名]/bookmark/add
    [ユーザー名]のブックマーク追加
/user/[ユーザー名]/bookmark/[ブックマーク]
    [ユーザー名]のブックマーク[ブックマーク]の詳細
/user/[ユーザー名]/bookmark/[ブックマーク]/edit
    [ユーザー名]のブックマーク[ブックマーク]の編集
/user/[ユーザー名]/bookmark/[ブックマーク]/delete
    [ユーザー名]のブックマーク[ブックマーク]の削除

こうすればいいかと。

package MyApp::Controller::User::Bookmark;

use strict;
use warnings;
use base 'Catalyst::Controller';

sub root : Chained('/user/instance') PathPart('bookmark') CaptureArgs(0) {
    my ( $self, $c ) = @_;
}

sub instance : Chained('root') PathPart('') CaptureArgs(1) {
    my ( $self, $c ) = @_;

    $c->stash->{bookmark} = $c->req->captures->[1];
}

sub list : Chained('root') PathPart('') Args(0) {
    my ( $self, $c ) = @_;

    $c->res->body( ref($self) . '->list' );
}

sub add : Chained('root') PathPart Args(0) {
    my ( $self, $c ) = @_;

    $c->res->body( ref($self) . '->add' );
}

sub view : Chained('instance') PathPart('') Args(0) {
    my ( $self, $c ) = @_;

    my $user     = $c->stash->{user};
    my $bookmark = $c->stash->{bookmark};

    $c->res->body( ref($self) . "->view $user / $bookmark" );
}

sub edit : Chained('instance') PathPart Args(0) {
    my ( $self, $c ) = @_;

    my $user     = $c->stash->{user};
    my $bookmark = $c->stash->{bookmark};

    $c->res->body( ref($self) . "->edit $user / $bookmark" );
}

sub delete : Chained('instance') PathPart Args(0) {
    my ( $self, $c ) = @_;

    my $user     = $c->stash->{user};
    my $bookmark = $c->stash->{bookmark};

    $c->res->body( ref($self) . "->delete $user / $bookmark" );
}

1;

追記: typo訂正

今日はチャンピオンズリーグのバルセロナ - ブレーメン戦です。

早めに寝て起きて見ることにしました。

3:30に珍しく目覚ましで起きました。

テレビつけました。

やってません。

キックオフは4:30だそうです。

そうか・・・28:30って4:30か・・・バカン・・・

祝レッズ優勝!

歓喜の埼玉スタジアムに行ってまいりました。
3-2の勝利で気持ちよく優勝を飾ることができました。
レッズサポ一年目からこんないい思いをさせてもらって申し訳ねぇっす。
そーいえば、今年はスタジアムに運んだ試合全部負け無しでした。
来年は阪神の観戦でもこれくらいいい気分を味わいたいです。

以下、一言コメント形式で。

2006120201-reds.jpg

バックスタンドアッパーでの観戦でした。観客人数6万2千人メインの最上階までビッチリ。

2006120202-reds.jpg

バックスタンドにはレッズのエンブレムの人文字。そのバックスタンドに座っていたので生では見れなかったです。

2006120203-reds.jpg

ゴール裏のサポータの皆様、一年お疲れ様でした。そして、おめでとうございます。

2006120204-reds.jpg

今季で退任決定のギド。最後に有終の美を飾ってくれました。個人的にはもうちょっと続けて欲しかった。

2006120205-reds.jpg

土壇場で得点王に並んだワシントン。さすがブラジル人。アレックスと二人、一際大騒ぎしてました。

2006120206-reds.jpg

今季の後半戦の活躍は神がかってたキャプテン。ようやった。

ちなみにヒーローインタビューを全然聞かずに騒いでいたあたり、とってもレッズサポらしかったです。

2006120207-reds.jpg

2006120208-reds.jpg

2006120209-reds.jpg

表彰式。もうちょっと派手な演出を期待していたけど、全然お構いなし。満足じゃ。

2006120210-reds.jpg

2006120211-reds.jpg

2006120212-reds.jpg

最後にスタジアムを一周してサポーターに挨拶。ワシントンがゴール裏のサポーターにJリーグ杯を渡して高々と掲げるシーンはちょっとジーンと来ました。

いやぁ、それにしてもよかったよかった。
これで来年はACLも取ってアジア制覇、世界制覇を果たしてもらいたいものです。
おっとその前に天皇杯を取ってダブルもお願い。

2006120201.jpg

一昨日から狂ったようにコード書いて、眠いはずなのに寝れず。
しょうがないので狂ったように夜中にバッティングセンターに繰り出す。
閉店まで狂ったように打ち込んでようやく床に就いたけど、こんな時間に目が覚める。

不眠症・・・ってわけではありません。

そう。
今日は泣いても笑ってもJリーグ最終節。
記念すべきレッズの初リーグ制覇の日なのですよ。

というわけで、興奮覚めあらぬ中、埼玉スタジアムに繰り出そうと思います。

あ、今日は燃えるゴミの日だった・・・
間にあわなんだ・・・orz

前にやっていたのに忘れていたのでメモ。

vmware-toolsをインストールした状態でゲストOSの*.vmxファイルをエディタで開いて

tools.syncTime = "FALSE"

tools.syncTime = "TRUE"

にすればOK。

プロフィール

このアーカイブについて

このページには、2006年12月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年11月です。

次のアーカイブは2007年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。