希望:定期受信の間隔No.38138
タケ さん 10/03/27 23:16
 
# 要望(必要に迫れてのもの)ではなくて希望(あったらいいな)です。

定期受信の間隔は、設定が5分なら5分、10分なら10分と状態にかかわらず
常に一定ですが、これを状態に応じて可変にできるといいなと思います。例えば...

設定時間を3種類くらい設けます。仮に間隔A、間隔B、間隔Cとします。
これを状態に応じて、あるときは間隔Aの設定を、あるときは間隔Bの設定を、と
適用する設定を切り替えるのです。その状態というのは...

(1) 起動直後、メール送信直後、メール受信直後のいずれかから(間隔A×5回分)
    の時間内のときは間隔Aを適用する。
(2) 起動直後、メール送信直後、メール受信直後のいずれかから(間隔A×5回分)
    を経過し、かつ(間隔B×5回分)の時間内のときは間隔Bを適用する。
(3) 起動直後、メール送信直後、メール受信直後のいずれかから(間隔B×5回分)
    を経過したときは間隔Cを適用する。

といった具合です。文章ではわかりにくいと思うので具体的な数値を使って説明
します。

プログラムの動作は次のようにします。

    ・起動直後に、プログラム内部の "定期受信カウンタ" を0にリセット
    ・定期受信を実行したあと、"定期受信カウンタ" をインクリメント
    ・1通でもメールを送受信したら "定期受信カウンタ" を0にリセット
    ・"定期受信カウンタ" が0〜4のときは間隔Aを適用します。
    ・"定期受信カウンタ" が5〜9のときは間隔Bを適用します。
    ・"定期受信カウンタ" が10以上のときは間隔Cを適用します。

仮の設定値は次のようにします。

    間隔A = 1分
    間隔B = 3分
    間隔C = 10分

そうすると、起動直後の受信間隔は次のようになります。

    1分、1分、1分、1分、1分、3分、3分、3分、3分、3分、10分...

起動してから5分間は高頻度に、起動してから20分間は中頻度に、それ以降は
低頻度にと状態に応じてその頻度(間隔)が変わります。そして、途中でメールを
1通でも送信したり受信したら、それまでの間隔をリセットします。起動してから
12分後にメールを送信し、その2分後にメールを受信した場合は次のようになり
ます。

    1分、1分、1分、1分、1分、3分、3分、3分(ここでメール送信)
    (ここから間隔がリセット)
    1分、1分(ここでメール受信)
    (ここから間隔がリセット)
    1分、1分、1分、1分、1分、3分、3分、3分、3分、3分、10分...

状態の数をいくつにするかとか、何回(もしくは時間)経過したら状態が変わる
とかの細かいことは例に過ぎません。もっとうまい方法があるかもしれません。
ポイントは、実際にメールを受け取る間隔には波があって、その波にうまく乗れる
ような定期受信の仕組みがあるといいなと思っていることです。

いかがでしょうか?

[ ]
RE:38138 希望:定期受信の間隔No.38139
タケ さん 10/03/27 23:25
 
「だったら最初から1分に設定すればいいのではないか」という意見があるかも
しれないので、先のポイントに「メールサーバに負荷をかけずに」を追記しておきま
す。

[ ]
RE:38138 希望:定期受信の間隔No.38141
三月 さん 10/03/28 07:57
 
>そうすると、起動直後の受信間隔は次のようになります。
>
>    1分、1分、1分、1分、1分、3分、3分、3分、3分、3分、10分...
>
>起動してから5分間は高頻度に、起動してから20分間は中頻度に、それ以降は
>低頻度にと状態に応じてその頻度(間隔)が変わります。そして、途中でメールを
>1通でも送信したり受信したら、それまでの間隔をリセットします。起動してから
>12分後にメールを送信し、その2分後にメールを受信した場合は次のようになり
>ます。
>
>    1分、1分、1分、1分、1分、3分、3分、3分(ここでメール送信)
>    (ここから間隔がリセット)
>    1分、1分(ここでメール受信)
>    (ここから間隔がリセット)
>    1分、1分、1分、1分、1分、3分、3分、3分、3分、3分、10分...
>
>状態の数をいくつにするかとか、何回(もしくは時間)経過したら状態が変わる
>とかの細かいことは例に過ぎません。もっとうまい方法があるかもしれません。
>ポイントは、実際にメールを受け取る間隔には波があって、その波にうまく乗れる
>ような定期受信の仕組みがあるといいなと思っていることです。
>
>いかがでしょうか?


複雑なことをしたい場合マクロを利用することをお勧めします。
動作確認はしてませんが、以下のように定期受信の頻度を変えればよいのでは?
定期受信の設定を1分間隔にしておいて、頻度を3にすれば3分毎
頻度を10にすれば10分毎の受信に切り替わると言うぐあいに。


例)秀丸メール起動時のマクロ
loaddll "TKInfo.dll";
createreg "CURRENTUSER", "Software\\Hidemacro\\mail";
/* 開始時刻を記録 */
writeregnum "Count", tickcount;
closereg "CURRENTUSER", "Software\\Hidemacro\\mail";

例)受信が一段落した時のマクロ
loaddll "TKInfo.dll";
#rcnt = dllfunc( "RecvMailCount" );
openreg "CURRENTUSER", "Software\\Hidemacro\\mail";
if(#rcnt > 0){
 /* 1通でも受信したら時刻をリセット */
 #millisec = tickcount;
 writeregnum "Count", #millisec;
} else {
 /* 受信してない場合は最後の時刻 */
 #millisec = getregnum( "Count" );
}
closereg "CURRENTUSER", "Software\\Hidemacro\\mail";
/* 経過時間を確認 */
if( #millisec <= 300000 ){
 /* 5分以内の場合、毎回受信設定 */
 #n = dllfunc("LoadAccountProp", "テストアカウント" );
 #n = dllfunc("GetAccountProp", "nAutoDownInterval", 1);
 #n = dllfunc("SaveAccountProp");
}
if( #millisec > 300000 ){
 /* 5分超えたら3回に一回 */
 #n = dllfunc("LoadAccountProp", "テストアカウント" );
 #n = dllfunc("GetAccountProp", "nAutoDownInterval", 3);
 #n = dllfunc("SaveAccountProp");
}
if( #millisec > 1200000 ){
 /* 20分超えたら10回に一回 */
 #n = dllfunc("LoadAccountProp", "テストアカウント" );
 #n = dllfunc("GetAccountProp", "nAutoDownInterval", 10);
 #n = dllfunc("SaveAccountProp");
}
例)あとで送信/今すぐ送信時のマクロ
loaddll "TKInfo.dll";
/* 送信操作をしたら時刻をリセット */
openreg "CURRENTUSER", "Software\\Hidemacro\\mail";
writeregnum "Count", tickcount;
closereg "CURRENTUSER", "Software\\Hidemacro\\mail";

[ ]
RE:38141 希望:定期受信の間隔No.38143
三月 さん 10/03/28 16:33
 
計算式が違ってましたね。
(現在時刻-初期化時刻) が5分、20分を越えたか判断する必要があります。

>例)受信が一段落した時のマクロ
>loaddll "TKInfo.dll";
>#rcnt = dllfunc( "RecvMailCount" );
>openreg "CURRENTUSER", "Software\\Hidemacro\\mail";
>if(#rcnt > 0){
> /* 1通でも受信したら時刻をリセット */
> #millisec = tickcount;
> writeregnum "Count", #millisec;
>} else {
> /* 受信してない場合は最後の時刻 */
> #millisec = getregnum( "Count" );
>}
>closereg "CURRENTUSER", "Software\\Hidemacro\\mail";
>/* 経過時間を確認 */
>if( #millisec <= 300000 ){
が、
if( (tickcount - #millisec) <= 300000 ){

> /* 5分以内の場合、毎回受信設定 */
> #n = dllfunc("LoadAccountProp", "テストアカウント" );
> #n = dllfunc("GetAccountProp", "nAutoDownInterval", 1);
> #n = dllfunc("SaveAccountProp");
>}
>if( #millisec > 300000 ){
が、
if( (tickcount - #millisec) > 300000 ){

> /* 5分超えたら3回に一回 */
> #n = dllfunc("LoadAccountProp", "テストアカウント" );
> #n = dllfunc("GetAccountProp", "nAutoDownInterval", 3);
> #n = dllfunc("SaveAccountProp");
>}
>if( #millisec > 1200000 ){
が、
if( (tickcount - #millisec) > 1200000 ){

> /* 20分超えたら10回に一回 */
> #n = dllfunc("LoadAccountProp", "テストアカウント" );
> #n = dllfunc("GetAccountProp", "nAutoDownInterval", 10);
> #n = dllfunc("SaveAccountProp");
>}

[ ]
RE:38138 希望:定期受信の間隔No.38147
Iranoan さん 10/03/29 21:59
 
 タケさん今日は、一ユーザの Iranoan です。
> 定期受信の間隔は、設定が5分なら5分、10分なら10分と状態にかかわらず
> 常に一定ですが、これを状態に応じて可変にできるといいなと思います。例えば...
 もちろん個人的な意見ですが、反対です。
 理由は
・仕様として解りにくい
・何のメリットがあるか解らない

[ ]
RE:38138 希望:定期受信の間隔No.38148
秀まるお2 さん 10/03/29 22:25
 
 定期受信についてもっと細かいコントロールをということでしたら、例えばス
ケジューラー系のソフトから秀丸メールをコマンドライン指定で起動するような
形にしたらいいんじゃないかと思います。

 /xオプションで定期受信させるようなマクロを起動したらいいんじゃないかと
思います。そうすれば、間隔も含めて好きなようにコントロール出来ると思いま
す。

[ ]
RE:38141 希望:定期受信の間隔No.38149
タケ さん 10/03/29 22:42
 
> 複雑なことをしたい場合マクロを利用することをお勧めします。

マクロで実現できそうなのは承知の上で希望を出しています。
理由は、マクロが複数のファイルに渡る点です。

[ ]
RE:38147 希望:定期受信の間隔No.38150
タケ さん 10/03/29 22:43
 
>  もちろん個人的な意見ですが、反対です。

最初に書いていますように、あくまでも希望です。
作者の方や、他のユーザの方にお願いをしているのではありません。
ましてや、賛成か反対かを問うてはいません。そこのところをご理解ください。


>  理由は
> ・仕様として解りにくい

先に示したのはあくまでも例です。説明がわかりにくいというのであれば
わかるのですが、仕様という点であれば...

| プログラムの動作は次のようにします。
|
|     ・起動直後に、プログラム内部の "定期受信カウンタ" を0にリセット
|     ・定期受信を実行したあと、"定期受信カウンタ" をインクリメント
|     ・1通でもメールを送受信したら "定期受信カウンタ" を0にリセット
|     ・"定期受信カウンタ" が0〜4のときは間隔Aを適用します。
|     ・"定期受信カウンタ" が5〜9のときは間隔Bを適用します。
|     ・"定期受信カウンタ" が10以上のときは間隔Cを適用します。

この部分がプログラムの動作仕様になります。正確には仕様例に
過ぎませんが、十分にシンプルな仕様ではないでしょうか?
例では3段階に可変できるようにしていますが、別に2段階でも
かまわないと思います。そうなればもっとシンプルになります。

マクロでの複雑なコードよりもプログラムとして実装した方が
手間もかからないと思って希望を出しました。もちろんユーザー
インターフェースの部分(設定ダイアログ)を追加する手間はかかり
ますが...

> ・何のメリットがあるか解らない

これも先に説明していますが、もう少し具体的に説明した方がよかった
のでしょうか? もう少し色を付けると...

 メールのやりとりというのは、頻繁にやりとりするときもあれば
 閑散なときもあります。にも関わらず、定期受信という考え方は
 安直なのではないか? 頻繁にやりとりをしている、もしくは
 するだろうという見込みがあるときは送受信間隔を短くして、
 そうでないときは、それなり(メールサーバに負担をかけない
 程度)の間隔で送受信すると効率がよいのではないか?

ということです。私は普段、定期受信の間隔を10分にしていますが、
こちらからメール送信した直後は、相手が返信をするだろうという
ときを見計らって手動受信をしています。そういったことを自動化
するのが、今回の要望の狙いです。

[ ]
RE:38148 希望:定期受信の間隔No.38151
タケ さん 10/03/29 23:42
 
マクロの話やスケジューラなんて話が出てきたので、背景も説明して
おきます。

要望の発端は、私の周りの連中^H^H同僚らが受信間隔を極端に短くして
いて、POP3 のプロセス (UNIX のプロセスです) があるとき 1000 を
軽く超えてたので「やめて!!」と文句^H^H指導したところから始まって
います。

別のコメントに記したように、私自身は10分の定期受信と手動受信
の組み合わせで対応していますが、奴ら^H^H彼らにそれは通用しません。
もとい聞く耳を持ちません。同様に、マクロやスケジューラ云々も、
奴ら^H^H彼ら一人一人に設定して回る元気がありません。


# 時々 ^H という文字が現れていますが、これは意図的に挿入した
# もので、[Ctrl]+[H] の意味です。私の嘆きだと思ってください。

[ ]
RE:38151 希望:定期受信の間隔No.38152
タケ さん 10/03/29 23:52
 
# 背景ついでに余談も記します。


本音を言えば、定期受信の間隔云々ということよりも IMAP4 の
IDLE コマンド (rfc2177) に対応して頂くのが個人的にはベストだと
思っています。これだと定期受信する必要がないわけですから...
IMAP サーバにメールが届くと、数秒ほどの遅延で秀丸メールに受信
メールの通知が届くわけですからね。とはいえ、これの実装は先の
要望に記した動作仕様に比べるとあまりにも手間がかかり過ぎる
(何せ検証が大変です!!)と思ったので、易しい定期受信間隔の方を
希望として提案した次第です。こちらだと IMAP4 だけでなく POP3
でも使えますからね。職場は POP3 ですし...

IDLE コマンドはご存じないようであれば、先の RFC を読むだけでも
読んで頂ければ有り難いです。逆に読まずに意見だけを言ってくるのは
勘弁して欲しいです。IDLE コマンドについても実装して欲しいと要求
している訳ではありませんので、賛成だの、反対だの、こうすれば
いいだの、ああすればいいだのと言ってこないでくださいね。
少なくともマクロでの対応は無理ですから。


追伸
先ほどの私のコメントの中に要望と記した部分が一部にありますが、
希望に置き換えて読んでください。

[ ]
RE:38151 希望:定期受信の間隔No.38153
タケ さん 10/03/30 01:19
 
| POP3 のプロセス (UNIX のプロセスです) があるとき 1000 を

お風呂前で慌てたのか 1000 と書いてました。これは 100 と書く
つもりでしたので訂正します。


確か 140 だったはずで「惜しい!! POP3 なのに IMAP ポート番号に
あと少し」と思ったものです。しばらく監視していましたが、その
ときは 143 に届かなかったのを覚えてます。ゾンビが増殖していた
ので放っておけば 143 にはいずれ到達したでしょうけれど。

秀丸メールは定期受信間隔を秒単位で設定できてしまうので、
自分勝手で知恵のある輩が「秒」に設定してしまうんです。
そしてそれを「裏ノウハウ」と称して周りの人に勧めるわけです。
それがどんどん伝搬して、最後にはサーバの応答が遅いという
クレームに発展したわけです。

[ ]
RE:38153 希望:定期受信の間隔No.38155
秀まるお2 さん 10/03/30 10:38
 
 メールサーバーに対して大変重い負荷がかかるのを、秀丸メールの方でなんと
かならないか、という話と理解していいのでしょうか…。

 とりあえず、簡単な対策としてですが、定期受信の間隔を秒単位にする場合に
ついての警告をもっと激しく、例えば、

 メールサーバーの管理者の許可を得ていますか?
    「はい」  「いいえ」

 とか問い合わせを出したらいいですかね。

 そういう対応でしたら技術的にも難しくないのでやってもいいです。


 ただ、しいてそういう警告を出すように直したとしても、現状で秒単位で定期
受信する設定にして運用されてるユーザー様には手遅れというか、僕の力でそう
いう設定をされたユーザー様を無理矢理なんとかするってことは出来ないと思い
ます。

 現状で、秒単位の定期受信をされてる人が誰かというのはメールサーバーのロ
グを見れば分かると思うので、そういう人に、定期受信の間隔をもっと長く設定
するように言えばいいんじないかという気がしますけど…。

[ ]
RE:38152 希望:定期受信の間隔No.38156
秀まるお2 さん 10/03/30 10:44
 
 IMAP4の場合ですが、たしかに秀丸メールはIMAP4の時に、他のメールソフトと
比べるとサーバーとの間でやりとりするデータ量が多いと思います。

 例えば他の一般的なIMAP4クライアントは、サーバーに接続したら、そのまま
接続しっぱなしで、特にユーザーさんがメールソフトを操作しなければ、その
「IDLE」というのを定期的に発行する以外は何もコマンドを送らないのだと思い
ます。

 秀丸メールの場合だと、受信が終わる度にサーバーとの接続を切ってしまうの
で、定期受信が始まるタイミングでまた接続してログインして、フォルダ一覧を
取得して…、という、最初からやり直しのようなことになってしまいます。なの
で、サーバーには負荷がかかるのだと思います。

 これを、一般のIMAP4クライアントのような接続しっぱなしにしたらいいのか
もしれませんが…。実際そのように直すのは、技術的にはちょっと難しいです。
また、どっちにしても定期受信をONにしていたら、ログイン以外のコマンドにつ
いては定期的に発行せざるを得ないと思います。

[ ]