D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2008年04月

先日なじみのバーに行ってきたのですが、その後スタッフのO沢くんが合流する予定だったのでマスターにその旨を伝えたのです

「うちの事務所の若いのがあとでくるから」

・・・言ってから気づきました。どこのヤクザだ、これ。しかも俺と会ったことのある人なら知ってる通り、俺は丸刈り、最近はひげボーボーです。どちらかというといかつい顔つきしてます。そんなのがこんな台詞言っちゃいけないな。

すぐ気づいて何か言おうと思ったんだけど、そのままマスターはひっこんでしまったので言う機会を失ってしまった。

次回から気をつけます。
    このエントリーをはてなブックマークに追加 mixiチェック

今日は天気もいいので朝から濱田屋さんでパンをいろいろ買ってきて皇居まで。半蔵門でおりて大手門のほうまでてくてく。大手門あたりの公園内にある広場で食べたのだが、そこの中にある会場で結婚式をやっていた。ガラス張りの建物だったのだが、ちょうど新郎新婦の後ろ(来賓にむかってるじょうたい)から式を見る感じになってた。スタッフがバタバタしてるのが正直笑えた。

ところで濱田屋さんのパンはとにかくうまいのだが、その中にも微妙なものがある。この店にはいわゆる「お総菜系」のパンが常時5種類くらいある。その内容というのがどれもこれも和食系の総菜なわけだが、これが「きんぴらごぼう」とか「卵ほうれんそう」とか「春のそぼろ」とかなんかごはんのおかずならいいんだろうけど、パンにはどうなのよ、みたいなのが多くてとにかく微妙なのだ。

ここのクロワッサン、食パン、クルミパン、その他もろもろはとにかく抜群にうまいのに。なんでこんな微妙な味のものをいつもずっと出してるんだ。よくわからんなぁ。
    このエントリーをはてなブックマークに追加 mixiチェック

HTTP::MobileAttributeの最適化祭りに突発的に参加してみた。

正直言うと未だにHTTP::MobileAttributeの中身であるClass::Componentを分かってない。なのでできることも限られてるわけだが。

今回のミニ祭りを見ていてよくわかるのは結局のところスピードに最も影響があるのは端的なコードの書き方ではなく構造(ストラクチャ)を見直す事であるというだ。id:tokuhiromのところでパフォーマンスチューニングの結果を追ってる人はわかると思うけど、結局俺が参加したのはもう本当にコードの書き方をチューニングするというレベルのところで、例えばループをアンロールしてif/elseで実装してみるとかね。でもそこはどんなにがんばっても数%のパフォーマンスゲインにしかならない。

だが、例えばプラグインの読み込みのタイミングを変える事や、Class::Componentの中身をいじってメソッドの呼び出し回数を変えてみるというようなそもそもコードの構造が変わるようなところをいじると10%~20%でパフォーマンスが変わってくる。

今回はベンチマークを取りつつ、perl -d:DProf hoge.pl && dprofppの結果を見ながら最適化できるところを追って行ったが、それでもこんな感じだ。例えばinstance_clear()というメソッドがあったのだが、これをいくら速く実装してもせいぜい2%の最適化。だが、そもそも構造を変えてこのメソッドをいらなくすれば10%くらいスピードが違ってくる。

さて激しく既出だが、これから得られる教訓は
  1. 最適化はDevel::DProfやBenchmarkを使って、最適化のポイントをまず見つけてから最適化する
  2. 細部の最適化でスピードがあがらない場合はそもそもの構造が問題な事が多い
  3. 最適化の極意は「どれだけ速く計算するか」ではなく「どれだけ計算をせずに済ますか」
  4. id:tokuhirom, id:Yappo, それに俺が3人がかりで数時間ハックするだけでパフォーマンスが数倍あがるんだから、最初から最適化なんて考えてやるより、遅くともまずアイデアを実現するほうがはるかに効率的。
  5. テストがなきゃ最適化なんて怖くてできない
あたりだと思います。

4はプログラミングに慣れてくればくるほど気をつけなければいけないところだ。最適化を気にするあまりまだちゃんと動いてもいないのに、先に最適化をしてしまう/考えてしまうような事をしているとコードがそもそもかけなかったり、コードがガタガタになったりするので要注意。

5は言わずもがな。そもそも構造に問題がある可能性がある状態なので、最適化する時にコードをぶっ壊してたらもともこもない。実際今回自分も何回も最適化の途中でコードをぶっ壊したけど、id:tokuhiromが先にいっぱいテストを用意してたから問題なかった。

そして今朝起きてみたら普通にパフォーマンスが昨夜俺が残した部分から50%くらいあがってた。素晴らしすぎる。

今朝のDProfを見る限り、あとはClass::Componentの一部とかくらいしか問題がないように思える。

# 私信:Class::Component::__ANON__が結構上にあがるんだけど、DEBUGモードかなにかの時だけにSub::Name使って動的に生成される関数に名前をつけることは可能だろうか?
    このエントリーをはてなブックマークに追加 mixiチェック

Cライブラリに依存するPerlモジュールを書く事が多いのでAlien::MeCabを書いてみた。これはAlien::SVNとかのようにCPANからPerlではないエクステンションをインストールするためのもの。

懸念事項:
  • すでにインストールされている時のどうさがあやふや。今はユーザーに確認した上で上書きするようにしてる
  • mecab-ipadicもインストールすべき
  • Win32での挙動を全然テストしてない
パッチ、テスト、なんでもウェルカムです。
    このエントリーをはてなブックマークに追加 mixiチェック

やばいやばい。

にぽたんの記事からリンクされているのに俺の一番最近のエントリが「菓子パン」じゃ駄目だこりゃ。えーと。技術的な話書く。えーとテストはいいです。CatalystはCatalystConに参加するよ!話きくだけだけど。最近C++とCをなんか書いてます。つかPerlのコアに手入れたい気もする。gitがちょっとだけラブリー。昨日Encode::Argvってアップした。Alien::MeCabっての書こうと思ってる。

うわー、ネタないよ。IT Mediaから来た人達ごめんね、たまにしかマトモな事が書いてないブログなの、ここ。

やばいやばい。
    このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ