2006-11-02 [長年日記]
@ [cpan] Class::Inspector->loaded
Class::Inspectorという便利なモジュールがあるのですが、これのloaded(そのクラスがすでにuseまたはrequireされているか判定するメソッド)の実装ってどうなってんだー、あんまりパフォーマンスに影響与えないよなぁとか気になって見てみたら
my ($class, $name) = @_;
# Handle by far the two most common cases
# This is very fast and handles 99% of cases.
return 1 if defined ${"${name}::VERSION"};
return 1 if defined @{"${name}::ISA"};
# Are there any symbol table entries other than other namespaces
foreach ( keys %{"${name}::"} ) {
next if substr($_, -2, 2) eq '::';
return 1 if defined &{"${name}::$_"};
}
# No functions, and it doesn't have a version, and isn't anything.
# As an absolute last resort, check for an entry in %INC
my $filename = $class->_inc_filename($name);
return 1 if defined $INC{$filename};
'';
って感じになっててなるほど、って思いました。PACKAGE::VERSIONってどのモジュールでも大抵定義されているので、基本的にはこれで判定できますね。というわけで速度的にも問題なさそうで一安心。
2006-11-03 [長年日記]
@ [linux] pgrep, pkill を使用してプロセスを殺す
僕はkillall派でした。killallだと同じプロセス名のものは全滅しちゃいますが。
2006-11-20 [長年日記]
@ [pc] メインマシンのディスクが...
享年2年と2ヶ月ぐらいでお亡くなりになりました。幸いにも直前に必要なデータだけバックアップしておいたのでダメージはないのですが、OSインストールし直しなのがちょっと痛い。本当はHDDだけ交換しようと思ったのですが、どうせOSも入れ直すことだしこの際Athlon X2にCPUもアップグレードすることにしました。
んで、秋葉原で色々物色していたのですが、どうもSocket AM2のタイプはメモリがDDR2オンリーみたいなので、時代に逆行して全体的なコストが低くなる(DDR1のメモリもそのまま使える)Socket939のAthlon X2 3800+買いました。
ちなみにCore Duo2の一番やっすいやつが23,000円ぐらいで売られていて(TDPも65W!)、よっぽどインテルに魂売り渡そうかと思いました。。。
というわけで今新しいマシンからこの日記更新してますが、オンボードのグラフィック(SiS741)使っているとなんか画面が乱れるんですよね。というわけで只今グラボ注文中。やっぱりHDDだけ交換すればよかったかも。
2006-11-24 [長年日記]
@ [cpan] CGI::Session::Driver::memcached_mysql
CGI::Session::Driver::memcachedの続編ということで、CGI::Session::Driver::memcached_mysql というものを作ってみました。
Memcachedは格納できるデータ量をオーバするとどんどん消えていってしまうので、データの存続を保証するためのストレージとしてMemcachedだけではなくMySQLにも書き込みを行うCGI::Sessionのストレージドライバーです。
- データの書き込みは常にMemcached + MySQLに
- 読み込みはまずは Memcached から、Memcachedから取れなければMySQLから
という感じの動作になります。したがってReadが多い場合にはCGI::Session::Driver::mysql単品よりも高速になるんではないかと思います。
先ほどCPANにアップしましたが、ダウンロードしてみたい方はこちらからもいけます。
2006-11-25 [長年日記]
@ [linux] メインマシンその後
オンボードのVGA(SiS761)が腐っていたので、nVidia GeForce 7300 LEのチップを積んだ安いビデオカードを購入して、マシンとしてはこんな構成になりました。
CPU: AthronX2 3800+ マザー: MSI 761GM2-V MEM: PC3200 1.0GB + 512MB HDD1: ST3160812A 160GB HDD2: Seagateの160GB(SATA) ビデオ: AsusのnVidia GeForce 7300 LEチップ
で、ビデオカードはetchのxorg-7.1でもなぜか認識してくれなかったので、ここを参考に自前でnvidiaのカーネルモジュールをコンパイルしたらばっちりうまくいきました。ちなみにLinuxの構成としてはこんな感じ。
dist: Debian etch kernel: 2.6.18-2-k7 #1 SMP X: xorg 7.1 desktop: KDE 3.5 font: VL gothic
一回KDEではなくGNOMEも試してみたのですが、以下の点がどうにも気に入らなかったのでKDEに戻しました。といっても実際に立ち上げているアプリはGTK使ったものばっかりなんですが、統合環境としてみた場合KDEの方がかゆい所に手が届いていると思います。
- セッションを記憶してくれる機能がない(と思われる)
- KDEと比べてりもっさり感がある
- Nautilusが使いにくい
ちなみにKDEからGTKアプリのフォントとかを設定するために、gtk2-engines-gtk-qtというパッケージを使っています。これをインストールすると[コントロールセンター]->[外観&テーマ]->[GTK styles and Fonts]でGTKのフォントやテーマを選択できるようになります。
前のマシンは初代Athlonn64 2800+だったのですが、体感比で1.5倍ぐらい速くなった気がします。特にFirefoxなどのアプリの起動が異様に速い。さらにマルチコアなのでVMwared何かタスク動かしながら、Webブラウズなんてことをしててもストレスがありません。というわけでTDPが89Wなのがちょっと地球に優しくない点を除けばかなりいい構成です。
2006-11-26 [長年日記]
@ [zsh] TABキーでの自動補完をやめたい
zshはパスを入力する際にTABキーを押すとデフォルトで候補のものを順番に補完していってくれます。例えば /usr/lib まで入力している状態でTABを押すと lib/ libexec/ が補間リストに表示されてTABを押すと lib/ -> libexec/ の順番で補完されます。
このbashと微妙に異なる挙動がストレス(bashで作業せざるをえない場合もあるので)だったのですが、これは下記の設定でOFFにすることが出来るようです。
setopt no_auto_menu
というわけでこれでzsh、bashが混在なところでも比較的健全な精神で作業できるようになりました。
2006-11-27 [長年日記]
@ [zsh] zshでsvnのエラー
_svn_command:5: bad set of key/value pairs for associative array
会社でzsh使い始めたらこんなエラーが...svnコマンドが出力するメッセージに日本語が含まれていることが原因らしいので、下記を~/.zshenvにセットして回避しました。でもこれ家のマシンでは出ないんですよね。なんでだろう。。。
export LC_COLLATE=ja_JP.eucJP export LC_CTYPE=ja_JP.eucJP export LC_MESSAGES=C export LC_MONETARY=ja_JP.eucJP export LC_NUMERIC=ja_JP.eucJP export LC_TIME=C
2006-11-30 [長年日記]
@ [etc] DNS逆引きチェックによるスパム対策は百害あって一利無し
最近まさにこれが原因でトラブルがあったのですが、こういう設定をしている人や会社も多くいるのが現状です。何かしらのサービスを提供する側としては、SPAM扱いされるのは心外なので、逆引きの設定が出来るのであれば正しく設定するべきだと思いました。
# ホントは相手のせいにしたいけど...