C でプログラムを書く必要に迫られた。
DLL を書くのだ。Win32 と C (or C++) と JNI と Java Applet を同時に扱える人間は、世の中にはそうそういないらしい。
でもって、デバッグログは楽をしたい。うまいことやるには、__FILE__ (ソースファイル名)、__LINE__ (ソースファイル内の行番号) はもちろんだが、以下が参考になるはずじゃ。
C99 ってので、__func__ てのがあって、関数のスコープ中ではその関数の関数名が入っているらしい。
でもって、Microsoft C/C++ の場合は、__FUNCTION__ だそうな。
あとは、可変長リストのマクロ __VA_ARGS__ があるとらくちんなのだが。
1週間、発見されず。諦めて機種変更。
本当は、もとのモデルがよかったのであるが、残念ながら存在せず。かつ、上位機種も在庫ナシ。しかたなく、在庫機種にて選択…
いわゆるディグレード。
- 画面解像度、低下
- 赤外線通信、なし
- 物理サイズ、増大
そもそも、数年分のメモリが消えてしまった時点で、もはやどうしようもないのだが…
"これ以上、受信フォルダを汚されてなるものか!!" と宣言したころ、既に対策は取られていて、POPFile というのを導入していた。
こいつは、「自動メール振り分けツール」であり、いわゆる「ベイズ理論による仕分けソフト」である。学習によって、メールをカテゴリ分けしてくれる。これを夏の頃から飼っていて、半年かけて教育 (メールを受信するたびに、手動で振り分けを行う。そのうち、自動的に振り分けをするようになる。間違っていれば正してやる) していたが、3ヶ月くらいで spam 判定は間違わなくなった。ちなみにウチでは、spam と判断されるメールは、カテゴリ "spam" に放り込まれる運命である。
問題は、こいつはカテゴリ分けしかしないことで、あとの振り分け (ゴミ箱行き、とか、即削除、など) は、メールソフトに依存している。でもって、カテゴリ分けされたメールに対して付けられる識別子は、基本的に、「件名の変更」か「X-Text-Classification ヘッダー」だけなのである。
残念ながら、僕の使用しているメールソフトは、任意のヘッダを、フォルダ振り分けのルールに使用できない。本格的に POPFile による振り分けを有効化する方法はふたつ。ひとつは件名を変更すること、もうひとつはメールソフトを変えること、である。
前者は、嫌である。POPFile とて万能ではない。ときに間違いも起こす。「パーティのお知らせ」という Subject が、「[spam] パーティのお知らせ」となるのは耐えられぬ。後者も、現実的ではない。慣れもあるし、現状、このソフトに不満はないのだ。
しかたない(?)ので、改造することにした。POPFile のメイン部分は、Perl で書かれている。ということは、読めばなんとかなるということだ。
- 目的
- 現在のメールソフトで、POPFile のカテゴリ分けを有効に利用する。
- 要件
- 現在のメールソフトで制御可能なヘッダを、カテゴリ分けの際に付与する。
- 検討
- 現行のメールソフトで使用できるヘッダは、From:, To:, Cc:, X-Priority: など
- 実際に来るメールに含まれている可能性のあるヘッダで、その値の選択肢の少ないもの (X-Priority) は使用できない。
- 残るは、From, To, Cc だが、To と Cc は、通常、複数になり得るため、このヘッダを使用すると、いざというときの目視による区別が面倒である
- というわけで From でいく。From であれば、通常は単一であるため、目視による区別が容易であると判断した。(ちなみに、From ヘッダは複数の使用が可能であるらしい。もしかしたら、解釈誤りがあるかもしれないが…)
- 結論
- 改造として、X-Text-Classification をつける状況において、From: にカテゴリ名をつけてしまおう。
以上により、改造したのは、Classifier/Bayes.pm である。以下、記録 (v0.21.2 に対する diff -c; ちなみに、本日時点での最新版は、v0.22.2 [2004/12/17] である)。
導入より、ひと月。なかなか調子がよい。「From: spam@POPFile」で来たメールは、即、開封済の扱いで、spam フォルダへ放り込みである。