マニュアル書き。Test::Unit.run=は 1.8.5 くらいから追加されたメソッド。ユニットテストを自動実行するかどうかのフラグ。
ここで問題。これに true をセットすると、ユニットテストは自動実行されるかされないか。
あ、RDoc も間違ったままだ。
これと DL のいくつかのメソッドも。
ruby/dl を使うと ruby が簡単に落ちる。仕方がないことだけど。
$ cat t2.rb require "dl" sp = 'abc'.to_ptr sp.ptr.to_s $ ruby-1.8 -v t2.rb ruby 1.8.6 (2007-03-05 patchlevel 5000) [i686-linux] t2.rb:3: [BUG] Segmentation fault ruby 1.8.6 (2007-03-05) [i686-linux] zsh: abort ruby-1.8 -v t2.rb
これを防ぐアドホックな方法を考えてみた。
class DL::PtrData alias __to_s to_s def to_s(*args) if size == 0 and (DL::PtrData.malloc(0).to_i - to_i).abs >= 100 * 1024**2 raise DL::DLError, "self seems to be an invalid pointer" else __to_s(*args) end end end
スクリプトから C のポインタを安全に扱うなどという、都合の良い仕組みは可能だろうか?
ちなみに、1.9 でも同じように落ちる。
$ cat t3.rb require 'dl' sp = DL::CPtr.to_ptr('abc') sp.ptr.to_s $ ruby-1.9 -v t3.rb ruby 1.9.0 (2007-02-27 patchlevel 0) [i686-linux] -- stack frame ------------ 0000 (0x404ef008): 00000004 0001 (0x404ef00c): 00000005 0002 (0x404ef010): 404d5bbc 0003 (0x404ef014): 00000004 0004 (0x404ef018): 00000001 0005 (0x404ef01c): 404d5ba8 0006 (0x404ef020): 00000004 0007 (0x404ef024): 00000001 <- lfp <- dfp -- control frame ---------- c:0004 p:---- s:0008 b:0008 l:000007 d:000007 CFUNC :to_s c:0003 p:0043 s:0005 b:0005 l:000004 d:000004 TOP t3.rb:3 c:0002 p:---- s:0002 b:0002 l:000001 d:000001 FINISH c:0001 p:---- s:0000 b:-001 l:000000 d:000000 ------ --------------------------- DBG> : "t3.rb:3:in `<main>'" -- backtrace of native function call (Use addr2line) -- 0x80d303e ------------------------------------------------------- [BUG] Segmentation fault ruby 1.9.0 (2007-02-27) [i686-linux] zsh: abort ruby-1.9 -v t3.rb
ところで、以下のスクリプトが落ちるのはバグのような気がする。
$ cat t2.rb require "dl" sp = ['a', 'b', 'c'].to_ptr sp.to_a('S') $ ruby-1.8 -v t2.rb ruby 1.8.6 (2007-03-05 patchlevel 5000) [i686-linux] t2.rb:3: [BUG] Segmentation fault ruby 1.8.6 (2007-03-05) [i686-linux] zsh: abort ruby-1.8 -v t2.rb
これってスレッド安全ではない。
int a[] = { 1, 3, 9, 2, 7, 4, 5, 8, 6 }; int main() { int i; qsort(a,sizeof(a)/4,4,"\x8b\0+\x02\xc3"); for (i = 0; i < sizeof(a)/4; i++) { printf("%d ", a[i]); } puts(""); }
これを Ruby/DL を使って書くとこうなる。
require 'dl' a = [1, 3, 9, 2, 7, 4, 5, 8, 6] h = DL.dlopen('libc.so.6') qsort = h.sym('qsort', '0PIIP') ap = a.to_ptr qsort.call(ap, a.size, 4, "\x8b\0+\x02\xc3") p ap.to_a('I') #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
プラットフォーム依存だから、リファレンスには載せることができませんね。
とりあえず、医者の以外の言うことを信じないことにしているので、医者の言っていることを検索して集めてみた。
1. 入浴と石鹸
皮膚のよごれ(アカ、アセ、フケなど)はかゆみを強くし、アトピー性皮膚炎を悪化させます。なるべく毎日入浴、普通の石けんをタオルにたっぷりつけて、全身をよく洗うことが大切です。皮膚炎を起こしている部分のカサブタや外用薬の残りも洗いおとします。アトピー用の石けん(低刺激性の石けん、弱酸性の石けんなど)は刺激は少ないのですが、洗浄力が劣っています。長い間使い続けていると、皮膚によごれが残り全身にかゆみがひどくなります。
夏期に悪化する本症患者の割合が1960年代より減少した理由として、入浴時の石鹸の使用状況が変化したためと考察しています。すなわち、1960年代には、アトピー性皮膚炎患者の皮膚を石鹸を用いて洗浄することが禁止されており、その結果その当時のアトピー性皮膚炎患者さんの皮膚は汗や汚れ、外用剤の残さ等でおおわれていたと考えられます5)。30年前に比べると、現代の若者はシャワーを浴びる慣習や清潔指向が強まり、一般家庭や職場の室内環境にはエアーコンディショナーが広くゆきとどいています。夏の生活環境の観点からのアトピー性皮膚炎の悪化因子についての詳しい調査は未だなされていないが、生活環境の観点からみると現代日本の夏は昼も夜もアトピー性皮膚炎患者さんにとって1960年代の日本よりも格段と過ごしやすくなっている可能性があります。 これらの諸要素が、夏期に悪化する本症患者の割合が1960年代より減少した理由として考えられます。
最近、皮膚科診療をしていて気付くことは、入浴時にナイロンタオル、布タオルやスポンジなどにボデイシャンプーや石鹸をつけて、ゴシゴシと体をこすって洗う人があまりに多いことである。テレビのコマーシャルの影響なのか、まるで陶器や壁をスベスベ、ツヤツヤに磨き上げるような感覚で、連日、強くこすって洗う人が多い。こういう洗い方をしないと風呂に入った感じがしないとか、ゴシゴシこすると気持ちがいいという人もいる。この結果、皮膚はガサガサと乾燥し、毛穴がボツボツと開き、ひどい人は炎症や色素沈着も伴い痒みを訴えるようになる。外来診療をしていると、このような所見がある人で、自分が風呂でこすって洗いすぎていることによる可能性を考える人が本当に少ないことに驚かされる。
しかし、一方で、易刺激性のアトピー性皮膚炎の皮膚ではダニ、埃や微生物が付着していると、炎症を起こしやすいので、ある程度はこれらを除くほうがよい。私自身は、皮膚を傷めず汚れを除くレベルということで、手に泡立てた石鹸をつけて、そっと体を洗う位がよいと考えている。回数は皮脂分泌の季節差や年齢・個人差により1〜3日に1回程度でよく、あとは毎日1回はお風呂に入って汗や埃を流せばよいのではと説明している。また入浴後に自分に合った保湿剤を塗ることも皮膚のバリア機能回復に役立つ。
「秒速5センチメートル」を見に行ったんですが、うーん、って感じ。
「パフューム」も見に行きました。驚くほど原作に忠実につくってありました。映画としておもしろいかというとどうだろうという気もしますが、ほとんど喋らず勤勉に人を殺す続ける野郎が主人公だから仕方ないかな。
少し前に規制緩和によって長距離バスの事故は増えたことを示すグラフがマスコミに頻出していました。波線を使って不必要に省略してあるという問題はさておき、この数値だけでは長距離バスがより事故を起こしやすくなったとはいえません。なぜなら、規制緩和によって長距離バスの利用が増えて、その結果事故は増えただけかもしれないからです。
危険になったかどうかは、走行距離当たりの事故の発生件数を見れば良いです。だけども、警察庁が発表している「平成18年中の交通事故の発生状況について」には、バス・マイクロバス・タクシーを全部ひっくるめた事業用乗用の走行距離当たりの事故の発生件数しか載っていません(P21)。うーん。
最近のコメント