TOKUHIROM MEMO

2010-10-12

benchmark

orig

Benchmark: timing 10000 iterations of get, get_rest, set, set_rest...
       get:  4 wallclock secs ( 1.58 usr +  0.49 sys =  2.07 CPU) @ 4830.92/s (n=10000)
  get_rest: 12 wallclock secs (10.91 usr +  0.39 sys = 11.30 CPU) @ 884.96/s (n=10000)
       set:  4 wallclock secs ( 1.38 usr +  0.33 sys =  1.71 CPU) @ 5847.95/s (n=10000)
  set_rest: 12 wallclock secs (10.70 usr +  0.55 sys = 11.25 CPU) @ 888.89/s (n=10000)

tune-uped.

tokuhirom@gpath% perl -I ../Cache-KyotoTycoon/lib -Ilib ../Cache-KyotoTycoon/benchmarks/with-rest.pl
Benchmark: timing 10000 iterations of get, get_rest, set, set_rest...
       get:  3 wallclock secs ( 1.62 usr +  0.25 sys =  1.87 CPU) @ 5347.59/s (n=10000)
  get_rest:  3 wallclock secs ( 1.11 usr +  0.42 sys =  1.53 CPU) @ 6535.95/s (n=10000)
       set:  3 wallclock secs ( 1.33 usr +  0.38 sys =  1.71 CPU) @ 5847.95/s (n=10000)
  set_rest:  3 wallclock secs ( 0.93 usr +  0.26 sys =  1.19 CPU) @ 8403.36/s (n=10000)

more optimized

       get:  3 wallclock secs ( 1.31 usr +  0.33 sys =  1.64 CPU) @ 6097.56/s (n=10000)
  get_rest:  2 wallclock secs ( 0.98 usr +  0.38 sys =  1.36 CPU) @ 7352.94/s (n=10000)
       set:  4 wallclock secs ( 1.45 usr +  0.37 sys =  1.82 CPU) @ 5494.51/s (n=10000)
  set_rest:  2 wallclock secs ( 0.73 usr +  0.33 sys =  1.06 CPU) @ 9433.96/s (n=10000)

2009-09-05

psgi stack 19:41

たとえば、こんなかんじ。

User App
↓
Angelos
↓
↓PSGI Protocol
PSGI::Middleware::DebugScreen
↓ PSGI Protocol
PSGI::Impl::Apache
↓
apache2

HEつかうwafだったら

User App
↓
YourWAF
↓
HTTP::Engine::Middleware::Foo
↓
HTTP::Engine(makes HE::Req, finalize HE::Res)
↓PSGI Protocol
PSGI::Middleware::DebugScreen
↓PSGI Protocl
PSGI::Impl::CGI
↓
Apache2

2009-08-27

俺のhowmの中身ってこんなんですよ 11:28

こんなんみておもしろいのかなー?

* 吉岡さんと弾さんのブログの内容をみわける
[2009-06-02 19:26]

<<< hack

http://developer.cybozu.co.jp/tech/2009/05/post-a7de.html

パーセプトロンをもちいて弾さんと吉岡さんを分類したい。

2009-06-12

utf8 things 08:30

http://subtech.g.hatena.ne.jp/cho45/comment?date=20090612#c

dan さんがつっこむとおもうので、裏の日記でこっそりと感想メモ

encode/decode の覚えかた

(いつも適当にどっちかやって is_utf8 ダンプするハメになる。perldoc utf8 みてもわからない)

encode は「Perlの内部表現からなにかのエンコーディングエンコードする」

decodeは「なにかのエンコーディングからPerlの内部表現にデコードする」

ってこと。

ある文字列 (サブルーチンの返り値とか) が utf8 flagged かどうかわからないときどうすればいいか

誰がその文字列の状態に責任を持ってるのか

誰かが責任をはたせていない場合にできることは?

自分はどこまで責任を持てばいいのか

実際問題これってよくあると思うんだけど……

入出力をするライブラリ責任をもてばよくて、それ以外のライブラリフラッグの有無を気にする必要はない。DBI とか File related とか、そういうのだけが気にするべき。

use utf8 の意味

フラグが立ったり立たなかったりするのは混乱する

use utf8 せずに全部に utf8::decode すべきなんじゃ?

use utf8 は、「このスクリプトは utf8 でかいてますよ」という宣言になっている。フラッグ存在意識したら負け。

全く utf8 フラグ考慮してない場合にどうなるか

海外製のだいたいの CPAN ライブラリのこと

複雑奇怪な問題を全ての人が「知っている」ことを前提にするのは間違いだと思う

上記責任の問題もあるのだけど、他人が果たせない責任を果たすことはよくあることなのだから、そういうことが確実にできるようでないと使えない。

海外製の CPAN モジュールでもメジャーなものは utf8 フラッグ意識して開発されている。逆にいうと今時 utf8 flag 関連で問題がおきるモジュールは使わない方がいい(というのはたぶん、いいすぎ)。

正規表現マッチを正しくさせるには?

正規表現エンコーディングは?

use utf8; していれば、その regexp は utf8 でマッチしてくれる。regexpstring も両方 flagged にしておくのがポイント

普通に開発していて latin-1 が必要になることはあるのか?

ライブラリの返り値でそうなることがあるとか?

decode を明示的にしてない文字列はすべて latin-1 扱いになる。これは下位互換のため。

latin-1 と byte 列はちがうのか?

utf8 文字列 / latin-1 文字列 / バイト列 ?

用語の問題ですね。バイト列とlatin-1文字列は同じものですね。バイト列という表現は python から輸入してきたものかとおもいます。

なんでこんな複雑なのか

下位互換性、というのはわかる、けど、

慣れてしまえばそんなに問題にならないんですけどね。

2008-12-08

Data::Model をさわってみたかんじ 16:41

  • UUID をうめるほうほうがわからん
  • created_on おどうやってうめるのか
  • docs がないのと sample application がないから、ちょっとつらい