Wednesday, March 23, 2011

Iodine-131 in tap water in tokyo

ついに東京の水道水にもヨウ素131が混入するようになったそうなので怖くなってリスクをざっくりと計算してみた。

水道水の放射能測定結果について / 第17報 / 平成23年3月23日 / 東京都水道局
金町浄水場: 2011/3/22 9時 I-131 210 Bq/kg
緊急時における食品の放射能測定マニュアル / 平成14年3月 / 厚生労働省医薬局食品保健部監視安全課
I-131(ヨウ化メチル以外の化合物) を幼児が経口摂取した場合の実効線量係数 0.000075 mSv/Bq

ベクレルをシーベルトに換算すると
210Bq/kg * 0.000075mSv/Bq = 0.01575mSv/kg

シーベルト - Wikipedia
これ以上はヤバイかなという値を 100mSv とすると
100mSv / 0.01575mSv/kg = 6,349.2kg (およそ 6t)

一日1L(1kg)水道水を飲んだりすると
6349.2kg / 365日 = 17.39年 で 100mSv に到達

まあ、とりあえずはドキドキしながら暮らすとして、
今後数ヶ月にわたって改善されないと引っ越したくなりますね。

免責条項
- 浄水場から蛇口までの話はわかりません。
- ヨウ素の半減期8日についても考慮してません。
- セシウム134やセシウム137についてはどうなんでしょう。
- 当然ですが、計算間違いの可能性、または仮定の間違いなどあるかと思うので、気になる人は検算してください。

Monday, March 7, 2011

use transactional_fixtures with capybara akephalos driver

You may turn on transactional fixtures with Capybara akephalos driver (it may work with selenium driver too) having the monkey-patch below in spec_helper.rb or somewhere else.
akephalos driver を使っている場合でも以下のコードを spec_helper.rb にでも書いておくと transactional_fixtures を有効にできそうです。 (たぶん selenium などでも同様)



ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
def current_connection_id
# Thread.current.object_id
Thread.main.object_id
end
end

かなり無茶苦茶な変更なので ActiveRecord を非同期に使うコードがあるとアウトなので要注意。

以下は簡単な説明です。

Capybara はデフォルトではサーバーも仮想ブラウザもテストを実行している ruby のプロセス内で同期的に処理するので ActiveRecord の connection をテストとサーバーで共有でき、 transactional_fixtures が使えます。

しかし、 Selenium driver の場合ブラウザは本物、 Akephalos は HtmlUnit という Java の仮想ブラウザを別プロセスで実行しています。
そのため、テストのサーバーも実際の http リクエストを処理する必要があるので、 Capybara は thin や webrick を別スレッドで実行することにより対処しています。

一方、 ActiveRecord の ConnectionPool は connection のレースコンデションを避けるためにスレッド毎に異なる connection を返すため、 fixtures ロードを含むテストとサーバーは同一トランザクションにはなりません。

そこで、無理矢理に異なるスレッドでも ConnectionPool が同じ connection を返すように変更。真面目にこの問題に対応するためには、別スレッドでサーバーを起動せずにリクエストをブロックして rack-test で処理すればできそうな気も。