history

青木日記 RSS

<前の日 | この月 | 次の日>

2005-03-30

Rails + TMail

ちょっと待て! もしかして Rails の ActionMailerって TMail 使ってんの?! なんか Rails な人は TMail 併用率が高いなあと思ってたら、 そういうことか……。

そういえば Rails のソースツリーを見たときに vendor/tmail というのがあったような気がする。 でも「ああ、俺のと名前がかぶってる」と思って終わりだったんだ。 それくらい予想外だったってことか。 やばいな、いきなり蚊帳の外でいられなくなってしまった。 もうちょっと真面目にメンテしようかな。

とか言ってると、やることが加速的に増えていくんだよなあ。 ただでさえスラッシング気味なのはどうにかしないと。

あ、最近妙に TMail のダウンロードが多いのも Rails の影響なんだな。また一つ謎が解明された。

TMail

TMail と言えば、かねがね直したいと思っているところがいくつかある。

  • メールボディの Base64 エンコーディングを自動解除する
  • MIME B エンコードの高速化
  • フィルタ的な使いかたに対応する (入力と出力をできるだけ同じにする)
  • パーサをシンプルにする
  • メソッド名規則の統一 (互換性を捨てる必要あり)

「構造を簡単に」 「インターフェイスを簡単に」 「ソースコードを簡単に」 の方向で改変していきたい。

(21:13)

I/O operation differs signal handler (再)

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)

本日のツッコミ(全1件) [ツッコミを入れる]
taimamiso (2005-04-07 05:40)

TMailは3〜4年使っていますが、これほどマニュアルも整備されていて、歴史もあって、多様なメールに対応しているライブラリってRubyには他に無い、JavaでいうJavaMailに相当するくらい、不可欠なんじゃないかと思っています。なので、「1.0 にむけて かなり仕様・実装を変更しまくる」という方針がちょっと気になってしまいます。ああ、今TMail使っているけど、後々新バージョンへの対応が大変になるかもなあ…とか思いながらコードを書いちゃうので。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS