脳ざらし紀行


2007-03-10

_ Test::Unit.run=

マニュアル書き。Test::Unit.run=は 1.8.5 くらいから追加されたメソッド。ユニットテストを自動実行するかどうかのフラグ。

ここで問題。これに true をセットすると、ユニットテストは自動実行されるかされないか。

あ、RDoc も間違ったままだ。


2007-03-11

_ ruby/dl

例(というかチュートリアル)を分かりやすく書き換えた

これと 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

_ dl/import

これってスレッド安全ではない。


2007-03-13

_ qsort の callback の書き方 Ruby/DL 編

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]

プラットフォーム依存だから、リファレンスには載せることができませんね。


2007-03-17

_ 石けんとアトピー

とりあえず、医者の以外の言うことを信じないことにしているので、医者の言っていることを検索して集めてみた。

1. 入浴と石鹸

皮膚のよごれ(アカ、アセ、フケなど)はかゆみを強くし、アトピー性皮膚炎を悪化させます。なるべく毎日入浴、普通の石けんをタオルにたっぷりつけて、全身をよく洗うことが大切です。皮膚炎を起こしている部分のカサブタや外用薬の残りも洗いおとします。アトピー用の石けん(低刺激性の石けん、弱酸性の石けんなど)は刺激は少ないのですが、洗浄力が劣っています。長い間使い続けていると、皮膚によごれが残り全身にかゆみがひどくなります。

滋賀医科大学 〜 皮膚科 〜 アトピー性皮膚炎の生活指導と治療法について

夏期に悪化する本症患者の割合が1960年代より減少した理由として、入浴時の石鹸の使用状況が変化したためと考察しています。すなわち、1960年代には、アトピー性皮膚炎患者の皮膚を石鹸を用いて洗浄することが禁止されており、その結果その当時のアトピー性皮膚炎患者さんの皮膚は汗や汚れ、外用剤の残さ等でおおわれていたと考えられます5)。30年前に比べると、現代の若者はシャワーを浴びる慣習や清潔指向が強まり、一般家庭や職場の室内環境にはエアーコンディショナーが広くゆきとどいています。夏の生活環境の観点からのアトピー性皮膚炎の悪化因子についての詳しい調査は未だなされていないが、生活環境の観点からみると現代日本の夏は昼も夜もアトピー性皮膚炎患者さんにとって1960年代の日本よりも格段と過ごしやすくなっている可能性があります。 これらの諸要素が、夏期に悪化する本症患者の割合が1960年代より減少した理由として考えられます。

滋賀医科大学 〜 皮膚科 〜アトピー性皮膚炎:夏を少しでも快適に過ごすために

最近、皮膚科診療をしていて気付くことは、入浴時にナイロンタオル、布タオルやスポンジなどにボデイシャンプーや石鹸をつけて、ゴシゴシと体をこすって洗う人があまりに多いことである。テレビのコマーシャルの影響なのか、まるで陶器や壁をスベスベ、ツヤツヤに磨き上げるような感覚で、連日、強くこすって洗う人が多い。こういう洗い方をしないと風呂に入った感じがしないとか、ゴシゴシこすると気持ちがいいという人もいる。この結果、皮膚はガサガサと乾燥し、毛穴がボツボツと開き、ひどい人は炎症や色素沈着も伴い痒みを訴えるようになる。外来診療をしていると、このような所見がある人で、自分が風呂でこすって洗いすぎていることによる可能性を考える人が本当に少ないことに驚かされる。

しかし、一方で、易刺激性のアトピー性皮膚炎の皮膚ではダニ、埃や微生物が付着していると、炎症を起こしやすいので、ある程度はこれらを除くほうがよい。私自身は、皮膚を傷めず汚れを除くレベルということで、手に泡立てた石鹸をつけて、そっと体を洗う位がよいと考えている。回数は皮脂分泌の季節差や年齢・個人差により1〜3日に1回程度でよく、あとは毎日1回はお風呂に入って汗や埃を流せばよいのではと説明している。また入浴後に自分に合った保湿剤を塗ることも皮膚のバリア機能回復に役立つ。

京都大学保健管理センター


2007-03-31

_ 映画

「秒速5センチメートル」を見に行ったんですが、うーん、って感じ。

「パフューム」も見に行きました。驚くほど原作に忠実につくってありました。映画としておもしろいかというとどうだろうという気もしますが、ほとんど喋らず勤勉に人を殺す続ける野郎が主人公だから仕方ないかな。

_ 規制緩和によって長距離バスは危険になったか

少し前に規制緩和によって長距離バスの事故は増えたことを示すグラフがマスコミに頻出していました。波線を使って不必要に省略してあるという問題はさておき、この数値だけでは長距離バスがより事故を起こしやすくなったとはいえません。なぜなら、規制緩和によって長距離バスの利用が増えて、その結果事故は増えただけかもしれないからです。

危険になったかどうかは、走行距離当たりの事故の発生件数を見れば良いです。だけども、警察庁が発表している「平成18年中の交通事故の発生状況について」には、バス・マイクロバス・タクシーを全部ひっくるめた事業用乗用の走行距離当たりの事故の発生件数しか載っていません(P21)。うーん。


最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ 最新 追記