2006年9月アーカイブ

長い一日。



昨日からやたらと忙しかった。


昨日書いた通り、まずカンヅメ状態。これは風邪を引いたせいもあるんだけど、基本的に俺の身から出た錆なのでしょうがない。すみません、すみません>担当の人。で、仕事終わって午前2時。そのまま帰るのはどーしてもシャクだったので、帰り道にあるバーへ。割と最近紹介してもらったのだけど、新宿まででていく元気がない時にちょっといいのでちょこちょこ行っている。そこで飲んでたらバーのオーナーがその時いた客の女医さんともう一人と俺で一緒に次の店へ行こう!という流れになったのでそのまま連れて行ってもらう。つか、多分この一日でこの時点が一番元気だったかもしれぬ。


で、次のバーへ行って、ビールとスプリングバンクの28年ものを二杯ほど。結構高くつくかなぁとか思ってたんだけど、なんかその店に連れて行ってくれたバーの人(オーナーはこの時点ですでにつぶれてた)がお金を払ってくれたのでタダ酒。わーい。


外に出たらあっかるい!空が白む、じゃなくて白いよ!すでに少し青みがかかってきてるよ!


歩いて帰ろうと思えば帰れる距離だったんだけど、さすがにヘロヘロだったのでタクシー。ワンメーターだった。コンビニでお茶を買ってたらちょうど7時の時報。家について、お茶をがぶ飲みして寝。


11時に起床。昨日から分かっていた事なんだけど、結局新札を手に入れる機会がなかったのでまず親に電話してみて「新札持ってる?」と駄目モトで交渉。運良く持っててくれたので交換してもらうために落ち合う事に。13時頃に一緒にご飯して、新札ゲット。ご飯を食べる時点ではまだ普通に酔っぱらってたけど、ご飯が終わったくらいでようやく酒が抜けた感じ。


その後親がとうとう「らくらくフォン」を買うというので購入のお手伝い。某家電店でさっそく購入。iモードも初めてなので、メールアドレスの設定とか一通り説明して、バイバイ。俺は某デパートとスーツカンパニーに行ってカフスを物色。バスで帰宅して、クリーニング屋で服を受け取り。


そしてようやく今にいたる。長い1日だった・・・もう「パックス・モンゴリカ」を読みながらごろごろするぞ(昨日の女医さんが今夜も皆で飲むから来い、みたいな事言ってたのが微妙に心残りなんだが)。さすがに2日連続は体力もたないなぁ・・・。


筆ペン



去年も一回同じ事をしたのだが、がんばって名前を書く練習。みっちり2時間くらいやったが、うまく書けず。くそ・・・やっぱり日ペンか・・・


監視付き



今日は監視付きでお仕事。ごめんねぇ。でもなんだか昔「まんが道」で散々読んだカンヅメというものを経験できてちょっぴり嬉しかったりする。


バー



仕事が午前2時すぎに終わったので、とりあえずバーへ行って一杯。・・・と思ったら閉店時間に合わせてバーテンの人が飲みに行こうと言ってきて、次のバーへ。気がついたら午前7時。少し寝て今11時半。なんかまだ普通に酔ってます。


コスプレの日。



今日はコスプレの日です。スーツ、スーツ。


「パックス・モンゴリカ」



これはまだ読んでる途中。チンギスハンからの3代に渡るモンゴル民族の歴史の本。


Nick Ing Simmons - RIP




http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2006-09/msg00586.html


http://news.perlfoundation.org/2006/09/thanks_nick.html



Perl開発者のコミュニティで活躍していたNick Ing Simmonsが亡くなった。俺は会う機会がなかったけれども、一度一緒に仕事してみたかったなぁ。しかしこれからPerlの開発はどうするんだろうなぁ。


RIP


エピセ



スーツを着込んで西麻布エピセに。前にKさんと自転車で通った時に、その店は某氏がたまに利用していると聞いていて、店構え、場所からしてエロいなぁ、と言っていた店。俺らが接待する側。


フカヒレ、生クラゲ、金華豚のロースト、色々。ワインを2本。超うまかったわぁ。


「小さなスナック」




小さなスナック

小さなスナック





対談とかエッセイ集とかって滅多に読まないんだけど、これはリリーフランキーとナンシー関のヤツだったので。おもしろかったー。京極夏彦は見当たらなかった。


アホな事に



少し風邪がぶり返した。とほほ。今日は後で京極夏彦の本を見に行こうっと。


新内閣。



うー、ちょうどこのひと月ばかりあまり新聞を真面目に読んでる暇がなくて政策とかにちゃんと目を通してないんで正直なんとも言えんのだけど。なんか予定調和だなぁ。


怪しい電話



多分ただの間違い電話だと思うんだけど、3:47amに非通知で電話がかかってきてた。気がつかなかったんだけど、こういうのってなんかいやだよねぇ。


バーという非日常



最近本当にバーばっかり行ってる。正直酒を飲みたいというのもあるわけだが、それよりもなによりもあの空間が好きだ。バーテンダーさんがいる。ほどよい数の客がいる。低い音量の音楽があり、そして酒がある。この空間で、バーテンダーさんとの間合いを見計らいつつたまに話しかけ、話しかけられ。


この空間にいるということがどれだけのストレス発散になるか。正直自分でも最近ようやくわかってきた。


今日は



ちょっとだけ決心をしました。たいしたことないですが。あと、マルサラを飲みました。うますぎ。今度例のバーに行った時にはまた頼みます頼みます。


アフターダーク




...カウンターの端に座り、カクテルを注文し、小さな超えでバーテンダーと会話する...いつもの席と、いつもの飲み物。深夜の都会を住処とする、よく正体のわからない人々の一人だ



この話の舞台があからさまに渋谷っぽいのでなんだか普段その辺りを仕事でもプライベートでも徘徊している身としてはちょっと身近な話であった。久しぶりに「帳」という字を見て一瞬読み方に戸惑った。相変わらずジャズが好きな作者だなぁ。


個人的には「スプートニックの恋人」と同じくらい好きかも。


ajaxzip



昨日書いたのに日記の一部を間違って消しちゃったもんで、再び:




臨死!! 江古田ちゃん 1

臨死!! 江古田ちゃん 1








逃亡作法 TURD ON THE RUN 宝島社文庫

逃亡作法 TURD ON THE RUN 宝島社文庫








アフターダーク

アフターダーク







昨日ふらふらと買ってきた。どれもいい感じ。江古田ちゃんはちょっと今後もはまりそうな予感・・・今アフターダークを読んでる途中。


増田こうすけ



妄想です。「甘い事いってんじゃねーよ」と言われるような気もします。でも敢えて書くんだが、例えばまぁ俺がなんか悩んでるとか、行動しあぐねてることがあって、で、そこでまぁなんとなく「こうすればいい」みたいな方向性がわかってるとするじゃないですか。


そこで「男ならこうしてみぃ!」とか言われる事もある。もちろんそれだけ言ってくれるだけでも嬉しいのだけど、ここで敢えて我侭を言うなら、



「・・・こうする事ができたらカッコいいのになぁ・・・」(にこっ)



とか言ってくれるとそれはもう、獅子奮迅の働きで目標を達成しようとするわけですよ。もうなんていうの?虚栄心っつーかなんつーか、すごい心のこうムズムズする部分をくすぐられる感じなんですわな。


っていうわけで次からはそう言ってください。多分思い通りの行動にでます。こういうとこはひじょ~に分かりやすい人です、僕は。


YAML Validation




http://d.hatena.ne.jp/charsbar/20060925/1159110491



Plaggerの中でvalidateフックでも作るっていうのはどうでしょう。


追記:俺はvalidationって物に限っては自動生成って無理だと思うのです。もちろん、ある程度の規則にしたがって簡単に、ってのは可能だと思うのだけど。


思うにData::FormValidatorでもフックにつければいいんちゃうだろうか。フォームじゃないからD::FVは使えないかもしれんけどw



package Plagger::Plugin::MyPlugin;
use strict;
use base qw(Plagger::Plugin);

sub validation_profile
{
return +{
required => [ qw(....) ],
optional => [ qw(....) ],
}
}


こうやってそれぞれのプラグインでprofileを作って、



package Plagger;
use strict;
use Data::FormValidator;

$self->{dfv} = Data::FormValidator->new;

sub validate {
...
foreach my $plugin (@plugins) {
$self->{dfv}->check($plugin->config, $plugin->validation_profile);
}
}


Plaggerの中でcheck()を呼ぶ、と。


娑婆



三日ぶりの娑婆の空気はうまい。飯食って本屋行って、歩いて帰ってきました。本屋でSTUDIO VOICEを読んでたら気になってしまい、「臨死!江古田ちゃん」を買ってしまいましたよ


TT + DateTime のアレ



DateTime MLに来てたのでデバッグしてみた。Template::Stash の該当部分が



my $atroot = ($root eq $self);

となっており、同じ部分をTemplate::Stash::XSで探すと



atroot = sv_derived_from(root, TT_STASH_PKG);

となってることから、Template::Stashを



my $atroot = eval { $root->isa(__PACKAGE__) };

に変えたら直ったですよ。


追記:sub _dotop内です。もう一カ所同等の処理をしている箇所もあるんだけど、そこは変更の必要ないっぽい。


書いとく

ワードリスト




http://clouder.jp/yoshiki/mt/archives/000712.html


http://b.hatena.ne.jp/entry/http://clouder.jp/yoshiki/mt/archives/000712.html



俺もqw()。俺も直す。qw//だと正規表現だかなんだかわかんねー。


のわ



なんか日記消しちゃった。


風邪風邪風邪



今日は一日寝てた。うつらうつらして大汗をかいたあと、むくりと起き上がってコーディング。また気絶してうつらうつらして、大汗をかいて・・・の繰り返し。まだ微妙に熱もあるっぽいし、治るのにはまだもうちょいかかりそう。


Catalyst + Japanese Charsets



俺は文字コード関連に関しては正直「面倒くさい」ということ以外たいしてしらないのだが、JcodeとUnicode::Japaneseの根本的な差ってなんなんだろう?今のところCatalystで入ってきた文字列とかをUTF8に変換するのにJcodeを使っていたのだが、なんか「ペンギン」は文字化けしないのに「ペン」だと文字化けする現象に遭遇。よくわからんかったのでとりあえず他の書き方も試してみたらUnicode::Japaneseは動く、ということに気がついた。


じゃあ、と思ってこれを書いてみたんだけど、



use strict;
use Encode;
use Unicode::Japanese;
use Jcode;

my @words = qw(ペンギン ペン);

foreach my $w (@words) {
my $jcode_utf8 = Jcode->new($w)->utf8;
my $uj_utf8 = Unicode::Japanese->new($w)->utf8;

print "jcode is_utf8 ? ", Encode::is_utf8($jcode_utf8) ? "Y" : "N", "\n";
print "uj is_utf8 ? ", Encode::is_utf8($uj_utf8) ? "Y" : "N", "\n";

print "jcode eq uj ? ", $jcode_utf8 eq $uj_utf8 ? "Y" : "N", "\n";


print "jcode as hex = ", (map { my $p = unpack("H2", $_); "\\x$p" } ($jcode_utf8 =~ /(.)/g)), "\n";
print "uj as hex = ", (map { my $p = unpack("H2", $_); "\\x$p" } ($uj_utf8 =~ /(.)/g)), "\n";

print Unicode::Japanese->new($jcode_utf8)->euc, "\n";
print Jcode->new($uj_utf8)->euc, "\n";
}


結果はこんな感じ:



jcode is_utf8 ? N
uj is_utf8 ? N
jcode eq uj ? N
jcode as hex = \xe3\x83\x9a\xe3\x83\xb3\xe3\x82\xae\xe3\x83\xb3
uj as hex = \xa5\xda\xa5\xf3\xa5\xae\xa5\xf3
ペンギン
ペンギン
jcode is_utf8 ? N
uj is_utf8 ? N
jcode eq uj ? N
jcode as hex = \xe3\x83\x9a\xe3\x83\xb3
uj as hex = \xa5\xda\xa5\xf3
ペン
ペン

うーんうーん。別にどっちがどっちでもいいんだけど、この二つのモジュールはそもそも何が違うの?入力文字列が基本的にUTF-8、出力もUTF-8で、途中正規化やらなんやらで変換をかましたい時はどっちのモジュールを使う方がいいのだろう?




とある株の新規上場の抽選にあたった。残念ながらたかだか100株なんだが、まぁいいか。この新規上場株を購入するにあたって、今まで持ってた電鉄株を売った(とは言ってもさっき売り注文を出したから今の段階では未成立なんだが)ので、そのお金でもっと買えるからざっくり買うかー。


風邪ひいた



downloader.cgiっつーの作った。焼き魚定食のお昼を食べた。気がついたら喉が痛かった。データベースをいじって某社のずさんなデータをまた一つ浮き彫りに。ミーティングするも機嫌悪。Catalyst とテンプレートの使い方をざっくり説明。体力の限界。銀座アスターの弁当を買って、帰宅。寝る。起きる。


メーリングリストを作成するのにmailmanをインストール、設定。svnnotifyを設定。


ちなみに風邪は昨日の夜、飲んで帰ってきてその後床で作業してたら窓を全開であけっぱなしにしていつのまにか気絶するように寝てしまい、気がついたら風邪ですよ。アホだ。


「不信の時」の最終回ひどい



なんだ、あれだけドロドロの話やっておいて最後はキレイにまとめるのかよ。しかも石黒賢、いつのまにか死んでるしw


腹減ったよ。



9時起床。ちょっと遅かった。ずっと作業。jcode.plなんて過去の遺物を使ってみる。腹減った腹減った。


diff と patch



実はこれだけ色々と開発の事に関して書いてきても、いまだに結構中途半端な知識しかないのだが、別にたいした事じゃないけど一発でできてみるとすごい嬉しい事がたまにあったりする。で、今日のはこれ:


Hogeというディレクトリがsubversion管理下にないことを忘れたまま作業してしまい、一旦作業したディレクトリをmvして、そこに新しくsvn co したものを持ってきた:



mv Hoge Hoge.old
svn co http://hoge.com/Hoge/trunk Hoge

で、もちろんHoge.oldの変更は残したいのでパッチを当てたりしたいわけなんだが、ここでだいたいいつもどうしようかと悩んでからとりあえずhoge.patchとかにdiffを落とすわけだが、なんかしらんけど今日はひとつのコマンドでやりたかったのでちょっとやってみた:



cd Hoge
diff -du -r . ../Hoge.old | patch -p0

一発で全部のパッチがあたった!俺すげぇ!いや、くだらないのはわかってるけど。俺すげぇ!


DBIx::Classページングのドツボ



わかった! $rs->search() をつなげて検索をかけていたのだが、これで最初のsearch()だけでpageとrowsを指定していたにもかかわらず、searchの実装として以下のようになっているため、offsetがどんどん増えて行ってしまう:



my $rs = DBIx::Class::Resultset->new(..., { page => $p, rows => $r });
# この時点で、$rs->{attrs}{page}, $rs->{attrs}{rows}を元に$rs->{attrs}{offset}
# が$p と $rを元にして計算される

# 条件1で検索
$rs = $rs->search( ... ); # ここでD::C::ResultSet->new がまた呼ばれる

# 条件2で検索
$rs = $rs->search( ... ); # さらにもう一回newが呼ばれる


ポイントはそれぞれのsearchの呼び出しの時にnewが呼ばれて、offsetが更新される事。つまり



offset += row * (page - 1);

として毎回計算されるわけだ。でもrowとpageは毎回同じものがコンストラクタに渡されるから、searchの度にoffsetが足される。そりゃあページングもずれます。


というわけで、教訓:ページングは一番最後に指定!



my $rs = $schema->resultset('Hoge');
$rs = $rs->search( \%where1 );
$rs = $rs->search( \%where2 );
$rs = $rs->search( \%where3 );

# で、最後に
$rs = $rs->search( undef, { rows => $rows, page => $page });


DBIx::Classのページング



なんか変だ・・・Catalystから使ってるのだが、



$c->model('DBIC')->resultset('Hoge')->search(
undef,
{ page => 2, rows => 10 }
);

みたいな事してる時になぜか2ページ目がでない・・・んんん、なんだこれ・・・ページはたしかに2ページ目なんだけど・・・おかしい・・・


追記!不思議な事が起こってるよ!


page => 6, rows => 5でやってみると、DBIx::Class::ResultSet->{attrs}の中身を見るとoffset = 25って書いてあるのに、DBIx::Class::Storage::DBIの中の_sql_makerが作ったSQLの内容を見るとOFFSETが75になってるよ!おかしい!おかしい!


ってところで俺は今日はもうリタイヤ!


出歩きますよ。



夕飯はリンガーハット。ずるずる。うまいけどまずい。


家に帰っても別に楽しい事はないのでまたぞろほっつき歩くわけですよ。今日は軽く終えようとは思ってますが、まぁ例によってスコッチ飲んできます。


プロジェクトのモジュール=49個



自分の感覚でプロジェクト進行率65%で、ただいまのプロジェクトのモジュール49個、18スクリプト、58テンプレート、308コミット。49個というのはCatalystのControllerの分も入ってるのでまぁ12、3個があちこちのURLのハンドリングをしたりしてるわけだが。モジュール類はコメントも含めて5875行、スクリプト類は1585行、テンプレートは1378行。


Catalyst や DBIx::Classを使ってるので相当コードの量も省略できてるわけだが、これだけの行数でも結構な事できるようになった。コミットログを見ると、まともに作業が始まってちょうど1月。これだけの量のコード、これだけの情報でよく書いたと思うよ、本当。


数十万行のプロジェクトってザラだけど、Perlで書いている限り俺の経験ではよっぽど大掛かりなものでもだいたい1万行~3万行で終わらなければなにか間違った事をしてると思う。実際作業の10%くらいはコードのリファクタリングで、例えばControllerの部分のリファクタリングだけで500行近くは100行ほどのモジュールを一個足すだけで消してると思われ。


うどん



新宿の麺通団でうどん。かまたまの小とめんたいしょうゆの小。うまうま。そのままとんぼ帰りで渋谷。仕事。


バルブレア 15年



ブランカメンタのソーダ割り、マティーニ、UDのポートエレンカスクストレングス。〆はバルブレアの15年もの。これもカスク。最近モルトはハーフで飲んでる。量的にはこれくらいがいい感じになってきた。別にがんばってショットを飲む必要もなくなってきたなぁ。


沖縄料理



馬場のちゃんぷる亭で食事。定食とかのほうがメインな感じがするけど一品料理もある。ひとつだけ定食を頼んであとは一品をあれやこれや。豚肉とメンマの炒め物の定食を頼んだのだが、これがバカうま。海藻入りのご飯と合う事合う事。うめぇ。


その後店を変えて、あんまよくなかったので解散。最後に飲んだジントニックがひどかったので口直しに新宿に移動してちゃんとしたジントニック。最後にスプリングバンク68年ものとボウモアの68年ものをそれぞれハーフで飲み比べ。うますぎる。


1弦も購入。やっとスーパーマリオ弾ける。


3連休



3連休ってなんですか?仕事が入りました。あはは。


1弦



うおお、1弦がねぇとやりにくいなぁ。はやく弦買いに行こう。


NANA



昨日の夜コンビニに立ち寄ったら16巻が出てたので電光石火の速さで購入しますた!で、今読んだ。昼ドラ昼ドラ。


ちなみに仕事は進んでる



ちなみになんだかんだ言っても仕事は進めてますよ。なんかこういう状態になって会社に行くのは嫌でも仕事の手を止める事はプロなんでしねーぜ。


落ちる



モチベーションが落ちてる時は本当によくない。ほんと躁鬱傾向ある人だなぁ、俺。って事で今日は朝スーパーマリオのテーマを弾いてたら1弦がぶちきれた。うおおおう。昼間は外出もせずにちょこまか気分が乗った時だけコーディング。風呂入って事務所にでようかと思ったんだけど、だめ、寝る。ぐー。1時間程リタイヤ。夕方になって幾ばくか調子があがってきたのでもう少し仕事。


裏方の楽しい部分がだいたい終わってしまったのでもう後は人間が触る面倒くさいインターフェース部分だけになってしまった。人間が関わると面倒くさいよねぇ。


Wish You Were Hereは1弦なくても歌えるのでちょっと歌ってみた。


これから重い腰をあげてちょっと出かける予定。


ポートトニックもどき



この夏はまった酒といえばポートトニック。ポートとトニックで割って飲んでしまうという贅沢きわまりない酒だ。これを家でも飲みたいと思ってたのだが、いかんせんポートは割高だし、第一混ぜたらなんか悪いような気がする(カクテル作るのがウマい人ならともかく)。


ということで少し考えたのが、普通の赤ワインをジンジャーエールで割ってみるのはどうだ?と。なんかすでにそういうカクテルはありそうだけど、ポートワインにあって普通のワインにない甘みをジンジャーエールがうまく補完してくれそうだったので、今日やってみた。


そしたら、結構いい感じ!ポートトニックそのものじゃないけど、かなり近い!これならおいしく飲めるわー。今度から来客があったらこれをおすすめしてみるなり。


追記:id:charsbarさんの突っ込みはや!くそ、プロってやつぁ(笑)


ぐてぇ~~~~~~~~



駄目だわ、今日。もう全然駄目。


完全に燃料切れ



うわー、今日は完全に燃料切れ。っていうかここ三日ばかり夜遊んでないからか?やっぱり毎日少しずつガス抜きしてかないときついのかなぁ。今朝なんて2度寝しちゃったよ。滅多にしないのに。


今日は社長業以外はなるたけしないでおこう・・・


スピードワゴンと遭遇



息抜きに渋谷のバーにいったのです。そしたらしばらくして、スピードワゴンの井戸田潤じゃないほうが来た。そう、安達祐実の旦那じゃないほう。折角こんな至近距離にいるんだからがんばってくださいねくらい声をかけようと思ったら名前が思い出せない。あー、あれだよ、あれ。あの人。声が独特なほう。


ううううう。


悩む事40分。帰った。すぐ相棒ちゃんに電話した。相棒ちゃん、検索したのかどうかわからんが、答えてくれた。小沢さん!小沢さんだ!あああ、よかったぁ。


帰り際に盛んに近所に引っ越してきたと話してた。神泉あたりにでも住んでるんだろうか。




Text::CSV_XSの使用で大分詰まっていたのです。一体なんで



use Text::CSV_XS;

my $csv = Text::CSV_XS->new({ binary => 1});
while (<>) {
$csv->parse($_) or die $csv->error_input;
my @fields = $csv->fields;
}


がエラーになるのかわからず、頭を抱え込んでしまってた。ようやく気づいたのは色々Perl内で試してみて、最終的にvimでCSVファイルを開けたところ。改行に\rが入ってる!うはー。


これの何が問題って、エラーを吐いた行の内容はerror_input()で取得できるのにも関わらず、どういうエラーだったのか全くわからないのが問題。こんなの、どうせエラーを吐くならcroakするとか、エラーの内容をerror()関数で返せるようにすればいいだけの話で。それだけでどれだけの人が助かるかと。


こういうのは簡単なデザインチョイスなのになぁ。


WWW::RobotRules::MySQLCache



コードの中身はちょっと微妙~なんだけど、そうそう。こういう事のためにWWW::RobotRules::Parserを書いた訳ですよ。



http://search.cpan.org/~apatwa/WWW-RobotRules-MySQLCache-0.02/lib/WWW/RobotRules/MySQLCache.pm



新たに習得した技



主婦の人や、俺より掃除に興味ある人たちには当たり前の事なんだろうが、このたび初めて「歯ブラシで掃除をする」という技を覚えた。風呂に赤カビが発生していたからなんだが、この2週間くらい定期的にこれを使うとすごい落ちる。今までの掃除の仕方はなんだったんだ。これはたまらん。


そんなわけで今朝もゴシゴシと掃除してきた。


リファラー




http://www.google.co.jp/search?hl=ja&q=catalyst+動かない&lr=

ははは。まぁ最初は苦労するわな。あれは確かに不親切だよ。


ストレス発散



目もショボショボしてきたし、指もちょっといてぇし、ってことで昨日は零時すぎに作業は切り上げて、にぽたんの所で見たマリオのヤツを俺もギターで練習。イントロとダンジョンの最初のほうの音はわかったのだが、それ以降がなんか微妙に音が違うので諦めてさっさと"Super Mario Brothers Theme Tab"で検索(笑)


そして色々参考にしつつ、何個か音を変えて練習。どーやらできたっぽい。うひひ。楽しいなぁ。あ、でもアコギだし、キノコやら金貨の音はやってません。


燃料が切れ始め



うーむ。けっこう燃料切れ始め。やー、スケジュールに余裕持って作業しておいてよかったなぁ。


9/11



上の階のインド人夫婦が3日に一回ベッドをぎしぎしさせてたあの部屋。起きて、


いつもしていたようにネットのニュースを見たらWTCが燃えていて、飛び起きてとなりの部屋のテレビをつけて。その直後に二つ目のタワーが崩れ落ちた。泊まりにきてた彼女が帰れるかどうか微妙だったけど、なんとか帰れた。


世界が変わった。


次の週に寄付をした。微々たる額だけど。そして2年半でアメリカにいる理由を失ったので日本に来た。


政治的な問題とか色々あったけど、色んな人の人生があれでかわったよなぁ。


スティール・ボール・ランンンンンンッッッ



なにを思ったが、別に集めてもいないのにスティール・ボール・ランの単行本を買ってしまった。そしてッ、荒木飛呂彦イズムはカッコ良すぎるぅぅぅッッッ!!!



「ようこそ・・・
『男の世界』へ・・・・」

うがああああ 飛呂彦ォォォォォッッッ!すげぇ!すごすぎる!


開発環境



いまさらだけど、俺も俺も。



  • 環境: Mac PowerBook 15 inch - 家も会社もこれのみ。

  • エディター: vim. 昔はXEmacs使いでした。

  • ソース管理: svk. 昔はperforce使いでした。

  • ターミナル:マックに元々入ってるヤツ。

  • Perl: 5.8.8

  • Mini-CPAN: 3日に一回ほど同期を取ってる

目がショボショボ



今日、とうとう目薬を久しぶりに買った。目がショボショボする。やっぱり連日の作業で結構キてるっぽい。指もそろそろ第一関節がちょっといやんな感じ(まだ痛くはない)。はやく終わらせないとなぁ。


ってことで、今日はまだ作業中。せめてこのメール通知部分は終わらせないとなぁ。


ご用聞き中



高円寺でご用聞き中。世の中の人が皆システムに関わっているわけではないので当たり前だが、やっぱりそれなりに分かってから発注してほしいので色々説明中!


DBIx::Class with fork()



わかったわかった。普通の事だった。DBIx::Classに含まれてるforkのテストとか見てなんか色々頭いい事してくれてんだろうなぁ、とか勝手に思ってたけど、なんのことはない。親プロセスがデータベースハンドルをクリアしようとする前+最初に処理が終わった子プロセスの後に終了したその他の子プロセスがクリーンアップしようとしてるときにハンドルが普通にDESTROYされてただけだったよ。


Parallel::ForkManagerのstart()の後にInactiveDestroyを0にしたら直った。



my $schema = Hoge::Schema->connect(...);
my $pfm = Parallel::ForkManager->new(5);
for (@stuff) {
$pfm->start and next;
local $schema->storage->dbh->{InactiveDestroy} = 0;

...
$pfm->finish;
}


その辺りの処理も勝手にやってくれるもんだと思ったんだけど、違ったらしい。まぁ、当たり前だわな。




友達が遊びたそうにしてたので、お茶して飯。意外とバーでも飯が食えて幸せ。帰り際、小腹が減っていたのだが、そこは我慢してプルジュレのみ。


今日はキレイにする日。



仕事をしている合間に髪の毛を切った(バリカンで剃った)。爪を切った。風呂に入った。歯を磨いた。シャンプーを詰め替えた。流しをキレイにした。


3年くらい前の曲



今耳コピしたのでメモ



Am9 / F9 イントロ+verse
C G F Dm ブリッジ
Am F Am F サビのイントロ
C G F Dm サビ最後
F#m D F#m D
Bm D A E7 (くりかえし) Am9 間奏

SiteMap




http://search.cpan.org/~jasonk/WWW-Google-SiteMap-1.09/lib/WWW/Google/SiteMap.pm



ほうほう、いやぁ無知でしたなぁ。こんなのあったんだ。


ポーチドエッグ



初めてポーチドエッグ作った!うへへ。ふわふわ。


大盛り



うわぁああああああ・・・



http://www.ne.jp/asahi/jog-turingu/yasuaki/newpage31.htm



こういう店があるのはいいけど、おまいら頼んでも残すなよ。


DBIx::Class with Parallel::ForkManager



普通に



my $schema = Hoge::Schema->connect(...);
my $pfm = Paralle::ForkManager->new(10);

while (...) {
$pfm->start and next;

...

$pfm->finish;
}
$pfm->wait_all_children;


っていう普通の使い方ならうまくいくんだが、なんかの条件が重なると



(in cleanup) Can't call method "STORE" on an undefined value at /usr/local/lib/perl5/site_perl/5.8.8/DBIx/Class/Storage/DBI.pm line 1126 during global destruction.

ってなことになる。なんでだろ。


1関数につきどれくらいの行数?



コンパクトにまとまってるなら多少長めでもいいと思うんだけど、基本的にはやっぱり1関数100行単位にしたい。あと、ループが長くなる場合は確実に短めを希望。



while ($hoge) {
hoge
hoge
hoge
...
...
...
}

より、



while ($hoge) {
process_one_loop();
}
|>

だな。ってことでリファクターをしようかと思うんだけど、どうしようかなぁ。

四ヶ月越しの想い。



ついに四ヶ月越しの想いが実った。とは言え、酒だ。某バーで、何個かのレアモルトの中から毎月投票をして上位2位をあける、というイベントをしているわけなんだが、この中の1978年もののPort Ellenが毎回必ず3位。ずっと3位。


そういうわけで毎月毎月投票をしていたのに飲めずに想いは募るばかり。そして今月・・・またも3位!でも今回はとうとうあけていただいたのでようやく想いを遂げた。


うまかったわぁ~。やっぱいいわ、Port Ellen。


TRANSAMERICA



よーやくTRANSAMERICA見てきた。連れが前売り券買ってきてくれたのでちょっと安上がり。すこーし席が前すぎたけど、別に動きが大きい映画じゃなくてよかった。


あの映画、正直主演の女優さんは偉いなぁ。普通あんな役やりたかないだろうに。演技もよかったし、かなり満足。Kevin Zegersはなんか若かりし頃(バスケットボールダイアリーズの頃)のディカプリオを彷彿とさせた。


あとはマッチポイント見に行かないとなぁ。


変な夢



すっげぇ変な夢みた。結婚している知り合いが俺の知らない男と一緒にある集まりに来ていて、その人が誰なのか聞くに聞けない。だけどあきらかに友達という以上に仲がいい。あれー、と思ってると、実は結婚してるのは俺がしってるはずの旦那さんのほうじゃなくてそっちの知らない男のほうで、なんかしらんけど二重生活を送っている、という・・・。これじゃあ漫画を通り越して「こたえてちょうーだい!」の世界だわ・・・。


もちろんただの夢ですが、夢の中ですげぇびっくり。


ちょっとショック



先日クライアントと話をしていた時に、「ソースコード管理とか、コメントとかばっちりに決まってるじゃないですか!」って言ってsvnnotifyのメールのフォルダーとかPODの説明書とか見せたら「なんだ、ちゃんとやってるんですね!」って言われてしまい、正直ショック。ある程度の量のコードを書くなら当たり前だと思うんだよね・・・。


個人でコード書いている人でも、ソースコード管理を使わない人は正直信じられない。百歩譲って天才でなおかつ自分以外の誰もコードを触らないならいいけど、普通のプログラマーがソースコード管理しないなんて、自分の力を過信しすぎだと思う。そんなんで仕事になるかっつーの。機能をひとつ入れるたびにそれを一塊として必ずコミットですよ!


というわけで、これだけマトモにエンジニアリングを普段から語っているのにそういう無責任な人と同一のカテゴリに分類されてたのがちょっとショック。


ちなみに、俺みたいなソースコード管理大好き人間はRPGゲームをする時でもこまめにセーブするはずだ(しかも何個もスロットを使ってセーブしてるはずだ)。間違いない。復活の呪文が唱えられないなんてそんな怖い事できるかw





BEGIN;
CREATE SEQUENCE hoge_seq;
SELECT nextval('hoge_seq');
-->ここでエラー、ROLLBACK

すると、hoge_seqの存在そのものもトランザクションがROLLBACKされてしまうわけで、結局なかった事になってしまう。ユニークID作成用に自動的にsequenceを作るコードを書いたら一回失敗して、2回目に走らせる時にエラーになってしまって驚いたので。


当たり前なんだけど cp vs File::Copy



当たり前なんだけど、File::Copyを使うよりcpを使ったほうが全然仕事が速い。ってことで、いつもやってるヤツでcpがどこにあるかをprobe:



my @cmds = qw(cp); # 他にrmとかも欲しければ・・・
my @paths = qw(/usr/local/bin /usr/bin /bin);
my %commands;

foreach my $cmd (@cmds) {
foreach my $path (@paths) {
my $fullpath = File::Spec->catfile($path, $cmd);
if (-x $fullpath) {
$commands{$cmd} = $fullpath;
last;
}
}
}


これでやっとくと、/bin/cpだろうが/usr/bin/cpだろうがOK。もちろん、トロイの木馬だったら目も当てられませんが・・・。で、こいつを使って、



sub copy_file
{
my($from, $to) = @_;

my $cmd = $commands{cp};
if ($cmd) {
system($cmd, $from, $to);
} else {
require File::Copy;
File::Copy::copy($from, $to);
}
}


で一丁上がり。


地震だ地震だ



ガクガクっと来たよ。


VOX




http://www.dev411.com/blog/2006/09/05/perl-5-powering-web-2.0



voxってCatalystだったんだ!ほげえええ!


pg_dump



ローカルでpostgresql 8.1.2、サーバーが8.1.4だと



pg_dump: server version: 8.1.4; pg_dump version: 8.1.2


pg_dump: aborting because of version mismatch (Use the -i option to proceed anyway.)



うほー。多分大丈夫だと思うけど、一応いま再コンパイル中。


タイ料理→ワイン



今日はみなさんでタイ料理。この店、主導権は客にはない。あくまで店のおばちゃんが勝手におすすめしてかってに注文を聞き間違えて出したいものを出してくるw 今日はマナガツオの揚げ物で唐辛子に当たって被害者続出。わしはビール3杯。


家に帰ってきて、この間9本も頼んだワインが今朝届いたのでワイン。テーブルワインはうまいね。しかし、ワインは他の人と一緒に飲みたい酒だねぇ。


ほげほげ。



仕事のつきあいって色々あるよねー。




最近行った店:宮崎料理、スパイス料理、ベルギービール、バー"A"、バー"B"、スペイン料理。


わー、色々くってんなぁ。バー"A"のほうはいい店なのにその人は絶対つれてけないと思ってた人といけたのでちょっと満足。タムデュー飲んでたな。俺はハイランドパークとブローラがうまかった。


終わりかと思ったら



どうしてもデータの整合性が取れなくてなんじゃこれ状態。読みやら半角/全角英数字やらデータ構造やら、細かい作業がやたらと多い。いつのまにか気づいたらこんな時間ですよ。これでもまだ道のり半分ってとこか・・・。


今日大丈夫かしらん。


お仕事中



今日はちょっと夜なべでお仕事中。多分もうすぐ終わる。ガリガリとドキュメント書きながら裏で3つくらいスクリプトを走らせ続けて、プロジェクトも3つ。コンテキストスイッチしまくり。


バグも発見、潰してさらにGO。リファクターしまくったのでちょっとローカルのレポジトリとちょっと同期が取れてないけど、まぁなんとかなるだろ。最終的にはこいつを同期してからもう一回本番データ通して終わる予定。しかし時間のかかる処理作業だ。


ふざけんな



誰がこのシステムを必要としてるとおもってやがんだ、ふざけんな。今まで誰も責任をもって契約もなにもしてこなかったくせに、いまさら責任だ、報告書だあ?


もういいよ。そういう不誠実な事するならもうプログラムはやらん。勝手につぶれろ。


X-MEN



おー、初めて第一作を見たよ。確かにこれはアメコミベースの作品としてはかなり楽しめるなぁ。


そういえばこの間は久しぶりでトーマスクラウンアフェアを見た。あれもおもしろいよなぁ。


DBIx::Classでクエリをつなげる




http://www.onemogin.com/blog/528-chained-searches-the-beauty-of-dbixclass-and-catalyst.html



なるほどなるほど。DBIx::Classは実際にデータを抽出し始めるまでクエリが実行されないからいくらえでも検索パラメターを指定できるわけだ。概念的には



$rs = Schema->resultset('hoge');
$rs = $rs->search(\%A)->search(\%B)->search(\%C);

ということだな。なるほどなるほど。


鯛ととろろ昆布の具沢山お吸い物



鯛、椎茸、ネギとかで汁を作って、基本的に酒、醤油、砂糖と塩で薄く味付けして、たーーーーーっぷりのとろろの上にどばーっとかけて。この鯛もかなり贅沢な切り方なので身がたくさんあって食べこたえ十分。


うま。


鯛鯛



鯛のお頭(580円)をコトコトと煮ております。


買い物に行ったら、「冷やし甘酒」なんて物発見。底に米粒がすげー入ってるのがちょっともったりって感じだけど、甘酒好きなのでゴクゴク。でも多分もう買わない(笑)追記:Webページ発見→http://www.e-horaiya.com/amazake/amazake.html


今日の鉄腕DASH、この間四国に行った時に電車で通った道の真横を通ってた。なんかなつかしー。秋はまた小豆島行きたいなぁ。


今日の献立(予定版)



やっと色々仕事が落ち着いたので今宵の献立を。


魚の出汁でなんか食いたい。それに野菜。鯛のアラでもあるといいんだけどなぁ。ってことで買い物してくるです。


某サービス開発



すげぇ勢いでフォーム開発。主に画像関連をリサイズしてリネームして色んなところに登録して。実に3つのサービスが連動して動くのでWWW::Mechanizeがすげぇ活躍。


Ok GO




http://www.youtube.com/watch?v=LtklzibflBQ&mode=related&search=



マミコさんのところで発見。なんか軽く検索したらGood Morning Americaとかにもでてるし、結構有名なのねー。


ベルギー



ベルギービール、ポートワイン、あと最後にジンビタートニック、ベリーニ。


排骨担々麺



昼は冷やしつけ麺を食べようと思ったのだが、結局排骨担々麺。あいかわらずうまいなぁ。オプションでもっと野菜多くできないかなぁ。


本日。



今日の予定キャンセルなのでどうしようか悩み中。とりあえずコード書いてるけど←しかし書いても書いても終わらんなぁ。


理屈ではなく



素直に認める事がようやくできたと思うのです。悔しいので俺が、とは言わず、お互いに、と言いたいのだけど。わだかまりというものは案外下らないことでできているのだな。


そしてなにか気の利いた事を言う訳でもなく(というより、言わなければいけないというプレッシャーに負けることもなく)、ただ淡々と酒を飲めるようになって、よかった。感謝。


Chivas Regal 18yrs



HろゆきがもってきたChivas、ようやくあけた。すでにビール3杯、ポートx2、シェリー、カクテル2杯、ビールx1飲んでるんですが。うま。


CDゲッツ



レンタル:「ハネウマライダー(ポルノグラフィティ)」「魔法のコトバ(スピッツ)」「Every Single Day (BONNIE PINK)」「In Your Honor (Foo Fighters)」


購入:「Music Moderna」「道は続く(ハンバートハンバート)」「サイクルヒット1・2(スピッツ)」


すげー金使ったわ。


技術本





SQL Cookbook (Cookbooks (O'Reilly))

SQL Cookbook (Cookbooks (O'Reilly))








Unicode Explained

Unicode Explained







最近SQLとUnicodeでつまづく事が多いので昨日購入。まだ内容はほとんど読んでないけど、今早速SQL Cookbookが必要な感じ。


寿司



事務所の近くの寿司屋に連れて行ってもらったー。うまかったー。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ