[mew-dist 21686] Mew BOF
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2002年 9月 13日 (金) 13:58:03 JST
清里近傍で開催された Mew 井戸端会議の記録を公開します。
きわどい部分は、少し変更させて頂きました。> ロガーの方
ワインを飲みながらやっただけあって、BOF 2 の方は面白いね。
--かず
-------------- next part --------------
# logger は笠原さん、島くん
2002.9.11 Mew BOF
恐くないので意見出してください。実装されるかも。
この BOF の目的
Mew 3.1 が遅れていますがそのうち出ます
合宿中に時間がなくて出せてない
合宿前に RC (Release Candidate)出せなかった
新しいラップトップに VMware ではまりまくり
合宿終わったらすぐ RC を出します
ユーザの腰が重いけど、Mew 2 から Mew 3 に移るのは簡単なので
POP ユーザが少ないのでテストが充分じゃない気がする
9月終りに正式リリースが理想
状況によっては RC 期間をのばすかも
機能は FIX している
Mew 3.2 で何をやろうとしているかを説明する
意見あれば言えば入るかも
3.1 の説明
ざっくり言うと、IMAP と NNTP に対応
ニュース自体が滅びていて、サポートしたけどコンテンツがないなぁ
プライベートの news server を上げている人とかが秘かに
Mew 2 では POP のサーバ側のメールをアクセスするための +mdrop があった
今回 IMAP や NNTP とリモート側にフォルダがありメッセージの実体がある
プロトコルをサポートして、このあたりの抽象化が進んだ
フォルダを2種類にわけた
ローカルフォルダ
+inbox
その中に入っているメッセージはオリジナル(not キャッシュ)
間違って消すと本当に消えてしまう
リモートフォルダ
そのフォルダに入っているメッセージはキャッシュ
リモートにオリジナルがあって、ローカルにはコピーが保存されている
%inbox
^修飾子
POP の修飾子は "$" (+mdrop という名前はやめた)
IMAP は "%" (%inbox 等)
NNTP は "-" (-news.groups)
リモートフォルダのキャッシュメッセージには Mew-X-Uidl フィールドをつける
勝手にキャッシュして勝手につける
Mew のリモートフォルダには数字でメールが入っている
その番号とサーバのメールの番号は全然一致していない
サーバ側の 90-99 が、ローカルの 1-10 に入る、とか
ファイル名はリモートメールの識別子でないので、別に識別子を入れる
操作する時にメールファイルのヘッダをいちいち解析するのは大変
なので、実は summary buffer の右側にも書いてある
メッセージ・キャッシュ
キャッシュの実体
+.imap/user at example.com%port/inbox
(~/Mail/.imap/ ..)
僕は4つ POP サーバを使っています、という人でも安全
同じサーバで複数のユーザとか、同じホストに複数ポートとかでも大丈夫
POP は inbox だけ、IMAP は複数のフォルダ
外で読む時は SSH で port forward、社内では直接の人も嬉しい
case 書いて外の case では ssh 使う、中では使わないと書く
キャッシュの実体は ssh の事を書いてないので、関係なく同じキャッシュ
POP ユーザは inc が習慣かもしれないけど、IMAP にすぐ移行できないけ
ど POP で IMAP な気分を体験したい人は "g"(scan) で $inbox を指定し
てみよう
スキャン
・all … サーバのメッセージを全部取ってくる (番号が(偶然)揃う)
・update … サーバに追加されたメッセージだけ取ってくる
・last:N … 後から N 個だけ取ってくる
・sync … サーバで消えたメッセージを手元でも消す
"C-u" "s" とかするとヘッダだけ取ってこれる
そして SPAM は先に "D" で消してしまう
"x" 押すとサーバ側のメッセージが消える
その後 scan all すると本文を取ってくる
sync の説明
UA A 1 2
svr 1 2 3 4
UA B 1 2
UA A が 2 を消すと svr の 3 が消える
UA B の 1 (svr の 3) は残っている
UA B で scan sync すると svr で消えたメールを UA B でも消す
(増えたものは取ってこない (別途 update))
リモートメッセージの操作
{case, 修飾子} は「世界」を構成する
世界の中でメッセージを操作可能
世界を越える時は?
IMAP のフォルダからローカルにコピーしたい
d や o は世界に閉じた操作という事にする → 世界を越えない
できる操作
$inbox (フォルダ1つしかない)
D を付けて消す
%inbox (フォルダ複数ある)
D を付けて消す
%trash に入るべきという意見により、設定可能に(デフォルトは nil)
o で move (refile)
-news.group
自分の物じゃないので、refile も delete もできない
Mew 2 の +mdrop では o できたけど、今回はできない(世界を壊す)
キャッシュの更新
例えば %inbox から %foo に動かすと、サーバ側では実際に動く
ローカルの %inbox 側のキャッシュは消える
Uidl はフォルダ内でだけ一意なのでキャッシュ情報が無意味になる
refile 先で s update する(とあらためてキャッシュ)
キャッシュの整合性
オフラインでの操作は?
x するとメッセージが消えるので、キャッシュが消えて、読めなくなる
Mew ではオンオフのモードは作らない(モードは嫌い)
ユーザにコマンドを選択してもらう事にする
"x" (online 処理)と "lx" (offline 処理)
オフラインで "x" と押すと、まずコネクションをチェック
刺さるポイント… DNS と connect
刺さったら Ctrl-G を押してください
安全に復帰
検知できた場合(connect がエラーで帰ってきたなど)は自力で戻ってくる
メールを消したりはしない
オフラインでどうしてもメールを処理したい場合、"lx" と押す
%queue にジョブが溜まる (メール形式で読める)
オフラインで "lx" するとメッセージは消えずに、ローカルで移動する
UID は無効になるので、無効マークをつける
どういうマークか …… メッセージのファイル名の前に 0 をつける
1回目の scan はローカルを scan するので読める
無効なキャッシュに D や o はつけられない
オンラインに行った時に %queue で C-c C-c するとジョブを吐く
リモートの実体が移動などする
scan update すると、無効なキャッシュが全部消えてから update される
+mdrop では refile できていたのに $inbox では refile できなくなった
どうするか?
"lc" と押してフォルダを指定すると、世界を越えてコピーできる
キャッシュメッセージの消去も必要か?
見たくないニュースは消してしまう、とか
実装未定
ニュースの投稿
draft を開いて To: の代りに Newsgroups: を書く(グループの補完もできる)
Distribution: も一応あり
To: も書くと無視されて、ニュースだけに投稿されるという仕様
メールとニュース両方に出したいという*とても*強い意向があればサポートする
高速化
refile が速くなった
refile 先のフォルダにあるメッセージを全部なめて、最大のメール+1 を探す
フォルダが ASCII 文字だけなら elisp で普通に書いても速い
非 ASCII なフォルダを考慮すると
Elisp には chdir という概念がない
→ フルパスで指定しながら stat する
ディレクトリ名を符号化する
ファイル名も毎回復号化 → 時間がかかる
Emacs 内部の C レベルでの符号化・復号化をさせない
filename-encoding-system を nil にするとしなくなる
ディレクトリ名が生で出てしまうので、elisp で符号化してあげる
ファイル名の復号化はしない
→ 5倍くらい速くなったはず
体感2倍くらい?
Mew 3.2 について
この半年くらいでけりをつけたい
・SMTP
メールの配送
現状
local の sendmail を指定して投げつけて、後は祈る
queue に溜めて、case を変えて SMTP サーバを変更して出す
今後
Mew 自体が MX を引いてダイレクトに配送する機能が欲しい? (挙手)
うれしい人が数名
elisp は UDP が話せないので dig を exec しようかな
IMAP
APPEND コマンドをサポートしていない
クライアントからサーバにメールをコピーする機能を使っていない
Fcc: %backup と書けない
C-c C-c を押すと SMTP と IMAP のコネクションを同時に張る必要
Emacs では複数のプロセスを同期させながら動かす事ができない
ニュースで To: と Newsgroups: を同時に扱えないのも同じ理由
一旦どこかに落として、後で手動で APPEND するとか?
名前空間
IMAP の名前空間はデタラメ
foo というフォルダを作ろうとすると、サーバによって違う所にできる
%foo だったり
%inbox.foo だったり
皮をかぶせて抽象化した方がよさそう
マーク
* と @ の意味がよくわからないという批判が多い(ここ6年くらい)
未読管理がない
時間があればこのへん徹底的に議論したい
IMAP サーバは未読管理してくれる …… IMAP に限れば簡単
local にどう持つか問題
* と @ は意味がわからないからカスタマイズさせてよ
自由なマークの枠組
MIME エディタ
98% くらいの機能は提供している
"E" と押すとマルチパートを解析して draft を作ってくれるとか
ただし既存のメールを上書きしない
実例:
来たメールの word の添付ファイルだけ消したい
やばいメールなので PGP で暗号化したい
持っているメール自体を加工するインターフェースを作る
セキュリティ
S/MIME デビューした
openssl 使ってみた
使いごこち、思想はだいぶわかった
細かい問題は理解してないかも
時間の問題
スマートカード使ってる人いますか? …… いない
カードに生データを入れると S/MIME 署名・暗号して返してくれる
OpenSSL のハードウェア版らしい
サポートしないんですか? と聞かれた
デバイスくれたら対応します
SSL/TLS
なぜみんなメールの IMAP/SMTP/POP などで SSL で暗号化したいの?
SMTP で配送されている時には平文なのに?
と思っていた
合宿に来て社内に大切なメールを書きたい時、社内までは SSL で守り
たいという用法はありそう
SSL はいんちゃんにサポートしている
サーバが言ってきた公開鍵を検証しないといけないんだけど
sclient には BUG の所に「公開鍵の検証に失敗しても通知しない」と書いてある
emacs の制約により STDOUT と STDERR はまざってやってくる
Mew が sclient を起動してもまざって困るので STDERR は捨てている
sclient を改良して、エラーをファイルに落とすとかしないといけない
SSL のかわりに TLS 使わないと怒られる
openssl のライブラリを使って starttls というコマンドを書いた人がいる
SSL と TLS の決定的違い
SSL は port 番号がかわる
http 80 https 443
コネクションを貼ったらすぐ SSL のネゴができる
TLS は同じポートにつないで普通にネゴはじめる
生 TCP で starttls と言った瞬間状態遷移して TLS へ
emacs だとそれはできないので、 sigalarm など別チャネルで状態遷
移させなければならない
starttls はよくできているので、それでやるかも
半年くらいでかたをつけて、次の合宿では Mew 4 と IPOP
質疑応答
Q. Mew 1 ユーザのたておかです
キャッシュについて
キャッシュの中身は d x と sync 以外で消え事はあるのでしょうか
A. o したら消える
scan all したら中身ごと取り直し
Q. mail server が 64k の奥底だと scan all はつらい?
A. scan all の目的は?
ふだんは scan update で問題なし
Q. 複数のクライアントを使っていても scan update と scan sync で OK?
A. inbox は書いたり消したりするが、他のフォルダは incremental という仮定がある
sync は %inbox に対してよくやるけど、それ以外にはしないという生活
間違って refile してどうしてもキャッシュして、消したい時は
sync しないと同期取れない
inbox が6万通ある人は、まず last:100 とかで始めて、あとは update がおすすめ
Q. 検索はどうなっているの? (IMAP)
A. 今の Mew で ? とか C-u ? とかやるとキャッシュに対して検索
リモート側に100万通あって、client には100通しかない時、
100万通を手元にキャッシュしてから検索するのはいや
サーバで検索したい
Mew のインターフェースで、キャッシュしていないメッセージにヒットした
時の見せ方を考えてくれたら、作ります
どこに '*' マークをつけるのか問題
Q. 暗号化されたメールを検索したいんだけど、なんとかなる?
A. 歌代さんの仕事では
mg でできる
今のインターフェースは、パスフレーズをコマンドの中で持っていて、そ
れで PGP や GPG に渡すという形
Mew との間でどうやりとりするか問題
mg はどこにパスフレーズを覚えるのか?
mg は再利用はしない
一回起動された時に複数の引数に対してまとめて検索する時だけ
パスフレーズはファイルシステムにある
pgp に渡す時には filedescripter で渡す
emacs でも fd 使いたいよねぇ…
creat して unlink してそこにパスフレーズを書く
その fd を pgp とかに渡す
全部 close されると消えてなくなる
kernel の memory にしかないので安全かな
mew から見ると mg は pgp みたいなものだと思うと…
mew は pgp を非同期プロセスとして起こす
同期プロセスで起こすとパスワードを安全に渡す方法がない
fd を渡せないため
環境変数で渡すのは最悪
非同期プロセスとして上げて、Password: とかいう文字列をひっかけて、
ユーザに対して入力を促し、プロセスに送る
今は mg を同期プロセスとして起こしている
非同期プロセスとして起こすようにする
pgp とかと同様に mg が password と聞いてくれた時にそれをひっかける
API としては、"Password: " と STDERR に出してくれたらひっかけるよというので
いいのではないか
Q. MIME エディタの機能そんなにいらないんだけど、不自由しているのがメールを
添付するのが面倒くさい
フォワード機能はあるけど、途中までメールを書いてからメールを添付す
るうまい方法ってある?
今はファイル名を直接書いているが、面倒
A. 画面3分割にして、1つ summary にしてメールを読んで "y" って押せばできます
(ずいぶん前から)
がーん。
Q. メール全部まるごと添付する場合と、マルチパートの一部を添付したい事がある
A. 一部は現状ではできない
人からもらったメールを積極的にエディットする機能はないので実装する
読んでいるメッセージをそのまま添付できるのだったら、ある MIME のパー
トで "y" するとそのパートの中身だけ添付されるようにすれば
"y" を拡張して、読んでいるパートを添付する機能を入れる
ファイル名などはオリジナルから引きつぐ
ヘッダをそのまま残す必要はない
テキスト・ワード・テキストなメールのワードだけ抜いて添付とかは面倒
そんな機能はいらない
一時ファイルを作ってもいい? いいよ
以上
-------------- next part --------------
# logger は坂本さん
9/10 22:10 くらい
参加者:6名〜8名前後
【Mew BOF at 円卓】
☆こねた要望特集
・オフラインでx でもキャッシュする
・アドレス補完
user 名が同じでドメインが異なる複数のユーザに送りたいときに
tab で くるくる。
現状:
username at example.com → tab
で、
username at example.com とならない。
→ドメイン名一部くるくる
input folder で、"+" も補完してほしい。
→修飾子くるくる
==> 補完見直し (今の技術ならM-tab じゃなくて、tab だけでもできるか
もしれない)
○iswitchは便利
・ユーザーインタフェースを考える
→なんか文字列を入れて、M-tab を押すと部分マッチ。
○最近気持ち悪いのが、x を押すと画面が「むにゅむにゅ」する
・以前は、処理が終わった後画面を書き換えていた
最近は、リアルタイムに書き換える
○ summary フォルダを横に並べたい
・今は破綻する
→どうなればいいの?
・縦割りして読めるようになってほしい
・縦割りにするとフレームサイズではみ出した行が折り返さない
○ m - x -d をすると3文字 OK (lx 関係 lmd , lmd できる)
○リファイル先が同じものへの x
・特定のフォルダへのフォルダ
・ m o した瞬間にリファイル
○スレッドでx できない
スレッドでマークすればオリジナルのフォルダにマークが付く
却下。
○resend の時に seve buffer をやめて write resion にしろ
おまけ・case:%foo で、y できるか?
→ できる
☆以上細かい話(こねた要望おわり)
○serach
クライアント サーバ
1
2 ←
3
1(4) 4
2(5) 5 ←
IMAPでは、サーバ側でサーチできるのだが、クライアントが持っていないメー
ルがマッチした場合どうする?
☆絞り込みサーチ (今のMewでふつうのフォルダでもできていない)
マッチしたメールのヘッダを全部取ってきてリストする?バーチャルフォルダ?
クライアントの 1 2 という番号は必要なの?
→ 内部的には UIDL をもっている。
○話を戻して
・サーチ結果のメールヘッダを全部取ってくるのが速ければいいのか?
apple mail は速い
速いのはパラレルに処理している?
IMAP サーバに複数のコネクションをはっている?
最近のふつうのクライアントにそういう挙動をしている。
IMAP はやだ。インプリしてみた結果やだ。
ID UID
POP 数 文字列
IMAP 数 数
NNTP 数 Msg-ID
IMAP Search は、Mew 4 でメッセージの番号をなくすことで解決を図る。
→ メジャー番号変わるからごめんね
●未読
未読マーク
スパムマークは?
GNUS の K
同じssubject のメッセージを全部マークする
他にも、同じドメインのメッセージを全部マークする
マーク
未読マーク
a. ファイル名を変える
1 →既読 1,
この場合ディレクトリのタイムスタンプが変わる。
b. X-Mew: をつける
この場合、Forward すると見えちゃうのがいや
a. → 必ず、タイムスタンプ管理ファイルで管理すると解決する。
b. → フォワードの時に削ると決めてしまえばよい。
==> Mew 4 でやることにしよう。
●まとめると。IMAP Search , 未読管理は、Mew 4 (メジャー番号変わるけどごめんね)
でやることにしよう!!
Mew-dist メーリングリストの案内