Hacking mozilla
戻る

新規投稿 日付順表示 ツリー順表示 [スレッド順表示]


(70) メールが消えました by きよ at 2005/01/30 07:27:54 レス投稿

AVG7.0(ウィルスチェック)のスキャンが走行している間に800通ぐらいのジャンクメールをスパムフィルタに食わせて、確認していたところ、数百通の単位でメールを失いました。
これは危ないなと思いながら実行したので ほぼ確信犯的な行為だったのですが。

この後、バックアップから持ってきた2600通のジャンクメールで同じことをやりながらWindows Media Playerで動画を再生しているときに実行していたら、今度は1000通ほどのメールを失いました。
この現象はオリジナルの1.0とjunnno'版の両方で起こりました。Thunderbirdって、スパムフィルタの動作以前にファイルアクセスについて問題がありそうですね。
消えたタイミングは「迷惑メールとマークされたメールを削除」です。
ただし、通常はこのテストのように何千通もジャンクメールを食わすことは無かったし、今までにこのような現象に遭遇したことはないと思います。760通ほどのジャンクメールで試していたときは何度繰り返しても問題は有りませんでした。

#1000通を超えるメールの処理には気をつけようっと

どちらにしても、junnno'版のベイジアンフィルタ自体の効果は確認しました。これが正規版に組み込まれると嬉しいです。漢字仮名混じりの単語でトークンが登録されると もっと嬉しいです。

(71) Re: メールが消えました by junnno' at 2005/01/30 13:38:00 レス投稿

> AVG7.0(ウィルスチェック)のスキャンが走行している間に800通ぐらいのジャンクメールをスパムフィルタに食わせて、確認していたところ、数百通の単位でメールを失いました。

ご愁傷様です。

Thunderbirdは確かにまだバグだらけみたいです。
リリース版でも、デバッグビルドすると、起動して画面が出るまでASSERTを何度も吐きながら動きます。
怖くてしょうがないです。

私はまだThunderbirdでは無いですが、1年ぐらい前のMozilla mailでデータが消えたことがあります。

メールを移動している最中に何かすると危険なようです。

メールの移動はやたらと時間がかかるところ、不安になって強制終了すると大体データがどこかに消えます。
データベース的なところはちゃんと実装して欲しい。

> どちらにしても、junnno'版のベイジアンフィルタ自体の効果は確認しました。これが正規版に組み込まれると嬉しいです。漢字仮名混じりの単語でトークンが登録されると もっと嬉しいです。

色々やってきた所では、「日本語と英語のメールを別々に扱う」というのが一番効果が高い方策のようです。
次に、subjectのMIMEデコード。
が、これを正規版に組み込むことを納得させるだけの実績と実装がいるので躊躇しているところです。

漢字かな混じりの単語でトークン登録するのは、微妙なところです。とにかくEffect is everythingです。処理を複雑にするのは速度面でよくないでしょうし、またそれで効果がどれだけ上がるかということについて、不明です。

まあ、やってみないと分からない、のですが。

(72) Re: メールが消えました by きよ at 2005/01/30 16:20:29 レス投稿

> Thunderbirdは確かにまだバグだらけみたいです。
> リリース版でも、デバッグビルドすると、起動して画面が出るまでASSERTを何度も吐きながら動きます。
> 怖くてしょうがないです。
ASSERT吐き出してますか。私はopen sourceのもので自分でビルドしてまともに動いたことがないので一切自分でビルドするのはやめました。
Thunderbirdに関しては ただのユーザーであると同時に「使うためにはバグをどう回避するか」という点だけに注意しています。

> メールの移動はやたらと時間がかかるところ、不安になって強制終了すると大体データがどこかに消えます。
これ、知らずに一回やりましたが、その時は消えませんでした。
ソースがunixと共通だとしたら、Windows特有のお約束である「ファイルアクセスのエラーリトライ」を上手くやっていないのかも知れないっていう気がします。
業務プログラムではopenからclose・次のプロセスでのopenまで、Windowsのバッファ書き込みとclose処理が間に合わないことが多いので、必ずアプリでリトライを行わないと、プロセス間でのファイル受け渡しによく失敗します。(500msec以下の処理が出来ないっていうやつとか、CPUオーバーロード気味のときの処理取りこぼしなど。CPUの処理が速いほど顕著)
またThunderbirdに関しては観察している限りファイルの排他制御がぜんぜん上手くなような気がします。(表示されるダイアログは排他制御の順番待ちではなく、単にファイルアクセスエラーのタイミングで出ているような気がします)
ファイル破壊に関しては おそらく、Linux版などunix系では起こらない不具合だと思います。


> 色々やってきた所では、「日本語と英語のメールを別々に扱う」というのが一番効果が高い方策のようです。
> 次に、subjectのMIMEデコード。
> が、これを正規版に組み込むことを納得させるだけの実績と実装がいるので躊躇しているところです。
日本語と英語を別々に扱う件はオプションスイッチでユーザーが選択できるように、また日本語と限定せずに「マルチバイト文字とASCIIなどを別々に扱うオプション」として実装を主張できれば良いかも知れません。
SubjectをMIMEデコード後に走査する件は、「ジャンクを作成したタイミングのソースはエンコード前の状態であるからデコードしてから走査するのが自然である」ということを主張するしかないのでしょうか。これも、オプションスイッチで「MIMEデコード後にヘッダ内を走査」とか選択肢をユーザーに認識させて、速度低下に対する認識の保険が必要なように思います。

# でも現行の方式でヘッダ込みで無理やりジャンクに特定できるのも捨てがたいです。(意図した機能でないとしても)
これは相手のメールアドレスを「アドレス帳に登録済みはジャンクとしない」という機能と同様にEudoraのベイジアン・フィルタと同じように「登録アドレスはジャンクとして扱う」という機能が有れば便利です。
また、メッセージフィルタの方と自然に連携できる仕組みも必要だと思います。(今は一発で出来ない)


> 漢字かな混じりの単語でトークン登録するのは、微妙なところです。とにかくEffect is everythingです。処理を複雑にするのは速度面でよくないでしょうし、またそれで効果がどれだけ上がるかということについて、不明です。
これは、ジャンクフィルタ機能にもextensionが利用出来るような仕組みを作っておいて、後で追加するという方法をとればThundebirdの本体(再ビルドやビルド対象ソースのことなど)を気にせずに開発できるようになるかも知れませんね。(つまりトークンの解析機能を外出ししておけば今まで通りの機能でよいか、漢字仮名混じりのトークンが必要かをユーザーが選択できる、とか)

(73) Re: メールが消えました by junnno' at 2005/01/31 05:11:24 レス投稿

> 業務プログラムではopenからclose・次のプロセスでのopenまで、Windowsのバッファ書き込みとclose処理が間に合わないことが多いので、必ずアプリでリトライを行わないと、プロセス間でのファイル受け渡しによく失敗します。(500msec以下の処理が出来ないっていうやつとか、CPUオーバーロード気味のときの処理取りこぼしなど。CPUの処理が速いほど顕著)

CreateMutexとWaitForSingleObjectでは駄目なんでしょうか。

(75) Re: メールが消えました by junnno' at 2005/01/31 08:55:17 レス投稿

> マルチバイト文字とASCIIなどを別々に扱う

この提案の仕方は良いですね。

言語に関わらず統一的に分解できれば一番いいのですが。
実は現在のtokenizerはUCS2をUTF8に変換し、strtokで分解しています。やめてくれー。
で、マルチバイト文字が出てきたらそれをUCS2に変換してi18n scannerで分解し、さらにUTF8に変換して辞書に載せるという…。やめてくれー。

> SubjectをMIMEデコード後に走査する件は、「ジャンクを作成したタイミングのソースはエンコード前の状態であるからデコードしてから走査するのが自然である」ということを主張するしかないのでしょうか。これも、オプションスイッチで「MIMEデコード後にヘッダ内を走査」とか選択肢をユーザーに認識させて、速度低下に対する認識の保険が必要なように思います。

これは問題にはならなさそうですね。MIMEデコードのオーバーヘッドなんてのはたかが知れてるので。ほとんどの場合、メール一通につき一回通るだけでしょうし。

> # でも現行の方式でヘッダ込みで無理やりジャンクに特定できるのも捨てがたいです。(意図した機能でないとしても)
> これは相手のメールアドレスを「アドレス帳に登録済みはジャンクとしない」という機能と同様にEudoraのベイジアン・フィルタと同じように「登録アドレスはジャンクとして扱う」という機能が有れば便利です。

これはやっぱり、トークンの賞味期限を設定する必要がありますね。
ヘッダも何も、区別せずに全部受け入れて、使われなくなった古いのは捨てる、というアプローチは単純でエレガントだと思います。
training.datの互換性がなくなりますけど。

> また、メッセージフィルタの方と自然に連携できる仕組みも必要だと思います。(今は一発で出来ない)

連携というのは具体的にどういう機能でしょうか。
メッセージフィルタで分類して、同時にジャンク・非ジャンクに学習させるとか?

個人的には、ジャンク・非ジャンクの学習数はなるべく少ないほうがうまく動くような気がしています。数よりも、種類が大事なのかな。いろいろ学習させる。
初期に少数のメールで学習した後、失敗したやつだけ再学習させていく程度のほうが、最終的にはうまくいくような気がします。

> これは、ジャンクフィルタ機能にもextensionが利用出来るような仕組みを作っておいて、後で追加するという方法をとればThundebirdの本体(再ビルドやビルド対象ソースのことなど)を気にせずに開発できるようになるかも知れませんね。(つまりトークンの解析機能を外出ししておけば今まで通りの機能でよいか、漢字仮名混じりのトークンが必要かをユーザーが選択できる、とか)

そうですね。同じことを考えてました。
辞書に単語を登録するインタフェイス、メッセージのトークン化を依頼するインタフェイスを露出させておいて、JavaScript側でトークン分離の処理をするという。
でも、XPCOMインタフェイスの書き方がよく判らないのと、Javascriptでは満足な速度が得られないであろうこと、色々選択肢があっても最終的に必要なのはベストの一つになるはず、と思ったので、これは断念しました。

(76) Re: メールが消えました by きよ at 2005/01/31 17:45:16 レス投稿

> CreateMutexとWaitForSingleObjectでは駄目なんでしょうか。
Mutexを使っているなら排他制御の方は問題なさそうなんですね。やっぱりファイルアクセスエラーの問題で不具合が発生するんでしょうかねぇ。
でもこの問題はエラー発生時に15回ぐらいリトライを行えば正常復帰するはずなので...やっているとは思うんですがねぇ。

Thunderbirdのフォーラムでも時々メールが消えたとか書いてありますが、みんな同じところが原因の障害のような気がします。メールの移行に時間がかかり過ぎるのでユーザーは他の事をしたりしてCPUに負荷がかかるのかも。

(77) Re: メールが消えました by きよ at 2005/01/31 17:46:10 レス投稿

> 実は現在のtokenizerはUCS2をUTF8に変換し、strtokで分解しています。やめてくれー。
> で、マルチバイト文字が出てきたらそれをUCS2に変換してi18n scannerで分解し、さらにUTF8に変換して辞書に載せるという…。やめてくれー。
なんか複雑そうですね、さっぱりわかりません (^^;)
それって、microsoftの関数を使いたくないからなんでしょうか


> これは問題にはならなさそうですね。MIMEデコードのオーバーヘッドなんてのはたかが知れてるので。ほとんどの場合、メール一通につき一回通るだけでしょうし。
まぁ、from:、To:、Subject: ぐらいですかね


> これはやっぱり、トークンの賞味期限を設定する必要がありますね。
> ヘッダも何も、区別せずに全部受け入れて、使われなくなった古いのは捨てる、というアプローチは単純でエレガントだと思います。
これはどこかに書いてあった 登録日付と最終参照日なども辞書に置いておく方式でしょうか。ヘッダと本文を区別しないっていうのは良い感じがします。


> > また、メッセージフィルタの方と自然に連携できる仕組みも必要だと思います。(今は一発で出来ない)
>
> 連携というのは具体的にどういう機能でしょうか。
> メッセージフィルタで分類して、同時にジャンク・非ジャンクに学習させるとか?
そうですね、
現状はメッセージフィルタでジャンクフラグは立てることは出来るんです。しかし、ジャンクフィルタが処理できるタイミングではなくなるので、ジャンクメールボックスに移動させたい設定にしていても移動できないんです。(mailnews.ui.junk.firstuseの設定で実行タイミングを変えられますが弊害も多い。"メッセージフィルタの前と後両方で実行"っていうのが有れば...)
メッセージフィルタでジャンクフラグを立てたときにはtraining.datに登録してほしいんです。
(やっているのかもしれないけど、そうは見えない)

メッセージフィルタで処理してジャンク扱いしたときは、メッセージフィルタの条件に指定した項目をトークンとして登録されるようになれば良いのかな。
# こういう機能を追加すればトークンを制御出来るような気がします (非ジャンク扱いも)


> 個人的には、ジャンク・非ジャンクの学習数はなるべく少ないほうがうまく動くような気がしています。数よりも、種類が大事なのかな。いろいろ学習させる。
> 初期に少数のメールで学習した後、失敗したやつだけ再学習させていく程度のほうが、最終的にはうまくいくような気がします。
私もそういう気がしています。結局2MB程度の小さなtraining.datでうまく行っているんです。


> 辞書に単語を登録するインタフェイス、メッセージのトークン化を依頼するインタフェイスを露出させておいて、JavaScript側でトークン分離の処理をするという。
> でも、XPCOMインタフェイスの書き方がよく判らないのと、Javascriptでは満足な速度が得られないであろうこと、色々選択肢があっても最終的に必要なのはベストの一つになるはず、と思ったので、これは断念しました。
extension本体はc++で書いて なんでも出来るんじゃないんでしょうか。(って、言うだけなんですけど (^^;)
私はextensionにはまってしまうと危なそうなので近寄りませんが、性能を競う人も出てきたりすると結果的に良いものが残るんですよね。まずは環境を提供してほしいってところでしょうか。
extension自体はソースがオープンになっているものも有るので参考に出来るのかな。でもEnigmailのソースは読めませんでした。
# 私は「c」の一部分しかわかりません (^^;)

(78) Re: メールが消えました by junnno' at 2005/01/31 19:51:40 レス投稿

> > CreateMutexとWaitForSingleObjectでは駄目なんでしょうか。
> Mutexを使っているなら排他制御の方は問題なさそうなんですね。やっぱりファイルアクセスエラーの問題で不具合が発生するんでしょうかねぇ。
> でもこの問題はエラー発生時に15回ぐらいリトライを行えば正常復帰するはずなので...やっているとは思うんですがねぇ。

いえ、mozillaの話ではないです。

ファイルのアクセス権が得られるまで15回もリトライするというアプローチは、私個人の感想としては、どちらかというと異常に思えるんですけれども…。
CPUの速いPCだと実行速度は一桁でも変わるけど、HDDの速度なんてのはそんなに変わらないから、ファイルアクセスを伴うプログラムの場合はCPUの速度の違いによってタイミングの問題が生じる、とか、まさかそんなことで止まってもらってはいくらなんでも困る……というか、いろんな意味でありえない。

(79) Re: メールが消えました by junnno' at 2005/01/31 19:57:51 レス投稿

> メッセージフィルタでジャンクフラグを立てたときにはtraining.datに登録してほしいんです。
> (やっているのかもしれないけど、そうは見えない)

これは確かにやってないぽいですね。

> extension本体はc++で書いて なんでも出来るんじゃないんでしょうか。(って、言うだけなんですけど (^^;)
> 私はextensionにはまってしまうと危なそうなので近寄りませんが、性能を競う人も出てきたりすると結果的に良いものが残るんですよね。まずは環境を提供してほしいってところでしょうか。
> extension自体はソースがオープンになっているものも有るので参考に出来るのかな。でもEnigmailのソースは読めませんでした。
> # 私は「c」の一部分しかわかりません (^^;)

C++のコードが書ける人は最初からmozillaのコードを直接いじるんじゃないかと思っています。
でも確かに、性能を競う人が出るかもしれない、というところにはインタフェイス露出には大いに期待できるような気がします。javascriptで書けるようになれば、いろんな人がいろんなアプローチを簡単に試すことができるようになりますしね。

(80) Re: メールが消えました by 通りすがり at 2005/02/01 15:33:13 レス投稿

> C++のコードが書ける人は最初から
> mozillaのコードを直接いじるんじゃないかと思っています。

サンプリングが偏ってるだけかもしれませんが、
私が知ってる拡張作者は全員C++が書けます。
まあ、書けなくても問題ないかもしれませんが、
読めないのは致命的ですので。

(81) Re: メールが消えました by きよ at 2005/02/01 16:15:05 レス投稿

> いえ、mozillaの話ではないです。
あ。じゃぁスレッド間の排他制御はやってないんでしょうか...やってなければおかしくなっても仕方がないですね。じゃぁ、ちょっとだけ気をつけることにします。

> ファイルのアクセス権が得られるまで15回もリトライするというアプローチは、私個人の感想としては、どちらかというと異常に思えるんですけれども…。
> CPUの速いPCだと実行速度は一桁でも変わるけど、HDDの速度なんてのはそんなに変わらないから、ファイルアクセスを伴うプログラムの場合はCPUの速度の違いによってタイミングの問題が生じる、とか、まさかそんなことで止まってもらってはいくらなんでも困る……というか、いろんな意味でありえない。
そうですね。でもWindowsのファイル管理が異常です。っていうか低レベル。
(Windows上でGUI無しのアプリで固める方もおかしいんですけどね)

あ、アクセス権じゃなくて、openしようとしたら”ファイルが存在しない”です。
逆に、使い終わったファイルを別のアプリで削除しようとしたら”使用中”っていうのも有ります。

まぁ、この問題も特にスレッド間やプロセス間においてメモリを介してファイルパスを通知して別スレッド/プロセスでopenしようとするときに発生するので、一般的なマシンで通常のGUIアプリ操作では滅多に遭遇しない不具合でしょう。
いつもリトライは一応15回に設定していますが、最悪でも2・3回で正常終了します。

(82) Re: メールが消えました by junnno' at 2005/02/02 02:10:05 レス投稿

> サンプリングが偏ってるだけかもしれませんが、
> 私が知ってる拡張作者は全員C++が書けます。
> まあ、書けなくても問題ないかもしれませんが、
> 読めないのは致命的ですので。

mozillaの拡張って結構敷居が高いですしね。
ある程度のプログラム勘みたいなのが無いと出来ないのかも。

とにかく、ドキュメントが不整備。
概念的なところをわかりやすく説明するチュートリアルがあればいいと思うんだけどな。

(83) Re: メールが消えました by junnno' at 2005/02/02 02:24:09 レス投稿

> そうですね。でもWindowsのファイル管理が異常です。っていうか低レベル。
> (Windows上でGUI無しのアプリで固める方もおかしいんですけどね)
>
> あ、アクセス権じゃなくて、openしようとしたら”ファイルが存在しない”です。
> 逆に、使い終わったファイルを別のアプリで削除しようとしたら”使用中”っていうのも有ります。
>
> まぁ、この問題も特にスレッド間やプロセス間においてメモリを介してファイルパスを通知して別スレッド/プロセスでopenしようとするときに発生するので、一般的なマシンで通常のGUIアプリ操作では滅多に遭遇しない不具合でしょう。
> いつもリトライは一応15回に設定していますが、最悪でも2・3回で正常終了します。

うーん。
どうもその話だけを聞いていると、Windowsの問題というよりは、
純粋にアプリケーションのプログラムが下手いだけの問題のような気が……(^^;。
ちゃんと同期をとってないだけでは……。
Windowsがそもそも保証してない実行の優先順位を勝手に期待しているだけではないのかと……。

(84) Re: メールが消えました by きよ at 2005/02/02 15:19:04 レス投稿

> どうもその話だけを聞いていると、Windowsの問題というよりは、
> 純粋にアプリケーションのプログラムが下手いだけの問題のような気が……(^^;。
> ちゃんと同期をとってないだけでは……。
> Windowsがそもそも保証してない実行の優先順位を勝手に期待しているだけではないのかと……。
優先順位は関係なく実行は完全にシーケンシャルです。単にバッファリングの問題でしょうし、リトライはただの”逃げ”です。

しかし、上の問題は関係ないのかも知れませんがスパムフィルタ処理だけを追試をしてもEudoraでは問題ないのにThunderbirdでは(メールを失うという)再現性があるのはなぜでしょうね。どうすれば避けられるかはわかるので どうってことは無いのですが。

(85) Re: メールが消えました by junnno' at 2005/02/03 07:19:37 レス投稿

> しかし、上の問題は関係ないのかも知れませんがスパムフィルタ処理だけを追試をしてもEudoraでは問題ないのにThunderbirdでは(メールを失うという)再現性があるのはなぜでしょうね。どうすれば避けられるかはわかるので どうってことは無いのですが。

メール消失の再現手順を教えてもらえますか。
パッチぐらいなら当てられるかもしれないので。

(86) Re: メールが消えました by きよ at 2005/02/03 15:53:00 レス投稿

> メール消失の再現手順を教えてもらえますか。
> パッチぐらいなら当てられるかもしれないので。


(66)に書いた以下です。
> ジャンクの教育と確認は
> 「_Junk sample」フォルダから迷惑メールフィルタを実行し、迷惑メールフォルダに振り分けられずに残ったメールに対して「j」押下でジャンクとして教育する。迷惑メールフォルダの全てのメールを削除してゴミ箱へ移動させ、以降はゴミ箱が空っぽになるまで繰り返す。

メーリングリストを一つ解約して引っ越したらジャンクメールが激減してしまいました。

(87) Re: メールが消えました by きよ at 2005/02/03 16:37:55 レス投稿

> (66)に書いた以下です。
> > ジャンクの教育と確認は
> > 「_Junk sample」フォルダから迷惑メールフィルタを実行し、迷惑メールフォルダに振り分けられずに残ったメールに対して「j」押下でジャンクとして教育する。迷惑メールフォルダの全てのメールを削除してゴミ箱へ移動させ、以降はゴミ箱が空っぽになるまで繰り返す。

おっとっと
この一連の操作をやっている間中、動画を再生中だったりウィルスチェックが走行していました。(ウィルスチェックはメールディレクトリはノーチェックです)




次の1件を表示
削除ID パスワード
BBS mozilla, which is administered by junnno