2007年12月アーカイブ

Re: CatalystのNEXTが気持ち悪い説 - D-6 [相変わらず根無し]
そもそもメソッドの中で親クラスのメソッドを呼ぶタイミングがその他のロジックの前か後かはこのエントリに書いてある継承順云々とはまた違う気がする。書いてあるコードを見ても、それは普通のOOってそういうもんなんじゃないの、としか言いようがないんだが。

ちとうまく伝えることができなかったので、補足。

そもそも表題がまずかったですね。正しくは
「CatalystがPluginにNEXTを使うのが気持ち悪い説」
ですね。ごめんなさい。

で、言いたかったのはOOにおける多重継承の同一メソッド名の呼び出し順序解決としてのNEXTやClass::C3に気持ち悪さを感じているのではなくPluginにおけるメソッド拡張手段としては気持ち悪いということです。

http://b.hatena.ne.jp/miyagawa/#bookmark-6914324
継承とは関係なくて、フックポイントの順序をプラグイン側できめるというCatalystの仕様に問題があるとおもう

言いたかったのはまさにこれで、CatalystのNEXTを使った仕様だと、Pluginの実装次第でフックポイント内に含まれる機能の順序が決まってしまう。更にはPluginを使う側がPluginの中の実装を意識して使わなければならないのが、気持ち悪い。というかPluginっぽさが感じられないということです。

Re: CatalystのNEXTが気持ち悪い説 - D-6 [相変わらず根無し]
本来ならメソッドディスパッチ内で行う事は普通の継承範囲内で行って、Pluginは$c->run_hookみたいな形で一気に動かせばええんだろうな。

この辺を

CatalystのNEXTが気持ち悪い説 - blog#hide-k.net
Componentなノリでメソッドを生やす形でメソッド追加、Pluginなノリでhookポイントに登録してメソッド拡張がよさげ。

で解決方法として言いたかったわけです。

設計思想の違いと言われればそれまでなんですけど、やっぱりPluginと名乗る以上Pluginな実装のほうがわかりやすいと思いのです。

Catalyst のフック機構について - TokuLog 改め だまってコードを書けよハゲ
まとめ
Catalyst は乳輪がでかすぎる

相変わらず分かりにくい。

Soozy Conference #4あたりからtokuhiromさんが声を大にして言っているCatalystのNEXT気持ち悪い説。
酒の席でこの話になるたびに奥の座敷から大声で呼び出されるCatalystのNEXT気持ち悪い説。
気を抜いてDBICを褒めるとClass::C3も同じじゃねーかとDisられるCatalystのNEXT気持ち悪い説。

僕も激しく同意。なのでちょっとまとめておく。

NEXTを使う場合、こんな感じかと。
use strict;
use warnings;
use NEXT;

package PluginA;
sub foo {
    print "A";
    shift->NEXT::foo;
}

package PluginB;
sub foo {
    print "B";
    shift->NEXT::foo;
}

package Object;
use base qw/PluginA PluginB/;

package main;
Object->foo;

実行したら

AB

ところがPluginAの作者が気まぐれに

package PluginA;
sub foo {
    shift->NEXT::foo;
    print "A";
}

こんなことしたら、当然結果は変わってきます。

BA

使う側としては継承順に呼ばれることを期待しているのに、思ったとおりに動かない。
つまり、使う側がプラグインの中身の挙動まで気を使わなければいけない。
これはClass::C3になっても同じ。

じゃあどうするか。
Componentなノリでメソッドを生やす形でメソッド追加、Pluginなノリでhookポイントに登録してメソッド拡張がよさげ。

というわけでClass::ComponentでOkina
応援してます!

Grand Gallery CHRISTMAS TIME
Grand Gallery CHRISTMAS TIME
posted with amazlet on 07.12.18
オムニバス アナンダ・プロジェクト・フィーチャリング・ヘザー・ジョンソン ステファニー・クック ケニー・ボビアン ディビニティ エリック・カッパー アナンダ・プロジェクト・フィーチャリング・テレンス・ダウンス フランキー・フェリシアーノ・フィーチャリング・モニーク・ビングハム ジハード・ムハメッド DJ オジ&ジョイ・カードウェル
インディーズ・メーカー (2007/11/07)
売り上げランキング: 14373

町はすっかりクリスマス気分。今年は例年に増して、あちこちでイルミネーションが見られるようになった気がします。

で、先月からHMVで売ってたのは知っていたのですが、どーせ寄せ集めの企画ものだろうとスルーし続けていたのがこのCD。
ネタ気分で買ってみました。

甘く見てました。

クレジットされてるアーティストを見て、目が点。
Stephanie Cooke, Eric Kupper Ananda Project, Jihad Muhammad, Joi Cardwell, DJ Spenとハウスの各ジャンルからかき集めてきたかのような豪華メンバー。

しかも全曲新規録音音源。ちょっとありえないです。

冒頭からStephanie Cookeの美声、続いて旦那(記憶違いじゃなければ)のKenny Bobienのファルセットボイス、Eric Kupperのパーカッションをバックにした綺麗なエレピのSilent Night、ピアノがうねりまくるJihad MuhammadのIt's Holiday Time、DJ Spenのソウルフルなナンバーとすざましい構成です。

ちまたでよく見るクリスマスコンピとは違い、ジャンルがジャンルだけに聖なる夜・・・って感じではないですが、こんなクリスマスコンピもいかがでしょ?

  1. It's X'Mas / Stephanie Cooke
  2. Let Us Adore Him (Come O Ye Faithful) / Kenny Bobien
  3. The Reason / Diviniti & Pirahnahead
  4. Silent Night / Eric Kupper
  5. Christmas Lights / Ananda Project Feat. Terrance Downs
  6. December / Frankie Feliciano Feat. Monique Bingham
  7. It's Holiday Time / Jihad Muhammad
  8. One Wish / DJ Oji & Joi Cardwell
  9. Our First Christmas / DJ Spen & THE Muthafunkaz
  10. It's Christmas / Ananda Project Feat. Heather Johnson

お台場に行ったらツリー祭りだったのでP905iで撮ってきました。blogのサイズの都合で本来480X85で撮ったものを240X427に縮小しています。

まずはDecksの下のツリー。ツリー全体が液晶になっていて色んな色や絵柄に変化していました。
2007121501.jpg

次はメディアージュのエントランスの吹き抜けにそびえ立ってたツリー。登山家の野口さんがプロデュースってことで、本来は真っ白なのですが、00分、15分、30分、45分にいろんな色に変わる仕組み。
2007121503.jpg

最後はフジテレビにあるツリー。これが一番綺麗でした。フジテレビ全体がクリスマスムードで階段にも電飾がちりばめられていて、まるで天の川のようでした。
2007121502.jpg

2007121401.jpg

水曜日に携帯を買い換えました。

ずーっと愛用してきたSH901iCですが、最近電池交換をしたにもかかわらず、すぐ電池切れになったり周りのDocomoユーザーはアンテナ立ちまくってるのにボクのだけ圏外だったり、シャッターボタンがへたって押しづらくなったりと、そろそろ限界かな~と思ってたところに、先日905シリーズが発売されたので買い換えました。SH901iCを買ったのが2年10ヶ月ほど前だったのでよくもったほうだと思います。


最初はSHにしようかとも思ったのですが、カメラの画像がいまいちっていうのと、901で気に入ってた横カメラでの使い勝手がボク的に合わなかったのと、事前調査でPを触ったら心変わりしちゃいました。本当は発売日の週末に買おうと思ったのですが、機種変登録に4時間かかるということで時間があわずに断念。それからなんだーかんだーで今週末に買おうと思っていたのですが、人気機種とあって売り切れ続出。半ば諦めていたのですが、たまたま会社のそばでピンクゴールドが一台だけ残っていたので、衝動買いしました。

そもそも分割で買おうと思っていたのですが、当初は分割でもヨドバシならポイントをもらえると思っていたら、分割ではポイントはつかないとのこと。ならば、どこで買っても一緒だということで、買っちゃいました。

4世代も飛び越せば携帯も進化してるわけで、テレビは見れるし液晶は大きくて綺麗だし薄いしカメラは綺麗だしと浦島状態なので感動もひとしおです。

まだ全然使いこなせていないのですが、3日ほど使ってみてちょっと惜しいなという細かい点もありますが、ファーストインプレッションとしては大満足です。

Jの優勝を逃したときみたいな怒りは湧いてきませんでした。
圧倒的に攻められながらも悲壮感丸出しで守っていた選手に心を打たれたからなのか、そのあまりに圧倒的な実力差に諦めが生じたからなのか。

両方だったのかもしれません。

今回は、はなから諦めていたわけではなく、むしろ今年のセリエを見ていたらひょっとしたら・・・という考えが頭の片隅にありました。でも、その考えは試合開始直後に間違えということがはっきりと思い知らされて、終わってみれば得点差以上の実力の差を見せつけらた試合でした。

日ごろから絶対的試合数からいっても欧州の試合を見る機会が多いので、Jと欧州の局面局面の実力差ってのはよくわかってるのですが、まさか組織力でもここまで実力差があるとは思いませんでした。

セパハン戦で異常なまでの切れを見せていた相馬は何もさせてもらえず、Jでよーいドンのディフェンスなら滅多に負けない坪井が何度となく振り切られ、FWのところは必ず二人以上のマークが付いていて何もさせてもらえず、セカンドボールを奪えたのは数えるばかり、気づけばボール支配率ではなかなか見られない7:3くらいで回させてるのではなく回される一方的な試合でした。

にもかかわらず、何度か決定機を作られたものの最小失点で抑えたチーム一丸のディフェンスには心を打たれましたよ。もし、何かの拍子で勝ったりでもしたら、間違いなく泣いてました。それくらい選手たちが全力を出し切ったのが伝わりました。

個人的にはプロスポーツには結果を求めるタイプなので、がんばったからよくやった。とは言いたくないのですが、今日はアマチュアスポーツの試合でも見た後のような心境になりました。

でも、これじゃーいかんのですよ。

歴史の違いも、環境の違いもあるのは重々理解してるんだけど、これじゃーいかんのです。プロである限り。いつになるかわからないけど、ミランに負けて日本中から「よくがんばった」とかじゃなくて、「なに負けてんだよ」って言われるようにならんといかんのですよ。これは代表もしかり。

だから、自戒の念もこめてあえて言おう。

なに負けてんだよ!

DBIC::Inflateを作ってこんなコードを作ってたのに動かなかった。

__PACKAGE__->inflate_column(
    name => {
        inflate => sub {
            my ( $value, $obj ) = @_;
            warn "inflate name\n";
            return "inflate: $value";
        },
        deflate => sub {
            my ( $value, $obj ) = @_;
            warn "deflate name\n";
            return "deflate: $value";
        },
    }
);

inflateは動くけどdeflateは動かない。

で、よくよく調べてみました。
というかDBIx::Class::InflateColumnのpod読みました。

It will handle all types of references except scalar references. It will not handle scalar values, these are ignored and thus passed through to SQL::Abstract. This is to allow setting raw values to "just work". Scalar references are passed through to the database to deal with, to allow such settings as \'year + 1' and \'DEFAULT' to work.

つまりscalarは無視するよと。
さらに

If you want to filter plain scalar values and replace them with something else, contribute a filtering component.

もしscalar valueをフィルタリングしたり置換したいならフィルタリングコンポーネントとして作りなさいよと。

恥ずかしながら知りませんでした。

実際ソースを見てみると

sub _deflated_column {
  my ($self, $col, $value) = @_;
#  return $value unless ref $value && blessed($value); # If it's not an object, don't touch it
  ## Leave scalar refs (ala SQL::Abstract literal SQL), untouched, deflate all other refs
  return $value unless (ref $value && ref($value) ne 'SCALAR');

... snip ...

てな感じで、いきなりreturnされてます。
_inflated_columnではこのような処理をされていないので、ちょっと混乱しました。

これでDBIx::Class::UTF8ColumnsやDBIx::Class::DigestColumnsがInflateColumnsを使っていない理由がわかりました。

WARNING: DBIx::Class::StartupCheck: This version of Perl is likely to exhibit
extremely slow performance for certain critical operations.
Please consider recompiling Perl. For more information, see
https://bugzilla.redhat.com/show_bug.cgi?id=196836 and/or
http://lists.scsys.co.uk/pipermail/dbix-class/2007-October/005119.html.
You can suppress this message by setting DBIC_NO_WARN_BAD_PERL=1 in your
environment.

CentOSでPerlのバージョンとDBIx::Classのバージョンを上げたらDBIx::Classを使うたびにこんなエラーが出るようになりました。

kazeburoさんYappoさんが言ってたRed Hat系のディストリビューションのPerlのパッケージにはoverloadされたクラスをblessするとリファレンスを全て検索するパッチがあてられていて遅いので注意してねって感じですか。

覗いてみるとDBIx::ClassでuseしてるDBIx::Class::StartupCheckのBEGINブロックで

BEGIN {

    { package TestRHBug; use overload bool => sub { 0 } }

    sub _has_bug_34925 {
	my %thing;
	my $r1 = \%thing;
	my $r2 = \%thing;
	bless $r1 => 'TestRHBug';
	return !!$r2;
    }

    sub _possibly_has_bad_overload_performance {
	return $] < 5.008009 && ! _has_bug_34925();
    }

    unless ($ENV{DBIC_NO_WARN_BAD_PERL}) {
	if (_possibly_has_bad_overload_performance()) {

...snip...

こんな感じでテストしてお節介にご丁寧にメッセージを出してくれてます。0.08008からみたいですね。

メッセージを止めるにはメッセージにあるとおり、環境変数DBIC_NO_WARN_BAD_PERLに値をセットすればオッケー。

とは言え、根本的解決にはならないのでkazeburoさんの言うとおりパッチはずしてrpmbuildしてインストールしました。Feodoraでは8で解決したらしいですがCentOSではまだ解決してないんですね。

Perlのバージョンを上げたらScalar::Utilをforce installしないとWeak references are not implemented in the version of perlになるので要注意です。

今朝おもむろにyum updateをかけたら猛烈な量の更新がかかったのであせりました。
RHEL5.1のリリースに伴いCentOS 5.1がリリースされたんですね。
すでに国内のミラーにも配布されているようです。

CentOS Wiki - CentOS 5.1 リリースノート

2007120101.jpg

予兆はありました。

リーグ戦ではここ4試合勝ち星なしで得点わずかに1。
ミッドウィークの天皇杯ではJ2の愛媛によもやの完敗。
ぶっちぎりの優勝ペースが気がつけば鹿島にわずか勝ち点1に迫られる展開。

でも、まさかまさかまさか。

アウェイとはいえ4万6千人の8割以上を赤く染めた日産スタジアムに最終戦を見に行ってきました。
前節、さいたまスタジアムで鹿島相手にありえない負け方をしたのを目の前にして、あわててチケットを手配したのも、優勝に立ち会うのため・・・のはずが・・・。

相手は今期わずか3勝ぶっちぎりのダントツ最下位でモチベーションも何もないはずの横浜FC。
勝てば無条件で優勝が決まる試合、いくらここのところの成績が悪くても負けるはずがないと思ってました。

ところが、前半の早い時間にキングにサイドをぶっちぎられてゴール前に出されたスルーパスを押し込まれて、あっさり先制される展開。この時点で嫌な予感がよぎりました。

浦和のサッカーは基本的にリアクションサッカーです。
守備で奪ったボールを少ない人数で攻撃につなげるスタイルは先制されると非常にもろい。
前節の鹿島戦も退場者を出した鹿島に先制点を奪われた後は守備に回られて何もできなかったのに、今回もその教訓は生かされませんでした。

むしろ、カウンターで2,3点は奪われてもおかしくなかったもののキングのありえない決定力のなさに救われた形でした。
後半30分以降はため息の連続。

なすすべなく後ろで回るボール。
あさっての方向に飛んでいくセンタリング。
枠に飛ばないシュート。

得点の気配すらなく完封負けを食らって、自ら2年連続優勝を放棄した形で今シーズンは終わりました。

2007120102.jpg

気になったのは、試合後観客席からは発炎筒や物が2,3回投げ込まれていましたが、大半は拍手で迎えるおおらかさ。
ちょっと理解に苦しみました。
物を投げ入れるのはよくないけど、拍手はないだろ。

ACLを含めた連戦の疲れ、怪我人の続出など色々あるんでしょうが、そもそもスタイルが王者のスタイルではない。
選手交代もマンネリな上に、いつも後手後手。
選手層も啓太や阿部は代表含めて何試合出たんだというくらい、ローテーションが効かなすぎ。

はっきりいって、戦術の見直し、選手層の拡大、選手のモチベーションの改善、何らかのてこ入れをしないと来期もっと悲惨なことになると思います。

プロフィール

このアーカイブについて

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

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

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

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