2000年6月のエントリ

namazu をインストール。まず UNIX でのインストールだが,namazu や kakasi が最初から入ってたので,インデックスを作成して .namazurc を書いてすぐに完了。この日記が検索できるようになった。バンザイ。

おまけで Win98 にもインストール。Perl はセットアップされていたので nkf,kakasi,namazu をインストールし,インデックスを作成。…のはずだが,起動しない。Perl のライブラリでエラーが出る。なんかライブラリのバージョンと Perl 本体のバージョンが違うとか何とか。ウーン,とか数十分かかって原因判明。他のソフトに Perl.exe ってのが入ってた。しかも古いバージョンで,パスが最新版より前に入っていたので,そっちが読まれたらしい。

てな感じでローカルでも(コンソールで)検索できたが,次は HTTPD で,ってやってみたが,namazu ではなく namazu.cgi で起動しろ,とか言われた。とりあえず保留に。

でも kakasi の形態素分析とか namazu の全文検索とかこれがフリーで公開されてるってのはスゴイですな。

CGI。あるサーバーでテスト的な CGI を動かそうとするが,Internal Server Error となる。Apache のエラーログには,premature end of script headers とある。

で,web でいろいろ調べたところ,Apache のセキュリティ機能が強化され,実行権限がユーザー権限になり,さらにパーミッション的に危険な CGI が実行できないようになったらしい。

#って実は今更な話なのかな?

というわけで CGIスクリプト を置くディレクトリを 755,CGIスクリプト を 544,書き込むファイルを 644 とすることで実行された。

パーミッションが足りない,ってのは分かりやすいけどパーミッションが多すぎる,ってのはなかなか気付きませんね。

メモリリーク。

AAA *p = NULL;

try
{
    AAA *p = new AAA;

    // 例外を throw する関数呼び出し
    func_with_exception();

    delete p;
}
catch(exception &)
{
    if(p != NULL)
    {
        delete p
    }
}

つまり p というポインタを例外ハンドラで削除しようということだが,p が try ブロックで再定義されている。ので,例外ハンドラで delete しようとする p は当然外の p なので,必ず NULL って感じで。2 日くらい気付かなかった。

VC のデバッガのクイックウォッチ等に独自文字列を入れる方法。

例えば CString では中身の文字列が,CPoint では x と y が表示されるが,これらは実は visual studio ディレクトリ内にある autoexp.dat に指定されている。ヘルプにも載っているが,これを編集すれば自分で作ったクラス等で好きな文字列を表示させられる。

これが java だったら toString メソッドを実行させて表示,とかもっときれいにできるんだろうなぁ。

ダイアログ内でのエディットボックスでの改行。そのままだとリターンが押された時点でデフォルトボタンが押されてしまうので,エディットボックスプロパティの [スタイル]-[改行を許可] をチェック。

ユーザー定義メッセージの作り方

  1. メッセージを必要とするクラスに const static UINT のメッセージ用メンバ変数を用意。
  2. メッセージ番号を ::RegisterWindowMessage(“XXX”); で初期化。
  3. LRESULT OnXXX(WPARAM wParam, LPARAM lParam); を .h のメッセージマップに追加。
  4. ON_REGISTERED_MESSAGE(XXX, OnFilterStart); を .cpp のメッセージマップに追加。

EUC 用漢字 1 バイト目 2 バイト目認識。

iskanji1(unsigned int c)
{
    return (c >= 0xa1 && c <= 0xfe);
}
iskanji2(unsigned int c)
{
    return (c >= 0xa1 && c <= 0xfe);
}

と書いていたが,これだと半角カナがきたときに,SS2 の次のバイトを漢字 1 バイト目だと認識してしまう。とりあえず SS2 を漢字 1 バイト目だと認識するように修正。