2007年9月アーカイブ

Gungho + Swarmage続々リリース

某プロジェクトが動き出したので、結構な勢いでGunghoとSwarmageの更新していきます!手始めに今週末はGungho のリリース2つ、Swarmage のリリースを3つリリースしますた。結構色んなもんに手を付けられてる!グッドグッド。

秋刀魚の炊き込みご飯

週末の朝、起き抜け。冷蔵庫をあけると秋刀魚が1尾、エリンギ(大)が一本。腹が減った。さて、どうしますか。

実は先週「秋刀魚の炊き込みご飯」なるものの存在を聞いたので、それをやってみる事に決定。まず秋刀魚を普通にやきます。エリンギは小さめに切ります。お米を鍋に炊く準備をして、エリンギを敷き詰める。秋刀魚は一応内蔵だけ軽く取って、三つにぶつ切りして敷く。味はつゆの素を使って味付け。それだけ。あとはいつも通り炊いたらできあがり♪炊きあがったら秋刀魚をほぐして混ぜる。

たいして期待してなかったんだけど、これがすげえうまい。ついついばくばくと食ってしまった。


六義園

今日は本当は青梅のほうまで行って今夏最後の「川縁を歩こう」企画を敢行しようとしたのだが、あいにくと天気予報は山のほうにいけば行く程雨模様。なので予定変更。家にいようかと思ったけど、体がうずうずするので六義園に行ってきた。

以前から何回もその横は通ってるのだが、一回も入った事なかった六義園。入ってみたら愛しの清澄庭園よりもかなり大きめだしいい感じ。ただ、餌やりを楽しめる要素がないのが俺的にはちとポイントが低い。

そういえばフレーベル出版が六義園の真横にあった。ショップはアンパンマンだらけだった。

帰りは東京駅に寄って、ちと買い物。

Shibuya.pm

http://shibuya.pm.org/blosxom/techtalks/200710.html

Shibuya.pmで話させてもらいますよ。今回はたまたま最近色々アップしてるモジュール群がそのままひとつの大きめな作業をするのにぴたっとはまるので、その辺りを駆け足で(10分しかないから)話すつもりです。

隠れファン

実は某人材会社の営業さん(♀)の隠れファンでした。月2回くらい、ポストに名刺とかにメッセージを書いて投函してくれる、という実に(俺には)効果的な営業をしていてくれたのですが、これまた本人がキレイな方でして。今日営業に来てくれたんですが、異動になってしまったということで。

今度から新橋/品川エリアだそうです。仕事をあげられる余裕もないんだが、それでもファンだったのですげぇ残念。残念。残念。
てめぇ、ふざけてんのか!こっちは去年からずっと続きをまってるのにfだ;kfじゃdfkじゃdfk4んr23んfさ;dkj

http://ultra.shueisha.co.jp/

なんか老けたぞ。

最近急に年をとったと思うのです。とにかく「若者」が気になる。もうとにかく「お前、それは違うよ」って言いたい事が多すぎる。なんなんだ。30になると突然老けるのか?

まぁ要は眠れないのでこんな事考えて書いているのだ。くそぅ。

えーと、今日の晩飯はレンコンのキンピラ、白菜の漬け物、それにカボチャの煮物でした。カボチャが1個130くらいだったんだよ!安かった。鍋に大量につくっちゃった。ふと気づいてみたら動物性タンパク質を全く取ってない。珍しいなー

酔いどれ時に本領を発揮するタイプです。

オーヘントッシャンとボウモアをちびちびやってます。「草野キッド」見てます。プレゼン書いてます。

・・・あ、プレゼン書けた。いつもは1週間くらい悩むのに。おっけー、おっけー。今回は全部俺俺ネタだったからカンタンだったのかも

Catalyst::Plugin::Apoptosis

また新モジュール。Catalyst::Plugin::Apoptosis。でも眠いから今は寝る。

30秒で分かるパルプフィクション

また清澄

ほぼ定例となりつつある清澄庭園訪問。そろそろ年間パスでも買うか(あるのかどうか知らんが)今日は2時間弱。岩場にあがってきた亀に枝の先につけた餌(お麩)をあげるのだが、その時にいい具合に餌を少しずつ亀の後方へとそらしてあげると首がのびきるところを見れるので非常に興味深い。やりすぎると後ろにすってんころりんと転がって行くので注意(しかも同じ亀が何回でも同じ事をする)。今日は残暑もいいとこで正直暑かった。

帰りに目黒に寄ったけど、秋刀魚は食えず、しかも屋台の飯はまずかったので悲しい気分のまま帰宅。夜はカボチャを炊いた。それとこの間もらったお土産の鶏の炭火焼。

ヘキサゴンはどこまでガチなんだろう?

昨日やってたクイズヘキサゴン2はすごかった。あの番組って一体どこまで本当でどこからがやらせなんだろう。56個のマンゴーを出演者18人でわけて、残った分を司会の紳介さんにあげると一人何個ずつもらえますか、って問題なんだけど、その答えが6人中5人ががわからなかったばかりか紳介さんが説明していると(以下記憶から再構築)

紳介「56個のマンゴーが来ました」
回答者「はい」
紳介「18人いるからまず一個ずつ渡すやろ、何個残る?」
回答者「はい」「38個!」
紳介「38個は18人より多いからまたもう一周できるやろ?」
回答者「はい」「ああ、20個だ!」
紳介「20個も18人より多いからまたもう一周できるやろ?」
回答者「はい!」
紳介「で、結局一人何個や?」

すると回答者が声を揃えて「2個!!!」

これは笑った。これってなんてゆとり教育?

POE::Component::MDBA - Send your queries asynchronously

[9/12 追記] DBICも動くようにした。あとドキュメントをもう少々書いてみた。CPANには0.01001を先ほどアップロード。

以前書いた非同期でSQLを流すヤツ、ちゃんとモジュールにしてみた。まだシンプルなDBIしか使えないけど、DBICからも使えるようにしたい。

まだCPANにアップされるには時間がかかると思うけど、一応こちらにアップされる予定→http://search.cpan.org/~dmaki/POE-Component-MDBA/

もしくはtracからどうぞ

9.11

6年たちましたな。アメリカの反対側にいたのにあの日の事はいまでもはっきり覚えてる。

白布温泉旅行

070908_1907~01_Ed.JPG10年ぶりくらいに家族旅行してきた。運転係だったのでつかれたー

前回実家に帰った時に突然「前も行った旅館から特別プランの案内が来てるんだけど、みんなでいく?」と言われたので急に行く事に。親子4人全員でどこかに泊まりの旅行をしたのなんてもう10年ぐらい前に一時帰国でバンクーバーに寄った時以来だ。

まぁそんなわけで車で白布温泉まで行ってきた。出発は台風9号日本縦断中の日。関東地方はもう小雨になって小康状態になってきた頃合いだったが、台風は依然北上中。我々は台風の後を応用に東北道を北上だ。途中ラジオとか聞いていてもあちこちで通行止めだなんだと言っている中のんびりと移動。もうすぐ目的地、というところでとうとう台風にほぼ追いついて大雨。まぁそれでも一瞬だったのでちょっと緊張した以外は特に問題無し。午後5時頃に到着。

宿では正直風呂に入る事とご飯を楽しんだだけだった。ご飯はひじょうにうまかった。文句無し。特にお米を生かすおかずが満載だったので、夜はさすがにお米は食べなかったが朝は普通にご飯3杯も食べてしまった。いかんいかん。

070908_1952~01_Ed.JPG日中は米沢市内をぶらぶら。個人的には東光酒造に行って、あれこれ試飲しまくった。無料と有料の試飲があるんだけど、有料の試飲が25mlで50円ってすげぇよ。東京とかじゃありえねぇ。嬉しいねぇ。ってことで一人で多分全種類+ちょいとおかわり。粕漬けの試食もおいてあったのでそれをつまみにごくごく飲んでしまったら大分よっぱらったので、この時ばかりは親に運転交代。

微妙にオフシーズンだった事もあって宿にはほとんど誰もいなくて、温泉にとてもリラックスした感じでつかれた。湯につかって、ちょっとストレッチしてまた湯につかって・・・ぼーっとしまくり。

帰りは軽く宇都宮に寄って、帰宅。

しかし写真がうまく撮れんかったなぁ。

塊魂は国境を超える。

くくく。今夜、っつーか今朝はもうこればっか読んでとまらん。

daemontoolsでfastcgiプロセスを管理しようと思ってとりあえず書いてみた。

#!/bin/sh # # Copyright (c) 2007 Daisuke Maki <daisuke@endeworks.jp> # All rights reserved. # # fastcgi.sh # Runs catalyst based application's fastcgi script via daemontools' # softlimit script. You should call this script from a specific 'run' # script like so # # #!/bin/sh # /path/to/fastcgi.sh -s myapp.mydomain.com # args=`getopt s:d:m:n:g: $*` if [ $? -ne 0 ]; then echo <<EOM Usage: fastcgi-run.sh [options] -s: service name. -d: data directory -m: max memory size as passed to softlimit(3) -n: number of processes to spawn -g: group name to run script as EOM exit 2 fi set -- $args for i do case "$i" in --) shift; break;; -s) SERVICE="$2"; shift; shift;; -d) DATADIR="$2"; shift; shift;; -m) MAXMEMORY="$2"; shift; shift;; -n) NUMPROCS="$2"; shift; shift;; -g) GROUP="$2"; shift; shift;; esac done if [ -z $SERVICE ]; then echo "No service defined." exit 1; fi if [ -z $DATADIR ]; then DATADIR="/var/tmp/$SERVICE" fi if [ -z $MAXMEMORY ]; then MAXMEMORY=150000000 fi if [ -z $NUMPROCS ]; then NUMPROCS=10 fi if [ -z $GROUP ]; then GROUP=www fi SOCKET="$DATADIR/fastcgi.socket" if [ ! -d $DATADIR ]; then echo "$DATADIR does not exist. Creating..." mkdir $DATADIR if [ $? -ne 0 ]; then echo "Failed to create $DATADIR" exit 1; fi chmod a+rwx $DATADIR fi cd /www/$SERVICE if [ -z $SCRIPT ]; then SCRIPT=`find script -name '*_fastcgi.pl'` fi if [ -z $SCRIPT ]; then echo "No suitable script found" exit 1; fi exec 2>&1 \ setuidgid $GROUP \ softlimit -m $MAXMEMORY \ $SCRIPT -e -l $SOCKET -n $NUMPROCS

hacked it in perl

英語が読めてなおかつ欧米な文化を理解できる事がいい、と思うのはこういう漫画やThe Far Sideが理解できる事かな。とは言え、↑この漫画はさらにプログラマーであるという素養が必要だが。

非同期で流したクエリをほげほげするPoCo

少しずつ条件が違うクエリを複数非同期で投げて、集約するモジュールを書いてみたんだけど、名前とかがイマイチ決まらない。なんかいいアイデアありますかねぇ。それともこれって使う条件が特殊すぎてモジュールにするにはアレかな。一応これをベースにして、PoCo::Server::TCPみたいなのとつなげて検索サーバーにしたてあげようと思ってるんだけど。

使い方はこんな感じ

# initialize... POE::Component::MultiDB::DBIC->spawn( Alias => $alias, ConnectInfo => [ .... ], SchemaClass => 'MyApp::Schema' ); # some where else... $_[KERNEL]->post( $alias, 'search_multi', { args => [ { where => $where1, attrs => $attrs1 }, { where => $where1, attrs => $attrs1 }, { where => $where1, attrs => $attrs1 }, ], aggregator => $_[SESSION]->postback('aggregate'), finalizer => $_[SESSION]->postback('finalize'), });

ソースコードはこんな感じ。

package POE::Component::MultiDB::DBIC; use strict; use warnings; use POE qw(Component::Generic); use Digest::MD5(); use Data::Dumper(); use constant DEBUG => 0; sub spawn { my $class = shift; my $args = { @_ }; my $alias = delete $args->{Alias}; Carp::croak "$class->spawn() requires an even number of arguments" if (@_ & 1); my @db; for my $id (1..10) { push @db, POE::Component::Generic->spawn( debug => DEBUG, package => 'POE::Component::MultiDB::DBIC::db', object_options => [ schema_class => $args->{SchemaClass}, connect_info => $args->{ConnectInfo} ], packages => { 'POE::Component::MultiDB::DBIC::db' => { postbacks => [ 'search', ] } } ); } POE::Session->create( heap => { db => \@db }, inline_states => { _start => sub { $_[KERNEL]->alias_set($alias) }, _stop => \&_stop, search => \&_search, search_multi => \&_search_multi, aggregate => \&_aggregate, } ); } sub _stop { my ($kernel, $heap) = @_[KERNEL, HEAP]; my $dblist = delete $heap->{db}; foreach my $db (@$dblist) { $kernel->post($db->session_id, 'shutdown'); } $kernel->alias_remove( $kernel->alias_list ); } sub _signature { local $Data::Dumper::Indent = 1; local $Data::Dumper::Terse = 1; local $Data::Dumper::Sortkeys = 1; Digest::MD5::md5_hex( Data::Dumper::Dumper(\@_) ); } sub _search_multi { my($kernel, $session, $heap, $args) = @_[KERNEL, SESSION, HEAP, ARG0]; my $aggregator = $args->{aggregator}; my $finalizer = $args->{finalizer}; my $search_args = $args->{args}; my $query_id = _signature('search', $args, $$, {}, time()); my %meta = ( aggregator => $aggregator, finalizer => $finalizer, queries => {} ); $heap->{active_queries} ||= {}; $heap->{active_queries}->{$query_id} = \%meta; my $dblist = $heap->{db}; my $count = 0; foreach my $sa (@$search_args) { my $db_idx = $count % scalar(@$dblist); my $db = $dblist->[$db_idx]; my $where = $sa->{where}; my $attrs = $sa->{attrs}; my $id = join('.', $query_id, ++$count); $meta{queries}{ $id } = 1; if (DEBUG) { print STDERR " ---- Sending query $id ----\n"; } $db->search( { session => $session->ID, event => 'aggregate', query_id => $query_id, id => $id, }, $where, $attrs ); } } sub _search { my($kernel, $session, $heap, $args) = @_[KERNEL, SESSION, HEAP, ARG0]; my $sa = { where => delete $args->{where}, attrs => delete $args->{attrs} }; $heap->{args} = [ ($sa) x scalar (@{$heap->{db}}) ]; _search_multi(@_); } sub _aggregate { my ($kernel, $ref, $result, $heap) = @_[KERNEL, ARG0, ARG1, HEAP]; my $meta = $heap->{active_queries}->{$ref->{query_id}}; my $map = $meta->{queries}; delete $map->{ $ref->{id} }; if (my $aggregator = $meta->{aggregator}) { $aggregator->($result, $ref); } if (keys %$map == 0 && $meta->{finalizer}) { $meta->{finalizer}->(); } } package POE::Component::MultiDB::DBIC::db; use strict; use warnings; use UNIVERSAL::require; sub new { my $class = shift; my %args = @_; my $schema_class = $args{schema_class}; $schema_class->require or die; my $schema = $schema_class->connect(@{ $args{connect_info} }); bless { schema => $schema }, $class; } sub search { my ($self, $where, $attrs) = @_; my $ret = [ $self->{schema}->resultset('Movie')->search( ref $where eq 'HASH' ? $where : undef, ref $attrs eq 'HASH' ? $attrs : { rows => 1 } ) ]; return $ret; } 1;

自分のところにgunghoが来てびっくり。

Pathtraqを自分のブラウザにいれてる。そんな状態で開発版サーバーを色々動かしてみて、うまく動かないので色々やっていたらそのうち妙なアクセスが来る事に気づいた。あれ?

XXX.XXX.XXX.XXX - - [04/Sep/2007:05:16:19 +0000] "GET / HTTP/1.0" 200 669 "-" "Gungho/0.08004 (http://code.google.com/p/gungho-crawler/wiki/Index)" "-" ""

あれれ?俺自分のサイトクロールするようなもん作ったっけ・・・って、ああああああ、たしかめてないけど、これ絶対Pathtraqじゃん!

自分の書いたツールが自分のサイトにクロールに来るとは夢にも思わず。不思議な気分。

エヴァンゲリオンみてきたお

実は正直それほどエヴァンゲリオンファンではない。結構好きだとは思うけど、細かいところなんて全然しらないし。というわけで今回は使徒の順番が違うとか、そういうことも全然わからんかった。

しかしまぁなんていうかなぁ。まぁとりあえずストーリーとしてはテレビを知っている人だったらそれほど見る必要はないかも。でも細かいところが微妙〜に違う。そしてこの違いは後々どんどんと話を違う方向に持って行きそうな気がする。

次のヤツもみちゃうんだろうなぁ。ち。

ちなみに今日は朝1番の回にいってきたんですが。なんでこんなに人がいるの?200人入る劇場が午前11時半に満杯ってどういうことよ。

Swarmage 0.00002

0.0002にアップデートしてみた。taskを作成する時にcliからできるようになったよ。あとworkerもcliからたちあげられる。

package MyApp::Worker; use strict; use base qw(Swarmage::Worker); __PACKAGE__->register_ability('task_name'); sub work_once { my ($self, $task) = @_; # $task->data とかを使って、なんかする。 }

こういうコードを書いておいて、swarmage worker コマンドで起動しておく。あ、もちろんその前にActiveMQとかを起動するのを忘れずに。で、そのあとswarmage task insertか、Swarmage::Clientを使って"task_name"タイプのタスクを挿入してやると暇なWorkerがガンガン仕事してくれるお。



まちがってた。後で直す。

リアルめぞん一刻

070902_1614~01.JPGその日僕はなんの気無しにGoogleマップを見てたのです。で、まぁこの辺りを見てました。さらに適当に縮尺を変えていたのです。先ほどの地図をズームしてみてください。地図の真ん中あたりにありますよね。「めぞん一刻」!!
わあああ、なんだこれw! 後付けだとは思いますが、本当にめぞん一刻だw!おもろー

早速行って写真撮ってきた!

マイケルジャクソンさん死去

マイケルジャクソンさん死去

ってビールの本とか出してた方の人だけどな。俺も数冊本持ってるよ。ビール入門時代にはお世話になったなぁ。しかしまぁあれだけのビールの案内出すにはそれなりに飲んでたんだろう。考えさせられてしまうね。

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)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ