随感録 2002年12月

2002-12-01 (Sun)

このWebサイトへリンクを張ってもらっているところを纏めた。リンク元

#

プリンを作る。失敗。カラメルが飴になってしまった。オーブンで蒸し焼きにしたが,カップの下半分が液体。かなり駄目やん。

2002-12-07 (Sat)

朝から昼ぐらいまで会社に出たり。サービス。

景気付けに(?)『マイノリティ・レポート』を観る。めちゃめちゃスリリング! 良かった。原作とたぶん違う落ちだよね?

#

メールを捌いていく。最近は急ぎ以外は(というか急ぎでも)週末しか返事を書かないので,2週間ぐらい平気で放ったらかしたりしてる。良くないが。

CGIのスピードに関するメールが来てたので,cgiライブラリを使ったときとそうでないときとの比較をしてみる。

2002-12-08 (Sun)

昨日のCGIの速度の比較を書いておく。テストに用いたスクリプトはこんなの。

up-test.rb
  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()
up-cgi.rb
  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()
up-nocgi.rb
  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.44676
1,000,000バイト
cgi:    8.261699
no-cgi: 5.052223
10,000,000バイト
cgi:    72.566576
no-cgi: 42.820436

送信するファイルが大きくなるほど差が出てくる。

10Mバイトになると,CGIの有無にかかわらず,ちょっと我慢できない時間になる。これほど大きなファイルをアップロードする場合は,別の手段を考えた方がいい。かと言って,実際問題としてどうするかな。

2002-12-14 (Sat)

注意 Vectorにて拙作の「Q's Nicolatter for X」が公開されましたが,Windows用のQ's Nicolatterと混同しており,誤った情報が掲載されています。Q's Nicolatter for Xは,いわゆるフリーソフトであり,継続使用の場合でも,使用料のお支払いは不要です。すでに訂正してもらうようメールを打ちましたが,訂正されるまでしばらく時間が掛かると思います。ご注意ください。

#

今週はなかなかハードだった。毎日朝7時45分に会社入りして出るのが11時以降とは。今日も2時間ばかりサービス。

ハンズと無印良品でいろいろ買い物。ポスターフレーム,靴べら,ベッドのシーツ,スリッパ,エッセンシャルオイル,などなど。