甘くなーい。うまーい。キャベツバリバリ。
よくいくバーのバーテンダーさんがキャベツを生で食べるダイエットの話してたが、基本的に生の野菜よか火を通した野菜のほうが好きだなぁ。というわけでキャベツはナンプラーとごま油で軽く炒めて味付けしたですよ。うまー。
甘くなーい。うまーい。キャベツバリバリ。
よくいくバーのバーテンダーさんがキャベツを生で食べるダイエットの話してたが、基本的に生の野菜よか火を通した野菜のほうが好きだなぁ。というわけでキャベツはナンプラーとごま油で軽く炒めて味付けしたですよ。うまー。
真っ暗なオフィスで作業してたら周りが暗闇だということに気づいて突然集中力が切れたので帰宅。ドラフトワンとモルツのパック、-196Cと氷結を日本ずつ購入。さんまの蒲焼きとキャベツで晩ご飯の予定。
伯父さんの命日だったので墓参り。特別な事はなにもなく。戒名がないのがちょっと寂しいね。
http://d.hatena.ne.jp/t-tkzw/20060728/p1
E::MM 6.25以上を要求するのはBuild.PLのハンドリングにバグがあるからです。E::MM 6.25以下だと、ディストリビューション内のBuild.PLを実行してしまうという妙な動作をするので敢えて6.25以上を要求してます。実際、makeするとなぜかBuild.PLが実行されてますよね :)
自分はMakefile.PLではなくBuild.PL推進派なので別に使うなとまではいいませんが、できればM::Buildににちゃんと対応したE::MMを使ってほしいなぁ・・・と。ASではむずかしいか・・・。むー。
http://d.hatena.ne.jp/t-tkzw/20060729/p3
こっちは正直わかりません。gccのエラーですから、perl をコンパイルした時かmecabをコンパイルした時のなんらかのフラグがお気に召さないんでしょうなぁ・・・。Mac OS Xでは再現しません。
かまいたちx3を買ってきた。初めてやる人のためにシリーズ最初の2作品も入ってるのはちょっと嬉しい。ということで最初からやってます。
ちなみに音楽担当は羽毛田さんですか・・・。ゲームはいいから鬼束ちひろのプロデュースをまたしてください。
今日のコースはまた同じ中華→シェリー→スコッチ。中華は軽く終えて、シェリー飲みながらパエリャを待つ事1時間。ちょっと時間かかりすぎ。しかしあいかわらずうまい。シェリーもティオペペの25年ものをいただきました。むほほ。その後まだ飲み足りなかったので駅に自転車を置いて新宿に移動。リーさんに散々プレッシャーをかけつつ珍しくマティーニを。シェイカーを振るリーさんはスタープラチナのようでした。あとでスコッチは3杯。
駅までタクって、自転車で帰宅。
http://www.postgresql.org/docs/8.1/interactive/ddl-partitioning.html#DDL-PARTITIONING-OVERVIEW
んんんん、興味深いが・・・使えるのか?どうも導入実績が見当たらん。MySQL 5.xではこう:
http://dev.mysql.com/doc/refman/5.1/en/partitioning.html
スライドを読んでて思ったんだけど、Cookieに*だけ*ステート情報を入れておくって手、いいんだけどモバイル端末では使えないよな。
http://search.cpan.org/~nuffin/CGI-Cookie-Splitter-0.01/
あとセキュリティ的にはどうなんだ、ということでちょいと調べてみた:
http://en.wikipedia.org/wiki/Rijndael
基本的には問題はなさそうだな。クッキーをサポートしていないモバイル端末の場合はmemcachedに入れるとか、そういう感じでやるとよろしい予感。あと心配点としてはブラウザのほうのクッキーコードにバグが会った場合はどうするのかなぁ、みたいなのはある。
id:charsbarさんのところでみつけた鳳タンのOSCONスライドなんだけど、なんかクレイジーな事してんなぁ。Jiftyはコンセプトが極端にPerl-ishでちょっとついていくのに苦労する(これだけPerl使いだと広告しててあれなんだが・・・)。
まだ読んでる途中で正直内容がよくわかってないのだけど、とりあえず方向性はなんとなくつかめてきた。
近所の中華料理屋でディナー。いつも自転車で通るので気になってはいたのだけど、いつも満員で入れなかった店。今日は連れが先に行って空いてる事を確認してくれたのでちゃんと座れた。カウンターで前菜を含めて5品くらい。一個一個はかなり量が少なめなんだけど、味は確か。うまーい。
ビールと紹興酒飲んで、ラストでバイバイ。俺は一人バーへ行ってニッキーズフィズとマティーニ。結構ヘロヘロによっぱらって帰宅。
そういえば昨日書いた「時をかける少女」に桂歌丸の一番弟子、桂歌若がでてた。ちょい役だけど、エンドロールにでてくるまできづかんかった。こんなこともしてるのねー。
http://www.blogthings.com/whatkindofamericanenglishdoyouspeakquiz/
どこの地方の英語を喋るのか解析。
Your Linguistic Profile:
65% General American English
15% Yankee
10% Dixie
5% Upper Midwestern
0% Midwestern
すげぇ、「標準語」の他にはまさに俺が住んでたエリアとか、俺がルームメイトしてた人たちが住んでたエリアの言葉だ。結構正確だなぁ。
見てきた。おもしろかったぞー。はっきり言ってゲド戦記の100倍おもしろい。なんだろ、わりと内容的には淡々としてるんだけど、ちゃんとメリハリが効いててよかったなぁ。これは確かにおすすめ。
銀たらが閉店間際で2割引だったので、家にあったキムチにキャベツとネギを足して銀タラキムチを作ってみた。豚キムチにしようかと思ったんだけど、ちょっとだけヘルシーさを期待して銀タラ。
隠し味は最後にいれた卵かな。よくカリフォルニアで食べてたキムチチゲの味のようにまろやかになってひじょうにうまかった。
今日のトリビアはちょっと原点に立ち返ったかのようなすばらしい「電子レンジの中で回るニンニク」というトリビアをやっていた。これはおもしろい。っていうか、ニンニク、まわるなぁ!!!すごいぞ!
ちょっとリファクタする用事があったので、XSに直で書いているコードを一旦C関数に動かしたわけですが、すると突然動かなくったのです。複数の変数の値をセットするので、IVへのポインタを渡して操作したかったので、こんな感じのコードが
x++
こんな感じになるなぁ、と思ったのね
hoge(&x);hoge(IV *x) {
*x++
}
で、動かない、動かないとずっと悩んでたのだが、あーた、これ単純にオペレーターの優先順位の問題じゃないですか。うはー!俺ってやっぱりCを知らんなぁ・・・。正解はもちろんこうね:
(*x)++
くそ・・・
id:naoya さんのブックマークから。
http://www.youtube.com/watch?v=7zRmffRIifE
技術もすごいんだが、レポートがCRON 4(サンフランシスコのテレビ局)だったのでちょっと懐かしさがこみあげてきたw
日記には常に青臭い事と自分の身の回りに起こったを書いてきた。でももうストーカーが現れた頃から自分が誰とどういう所に言ってるのかかけなくなったし、現実の世界で自分を知っている人が日記を読んでる事を知ってから自分の思ってる事は書けなくなった。
さらに社長という肩書きを手に入れてから自分の公の立場を考えると書けない事はとても多い。別に社会的な責任はたいしてないが、俺は今他人に給料を払っている責任がある。仕事を管轄する責任がある。青臭い事を書いている場合ではない。
辛いかというと辛くはないのだが。黒い背景で、適当に大学生だった頃の自分の心を吐露する場ではなくなったのだな、という軽い喪失感がある。そしてあれはもう9年前だ。
上に書いた田中さんと話した事でもあるのだが、大分回りの景色が違ってきてしまったのだなぁ。
最後の客だったのでバー「カエサリオン」の田中さんと話してきた。彼と俺は全く違う業界にいるし、歩んできた人生も全く違うのだが、でも色々聞いて色々とためになった。彼はっもうかれこれ20年以上いわゆる水商売をしている。ひいて俺は技術者としては10年、社長業としては半年くらい。その差を、田中さんのカクテルを飲みながらゆっくり聞けた。
彼の作るカクテルは年月によって干涸びてるのではなく、より艶やかになっている。それはカクテルの出来だけではなく彼の客との距離の取り方、話しかけるタイミング、そういったものが全て合わさってそうなっている。それを少し感じられた。
このごろようやく他人の意見を聞けるようになったと思う。
俺は天才ではないし、たいした才能も持ってないと思うので正直社長業なんてどうかと思う日も多い。けれども俺が思うに自分で世界を変えて行ける人ではなくとも、先人の言葉に耳を傾けていける社長ではありたい。正直、この先どうなるのかはわからんが、世界一の企業にならんでもいい、しっかりと足を地に着けた仕事をして行きたい。
ただひとつだけ納得いかないのはカエサリオンの酒は微妙に割高感が残る事。うまいんだが・・・。なんでだ。まぁ、人生の教訓を得られるのでいいとする。酒としては割高感が残るが、過ごした時間は払ったお金の分だけの価値はあった。
俺がつきあっている人たちはこういう事にはお金を使わない人たちだけれども、今までもこんな感じで無駄に見える事に投資してきて必ずいい事があったから、別にいいや。
楽しかった。
http://use.perl.org/articles/06/07/23/2232250.shtml
search.cpan.orgがダウンしてるとなんとなくやる気がでない罠。あがっててもでない、という噂もちらほらありますが。
っつーか、なんか、ファイルディスクリプター扱うとか、そういうレベルのコーディングって嫌いじゃないけど、脳がうごかん。がんばるぞ。
この間からDateTime::TimeZoneをほげほげしてたんですが、結局のところDT::TZをいくらXS化して、インスタンス毎のに数個あるSVを小さくしたところでメモリフットプリントはほとんど変わらない、という現実にぶちあたりました。
前回このコードをいじってた時にも同じような事にぶちあたったので色々悩んだのですが、多分XSコードからPerlに構造体を渡す時にSVを作ってるからなんじゃないかと、はたとおもいあたったのです。
typedef struct hoge {
IV poop;
} hoge;IV
get_poop(self)
SV *self;
PREINIT:
hoge *myhoge;
CODE:
myhoge = get_hoge(self);
RETVAL = myhoge->poop;
OUTPUT:
RETVAL
ってした時に、もちろんIVはint32とかなのでSvIVよりは小さいんだけど、結局裏でRETVALはnewSViv(myhoge->poop)されてるからSV分のメモリをくっちまうわけなんだな。ただこのpoopをPerl側で使う部分が少なければ少ない程、一旦確保したメモリ領域を再利用できる可能性が高いので、効率はよくなる。そんなわけでアクセッサーを使う機会が多いとC structで対処する分のメモリ使用削減率というのは結局SVが作られてしまうのでガクンと落ちる訳だ。
同様に、newSV*()を呼ぶ回数が増えればそれだけCコードに変換した分の効率アップ分が削ぎ落とされる。
ということはXS化でもっとも恩恵を受けるにはアルゴリズム全体をCで書く事なんだろうな。DateTimeの場合は日付/時間計算を全部Cからできたら最高だと思われる。
"私には無理だと思って, CPUを無駄に使うチョイスをとるぐらいなら, SWIGでサクッと仕事を終らせたほうがよさげです. "
http://chasen.org/~taku/blog/archives/2006/07/_swig_1.html
この辺りは実は僕も否定する気がないのです。例えば工藤さんにSWIGを使えというのが前回私が書いた趣旨ではないのですね。僕としてはそこ以前に、「ライブラリはライブラリ作者が、バインディングはその言語を理解し、使用している人が書くべきだ」という観点の元に立っています。
先に言っておくと、以下は理想論というか、僕がメンテナーだったら、程度の妄想なので現状の例えばmecabの配布方法を変えろ、ってことではないので、その辺を含めて読んでください。
工藤さんはC/C++で優れたライブラリを書く人です。でも工藤さんが、python, php, ruby, perlでそれぞれの言語にあった書き方をするのは不可能だと思うのですね。そして機械的にコードを作成するのもいいんだけど、その前にオープンソースのプロジェクトとしてはそれぞれの言語の人たちと連携を取ってその道のエキスパートにバインディングを書いてもらうのが一番正しいような気がするのです。
つまりライブラリと一緒にバインディングを提供する必要もないんじゃないか、という立場にたっているので、そもそもSWIGを使う理由が僕には思い当たらないのです。ライブラリ作者がバインディングの作成をコントロールする、という概念自体が僕にはなじめないものなのです。
今思いついたのですが、もう一つのアプローチとしては、インターフェースはライブラリ作者が定義するが、実装はバインディングの作者が担当する、というのもありかもしれません。そうすれば僕が勝手にText::MeCabかいちゃったーみたいな感じではなく、バインディング開発者とライブラリ開発者を分けつつもAPIの統合と開発者同士の対話が生まれて僕も工藤さんもハッピーな形でできるのかもしれません。とりあえず思いつきですが。
で、まぁ色々書いているのですが、結局のところ工藤さんが僕とかに「CPANのText::MeCabの配布をやめろ!」とか言わない限りはせいぜい「emacsよりviのほうがいいんだよ!」みたいなレベルの意見なのです。何事もケースバイケースなので、一概にSWIGが使えないとはいいません(それでもあの生成されるコードは気持ち悪いと言いたい(笑))。工藤さんもXSに対してその立場だと思うのでそこらへんはバランスの問題ですね。
ここからは全く関係ない蛇足ですが、逆に言うと、オープンソースのプロジェクトは是非そういう、第三者が使うということやバインディングを作る人がいるという事を前提に作ってもらいたい、という願望はあります。ここでいうユーザーやバインディング開発者は、決して決してライブラリの作者ほどにライブラリに愛着はないし、開発するにあたって作者と同じ愛着を持つ必要性はないと思うのです。mecabに関してはmecab.hを見ただけでバインディングを作れたので問題はなかったですが、たまに「おまえ、これは他人に使ってもらう気あるのか、ゴルぁ!」という叫びをこらえきれないライブラリとかがあるのですね。
バインディングを作る人は決してそのライブラリ自体の「エキスパート」である必要はないし、だいたい作者以外はそれほど細かいところに興味を持たないのが前提で書いて欲しいと切に願います。
タイ料理で辛いもの食って腹が痛いのをわかっているのに、ネパール料理屋でカレー。カボチャと鶏肉のカレー、うま。店をでようと思ったら傘を持って行かれてた。どうしようか悩んでたら店のおっちゃんが傘を一本持ってけとくれたのでそれをさして事務所へ。
昨日のタイ料理でおなかが痛い。うう、しくしく。
珍しく夢を見た。なにげなくギターを取り出してピアノマンを歌いだしたら、部屋の隅のほうのピアノのところにビリー・ジョエルがいて、「あ、それ俺の曲じゃん」とか言って歌いだすという。夢の中で結構聞き入ってる自分がいた。
add_duration()を高速化するべく、_handle_offset_modifier()をCで書き直してるのだが1秒ずれる。
t/19leap_second.........NOK 121
# Failed test 'UTC time end of leap second day'
# in t/19leap_second.t at line 750.
# got: '1997-07-01T22:59:58'
# expected: '1997-07-01T22:59:59'
t/19leap_second.........NOK 144
# Failed test 'dt is 2006-01-01T00:00:00'
# in t/19leap_second.t at line 893.
# got: '2005-12-31T23:59:60'
# expected: '2006-01-01T00:00:00'
t/19leap_second.........NOK 146
# Failed test 'dt is 2006-01-01T00:00:00'
# in t/19leap_second.t at line 908.
# got: '2005-12-31T23:59:60'
# expected: '2006-01-01T00:00:00'
# Looks like you failed 3 tests of 148.
t/19leap_second.........dubious
Test returned status 3 (wstat 768, 0x300)
DIED. FAILED tests 121, 144, 146
Failed 3/148 tests, 97.97% okay
Leap second のハンドリングが変なんだろうけど、どこだ一体・・・
タイ料理食べに行って、そのあといつものバー。今日は客が俺一人。まぁ日曜だしな。ってことでジントニック、メンタ、ビール、スコッチ3杯。人生と下半身について語って帰宅。
実はPOEを見捨てたくて、Event, IO::Pollとか見てるんだけど、ちゃんとしたフレームワークはないのねぇ。自分で作るんでいいんだけど、なんかないかなぁ。
チューニングはだいたい終わったとおもうだよ。Devel::DProf、使いまくってボトルネック探しまくった。
うちになぜか10人も集まって麻雀。本物組とDS組で別れてたのだが、DSでは7万点も取ってHろゆきをハコったのだが、本番のほうでは半荘3回の間で2回しかあがれず、しかも最後は大三元に振り込んではこられるという始末。一応いい訳させていただくと、振り込んだのはピンズであって役牌じゃねーぞ。ちきしょう。
寝たのは午前9時くらい。
読者のあなた達(特にリアルでの知り合い)、この日記は基本的に技術と飯の日記です。時々見える女の影とかは全部幻ですから、スルーしなさい。
http://svn.sourceforge.net/viewcvs.cgi/perl-date-time/modules/DateTime-TimeZone/branches/xs/
心臓に毛の生えているハッカーなあなた、是非試してみて。
ほい、ということでプロファイルをとってみた。
daisuke@beefcake DateTime-TimeZone-XS$ perl -Mblib -d:DProf test.pl
timethis 50: 43 wallclock secs (24.05 usr + 6.99 sys = 31.04 CPU) @ 1.61/s (n=50)daisuke@beefcake DateTime-TimeZone-XS$ dprofpp
<snip>
Total Elapsed Time = 12.00626 Seconds
User+System Time = 2.216263 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
197. 4.368 4.368 38300 0.0001 0.0001 DateTime::TimeZone::spans
77.5 1.719 2.324 19202 0.0001 0.0001 DateTime::TimeZone::new
41.5 0.921 4.453 38300 0.0000 0.0001 DateTime::TimeZone::_spans_binary_
search
19.1 0.424 0.424 19603 0.0000 0.0000 Params::Validate::_validate
15.5 0.345 0.332 19202 0.0000 0.0000 DateTime::_calc_local_components
12.6 0.281 1.890 19200 0.0000 0.0001 DateTime::_handle_offset_modifier
5.96 0.132 2.166 19202 0.0000 0.0001 DateTime::_calc_local_rd
5.05 0.112 6.284 19150 0.0000 0.0003 DateTime::set_time_zone
4.29 0.095 0.095 432 0.0002 0.0002 DateTime::TimeZone::xs_register
3.47 0.077 0.077 1196 0.0001 0.0001 DateTime::TimeZone::find
2.30 0.051 0.146 432 0.0001 0.0003 DateTime::TimeZone::register
2.21 0.049 0.211 20 0.0025 0.0106 DateTime::BEGIN
1.67 0.037 0.061 786 0.0000 0.0001 DateTime::TimeZone::BEGIN
1.53 0.034 0.071 299 0.0001 0.0002 DateTime::Locale::_register
1.31 0.029 0.317 4 0.0074 0.0792 main::BEGIN
おーっと、spans()を呼び過ぎだ。これは元のPurePerlコードが$tz->{spans}を直接扱うので、例えばspanリストのサイズとかを必要とする時にscalar @spansみたいな事をしないといけないからだと思ったので、
IV spans_len(self); /* spansのリスト数を取得 */
IV span_at(self, i); /* i個目のspan要素を取得 */
SV *max_span(self); /* 最大のspanを取得 */
というメソッドを追加
daisuke@beefcake DateTime-TimeZone-XS$ dprofpp
<snip>
Total Elapsed Time = 7.434086 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 1.490 2.259 19202 0.0001 0.0001 DateTime::TimeZone::new
0.00 0.543 0.588 19202 0.0000 0.0000 DateTime::_calc_local_components
0.00 0.504 0.504 19603 0.0000 0.0000 Params::Validate::_validate
0.00 0.157 0.041 19202 0.0000 0.0000 DateTime::_calc_local_rd
0.00 0.130 -0.462 38300 0.0000 - DateTime::TimeZone::_span_for_date
0.0000 time
0.00 0.099 0.099 1196 0.0001 0.0001 DateTime::TimeZone::find
0.00 0.096 0.096 38300 0.0000 0.0000 DateTime::TimeZone::max_span
0.00 0.076 -0.423 19200 0.0000 - DateTime::_handle_offset_modifier
0.00 0.068 0.113 786 0.0001 0.0001 DateTime::TimeZone::BEGIN
0.00 0.066 0.066 38300 0.0000 0.0000 DateTime::utc_rd_as_seconds
0.00 0.056 0.056 432 0.0001 0.0001 DateTime::TimeZone::xs_register
0.00 0.052 0.108 432 0.0001 0.0002 DateTime::TimeZone::register
0.00 0.051 0.051 140900 0.0000 0.0000 DateTime::TimeZone::span_at
0.00 0.040 0.108 7 0.0057 0.0154 DateTime::Locale::BEGIN
0.00 0.040 0.319 4 0.0099 0.0797 main::BEGIN
daisuke@beefcake DateTime-TimeZone-XS$
おお、消えた。スバラシ。
2年前?くらいに一度挫折したDateTime::TimeZoneのXS化なんだが、もう一回やってみた。1000行弱のパッチで、今回は全てのタイムゾーンを
DateTime::TimeZone->new(name => 'Asia/Tokyo');
みたいにしてロードした場合にこれまでのPurePerl版と比べて5MBほどのメモリ消費量の差がある。ただ、なぜか速くない。なぜだろうなぁ。
さんまの握り(20%オフ)、キムチ、納豆1個。飲むまいと思ってたがなりゆきでビール。
久しぶりに飲み過ぎました。よっぱらいすぎです。まともにタイプできません。
ここ1週間くらいちょっと煮詰まってます。コードが思うように書けない。進まない。よくないなぁ。色々書いてるんだけど、全然最後まで行き着けない。うーん。よろしくないなぁ。
三宿で壷焼きカレー(チキン)。うんめええええええ!
夜バーに行こうと思って外出。なんか最近気になってた近所のバーまでチャリチャリ。ジントニック一杯。ブルイックラディーを一杯。ブルイックラディーは古めのヤツ。これでお値段は3000円以下なので良心的かなぁ。
その足で違うバーに行ってシェリーでも飲もうと移動したら休み。日曜だからか。それでも負け時ともう一軒行くとそこもシャッターしまってる。ぐはー。なんか飲むなという思し召しだと思って帰宅。
チャットしながらスプリングバンクをちびちび。シリアルをおつまみに←これも豆とか入ってるし、ちょうどいいじゃろ。今週の黒バラとガキ使はイマイチ。
メール相手がなんとなーく機嫌悪いなぁと思ってたのだけど、日記読んだらなんとなくわかった。
なので以前挫折したモジュールとかを見直したりして。あとsvkでローカルレポジトリに色んなDateTime系のモジュールをひっぱったり。
新規にモジュールや機能を開発するとき、俺は必ずインターフェースから入る。Perlの場合はほぼ必ずここから始まる:
package Hoge;
use strict;1;
__END__=head1 NAME
Hoge -
=head1 SYNOPSIS
use Hoge;
my $h = Hoge->new;
$h->hoge;
$h->hoga($a, $b, $c);=cut
SYNOPSISを書かないと何を書きたいのかわからんし、機能のデザインができない。おまけに、一旦リリースしたあと実装はいつでも変えられるけど、APIはよっぽどの事がないと変えられない(変えられない事もないけど、それなりのコストがかかる)。
これってほぼどの言語でもそう。Cの場合はまず.hから書き始める。Javaの場合は関数のスタッブ等から書き始める。.hファイルがまずいと.cファイルもわけわかんなくなるし。Perlの場合はモジュールのわけかたわからんし。
クールな実装より絶対に堅実/わかりやすいなAPIのほうが何倍も重要だと思うので開発はそこからすべきだと思うんだけどねぇ。
ネガティブな事を色々書いてたけどとりあえず寝かしておく事に。でもとりあえず開発は凍結しようっと。なんかもう書きたくなくなった。
暇。なんかようやく一人の週末にもなれてきた感がするが、暇な時は本当に暇だなぁ。つまらん。
久しぶりにスーパーに行って買い物。キャベツ、ピーマン、ネギ、お茶、納豆とか。
キャベツ、ピーマン、ネギをいい大きさに切っておいて、たっぷりの油で豚コマとニンニクを炒める。その間に味噌、豆板醤、テンメンジャンを紹興酒で溶いておく。野菜を芯のあるものから先に入れて炒めて、調味料を入れて炒める。強火で仕上げて、ごま油をたらしてさっと仕上げ。
今日はお米がなかったのでちょっとインプロバイズして素麺を茹でて、ちょっとつけ麺風味に食べてみた。これがうまい。うまい。うまああああい!マジうめぇぞ、これ。ってことでこれからもやろー。
午後5時頃に「ゲド戦記試写会のチケットあるんですけど、(自分が)いけなくなったのでいきませんか?」というメッセが入ったのでチケットをもらいにタクシーに乗って某所へ。Hろゆきとかも行くっていうし。もらって帰ってきてみるとダブルブッキングしてたとか言われてちきしょうと悪態をつきつつ、自転車で新宿へ。汗ダラダラ。
新宿への道はさすがにタクシーでよくとおるだけあって自転車で行った事ないけどサクっといけた。東京厚生年金会館で並んでたら前方に知り合いが!早速合流。ゲド戦記鑑賞。
ゲド戦記、わけわからんよ。世界観やテーマとかは壮大なものが裏にあるんだろうなぁという感じがするんだが、肝心の話のほうがボロボロ。ちょっといただけない。消化不良とは思いつつ、エンドロールに知り合いの名前がでてるのを確認して退出。
ちょっと歩いて「じゃあ一杯飲むか!」って事で飲んで、その後バー行ったら午前3時。いつものコースだな。バーをでる時に連れの一人が「財布がない!」ということでちょっとパニック。電話とかしてみるもなにせ午前3時なので意味なし。普段ならそのままタクシーで帰るところだけど、連れがいるのでとりあえずカラオケ2時間。
朝日が上ったくらいに別れて、自分は結局自転車で帰宅。新宿って意外と近い。
たりらりら~んが終わってがっかりしてたのだが、新番組がはじまって、ベタの世界をまた見れるのでちょっと嬉しい。加勢大周の顔も見慣れてしまった。
タクシーに乗って、運ちゃんと話す事はよくあるのだが、昨日はタクシーの運ちゃんにタクシー業がどんな感じなのか聞く機会があったので話を聞いてた。ひと月の稼ぎがいくらとか、どういう出勤体系なのかとか。結構おもしろかったなぁ。
自分が知らない仕事の内容って聞いてておもしろいわ。
AがしみづおごってくれるっていうのでKさんと3人で。寿司屋に遅刻はするなよ!と鬼軍曹の勢いで注意。でも遅れたけどな。まぁ仕事なので許す!w
しみづでうまいもんオンパレード。最初の甘鯛を軽く昆布で〆たものがものすごいうまかった。Aにとりあえず「ウマいウニとはこんなもんだ、食っとけ!」と頼んだものの、やっぱり駄目だったもよう。
すんげうまかった。鰹のタタキの写真がうまく撮れんかった。
石川亜沙美結婚。相棒ちゃん曰く、3年5ヶ月後に離婚だそうです。M君は3年2ヶ月。俺はもっと早く2年10ヶ月で。
key_sizeがとれないよ!
(話が1年程古い事に今気づいた)SWIGを使ってサポートされてる全ての言語のバインディングが作れるというのは魅力的に見えるかもしれませんが、私は反対派です。
http://chasen.org/~taku/blog/archives/2005/07/_swig.html
まず大前提として"各言語間で全く同じAPIを使えたほうがいい"は賛成できかねます。現実的にperlでそのAPIを使ってる人がJavaで似たようなアプリを書くかというと、書かないとおもいます(そのもとのライブラリの開発者なら書くかもしれません)。Perlを70%の時間書いてて、残りは違う言語を必要な時に使う、みたいな私のような人のほうが多いと思うのです。MeCabを使う時は100%Perlから書きます。よって、各言語間の事は私にとってはどうでもいい事で、それよりどれだけ自分が書いているほかのライブラリにうまくはまるか、のほうが重要です。
また、私にとってとても大きい問題点はSWIGは特定のライブラリの特定のバージョンから生成されるもののため、基本的にその固有のバージョンしかサポートしてないということですね。最初の一回は確かにSWIGで作成されば楽ですが、その後例えばバージョン1.0.0, 1.2.0, 1.2.1と下層のライブラリのほうが進化していった時に複数バージョンのライブラリをサポートするのがかえってめんどうくさそうです。手で書くともちろん色々と煩雑ではありますが、細かいサポートが可能です。
あと以下は蛇足的ですが・・・
特に最後のポイントはSWIGで他の言語のモジュールを使った事がないので、Perlだけの事かもしれませんが、ドキュメントの問題があると思います。PerlにはPODという優れたドキュメントシステムがあります。ドキュメントを書くフレキシビリティに関しては疑問点の残るPODですが、perldoc Moduleとやるとドキュメントがでてくるというこの安心感は他の言語ではなかなか得られないものです。ところがSWIGは自動生成である分、正直そういう普通手書きなら必ず書くべきものがかなりおざなりである事が多いように思われます。
SWIGにメリットがあることはわかります。ですが、SWIGは下層のライブラリの開発者向けで、あまりエンドユーザーに向いていない気がします。結局は最終的に使われる言語やユーザーベースの状況を細かくコントロールしないとバインディングが成功することはないと思うのです。逆に言うと、ライブラリ開発者の方々は、もしC/C++でライブラリを書いたならそれに対するバインディングはその言語のハッカーと共同開発のような方向に持って行ったほうが生産性が高いと思うのですよね。
ちょっと散漫な終わり方ですが、とりあえず以上で。
追記:某バインディングを書いている知り合いが「全スクリプト共通のSWIGコード書くのが面倒くさい」という意見も言っておりました。書いた事ないのであんまり細かい事わからないですが、「callbackとか指定する時に扱いが違いそう」という事なので、なんとなく納得。
基本形:
dSP;
ENTER;
SAVETMPS;
/* Push arguments... */
PUBACK;call_method(...);
SPAGAIN; /* 重要 */
sv = POPs;
FREETMPS;
LEAVE;
よくはまるのがSPAGAINのタイミング。G_VOIDコンテキストで呼んだりして戻り値が必要ない場合はいいんだけど、必要な場合はSPをcall_methodの前に引数をスタックにいれるためにSPが移動しているので、元の位置に戻してやらないとPOPsが変な物を返してくるよ!
CODEセクションはXS関数宣言の戻り値とRETVALを尊重する。というか、戻り値のSP (スタックポインター)の処理をある程度自動的にやってくれる。これに対して、PPCODEはプログラマーが自分でSPの操作をする。
もし1個以上の戻り値をリストで返したい場合はPPCODE。
void /* 戻り値は無視される? */
hoge()
PREINIT:
int i;
dXSTARG;
PPCODE:
for(i = 0; i < 10; i++)
PUSHi(i);
CODEセクションはRETVALを使う
IV
hoge()
CODE:
RETVAL = 1;
typemapで自動変換を指定できる型については、RETVALにSV *を突っ込む必要がない。
IV
hoge()
CODE:
RETVAL = 1;
OUTPUT:
RETVAL
ちゃんと勉強してないんだけど、以下メモ的に。
よく見かけるけど全く暗号のようなXSのマクロのうち、小文字dで始まるマクロはどうやら"declare"のdらしい。XSマクロが使う変数の宣言をしてくれる。
例えばPUSHi()というマクロはPerlのスタックに整数を入れてくれるマクロなのだが、"targs"という変数を必要とするので、これを宣言する必要がある。
・・・というのは間違いで、関数の戻り値宣言がvoidなのにPerlスタックにものを入れたいというお茶目な事をしたい場合には必要となる。つまり、
IV
hoge ()
PPCODE:
PUSHi(1);
はOK。
void
hoge ()
PPCODE:
PUSHi(1);
はNG。この前にちゃんと dXSTARG で宣言をいれとく必要がある:
void
hoge ()
PREINIT:
dXSTARG;
PPCODE:
PUSHi(1);
ちなみにdXSTARG;はただの変数宣言なのでPREINITに入れないでも、PPCODEの一番上でも大丈夫。
ここでのポイントはXSで書かれている戻り値というのはあくまでxsubppが処理するコードで厳密にはC コードではないため、戻り値の宣言はあくまでXSの関数内で作成されるコードの「参考」にしかならないということ。例えば戻り値を使いたいと宣言して
IV
hoge()
とするなら、これをSPを使う事が予想されるためにそれに準じたコードを作成してくれるわけだ。でも、別に本当にreturn宣言するわけではなく、あくまでPerl内のスタックを使うだけだから別に
void
hoge()
でもPerlから呼ぶと立派に戻り値がある関数が作れる訳。以上追記。
また一歳年を取りました。でも昨日作業していて寝たのが5時くらいで、起きたら12時前でちょっと鬱。寝起きでN社にいったらお祝いしてくれました。ごちそうさまー。
誕生日ってーと毎年うちではちらし寿司とケーキでした。っていうか、お祝い事は全てちらし寿司でした。だから1年に最低4回はちらし寿司。しかも妹がおめでとうメールしてきて、本人がいないのに今日は実家ではちらし寿司とのこと。
ほい、直してみました。CPANアップした。
しばらく小康状態を保っていたのだけれども、ここに来て部屋がありえない汚さになってきました。いかん。いかんなー。
久しぶりにドラマ見てますよ。一人焼き肉はさすがに日本ではできません。アメリカの食べ放題韓国焼き肉(20ドル)はひじょうによく行ってました。でも基本的にどんな店でも一人でひょいひょいはいれるほうですなー。一人でランチできないとか言ってる人がたまにいるが、理解できんなー。
ようやくselect()を実装。やっと検索できます。一応advanced APIに対応してるんだけど、コールバックとかは試してないや。
daisuke@beefcake Senna-Perl$ wc -l lib/Senna.xs
1318 lib/Senna.xs
daisuke@beefcake Senna-Perl$
もう少しで予定の1500行だが、これは多分超えるな・・・。
こちらの
http://d.hatena.ne.jp/t-tkzw/20060710/p1
ベンチで。黒死館殺人事件をDL、EUC-JPに変換してから実行。libmecab 0.92、20060707のipadicで。
daisuke@beefcake Text-MeCab$ time perl wakati-text-mecab.pl < kokushikan.euc.txt > /dev/nullreal 0m6.011s
user 0m3.127s
sys 0m1.108s
daisuke@beefcake Text-MeCab$
ふむ。まだちと遅い気もするが、マシンが違うのでちょっと比較のしようがないかも。ただ、まだ色々壊れたまま。
基本的な問題は、俺がText::MeCabのオブジェクト本体をDESTROYしたあとでもnodeは使いたい、と思ったのが問題だったようだ。そりゃdeep_node_copyしてたら遅くなるわな。ということで、デフォルトの動作をmecab-perlと一緒にしてみた。つまり
# mecab-perl
$mecab = MeCab::Tagger->new;
my $node = $mecab->parseToNode(...);
undef $mecab;$node->next; # err
になるけど、dclone()メソッドを使うとあら不思議、Text::MeCab::Nodeではなく、Text::MeCab::Node::Clonedを返すという仕様にする予定。
my $mecab = Text::MeCab->new;
my $node = $mecab->parse(...);my $clone = $node->dclone();
undef $mecab;$node->next; # err
$clone->next; # ok!
というところまでコミットしておいた。ただし、まだまだ壊れてます。
http://dev.razil.jp/svnweb/index.cgi/Text::MeCab/browse/trunk/
0.92 インスコしたら mecab_new()が謎のエラーでNULL返してくる。ぐはっ。デバッグ中・・・。追記:結局辞書をアップグレードしたら直った。俺の辞書に問題があったのかどうかは不明。そこまできりわけてない。
絶対ほかに誰も入らないと思いつつ、なんか夜中でハイだったのでmixiにPerl XSのコミュ作ってみた。1ヶ月後には消えていると思います。
もう随分前から免許を更新しないといけないなぁ、とわかっていたのだが今までサボっていて、さすがにそろそろヤバいので鮫洲に行ってきた。っつーか、本当辺鄙な場所にあるなぁ。
もろもろの手続きが終わって、さあ講習(私はこの2年間で2回原付で違反してますので2時間講習ですです)。これが結構おもしろかった。講師は明らかに落語ファン、もしくは落語のしゃべりを意識しているおっちゃん。内容は全然笑えないのだが、もう言葉の端々が落語。間合いの取り方やらなんやら。風貌もちょっとそんな感じだったしね。
で、ビデオを見せられる訳です。のっけからBGMがさだまさしです。いきなり事故が起きて火サス状態です。絶対他にもこの作品に魅せられた人がいるとおもったのでさっそく検索:
http://blog.livedoor.jp/negasp/archives/14230064.html
http://blog.livedoor.jp/clim/archives/50057574.html
http://masakisama.exblog.jp/1190510/
ちなみにこちらによると、このビデオ単価が73500円だそうです。
http://www.technica-av.com/shop/pro_lib.htm
高っ!
っていうことで無事更新しました。これでしばらくは安泰。
↓コメントに書いてもらってるけど、とりあえずOKになったっぽい。一応0.09をアップロードしておいたけど、まだ微妙に問題が残ってる感じかなぁ。なにかったら報告よろしく!
オープン初日に某パーティ会場にもぐりこんだその日から一応つかってはいたけど、今回のかまいたちはちょっと熱心にやりこんでしまった。携帯を通して連絡をしている、という設定を実際に携帯メールでやるので違和感ないし、メールだから別に途中で一時放っておいてもいいし、移動中とかの時間つぶしにものすごくよい。
基本的にメールの返信も早くてサクサクいけるのだが、途中意図的にメールの返信を遅らせているんだけど、その意図的ってのがいつだからわからん事があってイライラすることが数回。わかったころにはゲームが終わりかけてた。
でも全体としてはとても良い出来上がりだと思う。次も期待age
先がみえねぇ・・・。XSで1000行超える大作になりつつある。1500行くらい行くかな。
http://dev.razil.jp/svnweb/index.cgi/Senna%20(perl)/rss/trunk/
70%くらい書いたような気がする。現在の課題:sen_recordhが何なのかよくわからない。ところどころkeyがchar *とvoid *なのがどう違いがあるのかわからない。コールバックがうまくできてないような気がする。
ワールドカップもようやく終わり。これからようやく真人間の起きているべき時間に起きていられると・・・思う。
しかしジダン、トッティ、マケレレ、ロベルトカルロス、フィーゴ、カーン、皆引退してしまうのね。寂しいなぁ。オリンピックもワールドカップも4年に一回しかないから楽しいし、皆目標とするのだけどやっぱり名選手が活躍できる機会が少なくなるのはなんともなぁ。
わかってる。わかってるけど今の頭の状態だと考えられない・・・。また明日以降!
見てきたよ。結構面白かった!
グレンリベットのポートカスクとマノックモア。いまだにポートエレンに辿り着けない。
いやー、結構いい試合でした。すげぇ頭突きだった。
なんかゴミ箱を空にするを選んだら100万件近くのファイルがゴミ箱に入ってたらしい。何ヶ月空にしてなかったんだろう。まだおわりません。
そこで頭突きいっちゃいますか。あ~~~~~あ・・・。
0.09アップ。
相棒ちゃんとこの。
01:入院 ×
02:手術 ×
03:骨折 ◯ 左手小指、三つにバラバラ
04:献血 ◯ そういえば今年はしてない
05:失神 ○ ローリングストーンズのコンサートで酸欠になって倒れかけた
06:風俗 ×
07:しゃぶしゃぶ ○
08:エスカルゴ ○:
09:万引き ×
10:補導 ×
11:女を殴る ◯ うわー。引かれそうだ。1回度を失ってはたいてしました。
あんな後味の悪い事二度としません。反省してます。
12:男を殴る ◯ そりゃ、ある。
13:就職 ○
14:海外旅行 ○ 人生が海外旅行
15:ギター ◯ 今日人生で7台目のギター買った。
16:ピアノ ○
17:バイオリン × さわったことある。
18:眼鏡 x 裸眼
19:オペラ鑑賞 ◯
20:テレビ出演 ○ Xuxaの番組。幼少時代を1980年代のブラジルで
過ごした人しかわかりません
21:パチンコ ○
22:競馬 ×
23:合コン ×
24:北海道 x
25:沖縄 x
26:四国 ◯ 高松だけこの間行った。
27:大阪 ○
28:名古屋 ×
29:エスカレーター逆走 ◯ 最後の一段をふみはずしました。
30:フルマラソン ×
31:自動車の運転 ◯ 大好き。でも乗りたい車にももう乗ったから別にもう運転しないでもいい。
32:10kg以上減量 ◯
33:交通事故 ○ 俺が信号無視して動き始めたトラックにひっかけられた。無傷。
運ちゃん、おろおろしちゃってかわいそうだった。
34:1万円以上拾う ◯ 小学生の時に1万円札を拾った。その直後に交番に「1万円札
落としたんです!」って人が入ってきた。半年後、警察で半額の
5000円をもらって、半分を募金して半分でファミコンソフト買った。
35:1万円以上落とす x
36:徹夜で遊ぶ ○ この年になってよくやってます。
37:ピアス ○ 4つほど穴あいてました。本当はベロピしたかったけど高かったのでやめた。
38:50万円以上のものをもらう x
39:ラブレターをもらう ×:
40:一目惚れ ◯ よくあります。
41:幽体離脱 ×
42:先生に殴られる ×
43:徒競走で1位 ×
44:妊婦に席を譲る ◯
45:他人の子を叱る ×
46:20歳過ぎて素面で転ぶ ◯
47:同棲 ◯
48:ストリート誌に載る ×
49:2m以上の高さから落ちる ◯ 小学生の時にこどもの国で落ちた記憶が。
50:学級委員長 ○:学級委員と学級委員長って違う?
51:恋人が外国人 △
52:刺青 ×
53:ナンパ ×
54:逆ナンパ ×
55:ディズニーランド △ パリのヤツ
56:一人暮らし ○
57:スキー x
58:スノボ ◯
59:サーフィン ×
60:異性に告白 ○
61:異性から告白 ○
62:同性から告白 ×
63:中退 ×
64:留年 ×
65:浪人 ×
66:喫煙 ◯ 最近葉巻すってますなぁ
67:禁煙 ×
68:酔って記憶をなくす ◯ よくある。
69:飲酒運転 ◯ 真面目によっぱらってる時はさすがにないけど、飲み終わってから2時間
とかで運転はよくあった。
70:保証人 x
71:幽霊を見る x
72:先生を殴る x この質問作った人、殴るの好きだなぁ。
73:親を殴る x
74:食中毒 x
75:無言電話 x
76:ピンポンダッシュ ◯ たしか。多分。小学生の頃にあったような気がする。
Senna.pmでSenna Full APIをサポートするために開発始めたよ。パッチ歓迎さ!
----------------------------------------------------------------------
r1964 (orig r48): daisuke | 2006-07-10 00:15:42 +0900Start work on supporting full Senna API.
----------------------------------------------------------------------
r1963 (orig r47): daisuke | 2006-07-10 00:15:06 +0900removing old stuff for reorganization
----------------------------------------------------------------------
r1962 (orig r46): daisuke | 2006-07-10 00:14:48 +0900removing old stuff for reorganization
----------------------------------------------------------------------
r1961 (orig r45): daisuke | 2006-07-10 00:14:34 +0900removing old stuff for reorganization
----------------------------------------------------------------------
r1960 (orig r44): daisuke | 2006-07-10 00:14:09 +0900removing old stuff for reorganization
で、今気づいたんだけど、dev.razil.jpのSVNWeb、ずっと壊れたままだったのね。ごめんなさい。直しました。
事務所でM君が相棒の旦那さん経由で(なが):
http://www.noriakimusic.com/index.html
なんか笑えるんだけど、長く見つめてるとマジむかついてきます。いったいどういう人なんすか。オーディション模様はこちら↓
http://www.ginkaku.ws/?m=t&s=251
イワン君逮捕かい・・・さすがに大麻を持っていてもいいともにはならんかったか。
朝から昨日のキムチをばくばく。俺、今日きっとくさい。
ブラジルが負けてからすっかるふてくされてサッカーを見てなかったのだけど、今さっきワールドカップのまとめ番組をチラ見してたらやっぱおもろいなぁ。イタリアつえぇわ。
最近作務衣を着て寝てる。これがすこぶる気持ちいい。あれ、なんかもっと書こうと思ったのだけど、これだけかよ。まあいいや。
DateTime::Calendar::Japanese::Era - 0.07。->regesitered() メソッドで登録されてる元号一覧を取得。DateTime::Format::Japanese - 0.03。色々直した。
昨日は久しぶりに某渋谷のバーに行ってモルトを少々。一杯目はボトラーズのカリラ、二杯目はイチローズモルト、そして三杯目、〆として選んだのが1977年のSAMAROLLのボトラーズカリラ。もう刺々しさがなくなっていて、ものすごくイイ。香りがすばらしい。一杯3000円のところだったんだが、2000円に割り引いてもらった。そのせいか若干安めなお勘定。
いやー、カリラばっかってのも飽きるんだけど、あのカリラはうまかったなぁ。
仕事場でモニターを購入してから目の前にラップトップ、左手縦にした19インチワイドスクリーンモニターを置いている。このモニターに最大化した状態のブラウザを置いて作業するとスクロールの手間が無くてすこぶる便利なのだが、さらに良いのがメールクライアント。
これをフルスクリーンにしておくともうメールが読みやすいのなんの。生産性あがってるかどうかわからんが、やりやすいのは確か。
ちょっと手をつなぎたくなった。つないでいいもんだろうかと思いつつ手を出せないのがもどかしい。
閉店間際の駅地下に行って買い物。この時間になると並んでる生鮮食品がかなりの割合で半額だ。駅地下だから普段はたかーーい1500円の刺身が750円ですよ。買います。同じくタラコも購入。キムチは普通の値段だったけど購入。日本にも是非バケツ一杯分のキムチを売る店があると嬉しい。毎日食うのに。
バスを逃してしまって30分待ち。家に辿り着いてご飯を炊く準備をして鍋にお米を入れて始めちょろちょろ中ぱっぱ。その間にキムチをつまみながらビールのロング缶を一本。あとカボチャの総菜があったのでそれも。
ご飯が炊けたところで刺身とタラコでぱくぱく。うまい。鍋炊きご飯はうまい。
XML::RSS::LibXML 0.23 - 複数のenclosureがある時にRSSを吐く方がうまくできていなかったようで、パッチをいただいた。適用して0.23を先ほどアップロードしたですよ。
Text::MeCab - charsbarさんに言われてたビルド時のオプション。アップロードしてなかったらしい。Kwalitee
WWW::RobotRules::Parser - Kwalitee
DateTime::Format::Pg - Kwalitee
DateTime::Calendar::Japanese::Era - 元号名からのルックアップ。テスト
最近自宅のネットワークがひでぇ。全然外のネットワークにつながらなかったりする。おかげで作業できないんですけど。どうすればいいんだ。今もネットワークはなんとなーくつながってるけど、超のろい。つかいものにならん。
でもその間にデータベースをCSVにダンプする簡単スクリプト書いた。
Hろゆき+Mさんと飲み。なんかいい感じの話が聞けたような気がするよ。まぁ結果的にはだね、色々あるけど某D社も某B社もそれに関わってる人々も好きよ。うまく絡んで行けるといいなと思うデス。とりあえず自分の会社ででやれるとこまでやって、駄目だったら拾ってくださいw それまで精進しますー。
ブラジル負ける・・・orz ひでぇ。
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)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><