2002-12-01 (Sun)
このWebサイトへリンクを張ってもらっているところを纏めた。リンク元
#
プリンを作る。失敗。カラメルが飴になってしまった。オーブンで蒸し焼きにしたが,カップの下半分が液体。かなり駄目やん。
このWebサイトへリンクを張ってもらっているところを纏めた。リンク元
プリンを作る。失敗。カラメルが飴になってしまった。オーブンで蒸し焼きにしたが,カップの下半分が液体。かなり駄目やん。
朝から昼ぐらいまで会社に出たり。サービス。
景気付けに(?)『マイノリティ・レポート』を観る。めちゃめちゃスリリング! 良かった。原作とたぶん違う落ちだよね?
メールを捌いていく。最近は急ぎ以外は(というか急ぎでも)週末しか返事を書かないので,2週間ぐらい平気で放ったらかしたりしてる。良くないが。
CGIのスピードに関するメールが来てたので,cgiライブラリを使ったときとそうでないときとの比較をしてみる。
昨日のCGIの速度の比較を書いておく。テストに用いたスクリプトはこんなの。
4| require "socket" 5| 6| def send_testdata(path) 7| contents = "a" * 100 8| 9| data = "--boundary\r\n" + 10| "Content-Disposition: form-data; name=\"d\"; filename=\"hoge\"\r\n" + 11| "Content-Type: application/octet-stream\r\n" + 12| "\r\n" + 13| contents + 14| "\r\n--boundary--\r\n" 15| 16| header = "POST #{path} HTTP/1.1\r\n" + 17| "Host: orange:80\r\n" + 18| "Content-Type: multipart/form-data; boundary=boundary\r\n" + 19| "Connection: close\r\n" + 20| "Content-Length: #{data.size}\r\n" + 21| "\r\n" 22| 23| sock = TCPSocket.open("orange", 80) 24| sock.write(header + data) 25| print sock.read() 26| end 27| 28| def do_test(tester) 29| s1 = Time.now 30| for i in 1..5 do 31| s = Time.now 32| print "#{tester.name} #{i}: #{s}\n" 33| tester.test() 34| e = Time.now 35| print "#{tester.name} #{i}: #{e}\n" 36| print "#{tester.name} #{i}: #{e - s}\n" 37| end 38| e1 = Time.now 39| return [tester.name, s1, e1] 40| end 41| 42| class CGITest 43| def initialize() 44| @name = "cgi" 45| end 46| attr_reader :name 47| def test() 48| send_testdata("/~hori/t/up-cgi.rb") 49| end 50| end 51| 52| class NoCGITest 53| def initialize() 54| @name = "no-cgi" 55| end 56| attr_reader :name 57| def test() 58| send_testdata("/~hori/t/up-nocgi.rb") 59| end 60| end 61| 62| def main() 63| t = [] 64| t[0] = do_test(CGITest.new) 65| t[1] = do_test(NoCGITest.new) 66| print "\n" 67| t.each {|d| 68| print "#{d[0]}: #{d[2] - d[1]}\n" 69| } 70| end 71| 72| main()
1| #!/usr/local/bin/ruby 2| 3| require "cgi" 4| 5| def test1 6| begin 7| cgi = CGI.new 8| rescue 9| print $! 10| exit 11| end 12| io = cgi['d'].first 13| print "size: ", io.size, "\n" 14| while s = io.read(100000) 15| end 16| end 17| 18| def main() 19| print "Content-Type: text/html\n\n" 20| s = Time.now 21| test1() 22| e = Time.now 23| print "<p>start time: #{s}\n" 24| print "<p>end time: #{e}\n" 25| print "<p>interval: #{e - s}\n" 26| end 27| 28| main()
1| #!/usr/local/bin/ruby 2| 3| # CGIライブラリを使わずに,form-dataを受け取る。 4| 5| def test2 6| File.open("a.out.2", "w") {|fp| 7| while d = $stdin.read(10000) 8| fp.write(d) 9| end 10| } 11| print "size: ", FileTest.size("a.out.2"), "\n" 12| end 13| 14| def main() 15| print "Content-Type: text/html\n\n" 16| s = Time.now 17| test2() 18| e = Time.now 19| print "<p>start time: #{s}\n" 20| print "<p>end time: #{e}\n" 21| print "<p>interval: #{e - s}\n" 22| end 23| 24| main()
データの大きさ1,000バイト。
cgi: 2.856031 no-cgi: 1.477508データの大きさ10,000バイト。
cgi: 2.54554 no-cgi: 1.446761,000,000バイト
cgi: 8.261699 no-cgi: 5.05222310,000,000バイト
cgi: 72.566576 no-cgi: 42.820436
送信するファイルが大きくなるほど差が出てくる。
10Mバイトになると,CGIの有無にかかわらず,ちょっと我慢できない時間になる。これほど大きなファイルをアップロードする場合は,別の手段を考えた方がいい。かと言って,実際問題としてどうするかな。
注意 Vectorにて拙作の「Q's Nicolatter for X」が公開されましたが,Windows用のQ's Nicolatterと混同しており,誤った情報が掲載されています。Q's Nicolatter for Xは,いわゆるフリーソフトであり,継続使用の場合でも,使用料のお支払いは不要です。すでに訂正してもらうようメールを打ちましたが,訂正されるまでしばらく時間が掛かると思います。ご注意ください。
今週はなかなかハードだった。毎日朝7時45分に会社入りして出るのが11時以降とは。今日も2時間ばかりサービス。
ハンズと無印良品でいろいろ買い物。ポスターフレーム,靴べら,ベッドのシーツ,スリッパ,エッセンシャルオイル,などなど。
タイガーウッズ、お誕生日、おめでとう!!!