2006-04-06

近況

その夜, arai さんが "YAPC はすごかった" と興奮気味に話しているのを聞きながら, 私は perl の苦い記憶を玩んでいた. perl に何度も挑戦して全敗したあの頃. 私は perl を挫折したという理由から ruby を使っている. perl が perl でなかったら, 学生の頃にもっと CGI を作ったりして 今時の若者になれたのに.... そう思い, perl を使える人々を羨んでいた. (もちろん単なるいいがかり. なにしろ私の借りてきたサーバは 歴代すべて ruby がインストールされていたのだから.)

で, YAPC Asia のスライドのうち perl 指数が低くミーハー指数の高いものを眺めた. mixi と はてな...と思ったら mixi はスライドないじゃん. なので はてなのスライド(PDF) だけ眺める. あまり perl の話は出てこない. かわりに出てくるのは MySQL と Linux と Apache. (LAMP の LAM ですね.) del.icio.us, flickr, yahoo も似たようなかんじだったのを思いだす. ウェブのプログラマはコードを書けるだけだと不十分なのか. 溜息が出る.

私はスケーラビリティがどうとか偉そうに書いている割に そういうスケーラビリティの足元を何もしらない. これまでは知りたくもないと思っていたけれど, インフラの構築方法は今や教養のうちなのかも知れない. 実際, ACMQ にも その手の特集 がたびたび登場している. とはいえ perl や httpd.conf にはあまり近付きたくないなあ... それらしい本を何冊かブックマークに追加して, 後ろめたさを先送りした.

ハイテクの向こう側へ

はてなのスライドに "from IT company to High-Tech company" と 書いてあるのを見つけた. みな同じようなことを考えている.

ただ, 私には Hi-Tech であるはてなをまだうまく想像できない. はてなに限らず, 私は Web のハイテクがどういうものかをよくわかっていないのだと思う. Google や Amazon は確かに何か大層なことをやっているから, その並びにあるのものを目指すのが Web のハイテクなのだろう. そのハイテクは従来のものと種類の違う, 私が知らない何かだと感じている. その正体は何だろう. このごろ好んでそんな空想をする. (基本的には梅田望夫の真似なので, ひそかに もちおごっこ と呼んでいる.)

ソフトウェア開発の伝統的な武器として 規模 と 理論 のふたつを考えてみよう. たとえば 1000 万行のコードからなるソフトウェアを作るのが規模. 暗号のアルゴリズムを作るのが理論. 傾向として, 私が <IT 産業> と揶揄した世界はもっぱら規模を武器に戦ってきた. 一方の <ハイテク企業> は理論を主たる武器に戦っている.

たとえば Microsoft. 彼らは規模で戦っているようにも見えるが, それは歳月が残したレガシー. 武器の一部でしかない. Microsoft 製品が実装している理論的な難しさは明らかだ. 他の <ハイテク 企業> も多かれ少なかれそうしたイメージを売りにしている. 逆に典型的な <IT 企業> である IBM は (その実体がどうであれ) ハイテクな印象を押し出さない. でかいビジネスもどんと来いとスケールを強調する.

規模も理論もそれを繰るためには高度な技術 (high technology) がいる. ただ計算理論を駆使するほうがずっとメタルで, そのぶんハイテクのステレオタイプに近い.

近年, <IT 産業> の武器は 規模 から 変化 にシフトしつつあると言われる. Web 開発の方法論として有力な agile の一族はそうした流れから生まれたものだし, 日経的 buzzword の筆頭 SOA の肝である疎結合も変化への強さが売りとなっている. これらは変化の速い市場からの要請に応えたもの. Web サイトの運営に至っては変化そのものだ. Web で公開されているサービスやコンテンツは, 利用者をひきつけるために変化しつづける必要がある.

同じようなシフトが <ハイテク産業> にも起きていると考えてみると面白い. (ここからが もちおごっこ です.)

Google や Amazon のように Web で稼いでいる会社は, 理論だけではない別の武器を使って戦っている. そんな風に考えてみる. 規模 の対としての 変化 のように, 理論 の対ある 何か.

最近 Web 検索の教科書 "mining the web" を読んでいて, その一端を垣間見た気がした. この本には難しい理論の話も出てくるが, そもそもやっている当人すら正しさを確信していなそうな話題も多い. "経験によると", "実験的に" と保留付きの議論をする. 理由はよくわからないけど試してみたらうまくいった というかんじ.

Web のハイテク企業が振うのはこうした "よくわからない何か" かもしれない. Web のよくわからなさが言語や社会の複雑さに起因している以上, それを理解しようとするのには無理がある. だから実験や統計を頼りに, よくわからないけど価値はある何かを見付けては提供しようとする. たとえば試行錯誤を重ねて検索やレコメンデーション, 在庫管理の精度を高める. 広告の売上を改善する. そこには理論もあるだろうだろうが, それ以外の何かがある. そう感じている.

規模や理論は端的に言えば複雑さと戦うための武器だった. 変化はすこし違う. 変化はどちらかというと一貫性のなさや未知の外部要因といった ビジネスの理不尽さと戦う武器だ. この理不尽さと Web は少し似ている. 理不尽かどうかはともかく, Web に一貫性はない. 中身はころころ変わるし, 悪意も紛れこんでいる. グランド・セオリーの通用しない世界. だから不完全であっても有用な情報をひきだそうという話になる. そうした試みの代表が検索. その挑戦に必要な武器は注意深い観察と統計, 素材となるデータと実験. 一言ではうまく言えないけれど, ここでは仮に 洞察 と呼んでおく.

Web 上の <IT 企業> は 変化 を武器に, <ハイテク企業> は 洞察 を武器に戦っている. こう書くと信憑性はともかく言葉のすわりはいいね.

最近読んで挫けた本 : Mining the Web

では, その洞察はどのように行なわれているだろうか ... なんて意図から読んだわけではなく, EMAScript の仕様書は手強そうだから 軟弱で薄いのを併読しようと思って買ったのが検索エンジンの教科書であるこの本. (ウェブサイト.) Google 愛好会の副読書 くらいのつもりだったけど, ECMAScript 仕様の方がよっぽど楽だった. 薄いのは軟弱だからではなくて容赦がないから. (学部生向けって書いてあるのに...)

序盤は楽しく読める. たとえば 2 章はクローラの作り方. マルチスレッドにするとファイル I/O が直列化されず効率が落ちるから そこは select() を使いつつファイルへの書き込みは局所化するんだとか, DNS の lookup は意外と遅いから気をつけろとか, そういうノリ. これはもしかして "30日でできる! 検索エンジン自作入門" みたいな本なのかと期待させる. ところが次の章あたりから雲行きが怪しくなり, 統計を使った議論が登場するあたりからさっぱりわからなくなって挫けた. そのうち入門書に撤退して出直したい.

ただ挫けずに読めた部分は面白かった. タイトルからもわかるとおり, 古典的な IR の教科書 (たとえば 情報検索と言語処理) と違い内容が Web 寄りに構成されている. なにかというと Google を引き合いにだすので Google 愛好会的には悪くない.

たとえばウェブのリンク構造を解析する social analysis の話. PageRank も解説されており, ようやくそのアルゴリズムがわかった. (以前に解説ページを読んだ時はわからなかったのです.) PageRank のライバル(?)として HITS というアルゴリズムも紹介されており, この対比をしながら議論を進める. なかなか面白い. (わからないところも多いけど.) 相互リンクをするスパムサイトをどう弾くかという話などは Web ならではだ.

検索語に依存しないという PageRank の性質は色々便利だということがわかった. 検索語に依存する方法は結果が不安定になりがちな上に, リンク構造を解析する過程で 話題がずれたり(topic drift) 話が広がりすぎたり(topic generization)するという. ちょっと間抜けな感じが楽しい. PageRank はもっと大域的で安定している. Google っぽい. ただ PageRank だけでは不十分なので 他の IR 手法と組み合わせる必要があるそうな. まあそうだよね. 検索エンジン各社が今はどんな方法を使っているのか興味が湧く. 各社の "lab" にはちっともそんな話が無い. (なぜか IBM にはあったりする...あと Yahoo も. Yahoo えらい.)

他には "Focused Crawling" という話が出てくる. 要するに目的を絞ってクローラを走らせましょうという話. 普通の検索エンジンはどんな検索語にも応えられるよう なるべく広い範囲を検索する. focused crawling では クロール対象ページのリストをある評価関数を使ってソートし, その順にクロールする. その評価関数が目的との relevance を求めるようなものになっていれば, 興味のあるページだけをクロールして集めることができるという. この路線は世間の検索エンジンと目的が被らない分面白そうだ. たとえばドメイン依存のポータルサイトなどがこういうのを作ると楽しいかもしれない. そういう検索エンジンならドメイン依存のヒューリスティクスを色々使えるぶん 個性的な結果を期待できる.

あるいは個人用検索エンジンとして, ユーザの手元にある情報(検索エンジンの履歴や日記の記事, ブックマーク)と 関連のあるページを勝手に巡回してくれるクローラがあると嬉しいかもしれない. 自分の興味と関連のあるページを適当にフィードしてくれる. Winny が禁止されだぶついたディスクの使い途には悪くない. Web ニュースの Personalize というのはこういう話なんだろうね.

職業検索人はこんなことをずっと考えているのかと思うと, Google が人をいっぱい雇う気持ちも少しわかった. ただ, もう少しニッチを狙った検索稼業もありうるとは思う. いかにもスケールしなくて儲からなそうで, (だから Google はやってこなくて,) でもあると便利なものはないか. たとえば私が欲しいのは短歌検索. お題をいれると選集ができあがる. いかにもスケールしなくて儲からなそう. でもあると便利かはわからない...

もちおごっこがしたくて統計が苦手でないプログラマは楽しめる本だと思います.