Archive for November, 2008

メガテンねた

Posted by 向井 淳 on Wednesday, 26 November, 2008

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20081126#p01

おれあんましメガテンやってないんですけど(真1、デビルサマナー、ソウルハッカーズ、ペルソナ1、真3ぐらいかな)、やあ、やっぱり好きは好きなんですよね。挫折もよくしてますが。

そんなオレが個人的に好きな動画がhttp://jp.youtube.com/watch?v=AuAM-XjFcpYhttp://jp.youtube.com/watch?v=crUnUW0Qwf4。既視感がありすぎて困る。

♪見つめられたら見つめかえすぜマジで のところがツボ。


『予想どおりに不合理』

Posted by 向井 淳 on Wednesday, 26 November, 2008

予想どおりに不合理―行動経済学が明かす「あなたがそれを選ぶわけ」

予想以上に面白かった(って言う人は多そうだなー)。

この本は、行動経済学をキーワードに、ぼくたちがどんな不合理な決断をいつもしているか、ということを語り起こす。金額的な価値はむしろ相対的な点にしか着目しないとか、無料だと行動原理は簡単に変わってしまうとか、どういう場合に不正が行なわれるかとか……。

章ごとに語られる状況はそれぞれ異なっているが、そのすべてのトピックについて、いかにもぼくたちが遭遇しそうな不合理な選択をしてしまう場面を挙げて、さてそれは本当か、どういうことが言えるのか、ということを確認する実験が紹介され、その結果をもとに何が言えるかが語られている。その実験結果をもとに何が言えるかを語り起こすのだけど、この実験が面白い。たとえば、高級チョコとチロルチョコのどちらか一個だけを一人に選ばせる。高級チョコは16円、チロルチョコは2円で。差額は14円で、ただまあ高級なチョコの方が売れ行きがいい。差額そのままに15円と1円にしても、売れ行きの比率はさほど変わらない。ところがこれが14円と0円になったとたんにチロルチョコに人気が集まる……とかいう具合(細かいところが知りたい人は本書を読もう)。

つまるところ、基本的に認知心理学の実験なんだよね。知らずに書くけど、行動経済学自体がそもそもそういうもの(認知心理を経済学のフィールドに持ってきたようなもの)であるらしい。認知心理の実験(とくに優れた実験)というのは、ちょっとした実験環境における行動の比較によって普段ぼくたちがあんまり意識せずにやっていたことをつまびらかにしてくれるので、個人的にけっこう好きだが、この本の実験はどれもこれもそういう面白さがある。それに、ここで書かれていることはほかにも応用が効くかもしれない。いや、面白かった。

ところで――

この本のタイトルはぼくは少し前に知ったんだけど、みなさんは不思議に思わなかったろうか。ぼくは思った。確かに経済学では合理的なプレイヤーというのを想定する……らしい。ぼくは経済学はそもそもよく知らないのだけど、そもそも現実的には合理的な人間というのがナンセンスだということは誰だって知っているはずだ。予想したとおり人間は不合理だった。それが何か? 同時期に出た本に『人は意外に合理的』というタイトルの本もあるけど、こっちの方が「へえ」と感じる度合いは大きい。

ましてや、本書で書かれていることっていうのはそんなに意外な内容じゃない。検証された事実だけに注目するなら、どちらかといえば「あーあるある」という内容でしかない。無料だとなんとなく流されるとか、エロい気分になると暴走しがちになるとか、嫌なことは先延ばしにしてしまうとか、予断が入ると正確な評価ができないとか、順番に頼むとなんとなく違う料理を注文しがちとか、それほど意外なことは書いていない。

ただ、そこがこの本の核心なのだった。実際にはまえがきにすでに書かれているのだけど、人間が不合理だということは誰でも知っている。でも人間の不合理さには一定のパターンがあってしばしば予測可能になるというのが、そもそも著者の主張なのだった。不合理というときに、そうそうまったくデタラメになったりしなくて、不合理性はわりと予想可能である。

>

もうひとつ、わたしの考えでは、わたしたちは不合理なだけでなく、「予想どおりに不合理」だ。つまり、不合理性はいつも同じように起こり、何度も繰り返される。消費者であれ、実業家であれ、政策立案者であれ、わたしたちがいかに予想どおりに不合理かを知ることは、よりよい決断をしたり、生活を改善するための出発点となる。

そういう点はちょっとミスリーディングなタイトルだと思いました(ただなんだ、こういう誤解は『人は意外に合理的』と隣りあって並べられてるからこそかもしらんね)。


sedが遅い話のつづき

Posted by 向井 淳 on Saturday, 22 November, 2008
>
  • http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0811b.html#D20081120-6 >
  • http://zunda.freeshell.org/d/20081120.html#p03
  • ありゃそうだっけ、確か両方だったような、と思ったら両方のようですね。正しかったようでよかった。でもさすがにLANG=Cならperlより速いのか。

    GNU sed/grepはlocaleに応じてファイルのエンコーディングを決めるので、localeとファイルのエンコーディングにずれがあったとき(処理系が意図とははずれたinvalidな文字列が見られるので)マッチなどの挙動がおかしくなることがあったと思いますし、例外的な文字が出てくると余計に処理も遅くなるんじゃないでしょうか。zundaさんの実験は、そういう部分のノイズがちょっとあるんじゃないかな、と思いました。直感ですけど。

    Python の場合もunicode(Unicode文字列)とstr(バイト列)が明確に区別されていて、ファイルの読み込みなどはstrなのでそれほど問題ないと思います。でもstrで処理をせずunicodeに持っていくとすると、処理内容によっては遅くなるかもしれません(がまあ、ふつうに書けばそれほどでもないはず)。

     

    直感ですけど、で済ませるのもなんなので手元の環境(FreeBSD)で試してみたら、grepもsedもぜんぜん遅くなりません(この日記のデータすべて合計した3MBぐらいをかけてみた)。おかしいな。どちらもGNUの筈なんですが……。ただし、sedでLANGをeucJPにしたときだけ明確に遅くなりました。これは内部的にUTF-8で処理をする前提で文字コードを変換しているからではないかという気がします。元ファイルの文字コードがUTF-8のときでもEUC-JPのときでも遅くなりましたが、元々がEUC-JPの方が速かったので、その差はinvalidな文字列が来たときの対処ルーチンかなあ。


    Cのシンボルを置換する方法

    Posted by 向井 淳 on Thursday, 20 November, 2008

    http://q.hatena.ne.jp/1227069551

    これについてはhandyな解決策はないだろうと思う(GNU globalでできる、という回答があるけど本当だろうか。globalそんなに真面目に使ったことないからよく知らないけど、ないだろう、という仮定のもとに以下の文章を書く)。ある識別子と同じ字句がコメント内や文字列リテラル内などにないということがあらかじめわかっているなら、ただの文字列置換でもできるのだけど、そうでもないなら少なくともコメントと文字列ぐらいを解釈する程度の簡易なトークナイザは必須で、それぐらい書くのはそれほどしんどいわけでもないだろうが、こういう質問に対して「パーサ書け」という回答をするのはさすがに人を馬鹿にしすぎているというべきだろう。

    一瞬だけ思ったのは、cppにうまいことオプションと-Dを渡せばそういう動作にならないか、ということだが当たり前ながら無理のようだった。当然のように#includeや#defineはすべて展開されてしまうし、/* */のコメントは消えてしまう。//は残るけど、その中の文字列はcppの置換対象。

    まあ、回答に対する質問者の反応を見る限りでは、つまりsedとかでよかったらしいけれど。

    ところで、同じく回答を見ていて知らない人も結構いるのではないかということに気づいたのだが、sed/perl/rubyには-iというフラグがあって非常に便利なのでおすすめしておきたい。この質問の回答者のように、

    sed -e ’s/foo/bar/g’ $i > $i.tmp && mv -f $i.tmp $i

    などとしてもよいのだけど、これは次のようにかける。

    sed -i.tmp -e 's/foo/bar/g' $i

    (私はよく-i.bakとするけど)。-iはファイルをin-placeに更新するというフラグだが、-iフラグには引数を指定することもでき、指定するとin-placeに更新するのだが元のデータも指定した値を末尾につけた名前のファイルとして残す。言葉で書くと煩雑だが、つまり上の例は、

    mv $i $i.tmp; sed -e 's/foo/bar/g' $i.tmp > $i

    とほぼ同じ動作になるということ。-iでバックアップしつつ変換してしまい、うまいこといったと確認できたらバックアップは削除する、という感じだ。処理に自信があるなら-i単体にしておけば元のファイルは残らないし、中間ファイル名で思い悩む必要がないから気が楽。perlの-nや-p、それに影響を受けたrubyの-nや-pも同じように-iがある。もちろんmvやcpと使えばいいけれど、複数のコマンドの組み合わせではなくてコマンド単体で動くことにはそれなりの価値があって、たとえばfindやxargsと組み合わせやすい。

    このフラグはこういうケースですごく便利なので、あらゆるコマンドに付属してくれると素晴らしいことが起こるような気がする。というわけで、任意のフィルタを引数にとり、標準出力に書き出す代わりにin-placeに更新するというinplaceというコマンドもある。あるというか、多分パッケージとして存在するのはFreeBSDだけだろうがRubyで書かれているのでその辺の普通のOSで動くと思う。もっとも、「これはすごく便利に違いない!!」と興奮して入れてみたのだが実際使ってみたことは数えるほどしかないけれど(笑)。

    ちなみに、これまた有名な話だがsedはそんなに速くない。バージョンいくつかからだったか忘れたけどGNU sedは真面目に多言語処理をするようになったため急激に速度低下してしまった、という話じゃなかったかと思った。ともあれ一般的なケースではperlの方がよっぽど速いので、sedは存在を忘れた方がいい。どうせちょっと複雑なことをやろうとするとsedスクリプトなんか書いてられない(まあ私はpelすらまともに書く能力を失ったのでrubyでちょこちょこ書きますけれども)。

    というわけで何のはなしだったっけ……ああそうそう、sedでもperlでもrubyでもいいけど、-iは覚えて置いて損はないです。


    好きなあの子の嫌なとこ

    Posted by 向井 淳 on Friday, 14 November, 2008

    http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0811b.html#D20081112-4

    こういう聞き方はいいね。結局、よくわかっていないと本当の弱点はわからないものだし(ささださんに話を効くとRubyのまずいところをいくらでも語ってくれる説)。まあ中には本当にわかってんのかなあという回答もありますが、それはさておき。個人的には特にプログラミング言語そのものに対するこだわりが薄くなっているので自分で書こうという気はないですが、Haskellについてわかりづらいところがあると思うので説明しましょう。

    >

    The big implementations handle I/O in ways that don’t seem quite compatible with the standard. (In particular, outputting characters only outputs the low 8 bits — and then code gets built that uses this assumption to do binary I/O. Ick.)

    読んだ瞬間「あ、あれね」という感じですけれども、まともに使ったことがある人じゃないとわかりづらいですね。

    まず、Haskellにおける文字型(Char)は1文字=Unicode文字と定義されています。ところが実装がまずいせいでCharをputCharとかで出力しようとすると、最下位の1バイトしか出力されないんですね。「あ」が "B" になっちゃうという具合。そういう事情もあり、実際にはCharをバイト列であるかのように扱う流儀があります。その方が簡単なんですね。たとえばhGetContentsでファイルを読み込むと文字列が手に入るわけですが、この場合は普通に1バイトずつCharに収まっているのです。さらにバイト列として高速に文字列処理をするByteStringなんてのもありますし…

    Text.Xhtmlというxhtml出力ライブラリがありますが(たぶんこれなんかはone of the big implementationsでしょう)、これは1文字がisprintじゃないときはChar単位で数値実体参照に変換するという実装になっていたんですが、そうすると生のUTF-8バイト列の日本語を入れたときに大変なことになるので、U+FFまでの文字はバイト列とみなして実体参照に展開しない、という極めてuglyなhackを入れた犯人は俺です。超すまん。今どうなってるか知らないけど。

    さて、これで終わりなら話はまだ楽なんですが、続きます。Haskellの言語仕様上1文字=1Unicode文字という定義になっていました。これは字句的にもそのような定義になっており、Haskell98ではファイルのエンコーディングに関する議論は全く無く、ファイルはあたかもUnicode文字の連なりであるかのような仕様です。とはいえ実際そんなわけはない。ただ昔はこの仕様は別に守られておらず、たとえばGHCではファイルはLatin-1でエンコードされているという前提になっていて、Latin-1ならバイト列をそのまま通し、そうでないならコンパイルする、となっていました。が、もう何年か前の話ですが、GHCはファイルのエンコーディングをUTF-8とみなすという方針に変更し、ファイルの中身をUnicode文字の連なりとみなすということになりました。このため、これまでLatin-1でファイルを書いていた人が「俺の名前が入ってるとコンパイルできないんだけど!」とか微笑ましい相談をMLに投げたりしたものです。

    サラッと書きましたが、実はこいつは合わせ技で非常に面倒なことになります。たとえばプログラムのコードで putStrLn "あ" って書くと、この"あ"はUTF-8でエンコードされているんですが実際には"\u3042"と同じ扱いになり、putStrLnは下位1バイトしか出力しないので"B"になる、とか楽しい展開が待っています。

    で、ブログを作るとして、お気楽に「コメント」とかをプログラム中にリテラルの文字列か何かでそのまんま埋め込んでおいて、もちろんコンテンツはどこかにUTF-8のバイト列にして保存していたときにどうなるかは、みなさんにも想像がつきますよね? この辺、もうしばらくさわってないので最新の状況は変わっているかもしれませんが、Haskell界隈でi18nに燃えている人って心当たりがいないので多分放置されているんじゃないかな。

    あ、それで、つまりstandard的にはChar=UnicodeなんだけどChar=Byteであるかのようなnon-standard wayな実装は結構いっぱいあってわけわからん、と言うのが元の話だというわけ。いやしかしあれだね、悪い方が良い原則を思い出すよね。


    梅田望夫は「意」か「情」か

    Posted by 向井 淳 on Sunday, 9 November, 2008

    意の文化と情の文化という記事を読んで、なるほどなあと思いつつ未読なまま(帰国したら読もうかなと思っているが)これは応用が効きそうだな、ということをいろいろと考えていたのだが、さて梅田望夫は意か情だろうか。

    もちろん、人間そうそうどちらかに切り分けられるわけじゃないと思うのだが、たとえば彼もこれまでもいくつもバカバカしくひどいコメントを見てきたはずで、それで鬱屈した感情がついに噴出してtwitterに愚痴った、などといった見方は一面的だしどうもそぐわない(個人的には)。「おう、そうまでいうなら読んでから反論してやるよ!」とでもいうような反応を期待して怒ってみた(挑発してみた)のではないかな。でもそうであることを理解されない反応ばかりで、今頃は「失敗したな」と思っているのではないだろうか。

    こういうことを書くと「そんなことまで推測して反応しなきゃならんのか?」みたいなそれこそバカバカしい意見が出て来るものだけど、もちろんそんなことはない(書いたものに対する反応を見誤ったのは彼のミスだろう)。けど、まさに情という側面だけで自分が傷つけられたと感じて反応するのはそれこそ全然生産的じゃないような気がするし、反応を見ているとすっかり梅田を叩くという「空気」が醸成されていて、本来的でない点(たとえば書評の体をなしていないとか文章がよくないとか、そういう辺り)を攻撃しているのを見るにつけ、炎上ってのはこういうものだとわかっていつつなんだかなあと思うのだ。


    未体験の味

    Posted by 向井 淳 on Saturday, 8 November, 2008

    宿の近くにトルコ-中東風の料理のお店(要するにケバブとかだけど)の店ができていて、そこで飯を食った。それは良かったけど、ついでにドリンクでも、と目を走らせてなにやら怪しいものがあったので頼んでみた。それがこのヨーグルトソーダ。店頭に並んでいたときは沈殿していて下が白く、上は透明になっていた。 よく見るとパッケージには「SHAKE GENTLY BEFORE OPENING」とか書いてあるぞ。振っていいのか、これは、と疑問に思いながら何どかボトルを上下に回して攪拌したあとがこの写真、という状況(それにしてもピントがあってないなあ。iPhoneてピント調整できるのか?)

    で、飲んだ。

    日本の「飲むヨーグルト」というやつがあるでしょ。ぼくはあれは好きですよ、そんなに飲まないけど。カルピスソーダもぼくは好きだ。どっちも甘いしね。でもご存知のようにヨーグルトそのものはべつに甘いわけじゃなく、むしろ酸っぱい。で、あれなのね、これは。加糖されていません。

    まあ、でもね、言ったら何だけど多分そういうんだろうな、とはぼくも思っていたんですよ。みなさんも、こんなのが並んでたらそう思うでしょう。ちょっと酸っぱい炭酸飲料だろうなと。でも単にそういう言葉で表現するのと実際に味わうのじゃこれが大違いというやつでして、酸味はなかなか強くあとから押し寄せる微炭酸がこの味わいをかなり複雑なものにしている。複雑だが、おいしくはない。

    ラッシーってあるでしょう。インドの乳飲料で、店によっては加糖してたりするけど、あれもさわやかな酸味がある。あれはなかなか良い。それから、無味の炭酸水って嫌いな人が結構いるけど、ぼくは割と好き。でもこれはないな。久々に面白いものを飲みました。

    製品名で検索したら飲んだ感想を書いている(もちろん英語の)ブロガーがいっぱいいて、いくつか目を通したら全く褒めてない(笑)。ゲゲボドリンクとしての地位を確立していたらしいよ。

    気になるのは、ボトルに書いてある www.abali.com が期限切れっぽい感じでドメイン業者の広告になってることなんですが…おいおい大丈夫なの?


    ハロウィンの風景

    Posted by 向井 淳 on Saturday, 1 November, 2008

    先週末にサンフランシスコにでかけたが、こちらの人は買ったパンプキンをベビーカーで運搬するのが一般的なのだろうか。最初見たときは相当驚きました。

    週末の観光地も仮装した子供がいっぱいいたが、今日(こちらはまだ31日)は職場に行って朝食を食べていると木ノ葉の隠れ里の忍者がトレイに食べ物を載せて歩いていたり、眼帯をした海賊がうろうろしていたり、トイレに入れば真剣にメイクをしているゾンビがいたり、していた。周囲の同僚は普通だったが、ああいう格好の人はあの姿で仕事をしていたのだろーか。楽しげだ。

    ハロウィンの仮装というのは、起源を辿ると妖怪とか妖精とか幽霊とか魔女とかの格好をするもののようだが、さっぱり関係なく単に猫耳のヘアバンドをつけていたり、角をつけてみたり、単にアメコミヒーローやアニメキャラや映画のキャラのコスプレだったり、お姫様とか中世ヨーロッパ風の扮装であったりするのもよく見かける。よくわからないがなかなか楽しい。

    ////

    話は全く変わるが、ミクシィ年賀状というやつは、いいか悪いかはさておき(というか全然良かないと個人的には思うのだが)、いかにもミクシィらしいな、と思ったことであった。アナウンスされてみると今までそのようなサービスがなかったことが不思議なくらいしっくりと来る。そうじゃない?

    ではその「ミクシィらしさ」とはいったい何か?

    簡単にいうと日常性というか、ありふれているものというか、私たちの世界の地縁、血縁に密着した社会というか、そういうものがベースになった風習というか文化というか、そのようなもの(ちっとも簡単でないな)。実際問題としてぼくのマイミクにはそういう人は多くないのだが、現実にはそういう利用形態が多いのであろうというイメージを持っているというわけだな。