Kazuhiro's blog
ようこそ! Kazuhiro's blog
日曜日, 3月 07 2021 @ 12:14 午前 JST
 記事を友人にメールする 印刷用画面 

lsd-fuw is released

Lookup

ライフサイエンス辞書は2010年版まではJIS X 4081版のデータも公開されていましたが、現在はその公開も中止されています。 そこで、もう少し新しいデータを利用しており、再配布が許可されている、Firefox 用のアドオンであるライフサイエンス辞書ツールに含まれるデータを利用してLookup 1.4+mediaから検索できるようにしてみました。 ちなみに、最も新しい版のデータは「ライフサイエンス生き字引」という名前のAndroid及びiPhoneアプリに含まれているようです (データの構造はよく分かりませんでしたが、少なくともAndroid用の体験版には含まれているようでした)。

ライフサイエンス辞書ツールに含まれる辞書データはSQLite3のデータベースになっています。 当初は直接データベースを検索するエージェントを作って検索していましたが、日本語見出しに対する検索にものすごく時間がかかりました。 その為、結局FreeUWINGを使って変換するツールを作りました。 ちなみに、変換時も日本語見出しになると変換速度が一気に落ちます。

タグ:FreeUWING

 記事を友人にメールする 印刷用画面 

FLIMの新機能

general

私的に使用しているFLIMの改造版wanderlust/flim@githubに取り込まれたので、新機能について簡単に解説します。

built-in GnuTLSによるSMTPでのSTARTTLS接続のサポート

Emacs24以降ではGnuTLSライブラリの組み込みがサポートされていますが、これが有効になっている場合にはSMTPでのSTARTTLS接続に利用されます。 この機能を明示的に無効にしたい場合は変数smtp-use-gnutlsnilに設定してください。

RFC2231準拠なエンコーダの取り込み

flim-1_14-rfc2231-encoderブランチの変更をマージし、非アスキー文字からなる添付ファイル名はRFC2231に準拠した形ででエンコードするようにしました。

LIMITっぽいエンコーダの実装

非アスキー文字からなる添付ファイル名に対してOutlookのようなエンコードを行うエンコーダを実装したのかLIMITから取り込んだのかすっかり忘れてしまいましたが、とにかく入ってます。 ただし、通常は有効にされていません。 例えば以下の様にmime-header-encode-method-alistの値を設定してください。

(setq mime-header-encode-method-alist
      '((eword-encode-Content-Disposition-field-body-broken-mime
         Content-Disposition)   
        (eword-encode-Content-Type-field-body-broken-mime Content-Type)
        (eword-encode-address-list
         Reply-To From Sender Resent-Reply-To Resent-From
         Resent-Sender To Resent-To Cc Resent-Cc Bcc Resent-Bcc
         Dcc)
        (eword-encode-in-reply-to In-Reply-To)
        (eword-encode-structured-field-body Mime-Version User-Agent)
        (eword-encode-unstructured-field-body)))

応用・注意点

  • 例えば以下の様にmime-header-encode-method-alistの値を設定すると、いわゆるDatula方式っぽくエンコードを行えます。

    (setq mime-header-encode-method-alist
          '((eword-encode-Content-Disposition-field-body Content-Disposition)
            (eword-encode-Content-Type-field-body-broken-mime Content-Type)
            (eword-encode-address-list
             Reply-To From Sender Resent-Reply-To Resent-From
             Resent-Sender To Resent-To Cc Resent-Cc Bcc Resent-Bcc
             Dcc)
            (eword-encode-in-reply-to In-Reply-To)
            (eword-encode-structured-field-body Mime-Version User-Agent)
            (eword-encode-unstructured-field-body)))
    
  • 現時点では、SEMI-EPG以外のSEMIおよびそのvariantではメールの再編集の際にファイル名のパラメータの一部が保持されません。

タグ:Wanderlust FLIM

 記事を友人にメールする 印刷用画面 

ldoce5-fpw-20120824 is released

general

音声・画像などに対応したldoce5-fpwの改造版を隆さんが公開されています。 phrasal verbも検索できるようになっているそうです。 私が公開しているoald7-fpwにはその機能はありませんが、私以外に使用者がいるのか不明なoald7-fuwではphrasal verbやidiomも条件検索から検索できるようになっています。 oald7-fpwに反映されていないのは自分で使っていないので面倒になっただけだったと思いますが、記憶に自信がありません。

最近はWanderlust周りをいじっていることが多いですが、たまには辞書関連の話題も書いておきます。

タグ:LDOCE5 EPWING

 記事を友人にメールする 印刷用画面 

サマリバッファの文字化け (Wanderlustの)

general

MLに投稿されていた、サマリバッファのキャッシュが正しく保存されない問題についてですが、WanderlustのMLが早めに終了してしまったようなので、 (だいたい) 自分で調べた内容を記録しておきます。 encode-coding-regionの動作がおかしいというところまでが前提です。

src/coding.cにあるCODING_DECODE_CHARマクロのコメントには以下のように書かれています。

/* This wrapper macro is used to preserve validity of pointers into
   buffer text across calls to decode_char, which could cause
   relocation of buffers if it loads a charset map, because loading a
   charset map allocates large structures.  */

これによると、charset mapが読み込まれると、bufferのrelocationが生じる可能性があります。 このコメントにはdecode_charについてのみ書かれていますが、encode_charや、char_charsetについてもcharset mapが読み込まれる、すなわち、bufferのrelocationが生じる可能性があります。 しかし、エンコーダ (encode_coding_iso_2022等) はそれを考慮していない為、実際にrelocationが生じると不適切な場所へエンコードした結果を書き込んでしまいます。 このバグを持つ Emacs に関しては、

(defadvice encode-coding-region
  (before avoid-relocation (start end coding) activate)
  (encode-coding-string (buffer-substring start end) coding))

等のようにして、encode-coding-region内でcharset mapが読み込まれないようにすれば回避できます。

Emacsに対するパッチも一応投稿していますが、反応が無いのでどうなるのかよく分かりません。

(追記) WanderlustのMLは広瀬さんが引き継がれて再開しました。 新しい投稿アドレスはwl@ml.gentei.orgです。

(追記その2) encode-coding-regionのバグはtrunkで修正されました。 半田さんありがとうございます。

タグ:Wanderlust

 記事を友人にメールする 印刷用画面 

opensslの代わりにgnutls-cliを使用する (Wanderlustで)

general

色々あって、gnutls-cliopensslの代わりにも利用することにしました。 元々opensslを利用しているところは私が把握している限りでは2つあって、ひとつはSMTP over SSL/TLSでメールを送信する時で、もうひとつはIMAP4/NNTP/POP3 over SSL/TLSでフォルダにアクセスする時です。

まず、open-tls-stream関数が接続に失敗してもエラーにならない為、失敗した時にエラーになるようなラッパーを用意します。 こうしておかないと、(少なくともフォルダへのアクセスの際に) 接続に失敗すると永遠にリトライし続けます。 adviceでやってもいいような気はしますが、一応元の関数の挙動はそのままにしておきます。

(defun open-tls-stream-with-error (name buffer host port)
  "Wrapper function for `open-tls-stream'.  This raises error when failed to connect."
  (let ((result (open-tls-stream name buffer host port)))
    (if (and (processp result)
  	     (eq (process-status result) 'run))
  	result
      ;; raise error when failed.
      (error "Opening tls stream is failed"))))

次に、SMTP over SSL/TLSの設定です。 Wanderlustへはきれいにadviceをかけにくいような気がしたので、FLIMにadviceをかけています。

;; Use tls.el for smtp over SSL/TLS
(autoload 'open-tls-stream "tls")
(defadvice smtp-send-buffer (around use-tls-hack activate)
  (let ((smtp-open-connection-function
	 (if (eq smtp-open-connection-function 'open-ssl-stream)
	     'open-tls-stream-with-error
	   smtp-open-connection-function)))
    ad-do-it))

最後に、フォルダアクセス用の設定です。 こちらだけを使う場合は、SMTP向けの部分にあるautoloadは不要なはずです。 基本的にはすがわらさんの設定と変わりないですが、前述の通り、open-tls-streamを直接使わない方がよいと思います。

;; Use tls.el for over SSL/TLS folder access
(eval-after-load "elmo-vars"
  '(set-alist 'elmo-network-stream-type-alist "!"
	      '(ssl tls open-tls-stream-with-error)))

ちなみに、Emacs24の場合は、可能ならopen-gnutls-streamを使うといいかもしれませんが、確認はしていません。

タグ:Wanderlust