WiKicker には通知メールの Subject: フィールドがたまに壊れている問題があるのだが、ずっと放置しておいたままだった。 そろそろ次のバージョンをリリースしたいと思うので、今回修正しておく。
結果半日かかってしまった。
まず現在エンコーディングに使っている MIME::Words::encode_mimewords (5.404)であるが、マニュアルを見ると charset によってはマズいエンコーディングを吐くらしい。 WiKicker で Subject: ヘッダが壊れるのも、この問題のせい。 文字境界を無視してぶったぎってエンコードされてしまう。 ということで、自前でエンコードする事にする。
まぁたいしたものではないが。 最初はエンコードする必要のある部分だけ encoded-word にする事も考えたのだが、面倒なのでやめ。 全部エンコードしてしまう事にする。 エンコーディングも最初は、"Q" encoding で実装しはじめたのだが(MIME::Words のデフォルトがそうなので、WiKicker でもそれを使っていた)ちょっと面倒なので、"B" encoding に変更。
で、テスト。うーん。途中に余分な空白が入ってしまうな。 mew で受信したメールを見ると folding のところで余分な空白が入って表示される。 RFCとか見ても encoded-word に挟まれた CRLF SPACE は無視されるはずなんだけれどなぁ。
UTF-8 の代わりに ISO-2022-JPにしてみたりとか、エンコーディングを変えてみたり(Q or B)したのだが変わらず。 他から受けとっているメールは問題ないから、mew の問題でもなさそうだし。
ん? mew の inbox を確認してみると、他のソフトからのは \n, space でフォールディングされているな。 今書いているコードから送ったやつは \r\n, space でフォールディングされている。 RFC的には CRLF space では?
WiKicker で \r\n, space でフォールディングしているところを \n, space でフォールディングするようにしたら直る。 けど、これでいいのかな?
って良く考えたら、他の部分はヘッダでも本文でも改行には \n を使っているんだった(Perl のヒアドキュメントを使っているので)。 ということは今まで、それを標準入力から受けとった sendmail が LF を CRLF にしてくれていたのか。 あまり深い事考えてなかったな。 今回はフォールディングのところだけで CRLF にしたため 一個余分に CR がついてしまい、それがタイトルの文字列中の空白として表示されてしまったと。
結局疑うべきは自分のコード。
現在進行中のプロジェクトの一つがそろそろ大詰め。 ドキュメント書きに突入。 前回までは過去の方法を踏襲して MS Word ベースだったのだが、自分がマネージャーになった今期からは全面的に TeX ベースへ移行させる。
を用意。 Makefile は時間がなかったので GNUmakefile と Makefile を作って Linux 用と Windows 用の両方作ったのだが、後々面倒なので一本化したい。
また久しぶりに LaTeX2e でドキュメントを作成したくなった。 今まで Linux でも Windows でもコンパイルが通るように ISO-2022-JP で書いていたのだが差分も取りにくいし、そろそろ UTF-8 にしたい。 調べたら Linux なら ptexlive で UTF-8 対応の pLaTeX2e が使える模様。Windows については W32TeX が対応済みのようだ。
Debian GNU/Linux では ptexlive がないので、野良インストールした。
~/tmp/ptexlive の下でビルドして /usr/local/texlive/p2009 の下にインストール。
以下手順メモ:
手元の環境では以下を追加インストールした。
~/tmp/ptexlive を作りファイルをダウンロード。 ptexlive アーカイブを展開、TeX Live の方は ISO イメージを展開してマウントする。
cd mkdir -p tmp/ptexlive cd tmp/ptexlive wget http://tutimura.ath.cx/~nob/tex/ptexlive/ptexlive-20100711.tar.gz wget http://www.t.ring.gr.jp/pub/text/CTAN/systems/texlive/Images/texlive2009-20091107.iso.xz tar zxvf ptexlive-20100711.tar.gz 7za e texlive2009-20091107.iso.xz mkdir texlive mount -t iso9660 -o loop texlive2009-20091107.iso $PWD/texlive
(2010年9月18日追記: ここで TeX live をインストールする)
次に ptexlive を展開してディレクトリに移動して ptexlive.cfg を用意し編集する。
cd ptexlive-20100711 cp ptexlive.sample ../ptexlive.cfg emacs ../ptexlive.cfg
変更したところは以下。
そしてビルド。なお既存の ~/.texmf-var があると正しくないビルドができる可能性があると警告されるので移動しておく。
mv ~/.texmf-var ~/.texmf-var-tmp make make otf
最後にテストがこけるがこれは無視してもよいらしい。
そしてインストール。
su make install exit
以上で完了。
環境 PATH を通す。Debian GNU/Linux の TeX 関連パッケージより優先して使うように既存の PATH の前に設定。
export PATH=/usr/local/texlive/p2009/bin/i686-pc-linux-gnu/@:$PATH
UTF-8 なサンプル pLaTeX2e ファイルを作成して platex、dvipdfmx が通ることを確認。
Happy TeXing!
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。