ハングアップの日々

2006年 8月分

2006/08/31

bregonig.dll

 サクラエディタで bregonig.dll が落ちることがあることに気付いた。マルチスレッド絡みのバグのような気がするが、詳細ははっきり分からない。根本的な対策には時間がかかりそうなので、とりあえず onig_search() の呼び出しを __try ブロックで囲むという対処療法を施しておいた。

2006/08/29

bregonig.dll

 BTrans() 関連のファイルを bregexp.dll から移植。\b, \v を使えるようにしたのとエラー処理の部分にちょっと手を加えたが、それ以外はほとんどそのまま。プログラムの中身はまったく理解していない。

2006/08/28

bregonig.dll

 bsplit.cc を持ってきてちょっと手を加えたら、あっさり BSplit() が実装できた。

2006/08/24

bregonig.dll

 鬼車を使った bregexp.dll 互換 DLL を bregonig.dll として公開。K2EditorJmEditor2 では使われていない、BSplit(), BTrans(), VB 用 API はまだ実装していない。自分が使う分には BMatch(), BSubst() が動けば満足であるので、残りの実装はかなり後回しになりそうである。当分は BMatch() と BSubst() のバグ出し・安定化をやるつもり。
 Perl のライセンス (Artistic License) が良く理解できていない。bregonig.dll のライセンスはこれで大丈夫だろうか?

2006/08/20

bregexp.dll、鬼車

 2ch の某所で、bregexp.dll を使っているアプリで (?<!式) を使いたいという書き込みを見た。早く、鬼車を使った bregexp.dll 互換 DLL に BSubst() を実装するかな。(本当は帰省中に作ろうと思っていたのだが。) bregexp.dll の bsubst.cc にちょっと手を加えて、自分の互換 DLL に組み込むのが手っ取り早そうだ。

 他にも帰省中に作ろうと思っていたプログラムがいくつかあるが、それらは当分後回しかな。

2006/08/14

Let's note

 Let's note CF-R2C がまた死亡。帰省の新幹線の中で CF-R2C を起動しようとしたら、起動中に BoD が出て起動しなくなってしまった。
 データのバックアップはあるので、クリーンインストールしなおそうとしたのだが、BIOS 画面に、再セットアップのための項目が出てこない。HDD の交換時に、HDD をまるごとコピーしただけではダメだったのだろうか。

 帰省中は CF-R2C でいくつかプログラムを作ったり、ためてあった番組を見たりしようと思っていたのだが、これでは何もすることがない。帰省は3日ぐらいで切り上げてさっさと戻ることにするか。

2006/08/13

データ整理

 帰省する前に、Core Duo マシンのデータ整理。撮りためてあった番組で HDD が狭くなってきたので、がんがんエンコードして、見終わったものは DVD に焼いた。

 まだ見ていない番組を帰省中にでも見ようと思い、Let's note にコピー。一気に 30GB 近くのデータをコピーしたので、HDD に負担がかかったのではないかと少し心配。休止状態からの復帰に一度失敗したのがちょっと気になる。

2006/08/12

Thunderbird

 自宅のメーラーを SeaMonkey から Thunderbird に移行することにした。まず、このところメール読み用マシンとして使っていた st6e に Thunderbird をインストール。インストール時に、メールのデータを SeaMonkey から Thunderbird にインポート。インポートしたデータを今度は Let's note にコピー。ようやく、帰省中に Let's note でメールを読める環境が整った。

2006/08/10

VC6, new

 VC6 における new 演算子の挙動についてもう少し調査。_set_new_handler() でセットしたはずのハンドラが呼び出されない件は、iostream ヘッダとの兼ね合いが原因のようだ。iostream を使って結果を表示していた部分を、printf() を使って表示するように書き換えたところ、無事にハンドラが呼び出されるようになり、std::bad_alloc を投げることができるようになった。しかしややこしすぎる。そろそろ VC6 には見切りを付けるべきか。

2006/08/09

Oniguruma

 Oniguruma 関連の情報を収集。やる気向上作戦: OnigPP に Oniguruma の C++ ラッパーがある。さらに Oniguruma をスレッドセーフ(マルチスレッド対応)になるようにコンパイルする際に必要な変更点も書いてある。
 せっかくなのでスレッドセーフにするためのパッチを diff 形式で作ってみた。Oniguruma バージョンアップの際の対応が楽になるはず。(onig-4.2.2-mt.diff)

C++, new

 C++ の new 演算子について調査。

 VC6 は new 演算子の実装が古い。現在の規格では、メモリ確保に失敗すると例外が発生する(std::bad_alloc が throw される)が、VC6 では 0 (NULL) が返される。VC7 以降は std::bad_alloc に対応している。VC6 でも例外を発生させるようにするには、_set_new_handler() でハンドラを設定する。逆に現在の規格に対応したコンパイラで、0 を返すようにしたい場合は、new (std::nothrow) でメモリを確保すればよい。
 MFC を使っている場合は、std::bad_alloc ではなく、CMemoryException* が投げられる。

 早速、VC6 で _set_new_handler() を使って std::bad_alloc を投げる方法を試してみたのだが、どうもうまくいかない。MFC を使っているわけでもないのに、new char[0x7fffffff] などとした場合に、ハンドラが呼ばれないのである。一方で new (std::nothrow) char[0x7fffffff] とした場合には、まともにハンドラが呼び出されている。謎だ。

2006/08/05

買い物

 USB 接続 SD/miniSD リーダー \980。ATX 電源動作確認用基板 \980。電源コネクタ x3 \240。雑誌 2冊 (Interface 9月号, ASCII 8月号)。
 USB 接続の SD/miniSD リーダーは2個目。以前買ったエレコムの MR-GU2S04SV は、少々幅があるせいでパソコンに挿そうとしたときに周りと干渉する場合があった。しかも付属の延長ケーブルが断線してしまって、ちょっと不便だった。今日買ったのは、プリンストンの PRD-SDMN3BK。MR-GU2S04SV よりも細くて周りに干渉しにくい。レザータッチなのも気に入った。残念ながら SDHC には対応していないようだ。(当分必要は無さそうだが。)

2006/08/03

bregexp.dll、鬼車

 Windows 用で日本語 (Shift_JIS) 対応の正規表現ライブラリとしては bregexp.dll が有名で、いくつものフリーソフトで使われているが、対応している正規表現が少々古く、(?<=式), (?<!式) などが使えないのが以前から不満に思っていた。何とかしたいと思い、少し前からいろいろと調査。
 bregexp.dll は Perl5 のかなり初期のバージョンから、正規表現部分のソースを抜き出し、それを日本語に対応させて作られたものらしい。Perl 5.6 や Perl 5.8 のソースを見てみたが、正規表現の部分はかなり変更されているようで、その変更を bregexp.dll に反映させるのはかなり困難な雰囲気。
 他の正規表現ライブラリも調査。Perl 互換の正規表現ライブラリとして PCRE というものがあるが、マルチバイト文字列は UTF-8 しか扱えないらしい。
 Ruby の正規表現エンジンとして採用された鬼車 (Oniguruma) は、Shift_JIS にも対応している。しかし、実装されているのは、検索・マッチ処理だけで、置換処理は自前で実装する必要がある。
 いろいろ調べてみたが、鬼車を使って bregexp.dll 互換の DLL を作るのが一番良さそうな気がする。

 とりあえず、鬼車を使って BMatch() だけ実装してみた。さらにちょっと手を加えて、K2Regexp.dll 互換 API にして、K2Editor から呼び出してみたところ、検索機能だけはまともに動いているように見える。あとは、置換機能 BSubst() をどうするかが問題である。BTrans(), BSplit() と Visual Basic 用 API に関しては、使っているソフトはかなり少ないようなので、後回し。

2006/08/01

spam

 先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 1674通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 8通(0.6%)。誤削除が数通。

メール受信状況 2006/07


Copyright (C) 2006 K.Takata