脳ざらし紀行


2005-01-01

_ [Ruby] net/http で Digest 認証、つづき

dig.rb。色々直した。以下は まにある。

--- Net::HTTPRequest#digest_auth(user, pass, res, config={})
    リクエストのヘッダに Digest 認証のための Authorization ヘッダを追加する。
    引数はそれぞれユーザ user、パスワード pass、そして res はサーバから返ってきた
    WWW-Authenticate ヘッダを含む Net::HTTPResponse オブジェクト。
    WWW-Authenticate ヘッダに指定された認証方式が Digest 認証でない場合は、
    例外 ArgumentError を投げる。
    
    認証が成功した場合にサーバからのレスポンスをチェックするための
    Net::HTTPRequest::DigestAuth オブジェクトを返す。

--- Net::HTTPRequest::DigestAuth#check_rspauth(res)
    認証が成功した場合にサーバからのレスポンスに含まれる Authentication-Info ヘッダ
    の response-auth を検証する。res は HTTPResponse オブジェクト。
    検証に失敗した場合 false を返す。
    
    Authentication-Info ヘッダが response-auth を持つかどうかはオプショナルである。

課題。Authentication-Info ヘッダに含まれる next nonce をどこら辺で取り扱うか。


2005-01-03


2005-01-04

_ [Ruby] ランダムなバイト列

時々必要になりますが、ランダムなバイト列を生成するには、

[rand(0x100000000)].pack('I*')

とか、

Array.new(10){ rand(0x100000000) }.pack('I*')

でしょうか。rand(0x100000000) で 0 から 0xffffffff までの整数を一様に出力するはず。それを pack で文字列に変換するとランダムなバイト列がえられます。ランダムな文字列が欲しい場合は、

a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
Array.new(16){a[rand(a.size)]}.join #=> "zfn8n3Adwv2njdi9"

なんてのも。

それはそうと、random.c でせっかくメルセンヌツイスターがランダムなバイト列を生成しているのだから、それを直接使えた方が速いし良いなあと思う。一旦 double にしてからまた、unsigned long にしているからビット列としてのランダムネスがその分 落ちているし。


2005-01-05

_ うつ病の治療

うつ病は伝統的な立場では発病状況と病前性格と症状のパターンと臨床経過から診断される(発病状況論)。最近は操作的診断基準(DSM-IVあるいはICD-10)にあてはまるものが「うつ病性障害」であるとされている。

 次に、精神科医が診断をする目的について。診断は、1)自然経過の予測、2)特定の治療への反応性の予測のために行われる(そして「診断名を与えること」は一部の患者にとって明らかに治療的である)。言い換えると、自然経過と特定の治療への反応性を的確に予測できるなら、その疾患概念は優れている。うつ病はいずれも予測しやすく(例:高い自殺既遂率)、さらに、薬物治療がある程度確立しているので診断的な意義が高い。

http://d.hatena.ne.jp/hotsuma/20041228#p2

「操作的診断基準」が「自然経過を的確に予測できる」かどうかは、診断基準と予測される自然経過が明確なものなら統計的に検定可能だろう。また診断基準などが明確であるかどうかも複数の医師に同じ患者を診断させるなどして検定可能だろう。

またある薬物がうつ病に対して効くかどうかも、実際に投与するグループと偽薬を投与するグループを用意して二重盲検法(患者だけでなく医師にも偽薬かどうかを教えない)を実施して、その経過を比べれば薬の有効性は統計的に検定可能だろう。

というわけで、診断基準や薬物の有効性が統計的に検定できるわけだから、筋の良いフレームワークだなあと素人ながらに思う。後は本当にちゃんとデータを集めて検定を行っているかという実際的な問題と、そもそも その病気を直すことが〈良いこと〉なのかという価値判断の問題になるのかな。

どうでもいいけど Google でDSM-IVを検索すると風野さんの「私家版・精神医学用語辞典 DSM-IV」がヒットするのか。

_ 対照群の有無が不明な報道

大豆イソフラボンが骨粗鬆症に効くかどうかは、偽薬を与えるグループをちゃんと用意して実験しないと分からないという話。

うつ病の薬の有効性は大豆イソフラボンが骨粗鬆症に効くかどうかと同じ枠組で考えることが出来る。

_ [本] 隣家全焼

本の画像ナンシー関・町山広美著『隣家全焼』、読了。全然おもしろくない。

どうでもいいけど、町山広美氏と町山智浩氏は兄妹らしい。本に出てくるわけじゃないけど。


2005-01-07

_ [国内] メディアで使われている性犯罪者の再犯率は嘘

そもそもそのような統計自体存在しない。

1月2日付「関口宏のサンデーモーニング」で「性犯罪者の再犯率約41%(警察庁調べ)」という数字を出していた。上記のEntryを読んだばかりだったので、ちょっと高すぎはしないかと思い、念の為TBS視聴者センターに確認することにした。質問は「この41%の元になった資料は何か」というもの。担当者の人によると警察庁のHPの平成15年度の統計データ(pdfファイル)から算出したものだという。具体的には表43「罪種別 初犯者・再犯者別」の「公然わいせつ」の欄の「総数1,456」の内「再犯者611」から出したそうだ。

Dead Letter Blog

再犯者率と再犯率は全く別のもの。性犯罪者のうち(性犯罪に限らない)前科を持っている人の割合が「性犯者の再犯者率」。性犯罪で有罪判決を受けた人達のうち再び犯罪をおかす割合が「再犯率」。「再犯率」の統計は存在しない。

また「同一罪種の再犯者率」(これも再犯率ではない)に関しても強制わいせつや強姦は刑法犯全体から比べて高いわけではない。日記みたいなモノ。

さっき、TV朝日のワイドスクランブルで、『性犯罪者の再犯率が50%超』とか言ってたので、「数字の根拠は何ですか?」と電話で質問したら、お客様係のお姉さんが「警察発表です」との返答。

こちらも「警察にはそう言うデータは無いが、もしかして言葉の定義を間違っていないか?」とデータを示しておかしい事を説明すると、お姉さんに「警察発表をそのまま報道しているだけなので分かりません」と切り返される。

日記みたいなモノ。

アメリカには性犯罪者の再犯率の統計が存在する。

米国の民間団体 National Center on Institutions and Alternatives のメタ調査(既にある多数の調査を組み合わせて全体の傾向を調べる調査)によると、性犯罪の再犯率は13%程度。他の犯罪よりずっと低いくらいで、これは米国では貧困を原因とする犯罪が非常に多い事を考えると当たり前です。もともと貧しい人は刑務所を出ても貧しいままだから、生きるために犯罪に踏み切らざるを得なかったりするでしょ。

macska dot org

ミーガン法批判。性犯罪者の住所を周囲の住民に報告するいわゆるミーガン法に関してはその有効性自体に疑問がある。

ワシントン州はミーガン法という言葉が出来るよりずっと前の1989年に全米に先駆けて「特に危険の高い性犯罪者」についての情報の一般告知をはじめているけれど、この調査では一般告知開始後に釈放された(つまり、情報が告知されている)元受刑者のグループと、一般告知が開始される前に釈放された元受刑者のうち彼らと同程度の罪をおかした人たちのグループを比較して、それぞれ出所後54ヶ月のうちに再犯する確率を調べた。結果は、情報告知開始後の方が「やや再犯率が低い」ように見えるものの、統計学的に有意な差は認められなかったという。つまり、ミーガン法によって性犯罪者の再犯率が減るという効果はこの調査からは認められなかった。

macska dot org

macska dot orgmacska dot org

児童小銃のコメント欄児童小銃

■追記(2006/04/08)

この後、性犯罪者の再犯率に関する調査が法務省により行われ以下のような結果になった。

性犯罪者の実態と再犯に関する分析

再犯調査の対象となった性犯罪者の再犯状況別構成比は,図2のとおりである。調査対象者のうち出所受刑者の再犯率は,39.9%(満期出所者では63.3%,仮出獄者では30.8%)であり,性犯罪再犯率は,11.3%(満期出所者では19.1%,仮出獄者では8.3%)であった。

これに対し,執行猶予者の再犯率は,13.5%(保護観察付き執行猶予者では18.8%,単純執行猶予者では12.1%)であり,性犯罪再犯率は,3.8%(保護観察付き執行猶予者では7.1%,単純執行猶予者では2.9%)であった

4 まとめ

今回の調査研究により,これまで統計的に必ずしも明らかでなかった性犯罪者の再犯率に関するデータを得られたほか,性犯罪者の実態及び再犯の状況等を類型別に明らかにするなどの成果を得ることができた。今回の調査では,性犯罪者の性犯罪再犯率は,出所受刑者が11.3%(満期出所者では19.1%,仮出獄者では8.3%),執行猶予者が3.8%(保護観察付き執行猶予者では7.1%,単純執行猶予者では2.9%)であった。

性犯罪者の類型別では,小児わいせつタイプには同種犯罪を繰り返す者が比較的多いことがうかがわれた。また,今回の調査対象者に関する限り,集団強姦タイプの性犯罪再犯率が0%であった。

http://www.moj.go.jp/PRESS/060331-1.pdf

_ (-1)×(-1)=1を証明してください。

がリンクされているなあというだけなんですが。

私がこれを写せば著作権に反しますので、あえてURLを載せました。ご了承下さい。

別に引用の範囲を越えてコピーしてもらっても僕は良いのだけど。やっぱりクリエイティブコモンズライセンスを適用しておいた方が便利なのかも知れない。

回答を読んでいると、負の数の掛け算は義務教育の範囲内なんだから、ちゃんと理解して下さい。と、思わなくもない。

同じ義務教育の範囲内なのに、ある教科のある知識は世間一般で常識として大抵の人が知っていて、別の知識はほとんど知られていないというのは、どうしてなんだろう。

負の数の掛け算の場合は、「どうして (-1)×(-1)=1 になるか」が教科書に書いてないからなんだけどね。前に紀伊国屋へ行って調べてみたけど、ざっと見た感じでは (-1)×(-1)=1 の証明はどの教科書にも載っていなかった。なんか良く分からない説明をどの教科書もしていた。教科書に載っていないんだから、そら知らんだろう。

仕組みを知らなくてもとにかく計算できたらそれで良いんですかね。

_ 自分以外はみんな馬鹿

フロイト先生のウソ』を読んでいると「第三者効果」に関するおもしろい記述があったので紹介。

人間は誰もが、マスメディアが他人に対して及ぼしている影響は自分に対するそれよりもずっと大きい、と考えているのである。「第三者効果」と呼ばれるこの現象は、広告、映画、ニュース、ポルノなどあらゆる形態のメディアに関して見られる。数年前、アメリカのある心理学者がこの「第三者効果」を詳細なアンケートによって明らかにして見せた。

たとえば、回答者は、子どものころメディアに踊らされて「くだらない」ものを買わされた回数は自分よりも他人のほうがずっと多い、と確信していた。また、ポルノやテレビの暴力シーンから悪影響を受ける度合いは自分よりも他人のほうがずっと高い、とも信じていた。

(中略)

被験者を二つのグループに分け、一方のグループに疑わしい情報(ダイエット食品の宣伝文句など)に特に引っ掛かりやすい人は誰ですか、という質問をした。もう一方のグループには、「道徳性の高い」情報(外国人排斥に対する抗議運動など)に最も強く影響を受けると思われる人を挙げてもらった。その結果、ほとんどの回答者がネガティブな情報の影響を受けるのは他人だと考えていることが分かった。一方、「立派な」情報には他人よりも自分の方が強く反応する、とも考えていた。

『フロイト先生のウソ』P126〜P127

さらにつづきがおもしろい。

この第三者効果がメディアの影響力をもっともらしく見せ、メディア規制を求める声を増幅させている。アメリカで行なわれたアンケート調査で、85パーセントの人が、暴力シーンとポルノは他人には有害な影響を与えると答えている。影響を受けるのは他人よりもむしろ自分だと答えた人は3.8パーセントに過ぎなかった。「自分は影響を受けない」と答えた人だけが、メディア規制に賛成していた。

『フロイト先生のウソ』P127〜P128

上の文章を読んでも大抵の人は「俺以外の奴は『自分以外はみんな馬鹿だ』と思っているのか。馬鹿だなー。」と思うんだろうか。←という考え方自体が「第三者効果」。←ちょっと用法が違う。

元の文章の主題である「メディアに影響力は本当にあるか」に関しては「強力効果論」「限定効果論」「複合影響説」「議題設定機能」「点火効果」「沈黙の螺旋理論」「第三者効果」など色々と研究の流れがあるそうだ。報道と世論の関係


2005-01-08

_ [国内][ネット] 法務省犯罪白書の歩き方

ネット上で全文が読める。分かりにくいけど、目次検索から、読みたい年度の白書を選択して実行をクリック。

直リンク。

平成14年版 犯罪白書

平成13年版 犯罪白書

平成12年版 犯罪白書

平成11年版 犯罪白書

再犯率はないけど(刑務所への)再入率ならあった。刑法犯全体での数字。平成8年に出所した受刑者21369人のうち平成13年までに 47.9% が刑務所にまた戻ってきている。平成14年版 犯罪白書 再入状況平成14年版 犯罪白書 2-4-2-7表 平成8年出所受刑者の平成13年末までの再入率。すげえ高いな、おい。

有罪判決を受けた全員が刑務所に入るわけではないので、再犯率と再入率は一致しない。

前刑罪名と再入罪名の一致度(前刑罪名と再入罪名が同一である比率)が高い罪種は,傷害,強姦,強制わいせつであり,これらの3罪種は,同一犯罪を繰り返しやすいことが指摘できる。

http://hakusyo1.moj.go.jp/nss/list_body?NSS_BKID=43&NSS_POS=239

とあるけど、これは性犯罪者の再犯率が高いことを意味しない(低いことも意味しない)。性犯罪者がいて そいつがもし刑務所にはいったことがあるなら、前科も性犯罪であることが多いという意味。

性犯罪者のうちなんらかの前科をもっている割合は30%程度。刑法犯全体の平均と変わらない。性犯罪者のうち性犯罪の前科をもっている割合は10%程度。成人の主要罪名別前科者及び同一罪種の前科を有する者の比率

『平成14年版 犯罪白書』の関係ある項目は

第1編 平成13年の犯罪の動向 第3章 犯罪歴を有する者の犯罪 第1節 犯罪歴を有する成人の犯罪

第2編 犯罪者の処遇 第4章 成人矯正 第2節 行刑施設における収容状況 4 再入状況

第5編 特集 暴力的色彩の強い犯罪の現状と動向 第4章 矯正・保護における動向 第1節 矯正 1 成人矯正の動向

第5編 特集 暴力的色彩の強い犯罪の現状と動向 第4章 矯正・保護における動向 第2節 保護 1 保護観察対象者の動向

_ [国内] 警察白書

こっちは分かりやすい。

_ [国内] 国内の治安は悪化したか

刑事学 通年

犯罪現象の数的把握と刑事統計データベース

_ 遺失物等横領

犯罪白書を読んでいると年間の認知件数6万件、検挙率が100%である謎の犯罪「遺失物等横領」というのが出てきました。

どうやら放置自転車を勝手に乗っていて警察官に見つかった場合、「遺失物等横領」に分類されるらしい。だから検挙率も100%。

(遺失物等横領)

第254条 遺失物、漂流物その他占有を離れた他人の物を横領した者は、1年以下の懲役又は10万円以下の罰金若しくは科料に処する。


2005-01-09

_ [国内] どうして「再犯率」が重要か

ミーガン法を採用しようが、認知心理学認知行動療法による矯正をしようが、全ての対策にはコストが掛かる。対象者ひとりあたりのコストが罪名に関わらず同じなら、効率的に犯罪を防ぐためには、「再犯率」の高い受刑者(or 元受刑者)に資源を割り当てた方が良い。だから「再犯率」が「再犯者率」より重要になる。

もしも矯正しやすい犯罪者と罪名というものがあるのなら、そっちの方に資源を割り当てた方がいい。

児童小銃で「再犯率」より「再犯者率」が重要になる場合という話題があったので。対策のコストを考慮していないと思います。


2005-01-10

_ 「再犯率」、つづき

現在の未犯者の数:  N
現在の罪名 A の既犯者の数:  C_A
現在の罪名 B の既犯者の数:  C_B

C_A = C_B < N とする。

次の期に未犯者が罪名Aを犯す確率:  Q_A
次の期に未犯者が罪名Bを犯す確率:  Q_B
次の期に罪名Aの既犯者が犯罪Aを犯す確率(再犯率):  P_A
次の期に罪名Bの既犯者が犯罪Bを犯す確率(再犯率):  P_B

 P_A < P_B とする。簡単にするため、罪名Aの既犯者が犯罪Bを犯す確率は0とする。罪名Bの既犯者が犯罪Aを犯す確率も0とする。

次の期の犯罪Aの数:  N Q_A + C_A P_A
次の期の犯罪Bの数:  N Q_B + C_B P_B

犯罪の対策効果:  P_A  P_B eP_A  eP_B になる。

犯罪Aの減少数:  C_A P_A (1-e)
犯罪Bの減少数:  C_B P_B (1-e)

一人あたり対策費:  cost

1. rna さんの定義の通り「コストパフォーマンス = 犯罪の減少数 / (対策前犯罪者数 * 一人あたり対策費)」とすると

犯罪Aに対策した場合のコストパフォーマンス: U_A = \frac{C_A P_A (1-e)}{C_A cost} = \frac{P_A (1-e)}{cost}
犯罪Bに対策した場合のコストパフォーマンス: U_B = \frac{C_B P_B (1-e)}{C_B cost} = \frac{P_B (1-e)}{cost}

よって、 U_A < U_B

2. 対策の効果 = 犯罪の減少数 としても

犯罪Aに対策した場合: \bar{U}_A = C_A P_A (1-e)
犯罪Bに対策した場合: \bar{U}_B = C_B P_B (1-e)

よって、 \bar{U}_A < \bar{U}_B

3. 対策の効果 = ある特定の罪名の減少率 とすると

犯罪Aに対策した場合: \hat{U}_A = \frac{C_A P_A (1-e)}{N Q_A + C_A P_A}
犯罪Bに対策した場合: \hat{U}_B = \frac{C_B P_B (1-e)}{N Q_B + C_B P_B}

この場合分からない。

4. 対策の効果 = 全体の減少率とすると、

犯罪Aに対策した場合: \tilde{U}_A = \frac{C_A P_A (1-e)}{N Q_A + C_A P_A + N Q_B + C_B P_B}
犯罪Bに対策した場合: \tilde{U}_B = \frac{C_B P_B (1-e)}{N Q_A + C_A P_A + N Q_B + C_B P_B}

よって、 \tilde{U}_A < \tilde{U}_B


2005-01-11

_ [ネット] 動き検索あれこれ

おもろい。

_ [ネット] GaucheのVMの最適化

より。

_ ゲーム脳っていうのは頭が良いってことなんだ

また ロルフ・デーゲン著『フロイト先生のウソ』を読んでいて飛び上がるくらい驚いたので書く。

『フロイト先生のウソ』の第4部第1章「一〇パーセント神話」では「人間の脳は10%しか使われていない」という俗説を色々な実験結果を紹介しながら否定している。その中で脳のエネルギー消費に関する話題がでてくる。良く知られているように脳は人間のからだの総エネルギー消費の20%を占めている。では、思考量が増えると脳のエネルギー消費も増えるのだろうか。それとも減るのだろうか。

陽電子放射断層撮影法(PET)のような、脳内のどこでどれだけエネルギーが消費されているかを映像で示すシステムが開発されて以来、研究者たちは、「仕事量を増やすためにはより多くの燃料がいる」という「蒸気機関式思考法」と決別した。最近の実験は全て、特定の頭脳労働を再短時間でこなした最も明晰な頭脳のエネルギー消費量がもっとも少ないという結果を示した。言い換えれば、問題を解くのが遅い人は速い人よりも消費電力が大きいということである。

『フロイト先生のウソ』 P347

なんだか消費電力が大きいくせに遅いってどこかの CPU みたいですね。ここまでだと「そうなんだ」で終ってしまうけど、ここからがおもしろい。

頭脳労働にしろ肉体労働にしろ、習熟度が高まるにつれて脳の活動量は低くなる。アメリカの研究者グループが、伝説的なコンピュータゲーム「テトリス」を使った実験でこれを明らかにした。落下してくるブロックを必死になってさばいている初心者の脳は、神経回路の巨大なネットワークをフル稼働させていた。ところがゲームをマスターしてしまうと、彼らの脳の活動範囲は最小になった。この新しい「オームの法則」――知能は脳の仕事量に比例し、脳のエネルギー消費に反比例する――は、脳波計を使った実験でも裏付けられた。複雑な問題を再短時間で解いた被験者の脳波の変化がもっとも少なかった。

『フロイト先生のウソ』 P348

これってそのまま「ゲーム脳」の話じゃないか!! つまり森氏が観測した「ゲーム脳」っていうのは、上の実験のとおり脳のエネルギー消費が減って問題を効率良く解いている状態を見ていただけだったんだ。

多分以下がデーゲン氏が参照したであろう論文。巻末には載っていなかった。

Haier R.J., Siegel B.V. Jr, MacLachlan A., Soderling E., Lottenberg S., Buchsbaum M. (1991) Regional glucose metabolic changes after learning a complex visuospatial motor task: a positron emission tomography study. Brain Res 1992 Jan 20;570(1-2):134-43.

_ [国内] 親告罪で告訴がなくても捜査はできる

親告罪について告訴がなければ逮捕されないと考えられている方がいますが、告訴は公訴提起の要件(訴訟条件)であって、捜査の要件ではありません。


2005-01-14

_ [国内][ネット] オレオレ証明書

採用!!

それはそれとして、Completely anonymous connection は以下のような感じで、

 $ openssl s_server -accept 10080 -nocert -www

出来るらしい。


2005-01-16

_ [Ruby] ある更新を表す permlink

ruby 1.8.2 featureを編集していると、[ruby-dev:000000] みたいに個々の変更にも id を割り当てて([MAIN:000000]とか) リンクとして CVSWeb へ参照するようにすると便利ではと思った。HEAD からのバックポートの時も単に「HEAD からのバックポート」とだけ書くんじゃなくて、割り当てた id を列挙すればいい。

何か機能としては cvs にも subversion にもありそう。


2005-01-19


2005-01-20

_ [Ruby] 公開鍵がpem形式じゃなくて、p、q、g、pubの数字が与えられているとき

こんな感じで。

require "openssl"
dsa = OpenSSL::PKey::DSA.new()
dsa.p = p
dsa.q = q
dsa.g = g
dsa.pub_key = pub
dss1 = OpenSSL::Digest::DSS1.new
data = "hoge"
p dsa.verify(dss1, sign, data)

OpenSSL::PKey::DSA


2005-01-23

_ [Ruby] 複数のバージョンの ruby を共存させる

Rubyの本の執筆をするような人でなくても、複数のバージョンの ruby を標準ライブラリ込みで共存させることが出来ると便利なことがある。手元では ruby-1.8.2 を使いたいけど、借りているサーバが ruby-1.8.1 なので動作確認のために、ruby-1.8.1 もインストールしたい場合など。

以下のようにすると、標準ライブラリ込みで共存させることができる。ruby の標準ライブラリは PREFX/lib/ruby/1.8/ にインストールされる。これを PREFX/lib/ruby/1.8.x/ にインストールされるように変更すればいい。IRC で教えてもらった。

次のようなパッチを configure.in に当てて、autoconf を実行。

Index: configure.in
===================================================================
RCS file: /home/cvs/ruby/configure.in,v
retrieving revision 1.212.2.23
diff -u -1 -p -r1.212.2.23 configure.in
--- configure.in        22 Dec 2004 15:16:55 -0000      1.212.2.23
+++ configure.in        23 Jan 2005 08:55:15 -0000
@@ -1391,3 +1391,3 @@ case "$target_os" in
 esac
-RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}"
+RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}.${TEENY}"
 
@@ -1405,3 +1405,3 @@ case "$target_os" in
 esac
-RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}"
+RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}.${TEENY}"

さらに、 mkconfig.rb に以下のようなパッチを当てる。

--- mkconfig.rb 2003-08-05 18:27:20.000000000 +0900
+++ mkconfig.rb 2005-01-23 18:10:33.000000000 +0900
@@ -106,7 +106,7 @@
 
 print v_fast, v_others
 print <<EOS
-  CONFIG["ruby_version"] = "$(MAJOR).$(MINOR)"
+  CONFIG["ruby_version"] = "$(MAJOR).$(MINOR).$(TEENY)"
   CONFIG["rubylibdir"] = "$(libdir)/ruby/$(ruby_version)"
   CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
   CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"

あとは

./configure --program-suffix=-1.8.1 && make && make install

を実行する。

 $ ruby-1.8.1 -v                    
 ruby 1.8.1 (2003-12-25) [i686-linux]

2005-01-24

_ [Ruby] kconv の挙動

Just another Ruby porter より。罠だな。


2005-01-25

_ [ネット] 2ちゃんねる

前後の文脈が分からない日記を見かけたら取り敢えず2ちゃんねるのスレに対する回答だと思えば良いんだ。

CMSとしてのWiki

Ruby のドキュメント

Rubyについて Part 14

間違えたようです。すいません。


2005-01-26

_ [Ruby] ri のための zsh 補完

zsh function _ri

作ってみた。既にありそう。/usr/share/zsh/functions/Completion/Unix に放り込むのが一番簡単なインストール方法かな。クラスとメソッドのリストをハードコーディングせずに ri -l を使って動的に補完する方法もあるはず。

ちょっと使ってみた感じでは死ぬほど便利。最強に強まった。リファレンスマニュアルに書く気が失せる。

■追記

zt日記を参考にして動的に補完するように書き換え。sed で # を . に置換。

zsh function _ri 2

_ [Ruby] リファレンスマニュアルでインクリメンタル検索

いやなブログの JavaScript でインクリメンタル grep 検索を Ruby のリファレンスマニュアルに組み込んでみる実験。

String

メソッドを入力してね。gsub とか。ちょっと動作が重い。ページ内検索はブラウザに任せた方が良さそう。

IE だと割と速い。


2005-01-27

_ 言語とドキュメント

補完関係を何とかしようと zsh のマニュアルの読むたびに、ドキュメントの量が多いからといってプログラミング言語の理解がより容易になるとは限らないんだなあと思う。

_ [Ruby] 2ちゃんねる

Ruby のバグ(勝手に)トラッカーには2ちゃんねるのレス番号も指定できた方が良いのでは。冗談ですが。

_ [ネット] 新しい Wiki フォーマットを〈理解〉するコスト

新しい Wiki のフォーマットを覚えることはそんなに苦痛ではない。だって、ほとんどの書式は使わないし。知っておく必要はあるのは リスト・整形済みテキスト・新しい段落の始め方 くらい。だけど、その Wiki の文法が常識に反していた場合は、〈覚える〉コストではなくて〈理解する〉コストが掛かる。

例えば、URI を書き込む時は scheme 部分を大文字にしないと文法エラーになるとか。最初何がエラーになっているのかさっぱり分からなかった。

× http://www.example.com/
○ HTTP://www.example.com/

RubyGarden に ruby 1.8.2 の変更点を書き込もうとしてハマった。

_ [Ruby] www.ruby-lang.org リニューアル

デザイン面は個人の好みの問題があるので置いとくとして、サイト内検索が貧弱なのは駄目だと思う。いっそのこと Google のサイト内検索を使った方が良い。

XML をサイト内検索

Google で XML をサイト内検索

あれ Google 様にも REXML のページが引っ掛からない。って、REXML のページに「XML」という単語が1回も出てきていない。罠だ。

あと、検索フォームはブラウザをスクロールしなくても見えるように、ページの上部に欲しい。

_ 15.4%が「死人は生き返る」 長崎で小中学生調査

そら 輪廻転生を信じている仏教徒なんじゃないの、と思った。

人間というのはあまりに大きな変化を予想しない生き物のようで、死という不可逆な変化も予想し難い。そういった本能が「死んだら何もない」という考えを否定して、「死んでも何かある」という、現在の延長線上の「死」という、ある意味自然な考えを生んだ。それが宗教の始まりだったんだと思う。

_ [ネット] フリーソフトウェア作者は独占禁止法違反を為し得るか?

とりあえず、読んでおこう。


2005-01-28

_ [Ruby] 複数のソースにまたがる拡張ライブラリに RDoc を書く

OpenSSL などの巨大な拡張ライブラリは複数のファイルにモジュールやクラスの定義が散らばっている。なので、単純に RDoc を書いていくだけでは rdoc 実行時にエラーになる。例えば OpenSSL::Cipher::Cipher で言えば OpenSSL と OpenSSL::Cipher と OpenSSL::Cipher::Cipher が同じファイルで定義されていなくてはいけない。けど 実際には同じファイルでは定義されていない。というわけで、ossl_cipher.c に以下のようにコメントとして OpenSSL の定義を書き加えないといけない。

Init_ossl_cipher(void)
{
    /* mOSSL = rb_define_module("OpenSSL"); */
    mCipher = rb_define_module_under(mOSSL, "Cipher");
    eCipherError = rb_define_class_under(mOSSL, "CipherError", eOSSLError);
    cCipher = rb_define_class_under(mCipher, "Cipher", rb_cObject);

ハマった。Ruby のコードでは外側のモジュールやクラスは同じファイルを見れば、必ず分かるから、

module OpenSSL
  module Cipher
    class Cipher

こういった別のファイルを見に行かないといけない状況を、rdoc は想定していないようだ。

_ [国内] 虚偽自白

虚偽の自白の実例。

_ [Ruby] 拡張ライブラリに RDoc を書く、その2

上のような回避方法はあまりにダサいし、ドキュメントを書く側の負担になるので以下のようなパッチを書いた。

Index: parse_c.rb
===================================================================
RCS file: /src/ruby/lib/rdoc/parsers/parse_c.rb,v
retrieving revision 1.25
diff -u -1 -r1.25 parse_c.rb
--- parse_c.rb  9 Sep 2004 02:47:35 -0000       1.25
+++ parse_c.rb  28 Jan 2005 02:45:45 -0000
@@ -171,2 +171,3 @@
 
+    @@enclosure_classes = {}
     @@known_bodies = {}
@@ -210,3 +211,3 @@
       if in_module
-        enclosure = @classes[in_module]
+        enclosure = @classes[in_module] || @@enclosure_classes[in_module]
         unless enclosure
@@ -231,2 +232,3 @@
       @classes[var_name] = cm
+      @@enclosure_classes[var_name] = cm
       @known_classes[var_name] = cm.full_name

@known_classes にも同様の対処が必要なんだろうか。後で ruby-core に投げようっと。

_ [海外] アメリカとヨーロッパは全然違います

Yes, I know.

ドイツかあ。いつか行こう。でも、こっちも裸にならないといけないのか。体を鍛えておこう。

_ [本] フランス語の本は www.amazon.ca でも買える

フランス語で書かれた専門書をずっと探していて、出来れば英訳されたものが良かったんだけど、絶版なので、フランス語でいいやと www.amazon.fr を探してみたけどなかった。

ふとした偶然で www.amazon.ca に探していた本を見つけた。そうかあ、カナダは盲点だった。地理で習ったよ、ケベック州。行ったことないけど。

_ [本] 本屋

本は大抵アマゾンで買うようになった。電車の中で読む文庫や新書は本屋で買うこともあるけど。あとまんがは本屋で買う。

というか、梅田の紀伊国屋は不快過ぎる。英会話の勧誘がうざい。なぜ客にあそこまで不快な思いを強いるのか理解に苦しむ。これほど不快なのは寒空の下に客を外で並ばせる銀行の ATM くらいだ。本屋も銀行もどちらも規制産業なのは偶然だろうか。

あと客が多すぎる。邪魔。本も多すぎ。(僕にとって)どうでもいい本が多すぎる。大量の本をただ並べただけというインターフェースは非常に不便だ。

本を検索するのに順番を待たないといけない。

ネットで検索できない。ネットでの評判を見られない。www.amazon.com での評価が見られない。

本を読むのは好きだけど、本屋は好きではなくなってきている。どうか www.amazon.co.jp は潰れないでいて欲しい。というようなことを、文藝春秋の2月号を読んで思った。

アマゾンが潰れたら http://www.7andy.jp/all (元 http://www.esbooks.co.jp/ )を使うかな。

関係ないけど、フィッシング詐欺が流行っている現在、「 http://www.esbooks.co.jp/ から http://www.7andy.jp/all にサイトの URL が変わりました。」なんていうメールを出すのは、非常識だなあと思った。

_ [国内] 判例データベース

日本で判例を探すのは裁判官でさえ大変だという話。

_ [ネット] 知っておきたかったこと

大学の教科書だってひどいものだ。大学に入ってみれば、教科書の多くは(いくつかの輝ける例外を除いては) その分野の第一人者が書いたものじゃないことがわかるだろう。

http://www.shiro.dreamhost.com/scheme/trans/hs-j.html#note9

うっそだー。どの分野の話だよ。一流の研究者が書いた本が必ずしも良くできているとは限らないという方が問題なんだけど。

_ [本] PLATEX初級リファレンス

本の画像同人誌のはずなのになぜかアマゾンで売っている。

_ [国際] ハイムリック法と家族の絆

おもしろい。

_ コス∞ヒット!LOVE OPコレクション [MAXI]

名作 moe の変身三部作の OP が MAXI CD に!! 伝説の能登麻美子『ヒットをねらえ!』がシングルカットですよ!! 買うしか。


2005-01-29

_ [国際] 1637年のチューリップ

その美しい姿で人々を魅了し1637年のチューリップバブルの原因となったチューリップはどんなだったか。

Special Collections: Tulip Book

_ [国内] 再犯者率に関する反論への反論

再犯者率と再犯率の議論に関して yts さんから反論をもらったのでそれに対して書きたいと思います。残念ながら yts さんの議論は反論になっていません。

yts さんは効用がコストを上回れば犯罪対策(ミーガン法)を実施すべきだと言い、上回るかどうかは再犯率でなく再犯者率に依存すると言います。数式を使って述べると、次の不等式が成り立てば、犯罪対策(ミーガン法)を実施すべきだそうです。この式に再犯率は出てきません。

 p(t) (1 - r) l x(t) - c(X(t)) > 0

c(X(t)) は総費用、p(t) (1 - r) x(t) は犯罪対策による犯罪の減少数、l は犯罪1件当たりの被害です。 X(t) は既犯者数です。この式を変形すると

 \frac{p(t) (1 - r) x(t)}{c(X(t))} > \frac{1}{l}

となります。この式の左辺は rna さんのコストパフォーマンスの定義と同一です。よって、rna さんに対する僕の議論がそのまま当てはまってしまいます。というか、yts さんの上の式の議論は rna さんのそれを犯罪対策の効用を導入するという別の形で繰り返しているだけです。

yts さんはまた犯罪 a と b の再犯者率を比較してどちらにミーガン法を導入すべきか決めるべきだと主張しています。しかし、yts さんは僕と違って犯罪対策による効用を導入したのですから、犯罪 a と b を比較するのは無意味です。犯罪 a に関して上の不等式が成立するなら、それは効用がコストを上回っているわけですから、犯罪 b に関係なくミーガン法を導入するべきだということになります。また犯罪 a と犯罪 b を比較した結果がどうであろうと、犯罪 a に関するコストが効用を上回っているなら、ミーガン法は導入すべきではないということになります。

それに A(t) = B(t) かつ a(t) = b(t) を仮定してしまうと、再犯者率が高い方の犯罪は同時に再犯率の高い犯罪なわけですから、「再犯率は重要ではない」という結論は出てきません。

_ [Ruby] Rubyリファレンスマニュアル

なんかたくさん更新されている。良い。


2005-01-30

_ [ネット] TAB は悪

doc/irb/irb.rd.ja をリファレンスにコピーしたら

 [BUG]: probably Parser Error while cutting off.

という謎のエラーが。エラーメッセージの意味が分からない。RWiki のバグってこと?

色々試行錯誤した結果、doc/irb/irb.rd.ja に少しだけ使われていた TAB が原因だと分かった。TAB は悪だ。

_ [Ruby] 添付ライブラリ

更新されていた。随分、見やすくなった。

けど、一般論として分類の罠というか、あるライブラリをどの項目に分類するかが書いた人と読む人で一致しないかも知れないんだよなあ。

それはそうと、Description List の方が見やすいし、適切だと思うので直そう。

■追記。

Description List にすると逆に見にくくなったので元に戻した。


2005-01-31

_ [Ruby] 重要かもしれない発表

1.8.3のリリース予定は4月です。

今回はどんなドラマが生まれるのか!!!

_ [ネット] Emacs でタブ, 全角スペースに色をつける

TAB と共生するために、その1。Emacs で TAB、全角スペース、行末スペースに色をつけたり、下線を引いたりする。

便利。全米が泣いた。ネタ元

Meadow/Emacs memoには大量の Tips がある。メモ。

色を light gray に変えた。

     (defface my-face-r-1 '((t (:background "light gray"))) nil)    
     (defadvice font-lock-mode (before my-font-lock-mode ())
     (defvar my-face-r-1 'my-face-r-1)
       (font-lock-add-keywords
        major-mode
        '(("\t" 0 my-face-r-1 append)
          (" " 0 my-face-r-1 append)
          ("[ \t]+$" 0 my-face-r-1 append)
          ;;("[\r]*\n" 0 my-face-r-1 append)
          )))
     (ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
     (ad-activate 'font-lock-mode)

_ [ネット] コメントを隠す

最初にソースにドキュメントを埋め込もうと言い出した奴は誰なんだろう。ソースが見にくくなるのに。

RDoc も量が多いとソースが非常に読みにくい。というわけで、コメントを Emacs の hideshow.el を使ってコメントを隠す裏技。ネタ元

.emacs.el に以下を追加。

(add-hook 'ruby-mode-hook 
          '(lambda()
            (hs-minor-mode 1)))  

(let ((ruby-mode-hs-info 
       '( ruby-mode
          "class\\|module\\|def\\|if\\|unless\\|case\\|while\\|until\\|for\\|begin\\|do"
          "end"
          "#"
          ruby-move-to-block
          nil)))
  (if (not (member ruby-mode-hs-info hs-special-modes-alist))
      (setq hs-special-modes-alist
            (cons ruby-mode-hs-info hs-special-modes-alist))))

意外なことに hideshow.el には hs-hide-all-comments という関数がない。だから作ってみた。

 (defun hs-hide-all-comments ()
   (interactive)
   (hs-life-goes-on
    (message "Hiding all comments ...")
    (save-excursion
      (hs-flag-region (point-min) (point-max) nil) ; eliminate weirdness
      (goto-char (point-min))
      (let (c-reg (count 0))
        (while (re-search-forward hs-c-start-regexp (point-max) t)
          (if (match-beginning 1) ;; we have found a block beginning
              (progn
                (goto-char (match-beginning 1))
                (hs-hide-block-at-point t)
                (message "Hiding ... %d" (setq count (1+ count))))
            ;;found a comment
            (setq c-reg (hs-inside-comment-p))
            (if (and c-reg (car c-reg))
                (if (> (count-lines (car c-reg) (nth 1 c-reg))
                       (if hs-show-hidden-short-form 1 2))
                    (progn
                      (hs-hide-block-at-point t c-reg)
                      (message "Hiding ... %d" (setq count (1+ count))))
                  (goto-char (nth 1 c-reg))))))))
    (hs-safety-is-job-n))
   (beginning-of-line)
   (message "Hiding all comments ... done")
   (run-hooks 'hs-hide-hook))

.emacs.el に書いておけば、M-x hs-hide-all-comments でコメントが全て隠れる。たぶん便利。


最近のコメント

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|
トップ 最新 追記