ちょっと待て! もしかして Rails の ActionMailerって TMail 使ってんの?! なんか Rails な人は TMail 併用率が高いなあと思ってたら、 そういうことか……。
そういえば Rails のソースツリーを見たときに vendor/tmail というのがあったような気がする。 でも「ああ、俺のと名前がかぶってる」と思って終わりだったんだ。 それくらい予想外だったってことか。 やばいな、いきなり蚊帳の外でいられなくなってしまった。 もうちょっと真面目にメンテしようかな。
とか言ってると、やることが加速的に増えていくんだよなあ。 ただでさえスラッシング気味なのはどうにかしないと。
あ、最近妙に TMail のダウンロードが多いのも Rails の影響なんだな。また一つ謎が解明された。
TMail と言えば、かねがね直したいと思っているところがいくつかある。
「構造を簡単に」 「インターフェイスを簡単に」 「ソースコードを簡単に」 の方向で改変していきたい。
(21:13)
I/O + シグナルがらみで再度問題に遭遇した。 以下のような cat コマンドで stdin を読むと Ctrl-C が効かない。
Signal.trap(:INT) { exit 1 } Signal.trap(:PIPE, "IGNORE") while s = ARGF.read(1024) print s end
fcgi.rb まわりで得た経験のおかげで今回はすぐに回避方法がわかる。 Signal.trap(:INT, "EXIT") にするか、 シグナルをトラップするのをやめて例外 Interrupt を rescue すればよい。
しかし、なんかめんどくさいなあ……。 せめて「シグナルを受けたら、スタックトレースを吐かずに異常終了する」 という選択肢が欲しいところだ。 パイプラインの途中でトレースを吐かれるのは邪魔すぎる。 例えば Signal.trap(sig, "ERROR_EXIT") というのはどうだろう。
(21:25)
『エキスパート C プログラミング』には 「三項演算子くらい使えるようになっとけ」 みたいなことが書いてあったなあ (p.195)。 それまではなんとなく使わないほうがいいのかなあと 思ってたけど、それを読んでからは気にせず使うようになったんだ。
ただ、C は別にいいんだけど、むしろ Ruby がちょっとねえ。 Ruby だと真偽値を返すメソッドに「?」が付いてるから
obj.m? ? t : f
となって「?」が重なってしまう。
a==b ? t : f
くらいならいいんだが。
ちなみに
expr ? expr : f
は
expr || f
じゃん? 副作用は入ってないと考えてさ。 三項演算子はそれの同類 (として使えるもの) だと思うんだよな。 二つまとめて「オブジェクト選択演算子」とでも呼んだらどうだろう。
※ Ruby の場合、 a ? x : y は条件 a によって x か y を選択し、 x || y は x の存在に基いて x か y を選択していると考えられる。
(21:49)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
TMailは3〜4年使っていますが、これほどマニュアルも整備されていて、歴史もあって、多様なメールに対応しているライブラリってRubyには他に無い、JavaでいうJavaMailに相当するくらい、不可欠なんじゃないかと思っています。なので、「1.0 にむけて かなり仕様・実装を変更しまくる」という方針がちょっと気になってしまいます。ああ、今TMail使っているけど、後々新バージョンへの対応が大変になるかもなあ…とか思いながらコードを書いちゃうので。