恒例歌丸一門会。歌丸さんは「文七元結」。なかなかよかったので「牡丹燈籠」のように本になってるのだったら読みたいなぁ、と思ったのだけど
そういえば桂花丸がクビになった話が出たのだがわざわざ「2chとかには書かないでくださいね」って言ってた。会場がお年寄りだらけでわからないと思ってたのかもしらんが・・・か、書いちゃおうかなぁ・・・
恒例歌丸一門会。歌丸さんは「文七元結」。なかなかよかったので「牡丹燈籠」のように本になってるのだったら読みたいなぁ、と思ったのだけど
そういえば桂花丸がクビになった話が出たのだがわざわざ「2chとかには書かないでくださいね」って言ってた。会場がお年寄りだらけでわからないと思ってたのかもしらんが・・・か、書いちゃおうかなぁ・・・
今日は臨時教師の予定です・・・いったい何を教えよう。
id:naoya経由で
はてブから L 社では DateTime を使ってるっぽい雰囲気を感じたので、Time::Piece + Date::Simple から脱却し、DateTime を使ってみようと思った。
http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/2145.html
L社で最初にDateTime使ってたのは多分おいらだー、とこっそり言ってみる。
さて、DateTimeは開発側で結構ごにょごにょやってきたわけだけど、"formatter"という概念がしっかりしてててClass::DBIととても使いやすい。
package My::CDBI;
use strict;
use base qw(Class::DBI);
use Class::DBI::LazyInflate;
use DateTime;
use DateTime::Format::Pg;sub pg_inflate_datetime { DateTime::Format::Pg->parse_datetime(shift) }
sub pg_deflate_datetime { DateTime::Format::Pg->format_datetime(shift) }
sub pg_inflate_duration { DateTime::Format::Pg->parse_duration(shift) }
sub pg_deflate_duration { DateTime::Format::Pg->format_duration(shift) }sub has_datetime
{
my $class = shift;
my $field = shift;$class->has_lazy(
$field => 'DateTime',
inflate => \&pg_inflate_datetime,
deflate => \&pg_deflate_datetime,
);
}sub has_interval
{
my $class = shift;
my $field = shift;$class->has_lazy(
$field => 'DateTime::Duration',
inflate => \&pg_inflate_duration,
deflate => \&pg_delfate_duration
);
}
これで普通~にDateTimeオブジェクトをTIMESTAMPやらINTERVALやらで使える。
CREATE TABLE foo (
id PRIMARY KEY,
foo_timestamp TIMESTAMP
);package My::CDBI::Child;
use strict;
use base qw(My::CDBI)__PACKAGE__->has_datetime('foo_timestamp');
package main;
my $foo = My::CDBI::Child->retrieve('hoge');
print $foo->foo_timestamp->ymd, "\n";
ただDateTimeは遅くて、それをどうにかしようと思ってDT::TimeZoneをXS化しようとしてたのだけど、全部XS化しようとしても全然はやくならないんだよねぇ。というわけでそのコードは今はCVSの別ブランチにほげられてるはず。とほほ。
ビビンバ、豆腐、白和え
なんか、うーん。B級好きなら見る価値はありだが、これは希に見るひどい話だ・・・
夜9時か10時くらいに撃沈したと思ったら次の日午後12時まで起きなかった。俺にしてはありえないくらいの激15時間睡眠。いや~、本当によく寝た。
午前2時半くらいにFile::Extract-0.03をアップロードしたのだけど、なんかBuild distした時にmanifestがアップデートされてなくて新ファイルが全然インクルードされてなかった・・・
あうー。しょうがないので昨日偶然見つけたCAM::PDFでPDF内のテキストを抽出できるようにファイルを足してみたりして、0.04をアップロード。CAM::PDF、ちょっとテストした分には遅いけど使えそう・・・かなぁ?
この前Tさんと話してたりして思ったんだが、俺はやっぱり「インターネットを作った」世代ではなくて「インターネットがあって当たり前」の世代なんだよなぁ。開発する時にネットワークはつながってて当たり前。必要な物はインターネットに最低限ヒントが落ちてて当たり前。逆に言うとネット接続がないとPCなんて俺にとってかなり無用の長物だし・・・
なにはともあれ、開発の際の意識とか、結構そういうところで左右されてるなぁと。
日本に帰ってきて・・・というか、多分初めて健康診断っていうものをやってきた。日本に帰ってきてから勤めたところで健康診断をする機会は何回かあったんだが、その悉くで健康診断の日取りまで決めた後、でも実際に診断を行う前に会社を辞めてしまったので今までやっていなかったのだ。
お昼すぎからの診断だったのでお昼は抜けと言われてたのだが、結局お昼どころか朝も抜いて某所へ。「くれぐれもお願いします」と頼まれてしまったのでHろゆきとUさんと待ち合わせ。っていうか、俺が二人の問診票持たされてるし・・・最低30分くらいは遅れてくるんだろうなぁと思って待っていたのだが意外にもHろゆきがまず5分遅れで到着。Uさんもそのあとついたので早速現地へ。
今日は尿検査、身長体重測定、血圧、視力、聴力、心電図、診察、血液検査、眼底検査をやった。ほとんどの結果はまた後日なのだけど、とりあず視力は以前より落ちてなくて1.5と1.0。多分右目が1.0なんだろうな。これだけ毎日長時間パソコンを触ってるのに我ながら対したもんだ。眼底検査は残像が残っておもしろかった。
ってなことをして1時間強。軽くご飯を食べてさいなら。
File::ExtractをCPANにアップしてみた。RTFとかしかないのだけど、他のファイルタイプからの抽出はまたそのうちできるだろー、と。
おいおいおいおい・・・なんでぷっすまに乙部さんが・・・あほか。
この間結婚した友人達がご飯をおごってくれた。あとお礼に名刺入れもらったよ!わーい。
今日一瞬時間が空いた時に宮川さんと会話した内容から作ったですよ:
use File::Extract;
use File::Extract::Filter::Exec;my $extract = File::Extract->new(
filters => {
'text/plain' => [
File::Extract::Filter::Exec->new(cmd => "perl -pe 's/^/\$. /'")
]
}
);
$extract->extract($file);
ってな感じでフィルターするコマンドを実行してからファイルの内容を抽出できる。上記の例の場合はプレーンテキストファイルの行頭に行番号をいれてから抽出する。
初めてIPC::Open2使ったけど、なかなか便利やねぇ。ちなみに perl -pe とかでIPC::Open2を使う場合ファイルハンドルのクローズタイミングがポイントですよ(一回ひっかかってデバッグ時間2時間を費やしてしまった・・・)
my ($read, $write);
open2($read, $write, "perl -pe 's/^/\$. /'");while (<$source>) {
print $write, $_;
}close($write); # ここで閉じないと、perl が終了しない
while (<$read>) {
print $_;
}
さー、そろそろ帰ろうかと思うが、一体今からどんな夕飯を食えばいいのだ。ウチには何もないよーな気がする・・・うーん、うーん。
寝れなかったのに朝からUSA社の人達を案内してサーバーのインストールとかほげほげ。昼も色々。あ、そういえばカラスが車にひかれて死ぬ瞬間を見てしまった。
オフィスのソファで20分くらい爆睡。RTのメール、設定できたぞ。後はスパムフィルタ。よくわけわからんのだけどね・・・という訳でメモ
http://www.soundwave.net/~wmono/rt/
http://traxel.com/doc/spamassassin-setup.html
mod_senna書いてたらこんな時間になってしまった・・・明日も朝から仕事なのに・・・
以前使ってたAxKitが1.7RCになった。遅い、遅すぎる。2年程の期間が空いていたわけだけれども、この間に世界は先へ進み、俺はMasonに移行してしまった。とてもよいXMLのフレームワークだったのに、もったいないとしかいいようがない。
な、なんか筋肉痛だなぁ~
mixiが遅い。ページはロードできてるのに画像だけこないところを見ると、img.mixi.jpが静的と動的なサーバーに別れてないとか、ロードをうまくバランスできてないとか、そういうシンプルな事なんじゃないかなぁ・・・(あれ、でもエラーが返ってきてるのかな)
ピータン+豆腐の料理の、普通の卵よりはあきらかに小さいピータンを指差しながら:
これって豆腐っていうかうずらだよね。
「豆腐じゃなくてピータンだよね」と言われて固まりました。
また違うプロジェクトのデータファイル(サンプル)をもらったので早速スクリプトを書いてパースしてデータベースに突っ込む作業。だいたい書いたところで分からないところをメールして、今度は某検索のバグ修正。
今日、サービスデーだというのを唐突に思いだしたので3時頃に某パチンコ屋へ。キューティーハニーは人気がなかったようで空いてたのでやったらあっというまに5000円がどっかへ消えて行ってしまった。やっぱり人気ないのはあかんなぁ、と思って水戸黄門を見に行ったらとてもじゃないが誰も立ちそうもないくらいに皆でてる。しょうがないので隣の弥次さん喜多さんに座る事30分。残りの5000円とうとう消える、という瞬間にキタ━━━━(°∀°)━━━━ッ!!
その後確変10連荘で結局+38000円。というわけで折角の泡銭なので飯でもおごろうということで「ホルモサ」で紙焼き食ってきました。マトンうまー。
この間袖詰めをお願いしていたジャケットが届いた。わーい。
きっと本邦初公開(写真参照)
散々CMで聞いてたらなんだかこりゃ弾きたいと思ったので早速アルバム「スーベニア」を昨日借りてきた。あんまり時間なかったけど、だいたいコードはとれたと思うぞ。メモ用に・・・
# イントロ
G / D / Em / Bm /
C / D / G / G /
# 1番
G / D / Em / C D
G / D / Em / C D
C / D / Bm / Em /
C / D / G / / /
# コーラス
G / D / Em / Bm /
C / Bm / D / G /
G / D / Em / Bm /
C / Bm / D / B /
# コーラス直後
C / D / Bm / Em /
C / D / G
昨日の豚バラを使って豚キムチ~。舞茸ともやしをたっぷり入れて、うまうまー。
RT3、日本語が滅茶苦茶だったのでJesseにメールしてみたら(要約)
ちゃんと日本語ネイティブの人達がやる、と言ってた会社にローカリゼーションを頼んだのだけれども、日本語を習っている友達に見せたら笑われたのですぐこれはやられたなと思ってたんだよね・・・
ということだったので、早速 lib/RT/I18N/ja.poに手入れして、アホみたいな翻訳を変更。だいたいできたことを確認したあと、Jesseにメールしておいた。
豚バラ肉が安かったので、「はっ、豚バラとキムチだ!」と浮かんだので買物買物。偶然豚バラが安かったので(とは言え、この辺りの価格帯としては安いというだけで他の場所で買うと今日の値段が普通の値段だ)お酒と塩と砂糖だけで茹でて、あとはレンジでチンした茄子とレタス、それにキムチという夕食。調理方法的には超手抜き。
しかし豚バラを食べるにはかなりいい方法だなぁ。もっとじっくり煮るともっと柔らかくなるんだが今日は生憎そんな時間がなかった。でも野菜もいっぱい食べれたし、満足満足。
この間買ったたっぷりのめかぶをお湯で戻して、出汁醤油で。うまあああ。メカブはうまいなぁ。あとはいりこを数個もぐもぐ。
某案件で今まで使ってみたくてしょうがなかったRT3をほぼ独断と偏見でインストールしてみた。一応日本語対応されているのだけど、先ほどやってみたら日本語でグループを作れない。よく見るエラーなのでとりあえずUTF8フラグをチェックすればいいんだろう、ということで673行目に簡単ハックを挿入
sub __Value {
my $self = shift;
my $field = shift;
my %args = ( decode_utf8 => 1,
@_ );unless (defined $field && $field) {
$RT::Logger->error("$self __Value called with undef field");
}
my $value = $self->SUPER::__Value($field);return('') if ( !defined($value) || $value eq '');
return $value if Encode::is_utf8($value);
return Encode::decode_utf8($value) || $value if $args{'decode_utf8'};
return $value;
}
ソースをいじれるってやっぱりいいねぇ。
RT用にPostfixをインストールしようとしてハマり中・・・なんでできんのじゃ!リレー設定をしてもらうために他の人も巻き込んでガリガリ・・・
結果的に4時近くまで作業・・・
Xango開発版、先ほど0.99_02をアップしておいた。だいたい安定した感じがあるので、今度はxango.razil.jpで使ってみようかね。
茄子をたっぷりめの油で炒めたのをポン酢でぱくぱく。
打ち合わせもちゃんとやったけど、半分くらいすごい惚気られたような気がする(笑)
apt-getで色々入れないといつも使ってるライブラリとかがコンパイルできないのでメモ:
gcc
g++
make
libreadline5-dev
zlib1g-dev
リビジョンというか、Xangoの書き直し、とりあえずPull型とPush型のクローラーがシンプルなテストをパスするところまでは全部できた!かなりいい感じになったと思うんだけど、誰か人柱がでてこないかな、でてこないかな・・・
昼過ぎのミーティングの後、今年の初めくらいから愛用していたトレッキングシューズの底が面積的に半分以上つるつるになってしまったので某高島屋にて金券で購入。今回もゴアテックスでいい感じ~♪
その後オフィスに行こうと思ったら10階で北海道物産展をやってるとのこと。別にいかなくてもよかったのだが「北海道」→「昆布」→「メカブ」と連想してめかぶがある!って事でメカブを探しにどかどかと。探す事5分、やっぱりあった!うへへー、これでメカブスープがまた食べれる。乾燥メカブはできることなら常備しておきたいところだな。
お昼には時間もちょっと遅かったのだが昼飯を食べてなかったので物産展にあったイートインコーナーでスープカレー挑戦。うまうま。うまいがこれはカレーじゃないなぁ。美味しい鶏スープ。値段は850円なのでちょうどいい感じ。うまー。
某HDDレコーダーのおかげで日曜の早朝4時半から5時15分までの間に「落語研究会」という番組をやっているのを発見。古今亭志ん輔が「火事息子」をやっていた。なんでだかイマイチ面白くないなぁ。
今ちょっぴり不能なんですが、正直ちょっとびびってます。
ドメイン登録が切れると連絡があったので11800円で延長しといたよ。
http://www.issociate.de/board/post/256804/API_to_mime.types?.html
ZIPがパースできないのかあ・・・知らんかった。時間のある時にでもデバッグしよう
今日は半年前からチケットを買ってたCirque de SoleilのAlegria 2 を見る日。サンフランシスコで見て以来なので2年ぶりかな。ちょっと予定時間より前についてしまったのでただいまモバイルしながらXangoのコード書き。
楽しみ楽しみ。
今週は本当は繊維質ウィークにしようと思ってたのだけどそうもいかず。しかし買物してしまった分の野菜とかはあるのでお昼はその辺のものを適当に全部入れて中華風に炒め物。茄子、エリンギ、ネギ、豚ひき、それに最後になんとなく卵。ほとんどがエリンギでできた炒め物。何がなんだかわからんが、とりあえずおいしく食べられる炒め物が完成。むほほ。
Xango開発にちょっと飽きたので以前書いたC/pthreadでCGIを使って複数のMySQLへのクエリを投げてその結果をまとめて返すヤツ、本当はFastCGIでやっちゃおうかと思ってたのにどうしてもdebianでうまくfastcgiがインストールできないのでApache2のモジュール書いてみちゃった。
ちょいとpthreadがらみのところでどこで値を初期化するかとか、MYSQL *接続をどこで行うかで迷ったのだけど意外と簡単に行ったかも。今回の反省点:
というところで、そろそろ出かけないと。
Alergira 2、見てきた!相変わらずすごい。今度も来日したらいくぞー。
寝れないので、適当に色々検索・・・
http://www.pref.oita.jp/10103/yolozu/event/000401/doburoku.html
http://www.digistyle-kyoto.com/syo-kyoto/gujo/diary_09.htm
↑以上のリンクをメモしたけど更新までせずに撃沈したらしい。どういう意図だったんだ、俺。多分旅行で行きたいところか?
昼飯食う!ランチはただでご飯にカレーをかけてくれるというだけの理由で近所のトンカツ屋でトンカツ定食。これで酒を薄める。うほーーー。ここのカレー、すごいほっとするなぁ。
ココットカレーを食べたい。飲んだ翌日にアレは実によく効く。
・・・が、1時からミーティング、4時からミーティング、8時からひょっとしたらまたミーティングである。今日はまともな飯にありつけないかも・・・がっくり。
というわけでこれから原付でバリバリと行ってきます。
DNSリクエストを受け付けるところまで書き直し終了。HTTPリクエストができたら、今度はPull.pmとPush.pmでの実装。
今までPerlに置けるオブジェクト指向で親クラスのメソッドを呼ぶ時は
sub method
{
my $self = shift;
$self->SUPER::method(@_);
}
とやれば、$selfは親クラスの@_の正しい位置に置かれるのだがこれをPOEのobject_statesでやろうとするとPOEは特殊な引数の渡し方をしているのでうまくいかない。
sub method
{
my($obj) = @_[OBJECT];
$obj->SUPER::method(@_); # $_[0]に$objが入ってしまって、色々狂う
}
一瞬迷ったんだけど、そういえばcan()というものがあったのを思いだした。普通can()はオブジェクトがあるメソッドを実装してるかどうかテストする時に使うが、実は戻り値にcoderefが返ってくる。じゃあ、これをそのまま実行すればいいじゃん!ってことで以下のようにしてみたら万事OK:
sub method
{
my($obj) = @_[OBJECT];
my $method = $obj->can('SUPER::method');
$method->(@_);
}
おー、いぇ~す。
use Xango;
use Xango::Broker::Push;MyHandler->spawn(...);
my $broker = Xango::Broker::Push->spawn(...);POE::Kernel->post($broker->alias, 'enqueue_job', $job);
POE::Kernel->run();
これで動くよーになったぞ。
渋谷のStandard Deliというところでハンバーガー。テンションは低いけどもう調子も戻ってきたぞ。アメリカンなハンバーガー、ひさしぶり。うまうま。
某サーバー、これでなおったかなぁ・・・自信無し。今日はこれからも監視体勢だろーか。
地酒をがばがばやってたらすげー酔っぱらってしまった・・・ふらふら。
Xango書き直しでオブジェクト継承を使う事に決めたのでそのようにコードを変えてたら今までHEAPでステート保持をしていたのを全部オブジェクトでできるじゃん、ということで・・・
とりあえずオブジェクトを作ってみたがどの変数をどういうふうに使うかちゃんと決めてないのでAUTOLOADでアクセスできるように。あとある程度の後方互換を維持するために、
my $obj = Xango::Broker::Pull->new;$obj->field_name(); # AUTOLOAD 経由
POE::Session->create(
heap => $obj, # これで後方互換
object_states => [
$obj => [ state1, state2, ... ]
]
);
みたいに、オブジェクトそのものをheapに入れてハッシュとして使えるようにしてみた。かきかき。
11時頃DBが停止してるのを発見。うひゃ。色んな人達を巻き込んで再起動。その後データを世代別に分けてインデックス貼り直しとか色々作業(これが時間がかかる・・・)。同じSQLを全てのデータベースに送れるようにスクリプトを書いておいてよかった・・・
ちなみにまだ終わらん。あともう少し・・・
永らくほったらかしにしておいたXangoのブランチを切って、新バージョンを書き始めてみた。以前に書いていたものがあったのでそれがベース。とりあえずPush/Pullにわけられるよーにするべ。
に寄ろうと行ってみたら山下公園でなんかやってたので寄ってみた。
http://www.yokohama-cci.or.jp/worldfesta/
ぶ、ブラジル料理キタ━━━━(°∀°)━━━━ッ!! Feijaoとかは普通に方々の店にあるけどCoxinhaとPastel発見!!これはもう食い過ぎだとか言ってる場合ではない。Coxinha de FrangoとPastel de Queijo、それにGuaranaを買って半分以上一人で堪能。
感動だ。ふるさとの味だねー。
某所で服のバーゲン。最近服を緊急時以外に買ってなかったので物欲の神様降臨でとにかく買いまくる。平均50%オフで6万7千円分購入。袖詰めしたジャケット、はよとどかんかなぁ。
その後会場で食べ物を買物して、そこのキムチ屋さんがやってたビビンバを堪能。うまー。
前の晩痛飲したのでど寝坊。起きたらお昼近いって久しぶり。ハイキングしてたハナコさんがいた大崎まで行って合流。ちょうど「ふくしまつり」(福祉祭り)なんてやってたのでぶらぶらと。きりたんぽが感動的にうまい。地鶏のダシが、ダシが、ダシが・・・
途中でIHコンロの実演&体験コーナーに引き寄せられる。初めて触ったけど、すげーなこれ。コンロがそのまま調理台として使えるのがなんといってもいい。掃除も簡単そうだし。ちなみにその時頭を捻った仕組みは以下の通り
http://www.ihcook.gr.jp/kane.htm
もうそろそろ引き上げるか、って頃に龍神様が駅の下のほうから登場。かーなーりでかい。
合体終了。なぜかElectricFenceを使わないとmysql内のmy_reallocでsegfaultになる。まぁそれは別としても日本語のデコードがうまくできてないように思える。うーん、なんでだ。さーデバッグですね・・・
昨日書いたCGI(もどき)を完成させるべくCGI処理コードを書き書き。
本当はApacheにmoduleくっつけちゃおうかと思ったんだけど、(細かい説明がなんだか今思いだそうとしたらキレイさっぱり消えてるのだけど)それはちょっとアレだと言われたのでスタンドアローンのヤツでどうかと調べてみた。
・・・ら、適当なライブラリがなんもないのでどうしようかなぁ、と思ってたらntさんから「これ、書きかけだけど」というメッセージとともにソースが。ほー、と思ってそこからハックしはじめたのだけどなにかが納得いかなかったのでmod_apreq2からコードを拝借。多分効率化のためだと思うのだけどapreqではin-placeで文字列を変更してmemmoveでガリガリと動かしてるのでapreq_decode()あたりが全然わからんかった。でもよくよく読んでると普通にchar *を渡せばそのまま動く事を発見。
あとはrubyで使ってるst.cをベースにAPR::Tableのような構造を作って、できたできた。
さー、これから昨日作った分と合体させてみますよ。
Xango用に複数のデータベースにクエリをとばして、内容をアグレゲートして返すというプログラムをいつもやってるPerlではなくC/pthreadで書いてみた。FastCGIとかじゃなくて普通にmod_cgiで動かしてみたのだけど意外と速いよーな気がする。
でもCGIのクエリーをパースするルーチンをCでまだ書いてないのでクエリー内容とかは全部ハードコード。だはは。意味ないじゃん。ここらへんはまた後で直すぜ。
あとは世代別テーブルに内容を登録していきたいのだが、ここはこんな感じでいいのかな:
これでだいたいできるんとちゃうかなー。
アシ2回分の報酬wで奢り寿司。ひさしぶりに築地のつかさへ。いやー、相変わらずうまー。ごちそうさまでした。
今年新江ノ島水族館に行った時に俺が恋に落ちてしまった南ゾウアザラシのミナゾウ君が死んでしまったとのメールが。あの目はでかすぎてちと怖かったけど、柔らかそうででっかくていい感じだったのになぁ。献花してこようかなぁ、とちと思っている。いけるかどうかわからんが。
今度はトーンを貼りまくり。次の日予定もあったのでさすがに徹夜はしなかったけど午前3時くらいまでトーンを切ったりはったり。
土浦全国花火競技会。相変わらずでかくて迫力あった。スターマインがほとんど1時間分くらい楽しめるのは贅沢以外なにものでもない。しかし携帯でも意外と夜空が撮れるもんだなー。
帰り、人が多すぎて駅に入れる人を駅員が人数制限してたのでとりあえず蕎麦を食いに。・・・と思ったら満員だったのでしばらく河原で時間を潰す。その後また同じ蕎麦屋にもどって無事に蕎麦をゲット。
この花火も去年より全然人が増えてて動き難かった。来年あたりからもういきにくくなるのかなー。
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)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><