JSの設定

2010年11月14日日曜日

名古屋港水族館

写真。
http://picasaweb.google.com/spinel3/ElOxO#

前回名古屋に行った時はあつた蓬莱軒に待たされ名古屋港水族館に行く時間がなかったので、
今度こそということで行ってきた。
前日の夜に下痢をし、かなり厳しめだったが今回はひつまぶしを大量に食べるわけでもない。
いちおう用心して、東京駅でいつも朝食に食べるうどんは控えておにぎりだけにしておいた。

今回の写真はこれから後ろ。なんかもっと撮るべき写真があったような気がするが、イルカのパフォーマンスあたりからナイスショットを撮るのが難しくてどうでもよくなったようだ。

名古屋港水族館は北館と南館の2つに分かれていて、北館(だったかな?)はほとんどイルカ専門館といってもいいほどイルカ類(イルカ・シャチ・クジラ)で占められている。何しろ水族館に入ったらいきなりシャチのナミがいる。主役をいきなり出すとは・・・よっぽど自信があるのかと思ったが、南館は極めて普通だったので、全体的なバランスという意味ではまだ改良の余地があるという印象。

このイルカ館は、全国の水族館と比べても相当楽しい部類だと思う。イルカはまぁ、色んな水族館にいてパフォーマンスもするところが多いが、シャチの大きさがもの凄いのと、イルカの数が半端ない(水槽も多くて綺麗な気がする)のと、シロイルカの頭がぷよぷよという事実が判明したことで印象は強い。

そういえば、南館は極めて普通と書いたが、1つだけ凄いのがあった。それはシアターで、まず、スクリーンが馬鹿でかい。上映しているものは2つあって、「いきものがたり」と「チョウザメを絶滅から救え(みたいな内容、タイトルは忘れた)」。前者は、後ろに座ってる男も言ってたが、「なぜ水族館でこの題材・・・」と思わずにはいられない、しかし非常に出来のよい、グローバルに生態系を説明するもの。

後者は、キャビア人気で乱獲されて数が減って絶滅の危機に瀕しているチョウザメを増やそうプロジェクトに従事している一人のアメリカ人を追った話。五大湖がどうやってできたかとか、氷河が後退してその浸食作用でどうのこうのという歴史話も面白いが、個人的にはチョウザメが、姿はあんまり鮫っぽくなく、産卵のために鮭のように川のぼりをすることや、100年以上生きるものもあることに驚いた。

そんな感じで、名古屋港水族館あなどりがたし。
かなり時間がつぶせるのでイタリア村に行かなくても全然満足できちゃったよ、という一日だった。

2010年10月11日月曜日

長野県上田、真田城へ

とりあえず、メモと写真。
写真

1050あさま車内。ツイッターの不思議。ネットワークにつながっていないモバイル端末でも、こうやって時刻をつけてメモしておいてwifi環境に戻った時にツイッターにアップロードすることができる。旅の記録なんてものは友達とのリアルタイムなやりとりではないのだから、それで十分なはずだ。ところがやはり、ネットワークに繋がっている端末…例えば携帯電話を持っている時のほうが、いまツイートしなければ!という意欲が起こりやすい。そうしてもフォロワーが見てくれるのはずっと後かもしれないのに。そして、後でツイートした場合でも、同等の確率で見てはもらえるのだ。それでも(今すぐ)を欲するのは、今起こっていることや考えていることを今人に伝えられる可能性があるのならなるべくそうしたいという気持ちの現れだろうか。

1434 池波正太郎記念館となり、太平庵でクルミそばを食べた。上田城は特にどうということはなかったが、町と調和してる感じがする。例えば大阪城はすごいが、明らかにあの辺だけ異質である。その点上田の町は、城から離れて普通の住宅街や商店街になっても真田家の家紋や真田十勇士の旗などが其処かしこにみられる。

くるみ蕎麦、大盛り
すったクルミがついてる。正しい食べ方が分からない。

1515 池波正太郎 真田太平記館。単に自分が池波ファンなだけかもしれないが、これはすごい。書斎の写真とか実際に使われた原稿用紙とか、シアターやらギャラリーやら非常に充実。上田城より全然楽しい。
1640 お土産に『獅子』『チキンライスと旅の空』購入

1923 そうか、なるほど。どうも仕事のことはブログに書きにくいと思っていたが、何となく解決法を思いついた。確かに、開発中のサイトについてその全貌をペラペラしゃべるわけにはいかないが、こうやってメモをとっておいて、サイトリリース後にメモに多少の校正と考察を加えて公開すればいいのだ。もうすぐ東京につく。

2010年7月16日金曜日

同一局面に至る手順の違いで勝率が変わる?

yamajunn21さんのtwitterから引用:

週刊将棋の記事をみて思ったのだが、▲7六歩△3四歩▲2六歩より▲2六歩△3四歩▲7六歩の進行の方が先手勝率が高いって面白すぎる。同一局面なのだから、局面の問題でなく、その手順を選ぶ棋士の問題。
.@spinel3 ▲7六歩△3四歩▲2六歩(手順1)の先手勝率0.505で、▲2六歩△3四歩▲7六歩(手順2)の先手勝率は0.599で約1割違うとのことです。本当に面白いですよねえ。


うーん不思議だ。何でそうなるのか、ちょっと考えてみよう。
対局数としては▲7六歩△3四歩▲2六歩のほうが多いだろうから公平な比較はできないが、仮に居飛車党の先手にとって▲2六歩△3四歩▲7六歩の手順が有力であるとすれば、初手26歩に対する84歩は望むところ(少なくとも、初手76歩に対する84歩よりはウェルカム)なのだろう。

※後手が振り飛車党の場合は初手がどうだろうと2手目はだいたい34歩なのだから先手は手順を工夫する必要はない。なにしろ先手は3手目に25歩とするつもりがないのだから。

よって、26歩・84歩の出だしと76歩・84歩の出だしの先手勝率を比べて前者が高いようなら
「▲7六歩△3四歩▲2六歩の局面(局面A)を目指すなら初手は26歩とすべき」ということになる。

では、仮にそういう理由で手順2を経て局面Aに至るのが有力であるとして、手順1経由より勝率が高いもっともな理由がありうるとしたら、それは何か?

結論からいうと、yamajunnさんの言うように「同一局面なのだから、局面の問題でなくその手順を選ぶ棋士の問題」であろうと考えている。つまり、手順1が伝統的な出だしであるのに対して手順2は明らかに意図的なので、それを採用するには上の議論で述べたような「何か特別な理由」が必要である。多くの棋士を集めて何回も対戦させたら手順1と2が誰の棋譜にも均等に現れるというものではない。

「何か特別な理由」を持っている特定少数の棋士だけが手順2を選ぶのであり、それはやはり意識が高い棋士のなせる技だと思われる。

2010年7月11日日曜日

willcomのメールフィルタリングの不自由さを解決する

いかに、携帯(PHS)に残したいメールだけ(自動的にフィルタリングして)残すかという話。
willcomのメール設定では、fromアドレスを指定してメールの受信を拒否することができる。
アスタリスクが使えるので、例えば「*@*.com」みたいな条件を設定することができるが、
正規表現までは使えないので加減が難しい。そもそも、fromアドレスだけじゃなく本文もフィルタリング条件にしたい。

これを実現するために、知人には携帯アドレスではなく例えばGMailのアドレスを伝えることにし、そこに届いたメールは一旦全て自宅サーバに転送してしまい、思う存分フィルタリングをかけた上で好きなものだけ携帯に送るようにしてはどうか。間にGMailを挟むことで可用性が向上する上、第一フィルタリングをGMailで設定することによって自宅サーバの負荷を抑えられる。
メールの種類によって読む端末を分けたい場合にも有効で、GmailならiPadやiPhoneを初めとする無線LAN対応機器を使い通信料を発生させずに読むことができる。


「思う存分フィルタリング」のやり方。
だいたいここに書いてあることと同じだが、procmailrcの内容を以下のように変えている。これにより、メールソースを渡しつつfoward.rbを実行することができる。


MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
RubyDir=$HOME/scripts/ruby
TmpDir=$HOME/tmp/
LOGFILE=$MAILDIR/proc/`date +%Y-%m`.log
LOCKFILE=$HOME/.lock
VERBOSE=ON

:0 Hc :
* .
|cat > $TmpDir/mail; $RubyDir/forward.rb


メールソースをrubyで扱うのにtmailというライブラリが便利なのでこれを利用する。メールを送信するにはnet/smtpを使うが、認証がうまくいかなかったのでaction_mailerを使うことにした。
gem install tmail
gem install action_mailer

以下、forward.rb の例。


#!/usr/bin/ruby

require 'rubygems'
require 'action_mailer'
require 'tmail'
require 'kconv'

〜中略〜
mail = TMail::Mail.load(mail_path)
# 前述のprocmailrcの「cat > $TmpDir/mail」で保存した一時ファイルを指定している
subject = mail.subject
body = mail.body
〜中略〜

# 日本語文字化け対策つきメール送信メソッドの定義
class HogeMailer < ActionMailer::Base
@@default_charset = 'iso-2022-jp'
@@encode_subject = false
def hogeMessage(recipient, mySubject, myBody)
from 'from@from.com'
recipients recipient
subject '=?ISO-2022-JP?B?' + Kconv.tojis(mySubject).split(//,1).pack('m').chomp + '?='
body Kconv.tojis(myBody)
end
end


#認証とかの情報設定
ActionMailer::Base.smtp_settings = { :address => '127.0.0.1',
:port => 25,
:domain => 'XXX',
:user_name => 'XXX',
:password => 'XXX',
:authentication => :login}

#送信!
HogeMailer.deliver_hogeMessage('to@to.com', mail.subject, mail.body)


上記では単に転送しているだけだが、mail.fromやmail.bodyを正規表現などでフィルタリングしたあと
複数の宛先に投げ分ければよい。また、大量のスパムメールが直接携帯アドレスに届くような場合には、willcom側の設定で例えば「*.com」を拒否しておき、forward.rbの中でfromアドレスを「.com」→「.etc」のように書き換えた上で転送するなど、色々応用がきく。

2010年7月4日日曜日

理由という言葉の少し変わった使い方

Twitterでmic314が言っていたことから連想した事柄を少し。
※mic314はwiiの428というゲームにでてくるタマというキャラクターによく似ているなぁ・・・と密かに思っている人。べつに親しくはない。

mic314とspinel3の会話を引用:
m: "女性は月刊、男性は週刊、って、なんでだろう、という議論中。…しかし、結論出ず。なんでなんだろーっ。"
s: "それってどういう議論ですか?"
m: "雑誌や漫画など、女性誌は月刊が多く、男性誌は週刊が多い・・・という実感があり、なぜ違うんだろう…という話をしてました!"

面白いと思うのは実はこの議論の内容そのものではなく、「なんでだろう」と理由を考えているところだ。理由という言葉は普通、ある人がなにか行動をした時の意図であったり、結果に対する原因という意味で使われる。上で問題になっているのは後者のほうなのだが、若い頃に考えていたことの後遺症か何か知らないが、理由というとどうしても意図的なニュアンスを感じてしまう。

むかし考えていたことというのは、生物の進化に関する話。
例えば世界には変わった姿形をした生物がいるが、彼らはどうしてそういう形になったんだろう?
「アリクイの鼻が長いのは何で?」と聞かれたら「アリを食べるのに便利だから」と説明する人は結構いると思うが、アリクイ自身がそう思って鼻を伸ばしたわけではない。「アリを食べるのに便利なように進化したから」と説明しても、「何で他のエサではなく"アリ"がターゲットなのか?」と聞き返されたとき困るだろう。

アリクイの祖先がいて、突然変異によって何種類かの子孫に分岐したとしよう。
その1つがアリクイで、理由もなく鼻が長くて先が細かった。それはアリを食べるのに適していて
アリは栄養価が高くてどこにでもたくさんいたのでアリクイは生き残ることができた。
仮にそうだとすると、アリクイの鼻が長い理由は、単に彼らの生態圏で生き残ることができる姿形のレパートリーに「鼻が長い、アリクイのような姿形」が含まれていただけということになる。

さて、上の理由と、「アリを食べるのに便利だから」という説明はどれくらい違うだろうか?
一見して、アリクイのような姿形が生き残りやすいために生き残ったというのなら、その姿形が生き残りやすかった理由はアリを食べやすいことなのだから、「アリを食べるのに便利だから」と言っても問題なさそうに思える。
※そしてこれが自分なりの結論なのだが、反論も思い浮かぶ。以下、それに対する自問自答。

でも、質問は「アリクイの鼻が長いのは何で?」だった。この意味が「いま目の前にいるアリクイの鼻が長いのは何で?」であれば、その答えは「そのような遺伝情報をもって生まれてきて、なおかつ無事に育ったから」となり、「何でそんな風に進化したの?」であれば「たまたま」というしかない。
なぜなら、その姿形が生き残りやすいかどうかは長い時間テストしてみなければ分からないからだ。

先祖からアリクイが分岐した時点で既にその鼻は長い。この理由と、現代のこの日にアリクイの鼻が長い理由は同じであると仮定しよう。すると、前者の時点ではその姿形が生き残りやすいかどうかなんて分からないのだから、アリクイの鼻が長い理由は「アリを食べるのに便利だから」ではありえない。分岐がランダムな突然変異で起こるのであれば、その時点でアリクイがアリクイの姿形をしているのは「たまたま」だ。よって後者の時点でも理由は同様である。

というわけで「自分なりの結論」が否定されてしまった。しかし上で仮定したことは生産的な議論を生まないので棄却するべきと思う。前者の時点でアリクイの鼻が長い理由はたまたまであるというのは確かにその通りだが、後者の時点でも同じことしか言えないとすれば、それは質問を好意的に解釈する気も、アリクイが長い時間にわたって生存してきた事実を考察の材料に加える気もないということだ。

そこで質問の解釈を変えてみよう。「アリクイの鼻が長いのは何で?」→「アリクイの長期間に渡る生存に役立ってきた重要な環境要因がいくつか考えられるとして、特にその中で、鼻が長いことに関連するものは何か?」とする。こうすれば答えは明確に決まる。つまり、「長い鼻で食べやすいアリという生物がまわりにウヨウヨしていた」ということである。

ここでもう一度注意を。上の答えは「アリクイの鼻が長い理由」ではなく、「鼻が長いアリクイが生き残ってこれた理由」である。実際、アリクイのまわりに大きいネズミしかいなかったら彼らは絶滅していただろうし、長期間に渡ってアリが彼らのまわりに居続けることなど全く保証されていなかった。アリを食べるために進化したのではなく、進化したらアリを食べざるを得なかったのだ。

私たちは、アリクイの鼻が長い理由を聞かれたらまず解釈変換を行って「長い鼻で食べやすいアリという生物がまわりにウヨウヨしていたこと」という回答を導き、さらに再変換を行って「アリを食べるのに便利だから」と答えている。一般に、質問者はなるべく解釈変換が少なくて済む発話をしなければならないが、回答者もある程度は解釈変換の努力をする必要がある。逆に言えば、多くの解釈変換が必要な発話を許すのなら、テキトーな回答も許されなければ不公平である。

※回答に変換をかけているのだから、テキトーな回答をするほうが面倒くさいのではないかというツッコミがあるかもしれないが、それは違う。テキトーじゃない回答をするのには、まず質問の解釈をどのように変えたのかから説明する必要があるからだ。

2010年6月28日月曜日

3月のライオン

実家に帰ったら3月のライオンがあったので嬉々として読んだ。
これだけでも帰った甲斐があったというもの(自分で買って読むのとはワケが違います)

んー、将棋の漫画とは聞いてたけど基本は少女漫画なんでしょ?と思ってたが、これはちゃんとした将棋の漫画ですな。
むしろプロ棋士同士の心の動きとか生活感をこれくらい現実的に描いた漫画って今までなかった気がする。
それに加えて、プライベートにおいて複雑な事情をかかえた登場人物が多いこと、彼らの偶奇的な出会いによって始まっていく交流、香子と主人公のやや背徳的な関係、二階堂との(一方的)ライバル関係、ヒナちゃんと高橋くんとの普通に少女漫画的な恋愛模様などが自然に展開されていて楽しみが多い。

二階堂は将棋関係者なら誰でも、先崎の解説を読む前に故・村山聖9段がモデルであると分かる。
実際の村山はもっと人間的な葛藤に溢れていて終盤の強さは二階堂レベルじゃなく、
体の具合だってもっと悪かったはずだけど、それでも二階堂は村山を取り入れたことで魅力的なキャラクラーになっている。

村山は自分の病気が重いことを知っていて、なおかつ名人になるという目標を持っていたので、いい意味で将棋の上達に関して「のんびりする」ことを知らなかった。他のプロ棋士が将棋に対して怠慢になっているのを見ると許せなかったのは、怠慢さを自分に投影した場合に「こんなことじゃいかん」と思うのもあったかもしれないし、自分には時間がないのにおまえらにはあるという嫉妬もあったかもしれない。

いずれにしても二階堂が主人公の将棋を大盤解説していて「ほんとうに勝ちたいなら粘れ!もっと自分の将棋を大切にしてくれ」と言った時、もし村山のエピソードを知っている人が単行本の2巻を見たら、他人事を他人事と思わない村山の姿が二階堂にダブって見えただろう。それでも二階堂は決して可哀想キャラではなく、気遣いができてお金持ちの御曹司で絵を書くのがうまく三姉妹の末っ子にはトトロ扱いされている。

今までの将棋漫画だと、勝負事としての破壊性ばかりを極端にピックアップ・拡大していたような気がする。でも、例えばもともと温かい日常風景である料理の世界をミスター味っ子のようにピックアップすることはギャグになりえても、一部の人しか知らない世界をどう加工してみせたところで、一般の読者はそれが「加工されたものである」とすら気付けない。

とはいえ簡潔かつ正確に伝えられない特殊な事情はもちろんあるので、そういうのを可愛さで覆い隠しながら徐々に慣れさせようとしているところが少女漫画作家の面目躍如といった感じで感心する。特にプロ棋士にとって、3月のライオンは有り難い作品なんじゃないかと思う。

2010年6月21日月曜日

『ルポ 最底辺 - 不安定就労と野宿 -』を読んで(1)

ちくま新書、生田武志著、2007/8/10 発行。

「おわりに」より:
藤本さんが亡くなって1週間たち、釜ヶ崎の運動団体によって橋の上で最後の追悼行事が行われた。
その最後に献花が用意され、通りかかった人などたくさんの人達が藤本さんのために花を投げていった。
ただ、ぼくは川に投げられるたくさんの花を見ながら、「死んでから花を投げても遅いんだよなぁ」と思わずにはいられなかった。
〜中略〜
しかし、だとすればその自分が、次々と殺されていく人たちがいる中で何もしないでいるのは何故なのか。
事実、野宿者襲撃事件は次々と起こり続けている。そして、若者の襲撃で殺されなくても、
日雇い労働者や野宿者は仕事がないというだけの理由で現実に次々と死んでいる。
しかもそれは社会的に黙殺され、放置され続けている。そのたびに、明日、あさってとまた橋から路上から公園から花を投げるのか。

大阪市西成区にある日雇い労働者の街「釜ヶ崎」は、1986年(著者が21歳で初めて釜ヶ崎を訪れた当時)から2007年現在にいたるまで、2万5千人の日雇い労働者と1万人以上の住民がすむ「日本最高の人口密度の街」である。かつて日本の4大寄せ場と言われた地域があったが、現在も寄せ場として機能しているのは釜ヶ崎だけである。

2007年4月6日に発表された厚生労働省の「ホームレスの実態に関する全国調査報告書」によると日本のホームレス数は1万8564人、2003年より26.6%減少した。厚生労働省は「景気の回復により・・・全体の人数が減ったと見られる」とコメントしたが、著者によれば、野宿の減少は主に「高齢化」による生活保護の増加によって起こされていた。また行政による公園からの追い出しが進んだことや、ネットカフェ難民等の増加によって調査に反映されにくい生活形態になってきているという。

『最底辺』を読んで印象に残ることは3つあり、1つは不安定就労とホームレスという社会現象自体の問題、1つは2極化していると言われる社会の中でどちらに転ぶか決定される気まぐれなメカニズムの問題、1つは先の抜粋にもあるように、「だとすればその自分が、次々と殺されていく人たちがいる中で何もしないでいるのは何故なのか」という問題。

1つ目はまさに『最底辺』が扱っている内容そのものなので特には触れない。とりあえずこのエントリーでは2つ目について書いてみる。この問題は第6章のイス取りゲームの比喩でも述べられているように、野宿者自業自得論に関するものである。これは努力が足りなかったから失業して野宿になったんだとか正社員になれなかったんだという主張だ。

この主張が正しくないのは当たり前だが、つい取り憑かれてしまいがちな考えとも言える。言い換えてみればよく分かる。世の中には声を大にして野宿者自業自得論を唱える人はそんなにいないが、一般に成功者と言われる人の中には「自分は努力したから成功したんだ」という人は結構いる。自分を褒めるか他人をけなすかの違いがあるだけで、中身は一緒だ。

第6章あたりを読んで再認識するのは、(自分を褒めている)この主張は、当人がいかに運がいい環境にいるか(これまで居続けてきたか)をあまりにも無視しすぎているということだ。口には出さなくても、そういう人は大なり小なり野宿者自業自得論主義者である。もちろん本当にサボリ症の人もいるだろう。でも同じくらいサボリ症の人が富裕層の中にいないとは全く言えない。

この本にもあるように、何事もパイの分け前は限られているのである。仮に能力もやる気も同じ人間が2人いたとして、1つの椅子を巡って椅子取りゲームをしたら、(同じだけの努力をするにも関わらず)確実に1人は負ける。そして勝った事実が好循環を生んで努力が報われる流れを作り、負けた事実が悪循環を生んで努力が報われない流れを作る。

そもそも、パイをとるのに有利な条件は当人が生まれた家庭環境によってその大半が決まっている。両親(とその収入)が決まり、遺伝子と(言語や法を含めた広い意味での)生活環境が決まり、通う学校の候補が絞り込まれ、友達の候補が絞り込まれる。そうした巨大な基盤の上に築かれた自分が「最初から自らの力で存在する」ものと考え、その自分が努力するのは自分に気概があるからだという。冗談じゃない、「気概がある自分」に育ったその道筋を与えられれば大半の人は努力できる。

人間の一生は精子と卵子の相互作用から始まって、生まれてからは外部環境との相互作用が延々と続いていく。今あなたの目の前にいるあの人が何やら動き回り何事かしゃべっているのだって、外部環境との相互作用に過ぎない。その言動が気にくわないからといって彼が悪いわけじゃない。もしあなたが彼と同じ人生経験を経て現在の彼と同じ環境におかれたら、違う言動をする自信はないだろう。

もちろん、個別の言動に対して「彼が悪い」と言う事はできるが、あなたにとって気にくわないことをたくさん言う傾向自体は必ずしも彼の意思で自由になるものではない。だから、あなたが自分の「特定の分野でよく失敗をする傾向」を指して「これは私のこれまでの生活環境のせいなのです」と言うこともある意味で正しい。
(※自分で自分の傾向を見抜いているならそれは避けられるはずだから、実際上はこの論法の対象に自分は含まれない。しかし不適材不適所にもかかわらず命令で仕事をやらされているような場合には自分に対しても正論になりうるだろう)

他人をこのような視点で見ることができない人は、その人の傾向を「意図的な行為の集合」として受け取ってしまう。傾向が気にくわないものであれば、「生理的に受け付けない」という拡大解釈によって拒絶を正当化する。一方、傾向が気に召すものであれば、その人がどうやってその傾向を身につけたかというプロセスに目を向けず盲目的に崇拝あるいは信用し、たまに期待を裏切られた折には反作用でひどく衝撃を受ける。どちらにしろ迷惑な話だ。

私たちは理由もなく上手くいくこともあれば、その逆もある。少なくとも、上手くいく理由や上手くいかない理由を説明することはとても難しくて、実際上不可能と言っていいケースだって(私たちの想像を遥かに超えて)ありふれているだろう。
もし自分が成功者だと思ったら、的はずれな成功の法則発見なんかしている暇にその境遇に感謝してみたらどうかと思う。

2010年6月9日水曜日

判断より認知 〜自動車学校での話から〜

なぜか分からないが久しぶりに自動車学校のエピソードを思い出した。
僕は兵庫県の三田自動車学校で免許をとったのだが、そこでの講義で印象深いものがある。

※ちなみに三田自動車学校は略称をSAS(Sanda Automobile School)といい、教習車の側面にはでかでかとその文字が書かれていた。一方、睡眠時無呼吸症候群のこともSASという(Sleep Apnea Syndrome)。なのでSASという名前はカッコ悪いなぁと思っていた。他にもスカンジナビア航空とかイギリス陸軍とかSerial Attached SCSIなど全てSASといい、かぶりまくりである。どうでもいい話だが。

で、ある講義で教官が「認知と判断ではどちらが大切でしょう?」と生徒に質問したところ、
まず「認知だと思う人?」に対して手を上げた人はほんの数人しかいなかったことにびっくりしたのだ。
これはつまり、何かアクシデントなりインシデントなりが起こってそれに対処しようとする場合、
どうすべきか判断するのと、インシデントを認知するのとどっちが大事か?という質問なのだが、
大半の人は「判断する」ほうが大事と答えた。

私たちドライバーは、若い人のほうが交通事故を起こしやすいことを知っている。
でもその理由を求められた時、年をとったほうが判断力が向上するからだと、つい説明しがちではないだろうか?免許を持っている人はもはや、判断より認知のほうが重要であることを知っているにもかかわらず。このことは、私たちは年をとって運転がうまくなってもなお、自分がそのようにうまく運転できる理由を意識していないことを示していると考えられる。

僕が自分自身の中をのぞいてみたところによれば、年をとって運転がうまくなるのは判断力より認知力の向上が圧倒的に寄与していると思う。なぜなら、現実的に起こりやすいどのようなインシデントに対しても、有力な解答がそんなに多くあるわけではなく、その解答を見つけることは若いドライバーでも十分可能であるからだ。そうでなければ免許など与えてはいけない。

同一のインシデントであっても、事故を起こしにくいドライバーにとってはそれが重要なインシデントでありえ、事故を起こしやすいドライバーにとってはインシデントとして認識されすらしないということがありうるだろう。誰の目にも明らかな、アクシデントに発展しそうなインシデントであればそんなことはないが、一見無視して問題なさそうなものほど認知力がものをいう。つまり、問題を与えればドライバーなら誰でも解けるが、目の前で起こっている何事かを問題と思うか思わないかは判断力によっては決められないということだ。

私たちは、分かってるんだけどついやってしまう、あるいはやるべきなのに放っておいてしまうことがある。分かってるのに思い通りにできないのは何とも不思議だし、その不思議さを何回経験しても全く堪えない神経の太さはさらに不思議だ。その理由の1つには、分かっている時と、思い通りにできないでいる時が異なるということがあるだろう。

例えば何か悪い習慣をやめようとしていて、ついそれをやってしまったとする。この場合、それをやってしまったまさにその時には、それが自分にとって重要なインシデントであるという認知ができていなかったのである。一方、やめようとしていながらなかなかやめられない自分を後から振り返って意識した時には、確かに「それをやめるべきである」ことを「分かって」いるだろう。前者では「まさにその時」しか認知すべきタイミングがなかったのに対して、後から振り返ることは「まさにその時」以外であればいつだってできる。よって、だいたいの時間において自分は「分かって」いるのだと思い込んでしまう。

しかし、分かっているべきタイミングは「まさにその時、以外」ではなく「まさにその時」であることは明白であって、そうでなければ分かっていても大した意味はない。重要なインシデントを重要なインシデントとして認知し意識にのぼらせることがまず重要で(そしてこれは意識的には行えない!)、次にそのインシデントを「まさにその時」処理できるのが上手なドライバーである。こういったことを判断力によって行えると考える人間の性向が、あの日の生徒たちの回答になって現れていたのかなぁと、そんなことを考えた。

2010年6月6日日曜日

女性に関する疑問が昔より少し氷解してきた件

読売新聞で連載している漫画「あたしんち」にすごく共感できるシーンがあって、それがずっと頭に残っている。主人公であるみかんの父と母が2人で旅行にいき、電車の中で母が「あれいる?これ飲む?」などと父をかまっているうちに父が(YesかNoで答えられないような質問に対しても)「う・・・」しか言わなくなってしまうというものだ。

これはなかなか、女性には理解できないだろう。う・・・しか言わなくなるのは極端としても、女性が男性を相手に選び2人で話していたらだいたいのケースでは女性の口数のほうが多くなり男性は最終的に聞き役にまわり、そのうちイライラしてきてよく分からないところにツッコミを入れだし何故かしょうもないケンカに発展することは世間的にありふれているだろう。いずれにしても、話し言葉をインプットする時の許容量は女性より男性のほうが格段に劣っていると思えてならない。

そしてもちろん、少なくとも話し言葉に関してはインプットだけでなくアウトプットも女性のほうが優れているように感じる。そのあたりに興味があって、ガールズトーク(以下GT)の研究をしてみた。その定義からいって、GTの現場に男である僕が居合わせることはできないので、グータンヌーボその他のテレビ番組を参考にすることになる。

GTを見ていてまず思うのは、「よくしゃべるなー」とか「よくこんな簡単に知らない人同士が仲良くなるね」とか「また恋バナか」とかいったことだ。それぞれについて補足していえば、「よく続くなー」「年が離れてても打ち解けられるのがすごい」「あんたがたそんなに情報交換しておきながらどうしてそんなに恋愛を失敗する?」などというのもある。しかし総じていえば、すごい。情報処理の能力がハンパないとしか思えない。

女性は一体、世界のことをどれくらい正確に認識しているのだろう?というのは昔からの疑問だった。言語を操る能力や、実際の会話の場で表情やイントネーションを瞬時に読み取って無難な流れにもっていく能力、そういったものはどう贔屓目にみても男性より優れていて、かたや男はというと、空間認知が優れているとかいったってそれがどうしたという感じだし、体力面以外で何かアドバンテージがあるとすれば「(現実的か否かに関わらず)特定の一方向に問題解決する執念」ぐらいしか思い浮かばない。

女性に対して感じる圧倒的な能力にもかかわらず、しかしいまいち、その能力差ほどには女性の世界認知が優れていると感じないのは何故か?つまり、第3補足でもあげたように、女性だって男性並みに失敗をするのだとすればそれは何故か?

ちょっと話は変わって、最近哲学書を読んでいて思うことがあった。哲学というのは、普通の人から見れば当たり前のことを根掘り葉掘り疑って事細かく分解し1つ1つ亀の歩みのような遅さでゆっくりと妥当性を確認していく。例えば、ものが見えるのは何故か?と問えば、普通の人は「目に光が入るから」と言うかもしれない。でも哲学者にいわせれば、「目と同じ仕組みの機械があったとして、それに光が入ったらその機械はものが見えているといえるか?」という具合だ。言われてみれば不思議なところはある。それでも普通の人は、解決しなくても生活するのに困らない疑問に立ち止まったりはしない。

哲学者というのは、普通の人が直感的に分かることが分からないがゆえに考えるのだと言った人がいる。別の例でいえば、経営の意思決定をするのに直感的な決定を下す名人がいたとして、その人は実際にその決定を「直感的に」行うことを躊躇ったりはしない。常人があれこれ市場分析して数値を比較してやっと出すことのできる結論を、名人は直感的に導きだす。考えるのは確信がないためである(逆にいうと、考えたければ普段確信していることを疑わなければいけない)。

人間は、意識しなくても高度なことをやってのける。だからこそ、「なぜ人間はこんなことができるのか?」という問に答えるのが難しいのだ。ごく基本的な人間の生存機能に関してさえそうなのだから、芸術などの高次技能についてはなおのことだろう。

さて、このことが、「女性に対して感じる圧倒的な能力にもかかわらず、しかしいまいち、その能力差ほどには女性の世界認知が優れていると感じないのは何故か?」という先の疑問に答えるのに役立つのではないか。つまり、いかに技能が優れていても(高次技能であればなおさら)、それ自体の成り立ちや応用範囲まで考えが及んでいるとは限らないということだ。

GTを行う彼女らにとっては、それが周囲の女性との関係を円満に保つ単なる手段であり、あるいは純粋に話すこと自体が楽しみであり、何故自分が男性よりうまく話せるかなんてどうでもいいことなのだ。
それはゲームに熱中する男が、なぜ自分がゲームをうまくできるか気にしないのと変わらない。少なくとも僕が女性に関して感じていた謎の大ギャップの一部は、そう思うことで解決した。

2010年5月28日金曜日

ねづっちボット:現在の機能

お題をだしてもらってなぞかけ(?)をする


「@nezucchi_bot 競馬」などとお題を出す。
※単語じゃなく短い文章でも可。ツイッター検索で結果がでそうなら。

するとこんなリプライが届く。※10分以内に。

ととのいました! 競馬 とかけまして 欧州財政不安継続 とときます、その心は次のツイートで!(ATM:83%)

次のツイートはリプライでは届かない。ねづっちボットをフォローして、さっき届いたリプライの次にあるツイート(公式RT)を見よう。

ユーロ急落、8年半ぶり安値。世界株安連鎖。ダウ1万ドル割れ。欧州財政不安継続。長期投資家もユーロに見切り?いよいよ、今週末の競馬は、負けられない。土曜日に勝ちを確定させ、日曜日は東京競馬場で、史上最強メンバーの日本ダービーを生で観戦し、目黒記念で転がしたい。

「競馬と欧州不安にどんな関係があるんじゃい、と思ったが、なるほどそういうことだったのか」というのがねづっちボットの楽しみ方。ちなみにリプライ末尾にATM:83%とあるのは、

「あなたが選んだお題はどれくらいツイッターのトレンドにマッチしているか指数」の略。

お題でツイッター検索をした結果がたくさんあり、それらのツイートの中身がちゃんとしており(URLやハッシュタグやRTだらけでなく色々な品詞をバランスよく使って自分の言葉で語られている)・・・といったいくつかの条件から算出される。目指せ100%超え!

誰にも相手してもらえないと自分でなぞかけをする


はてなキーワードからお題を取得。
ととのいました! カンヌ国際映画祭 とかけまして 著名映画監督ジャファル とときます、その心は次のツイートで! (*カンヌ国際映画祭 got by: http://bit.ly/ciN5Fc ) 自己採点:80点

このように英語になることも。つぶやくのは毎時3分(1時間に1回)。
I riddle!Why is "Google Chrome" like "erschienen" ? The reason comes in next tweet ! (*Google Chrome got by: http://bit.ly/cXCqmz ) score:46

※ATM、自己採点、scoreは同じ指標。

参照:
ねづっちボットを作ることになった経緯と簡単な仕様説明

2010年5月26日水曜日

別のねずっちボット

3日くらい前、まおらんちという人達に声をかけられた。なんでも、ねずっちボットを作ろうとしていたらすぴー製ねずっちボットを見つけてしまったらしい。ログ

で、これがまおらんち製ねずっちボット。優劣を言うつもりは毛頭ないが、全く違った作りであることは確かなので良い比較対象ができた。まず第一に、ま製はなぞかけという実際の行為を忠実に再現しようとしていることが分かる。

例をひいてみよう。「東京」とかけて、「予定」と説きます。その心は、どちらも「かんこう(観光と刊行)」。これはつまり、東京観光と刊行予定という言葉があって、両方にかんこうという読みが共通して含まれているということだ。

次の例。「終電」とかけて、「土星」と説きます。その心は、どちらも「じこく(時刻と二黒)」。二黒土星(じこくどせい)とは、暦、占いに用いられる九星の一つ。このことを知っていれば意味が分かる。ざっとま製なぞかけを見渡すと、土星と二黒のように、すぐには関連性が分からないものも多い。このへんが課題か。

この発展形を考えるため、自分で作ったなぞかけから例をひく。
厚み とかけまして やり遂げる人 とときます、その心は どちらも意思(石)が強い。
厚みは囲碁の用語で、石が強いことを指す。やり遂げる人は意思が強いというのも、結局同じ意味のことを別の表現で言い換えている。A(厚み)もB(やり遂げる人)も、C(いしがつよい)という共通表現で言い換えることができますよ、というのがこのなぞかけである。

これを考える時の人間の(というか僕の)思考は、石が強い=厚み をまず思い浮かべる。次に「いしがつよい」を何か別の表現で言い換えられないかなと考え、「やり遂げる人」に辿り着く。もう少し詳しくいうと、「いし」はなぞかけに適した語だという認識が予め存在し、これを用いていてなおかつ言い換えが利きそうな文章として「いしが強い」を思い浮かべる。いしを「石」とした場合には「厚み」と言い換えられ、「意思」とした場合には「やり遂げる人」に言い換えられるが、もちろん一発で「いしが強い」を探し当てられるわけではもちろんなく、要は2通りに言い換え可能な表現につきあたるまで探索を繰り返す。

さらに詳しくみよう。まず、このなぞかけを作った時の状況では、お題は自分で自由にだすことができた。だから、「いし」のような特定のものを「自分の中の、なぞかけに適した語データベース」から適当に引っ張り出し、2通りに言い換え可能にするためには「いし」にどんな語をつなげればいいかを色々ためす。

では、お題を自分で選べない時(ねずっちのようにお客さんに出題される場合など)はどうか。
仮に「厚み」と出題されたとする。まずは厚みという語はどんな表現で言い換え可能なのか考える必要があるだろう。しかも言い換えられた表現の中に「なぞかけに適した語」がなければならない。

ということは、「なぞかけに適した語」それぞれと「厚み」という語の関連度を調べればいいのかもしれない。ウェブ検索によって「いし」と「厚み」は関連度が高いと判定されれば、あとはこの「いし」を起点に先ほど(お題を自分で出した時)と同様に2通り言い換え可能表現を探索する。ただしこの場合は片方の言い換えに制約条件がある。

次に、す製を検証してみよう。例をひく。

「桃屋 とかけまして 「鹿角らーゆ」 とときます、その心は次のツイートで!
RT 昨日「鹿角らーゆ」という食べるラー油の類似品食べた。かなり微妙。本家桃屋のは食べたことないけど、ぐーぐる先生曰く似たような味ということなので、食べるラー油ってこんなものなんだなあと思った。」

RT以下全体がこのなぞかけの心だ、意味は自分で読みとけ、と突き放しているのが良くも悪くもこのボットの特徴だ。もちろんこのパターンはあってもよいが、発展形を考えるならば、やはりもっと色々なパターンのなぞかけができるといいだろう。で、とりあえず何故現状す製はこのパターンを採用しているかといえば、ボットの制作難易度とユーザから見た時の面白さのバランスを図った、ということである。

そもそもなぞかけは、面白いものを作ろうと思ったら人間がやっても難しい。なので、面白くするためには人間のツイートを利用するのが手っ取り早いのだ。AとかけてBととく・・・その心がうまくなくても、AとBが登場するCというツイートが見えれば、ボットの心の動き(CのどこからAやBをひろったか、他の語をさしおいてBが選ばれたのは何故か)やC自体の面白さを楽しむことができる。

そういうわけで、ねずっちボットの制作には大きく2つの意味があると思う。1つは「生きた言語空間における自然言語の取り扱い技術、学習技術の習得」。もう1つは「面白さの追求」。どういうなぞかけに対して人間が面白いと思うのか、そのあたりを、実際に面白いなぞかけとつまらないなぞかけを並べてみて比較・分析したり、ま製パターン・す製パターン他にどのようなパターンがなぞかけの範囲の中で考えられるか検討したり。単なるOAuthの練習として始めた課題にしては意外に奥が深い。

2010年5月22日土曜日

オフライン環境の大切さ

学生時代はAUを持ったりツーカーを持ったりしていたが、社会人になってからiPhoneを持つまではずっとwillcomのPHSを使っていた。willcomPHSのフルブラウザなんて使えたもんじゃないので、外にいる時はオフラインも同然だ。ところがiPhoneを持ってからというもの、いつでもどこでもオンラインになった。ツイッターやbrightkiteを始めたし、ブラウザだけじゃなくネットを利用する便利なアプリが山ほどあり、しかも本を読むよりラクなので、例えば喫茶店で腰を下ろしたら何となくiPhoneを取り出しいじってしまう。

これはよろしくないと思った。オフラインであれば何か考えたい時には考え、疲れている時には本を読み、それさえ気が進まない時にはボーっとして頭と目を休められたものを、全く有意義とはいえない(しかも目も頭も休まらない)作業を常にしなければならない。月額固定の通信料を払っている状態ではたくさん使ったほうがトクだという考えがそうさせる。

効率から考えれば、ネットを使うべき作業は3G+モバイル機器ではなくwifi環境+PCで行ったほうがいい。外にいるときのちょっとした時間でネット作業ができるからといって非効率な時間の使い方をしていたら、考える時間を省いたツケがさらなる効率の低下を招くだろう。気が散るものが周囲にあっては、人間考えないのだ。だから書斎にPCは置かないほうがいいし、置いたとしてもネットにつなぐべきではないと思う。

そういうわけでiPhoneは解約して、並行して使っていたPHSはwindows-mobile6.5の機種(hybrid-w03,以下灰鰤)に変更することにした。これは本体代金は高いが、無線LANのアクセスポイントになる機能を持つ。無線LANといってもPHS回線なので(本当は3G回線も選べる。それがhybridの意味なのだが、PHS回線だけ使う分には通信料が全くかからない)通信速度は遅いし、例えばiPhoneからその無線LANにつなぐのにいくつか操作を要するので解約前のiPhoneに比べたら不便なのだが、オフライン環境が重要という考え方からするとこれで十分だ。不便であるからこそ、よっぽどの理由がある時でなければネットにつないだりしない。

最近は SIMフリーのpocket-wifi のような、無線LANに対応したあらゆる機器をいつでもどこでもオンラインにするための商品がでてきている。そもそも公衆無線LANのエリア自体がどんどん広くなっているのだから、長い目で見れば人間の生活圏全体がオンラインになってしまうのかもしれない。ノイズに気を散らさずにすむ空間を構築する必要性はこれからますます重要になってくるだろう。それが書斎のような実体なのか、自己コントロールの精神的技術のようなものなのかは分からないが。

2010年5月18日火曜日

健康について

今日、5月17日は日本高血圧学会などが定めた「高血圧の日」。昨年2月に高血圧のため脳出血で倒れ、同5月に復帰した漫才コンビ「宮川大輔・花子」の宮川大輔さん(57歳)は花子さんとともに、高血圧の日キャンペーン「腕をまくろう、ニッポン!」で高血圧の怖さと脳卒中予防の重要さの啓発に当たっている。
08/5/13 上毛新聞記事より

僕は時々疑問に思うんだが、普段健康に気をつけていない人が病に倒れ、そこで初めて健康の大切さに気づいて生活習慣の改善を始めるパターンがあまりにも多すぎる。リスクを避けるため好きなものを食べずに我慢して人生の楽しみを減じるなんてナンセンス、と言っていた人が病気になったとたんそれをやめるなんてのは、要するに想像力や覚悟が足りなかったのだ。

人間の体は、常識に照らして考えれば明らかによろしくない生活習慣を続けても、そうすぐに病気になることはない。そこが健康問題の難しいところで、「今までこういう生活を続けてきたのに大丈夫だったんだから、これからも大丈夫だろう」という訳の分からない帰納的推論を言い訳に使って自分や家族をだます。

しかし、その考えがまるでダメなことは統計が十分すぎるほど示している。論理が示すのではない。健康問題の意思決定は論理的にやってはダメなのだ。例えば、手洗いやうがいが有効であることを論理的に説明することはできないし素早く実感することさえ難しい。だから私たちはそれを子供の頃からの習慣にしてしまっているわけだ。

大輔の食生活はあきらかに異常で、それは花子も分かっていたはずだ。しかし大輔は注意されても、大丈夫大丈夫と主張しただろう。あるいはテキトーな態度でかわしただろう。そこで花子が「根本的な生活改善をせよ」と追求できないのは、まさに健康問題の非論理性にある。つまり「今のままの生活を続けていたら間違いなく病気になる」ということを断言できないがために自信を持っていい返せない。自信をもてるのは大輔が病気になった後だ。これでいいのか?

手洗いを習慣にするのなら、常識的によくない生活習慣は機械的に排除する習慣をつけるべきだ。また、家族のよくない生活習慣についてお互いに言い合う場をつくることも有意義だろう。はっきりいって、自己責任の名のもとに完全な自由を個人に与えることは意味のあることと考えられない。健康についていえば、何を食べようと皆さんの自由ですよといっておきながら医療費削減の問題に苦しむのはおかしい、それくらいなら初めから完全な自由でなく生活習慣ガイドラインの強い推奨を行うべきだ。自由とセットになる概念は禁止だけではない。

現代の日本はどんな人格についても、そういう人もいるよねーで片付けてしまう傾向にある。だから差別意識は減ったのかもしれないが、かわりにぶつからなくなった。自分の生活習慣を、広く言えば考え方を、否定されない。しかし、立脚点を明らかにしさえすれば、どんな意見でも否定のしようはあるし肯定のしようもあるのだ。意見Aに対してポジションBから見れば反対意見Cが主張でき、ポジションCから見れば肯定意見Dが主張できる。

逆にいうと意見Aとは「ポジションBから見れば反対意見Cが主張でき、ポジションCから見れば肯定意見Dが主張できる」ような意見である。Aさんが意見Aを言い、もし二人から意見Cと意見Dが返ってきたなら、彼は自分の意見が3人の中でどういう位置関係にあるのか掴むことができる。「Aさんは意見Aを持ってる人なんだよ。そういう人もいるよねー」で済ませていたら、それは不可能だ。

健康に気をつけろというと、健康オタクに話が及ぶことがある。健康に気をつけて気をつけて、そればっかりに意識を振り向けて一生を終えるのはクォリティオブライフとしてどうなのかと。もちろん、健康的な生活をすることが「生まれつき」苦痛ならそれは問題だ。でもそんな人大勢いるだろうか?だいたいが、今の怠惰な生活を正当化するための言い訳にしか見えない。

私たちは基本的に、好みをコントロールするべきである。好きなものを我慢するくらいなら・・・というとき、不幸なのはその不健康なものを好きになってしまったことだ。でも、それを好きであることにどれくらい自分のアイデンティティがあるというんだろうか?よく考えてみるといい。ほんとに、それを大量に食べることがそんなに楽しいか?実は楽しいのは20%くらいで、他は全部惰性だったりしないか?

小さい子供ならともかく、大人なら自分の趣味についてたくさんの選択肢があるだろう。今の自分にどういう趣味をプラスすれば自然と健康的な生活になるか考え、好きな趣味を我慢しなくてもいいような人間になればいい。今好きなものは、たまたまの巡り合わせで醍醐味を知ったものだ。それはそれで素晴らしい。でも、良いものはたくさんとればなお良いというわけでは全くない。たまにしかとらないから密度が高くなり、感覚が鋭くなったりすることだってある。それで空いた時間は他にまわしてはどうか。

人間は年をとると抽象的な思考力は高まると言われている。筋力や計算力は衰えても、若いときに見えない景色が見える時がくる。時代も大きく変わって色々な新発見・技術が登場するだろう。そういう未来の自分に健康的な体を残そうと考えないのは僕にはよく分からない。もちろん、どんなに気をつけたって死ぬときは死ぬ。でも、小さいリスクも積もれば山となることを理解していれば、生活習慣の改善に対して投げやりになることはないはずだ。

2010年5月8日土曜日

ねづっちボットを作る

こういうわけで、7月からtwitterAPIを使うのにベーシック認証が使えなくなるのですね。

マイコミジャーナルではツイッターで記事につけたコメントを集めたまじつぶというサービスをやっとるんですが、「記事にコメントをつける」ところでベーシック認証を使ってる。なので代わりの方法であるOAuth(http://j.mp/arIIzhを参考にオォースと読むことにしてる)に切り替えないといけないんだけど何だかややこしい。ツイッターのボットでも作ってみたらいい演習になるんじゃない?と考えました。

どんなボットがいいかな〜と思って何週間か悩んでいたらテレビにねづっちがでていた。でツイッターに「ねづっちボットってあったら面白そう」と言ったら面白そうですねという反応があった( http://j.mp/9FMSIR http://j.mp/akKdff )のでやる気になりGWに作ることに。
※比較的最近使い始めたdeliciousのrubyタグはねづっちbot作成のための資料がほとんど

◯ねづっち作成方針

ー 大方針 ー
・@nezucchi_bot [お題] のように話しかけてもらい、[お題]でツイッターの世界を検索。全角文字がなるべく多く含まれるツイートを探し、これを[心]とする。[心]を、Yahooの形態素解析サービス( http://j.mp/abW6hx )を使って品詞単位に分割し、名詞だけを集める。この中から「全てひらがなでない・全て半角でない・[お題]とのレーベンシュタイン距離がなるべく遠い」という条件で候補を絞り、最終的に残ったものの中からランダムで[答え]を決定する。

こうして、「ととのいました![お題]とかけまして[答え]とときます、その心は[心]!」というなぞかけを完成させる。

・誰も話しかけてくれない時はお題を自分から探しにいく。はてなキーワードからランダムに1つを選択。

ー 小方針 ー
・一度答えたお題にそれ以降答えないようにするため、お題のツイートIDをDBに保存する。
・DBを簡単に利用するため、また、ActiveSupportの便利なモジュールを利用するため、Railsを使う。
・ボットはウェブアプリケーションではなくバッチで動かすので script/runner を使う。
・長いURLをポストする時は短縮する( bit.ly )

◯環境構築

まだあまり使いこなせていないMacの環境構築から始める。
OSバージョン:10.6.3
Core2 Duo, メモリ4GB
Rails : 2.3.5(初めからインストールされてた)
mysql : 5.1.46 http://j.mp/cOB7ch を参考に。64bit版じゃないと動かない
XCode : Cコンパイラとか。Mac付属のCDに入ってるらしいんだけどDLした( http://j.mp/cNzefy )
※Windowsの場合はVisual Studio 2008 Express Editionあたりをインストールすればよかろう。

・プロジェクトの作成

# rails nezubot --database=mysql
# cd nezubot
# ruby script/generate scaffold Nezubot postid:string user:string tubu:text
# vi config/database.yml -> adapter: mysql
# rake db:create
# rake db:migrate

・OAuthの準備をする
http://j.mp/9TbPyH を参考に4つのキーを取得する。

・短縮URLの準備をする
bitlyのAPIキーを取得しておく。

・Yahoo形態素解析の準備をする
yahooのAPIキーを取得しておく。

◯実装

長いので急所だけ。

#!/usr/bin/env ruby
# coding: utf-8

require 'json'
require 'rest_client'
require 'uri'
require 'oauth'
require 'pp'
require 'leven' # http://j.mp/awOXy6 を外部ファイル化

# URL短縮関数
def shorten(long_url)
 id = 'xxx'
 api_key = 'xxx'
 req = "http://api.bit.ly/v3/shorten?login=#{id}&apiKey=#{api_key}&uri=#{URI.encode(
long_url)}&format=json"

 json = RestClient.get req
 jhash = ActiveSupport::JSON.decode json
 jhash["data"]["url"]
end

# お題[q]から[心]を求める関数
def getBestres(q)
 bestres = []
 uri = "http://search.twitter.com/search.json?q=" + URI.encode(q) + "&locale=ja";

 begin
  json = RestClient.get(uri)
  jhash = ActiveSupport::JSON.decode(json)
 rescue
  abort("rescued in getjson")
 end

 if( jhash["results"] != [])
  jhash["results"].each{ |r|
   if( r["text"].gsub(/[ -~。-゚]*/,"").length > 200 )
    bestres = [r["id"],r["text"],r["from_user"],q ]
    break
   end

   bestres = [r["id"],r["text"],r["from_user"],q ] if bestres==[]
  }
 end

 return bestres
end #getBestres


# [心]から[答え]を決定する関数
def getBestnoun(bestres)
 yuri = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=[API_KEY]&results=ma,uniq&uniq_filter=9|10&sentence="
 nounlist = []

 if( bestres != [] )
  yuri = URI.encode(yuri + bestres[1])
  yhash = Hash.from_xml RestClient.get(yuri)

  words = yhash["ResultSet"]["ma_result"]["word_list"]["word"]
  words.each{ |w|
   nounlist.push w["surface"] if w["pos"]=="名詞"
  }

# 名詞ではなくても、括弧類で囲まれた語は候補に加える
  nounlist.concat bestres[1].scan(/(「.*?」)|(\[.*?\])|(『.*?』)|((.*?))|(\(.*?\))/).
flatten
  nounlist.uniq!

# casecmpは全角半角無視で文字列同士を比べる
  nounlist = nounlist.select{ |i| (i=~/^[^ -~。-゚]*$/)==0 && !(i=~/^[ぁ-ん]*$/) && i.length
> 5 && i.casecmp(bestres[3])!=0 }

(中略)

 return nounlist.rand
end

# 取得した4つのキーを使ってOAuthの下準備をする
begin
consumer = OAuth::Consumer.new(
CONSUMER_KEY,
CONSUMER_SECRET,
:site => 'http://twitter.com'
)
access_token = OAuth::AccessToken.new(
consumer,
ACCESS_TOKEN,
ACCESS_TOKEN_SECRET
)
response = access_token.get('http://twitter.com/statuses/mentions.json')
rescue
abort("rescued in oauth.new")
end

# 出してもらったお題を処理してなぞかけを送信する
JSON.parse(response.body).each do |status|
 news = []
 postid = status['id']
 user = status['user']
 tubu = status['text'].gsub(" "," ")
 next unless (tubu=~/^(@|\.@|@)/)==0

 ActiveRecord::Base.cache do
  news = Spbot.find(:all, :conditions => ["postid = ?", [postid] ])
 end

 if( news==[] )
 begin
  q = tubu.split(' ')[1] || ""
  next if(q=="")
  bestres = getBestres(q)
  bestnoun = getBestnoun( bestres ) || "error:#{q}:できませんでした!(T-T)"

  ans = bestnoun
  ans = ".@#{user['screen_name']} ととのいました! #{q} とかけまして #{bestnoun} とときます、その心は次のツイートで!" if !ans.include? "error"

  if !$DEBUG
   access_token.post('http://twitter.com/statuses/update.json','status'=> ans )
   access_token.post("http://twitter.com/statuses/retweet/#{bestres[0].to_s}.jso
n") if !ans.include? "error"
  end
 rescue
  abort("rescued in postid:#{postid}")
 else
  Spbot.create(:postid => postid, :user => user, :tubu => tubu) if !$DEBUG
 end
end

end if ARGV[0] #JSON.parse

# 一人なぞかけは省略

◯定期実行
0 * * * * ( script/runner nezu.rb) # 一人つぶやき
*/10 * * * * ( script/runner nezu.rb reply) # お題に答える

◯完成品
http://twitter.com/nezucchi_bot

5/26 追記 別のねづっちボット