[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 メーリングリストの案内