« 2005年01月07日 | メイン | 2005年01月09日 »

2005年01月08日

AN HTTP が頻繁に落ちる

予備サーバ(Windows Server)にて AN HTTPD を動かして、ウェブサーバを構築しているわけですが、よくダウンしておる。

マシン全体ではなく、ウェブサーバのみ。要は AN HTTPD がよく止まっておる。なーんとなく、メモリリークを起こしているような気がしないでもない。使用メモリが 160MB となになってるし。

もう少しの辛抱だけど。

AN HTTPD 単体の問題というよりは、どっちかっつーと ActivePerl との連携の問題なような気もする。

【関連情報】
・AN HTTP Server Home Page
 http://www.st.rim.or.jp/~nakata/

23:25 | コメント (0) | トラックバック | Technology

Encode と Unicode::Japanese

昨年の半ばから、日本語変換には Unicode::Japanese を使っていたわけですが、よく考えると、単純に UTF-8 EUC SJIS 間の変換にしか使わないので、標準モジュール(Perl 5.8)である Encode を使うことにした。

自分の環境や使い方では、なんと Unicode::Japanese より Encode の方が、だいたい 10分の1 の CPU時間 で処理できることがわかった。

ただ、問題が無い事も無く、文字コードを判定して変換するのが上手く行かない場合が結構多い。

use Encode;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;

Encode::from_to($value, 'Guess', 'euc-jp');

こんな風に書けば、一般的には文字コードを判定して変換することができる(ほにゃららを EUC に変換する例)。そもそも from_to 単体でサポートして欲しいところなんだけど。

問題があって、自動認識に失敗すると CGI 全体で 500 エラー を吐き出しやがります。

というのは、上記のをもっとばらばらに書くと

$guess = Encode::Guess::guess_encoding($value);
Encode::from_to($value, $guess->name, 'euc-jp');

といった風になるのですが、文字コード判定に失敗すると $guess にオブジェクトとではなく、普通のテキストが入るんですよねorz

$guess = Encode::Guess::guess_encoding($value);
if (ref $guess && $guess->name ne 'euc-jp') {
    Encode::from_to($value, $guess->name, 'euc-jp');
}

こんな風に書いて解決しました。文字コードの取得に失敗したら変換しないということで。

Encode の仕様というかバグなんじゃないのか?これは。

あと、変換が

$length = Encode::from_to($value, $before, $after);

これしか無くって、渡した $value がもれなく変換されるのもちょっと嫌。他の関数に、変換した値だけ($value 自体はそのまま)を渡したいときもあるんだけど。というか、これに1時間くらいはまった。

17:10 | コメント (0) | トラックバック | Programming

もうむりです

生活改善の望みは薄い。ということで、昨日(7日)の食事内容です。

昼は、残り物と思われるおでんを食べた。大根がいい感じになってたので、たくさん食べる。

夜は、こっそりカップラーメンを買ってきた。カレー味。

実家 (昼)
 おでん
実家 (夜)
 カレーヌードル

06:15 | コメント (0) | トラックバック | Meal