[#29987] ライセンス論点整理 — Tacos <ozaki@...>

38 messages 2001/06/01

[#30030] Ruby license discussion — Masayuki Hatta <mhatta@...>

八田と申します。

23 messages 2001/06/02
[#30034] Re: Ruby license discussion — "Akinori MUSHA" <knu@...> 2001/06/02

At Sat, 2 Jun 2001 14:31:02 +0900,

[#30039] Re: Ruby license discussion — akira yamada / やまだあきら <akira@...> 2001/06/02

[#30056] Re: Ruby license discussion — Takaaki Higuchi <thiguchi@...> 2001/06/03

In "akira yamada / やまだあきら <akira@ruby-lang.org>" wrote:

[#30155] How do we treat local static variables? — IKEGAMI Daisuke <daisu-ik@...>

ruby-list の皆さんこんにちは。

13 messages 2001/06/09
[#30156] Re: How do we treat local static variables? — NISHI Takao <zophos@...9.com> 2001/06/09

にし@おかやまです。

[#30163] FW: [arg1:119] RE: [RubyUnit:4203] Re: インストーラ・プロジェクト — "KANEMITSU Masao" <masao-k@...>

金光です。RAAを改善しませんか?

10 messages 2001/06/10

[#30190] 呼び出し元のクラスを知る方法? — "Shin'ya Adzumi" <adzumi@...>

あづみです。

13 messages 2001/06/11

[#30215] パス文字列を操作するライブラリはありませんか? — "Kaoru Shirai" <shirai@...1jp.com>

 こんにちわ。常日頃 Ruby を愛用させて頂いております。

13 messages 2001/06/13

[#30270] setup.rb — rubikitch@...

るびきちです。

16 messages 2001/06/16
[#30291] Re: setup.rb — Minero Aoki <aamine@...> 2001/06/18

あおきです。すみません、見逃してました。

[#30292] Re: setup.rb — rubikitch <rubikitch@...> 2001/06/19

From: Minero Aoki <aamine@mx.edit.ne.jp>

[#30293] Re: setup.rb — TADA Tadashi <sho@...> 2001/06/19

ただただしです。

[#30305] TMarshal — rubikitch@...

るびきちです。

25 messages 2001/06/19

[#30333] 共同著作物の謎( re :ライセンス) — Tacos <ozaki@...>

13 messages 2001/06/20
[#30334] Re: 共同著作物の謎( re :ライセンス) — Tacos <ozaki@...> 2001/06/20

[ruby-list:30312] composing a mail with a big file attached

From: "Akinori MUSHA" <knu@...>
Date: 2001-06-19 16:04:13 UTC
List: ruby-list #30312
 ちょっとしたサイズのファイルを添付したメールを作成するコードを
Ruby で書いたのですが、いくつか速度上の問題にぶつかっています。

 まず、以下のコードを。

#-------- begin
require 'tmail'

date_now = Time.now

filename = '/var/tmp/test.pdf'

mail = TMail::Mail.new
mail.from = TMail::HeaderField.new('From', 'test+from@idaemons.org')
mail.to = 'test+to@idaemons.org'
mail.date = date_now
mail.subject = 'test'
mail.mime_version = '1.0'
mail.set_content_type 'multipart', 'mixed', { 'boundary' => TMail.new_boundary }

textpart = TMail::Mail.new
textpart.set_content_type 'text', 'plain', { 'charset' => 'iso-2022-jp' }
textpart.body = "This is a test mail with an attachment.\n"

mail.parts << textpart

filepart = TMail::Mail.new
filepart.set_content_type 'application', 'pdf'
filepart.disposition = TMail::HeaderField.new('Content-Disposition',
					      'attachment; filename="' + File::basename(filename) + '"')
filepart.encoding = 'Base64'

#filepart.body = `uuenview -b #{filename}`
filecontent = File.open(filename).read
filepart.body = [filecontent].pack('m')

mail.parts << filepart
mail.write_back

print mail.encoded
#-------- end

 テストに使った test.pdf は 700KB ほどのファイルです。

 まず、 Ruby 1.6 を使って巨大な文字列を Array#pack で  Base64
エンコードさせるととんでもない時間がかかってしまうのです。手元の
Pentium III 800MHz のマシンでは、エンコードになんと丸々 2 分も
かかりました。 (ファイルの読み込み〜格納は一瞬)

 コメントアウトしてあるように外部のコマンド (uuenview) を使うと
瞬時 (0.1〜0.2 秒) に終わるのですが、三桁も違うとは。

 なお、 Ruby 1.7 では rb_str_buf_cat() が導入され、最初に大きな
領域を確保しておいて再割り当てせずに使うようになっているため、
劇的に速度が改善しています。(0.2 秒ほどで終わりました)

 そこで一つ要望なんですが、この変更を 1.6 にも持ってきませんか?

		*		*		*

 次に、性能上の問題になっているのが TMail::Mail#write_back です。
Base64 エンコードされたファイルのボリュームは 950KB 程なのですが、
write_back に 8 秒前後もかかるのです。

 上の例の場合、 filepart の本文部分についてはキャラクタセットや
改行コードの変換は不要なので、「黙ってそのまま使ってくれ」という
指定ができればいいのですが、 TMail 側にそういう機能を用意できない
でしょうか?

 例えば、本文の中身には関知しないメソッドとして write_back!,
encoded!, decoded! を新設するというのはいかがでしょう?

# あまり TMail の中身をよく見たわけじゃないので、使い方を間違って
# いるだけだったらすみません。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.orgn
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"

In This Thread

Prev Next