kaeruspoon

旅行から帰ってきた

旅行から帰ってきました。適当に写真はふぉとすにあげています。

行ってきたところ
1日目
 ・仙台東照宮
  がいた。
 ・塩竈 すし哲
  本店のほうが評価が高いけど、こちらもおいしかった。
 ・青葉城
  仙台市内が一望できる。神社が腐女子の聖地と化していた。
 ・リッチモンドホテル仙台
  駅の近くなので便利。
 ・仙台ロフト
  仙台は東京よりもおしゃれな人が多かった。ジュンク堂にも寄った。
 ・牛たん炭焼 利久 西口本店
  牛たん焼きはそこそこ。シチューのほうがおいしい。

2日目
 ・松島の遊覧船
  のんびり楽しめる。
 ・独まん
  あなご丼を食べた。おいしかった。
 ・五大堂
  松島が一望できる。
 ・瑞巌寺
  参道脇の崖に掘られた石像がすごかった。それだけでも見る価値あり。
 ・湯主一条
  料亭の夕食がすばらしくおいしかった。たぶん、人生で一番おいしい食事だったと思う。

3日目
 ・チーズ・シェッド
  チーズフォンデュを食べた。
 ・蔵王エコーライン
  雪の壁が両側に数メートルあった。ここにいたる道もすばらしい景色。
 ・御釜
  いい意味で期待を裏切られた。火星のようなところで日本でもなかなか目にできない景観がすばらしい。ここを見るためだけでも行く価値がある。
 ・山形 山寺
  美しい風景と心が安まるところ。

MiyazakiResistanceでコンフィグファイルによる設定が可能になりました

RailsMiyazakiResistanceを使っていると、Railsの環境やサーバによってTTへの接続先を変えたいことが多いので、コンフィグファイルでそれらが設定できるようにしました。

miyazakiresistance.yml

development:
  set_server:
    - server: localhost
      port: 1975
      role: write
test:
  set_server:
    - server: localhost
      port: 1978
      role: write
production:
  set_server:
    - server: db1
      port: 1975
      role: write
    - server: db2
      port: 1975
      role: standby
log_file: log/miyazakiresistance.log

という設定ファイルを書いておくと、

require 'miyazakiresistance'
class Counter < MiyazakiResistance::Base
  server_config Rails.env
  set_column :count, :integer
end

これだけでRailsの環境ごとにTTへの接続先が変わります。
server_configの第二引数で設定ファイル名を指定できます。省略すると、./miyazakiresistance.ymlを読もうとします。

ついでにログファイルも指定できるようにしました。デフォルトでは ./miyazakiresistance.logですが、設定ファイルのlog_fileで指定するとそれが使われます。

Ruby1.9を試すその1 - ネイティブスレッド

Ruby1.9からThreadがネイティブスレッドを使うようになります。といっても、VMレベルでロックされるようなので、同時に実行されるスレッドは常にひとつです。ただし、IO関連のブロック機能を備えたシステムコールは同時に実行されるようです。

以下のような簡単なIOテストを実行してみました。

require 'benchmark'

threads = []
Benchmark.bm do |x|
  x.report do
    1000.times do |i|
      threads << Thread.new(i) do |t_i|
        File.open("#{t_i}.count", "w") do |f|
          1000.times {|i| f.puts i}
        end
      end
    end
  end
end
threads.each {|t| t.join}


結果。

[tsukasa@ubuntu] $ ruby1.8 aa.rb 
      user     system      total        real
  2.090000   0.490000   2.580000 (  2.579993)
[tsukasa@ubuntu] $ rm -f *.count
[tsukasa@ubuntu] $ ruby aa.rb
      user     system      total        real
  0.750000   0.170000   0.920000 (  0.939997)
[tsukasa@ubuntu] $ [                     


それから、IOなしのテストをやってみます。

require 'benchmark'

threads = []
Benchmark.bm do |x|
  x.report do
    1000.times do |i|
      threads << Thread.new(i) do |t_i|
        (1..10000).inject(0) {|result,i| result *= i}
      end
    end
  end
end
threads.each {|t| t.join}


結果。

[tsukasa@ubuntu] $ ruby1.8 aa.rb
      user     system      total        real
 14.890000   4.950000  19.840000 ( 19.839974)
[tsukasa@ubuntu] $ ruby aa.rb
      user     system      total        real
  1.530000   0.090000   1.620000 (  1.620000)

全然性能が違いますね。コンテキストスイッチの処理で大きく差が出ているのかな。

Threadを介さずにやってみましょう。

require 'benchmark'

threads = []
Benchmark.bm do |x|
  x.report do
    (1..1000000).inject(0) {|result,i| result *= i}
  end
end
threads.each {|t| t.join}


結果。

[tsukasa@ubuntu] $ ruby1.8 aa.rb
      user     system      total        real
  1.430000   0.470000   1.900000 (  1.899998)
[tsukasa@ubuntu] $ ruby aa.rb
      user     system      total        real
  0.140000   0.000000   0.140000 (  0.140000)

なるほど。VM化による性能の差が大きく出ているみたいです。すばらしい。