プログラミングの基礎 (Computer Science Library) (単行本)プログラミングの入門に適した言語は何かという問いに唯一の具体的な答えというものはありません。多くの大学ではC言語を使っているでしょう。MITのように関数型言語を使う例もあります(その教科書SICP)。基本的にはなんでもいいと私は思います。オブジェクト指向でしか書けないような言語は、思考を制限してしまう危険があるのでちょっと躊躇しますが、取り返しがつかないというほどではないでしょう。

関数型で入門したい(させたい)けれど、SICPは本格的すぎるという向きには、浅井健一『プログラミングの基礎』(サイエンス社, 2007)がいいかもしれません。使用言語は関数型言語OCamlですが、プログラミング言語ではなくプログラミングを学べるように書かれています。

でも、ちょっと引っかかるところがあったので、そのことについて書いておきます。

プログラミング言語について学ぶのであれば、Javaなどのオブジェクト指向言語、あるいはCやPascalといった命令型言語を思い浮かべる方が多いと思います。それらを使わずに、あえて関数型言語であるOCamlを選ぶのには理由があります。それはOcamlが「単純、かつ強力である」からです。

単純ということはすなわち簡単ということです。OCamlでプログラムを作るのは、JavaやCで作るよりもずっと簡単です。それは、より人間の思考レベルに近い記述ができるからです。さらに、プログラムの記述量が違います。OCamlで書いたプログラムと同じことをするプログラムをJavaやCで書こうとすると、ほとんどの場合、コード量にして10倍以上になります。JavaやCを使っていたのでは、初学者が短期間のうちにメトロネットワーク最短路問題を解くプログラムを作るのはほぼ不可能でしょう。(p.3)

プログラミング言語について学ぶのであれば、Javaなどのオブジェクト指向言語、あるいはCやPascalといった命令型言語、OCamlのような関数型言語を思い浮かべる方が多いと思います。それらを使わずに、あえてマルチパラダイム言語であるMathematicaを選ぶのには理由があります。それはMathematicaが「単純、かつ強力である」からです。

単純な言語がいつも簡単だというわけではありませんが、Mathematicaは簡単です。Mathematicaでプログラムを作るのは、JavaやC、OCamlで作るよりもずっと簡単です。それは、より人間の思考レベルに近い記述ができるからです。さらに、プログラムの記述量が違います。Mathematicaで書いたプログラムと同じことをするプログラムをJavaやC、OCamlで書こうとすると、ほとんどの場合、コード量にして数倍になります。JavaやC、OCamlを使っていたのでは、初学者が短期間のうちにメトロネットワーク最短路問題を解くプログラムを作るのはほぼ不可能でしょう。

プログラミングを学ぶ際に、言語の選択は本質的なことではないと思います。よいプログラミング言語とその言語にあった題材があればいいのです。

C言語なら、題材に「グラフの実装」を選ぶのは正解でしょう。きっといろんなことを学べます。しかし、題材に「Dijkstraのアルゴリズムの実装」を選ぶと、初学者は挫折してしまうかもしれません。

OCamlなら、題材に「Dijkstraのアルゴリズムの実装」を選ぶのは正解でしょう。この本はきっと正解です。逆に、「グラフの実装」だけではあまり勉強にならないかもしれません。

Mathematicaなら、グラフもDijkstraのアルゴリズムも実装済みなので、もっと先に進むことができます。生産性を上げるためにはベクタやリストのような基本的なコンテナが準備されていなければなりません。同じことがグラフ(とグラフに関するアルゴリズム)にも言えます。そのような期待に応えているMathematicaでは、「Dijkstraのアルゴリズム」では簡単すぎてあまり勉強にならないことを確認してみましょう。

グラフ用のパッケージを読み込んでおきます。

<< Combinatorica`

適当な作業ディレクトリに移動し、データを読み込みます。

SetDirectory@"作業ディレクトリ"
nodes = Import["nodes.csv", CharacterEncoding -> "UTF8"];
edges = Import["edges.csv", CharacterEncoding -> "UTF8"];

データはこの本のサポートサイトコードmetro.mlから取りました(データはその言語特有の形式でなく、CSVなどのような一般的な形式で用意した方がいいと思います)。ちなみに、OCamlの完成版はコードex21_3.mlです。

データファイルnodes.csvはこんな感じです。

代々木上原,よよぎうえはら,yoyogiuehara,千代田線
代々木公園,よよぎこうえん,yoyogikouen,千代田線
明治神宮前,めいじじんぐうまえ,meijijinguumae,千代田線
...

データファイルedges.csvはこんな感じです(4列目が距離、5列目が時間だそうです)。

代々木上原,代々木公園,千代田線,1,2
代々木公園,明治神宮前,千代田線,1.2,2
明治神宮前,表参道,千代田線,0.9,2
...

駅名のリスト。

names = Union[Map[First, nodes]];

駅名を数字に変換するためのハッシュテーブル。

i = 1;
Map[(station@# = i++) &, names];

隣接行列。

aMatrix = Table[Infinity, {i - 1}, {i - 1}]; 
Map[(
    aMatrix[[station@#[[1]], station@#[[2]]]] = 
     aMatrix[[station@#[[2]], station@#[[1]]]] = #[[4]]
    ) &, edges];

グラフ。

g = FromAdjacencyMatrix[aMatrix, EdgeWeight, Type -> Undirected];

最短経路は関数ShortestPathで求められる。ノードの番号のリストで返る結果を駅名に変換し、経路長を計算する。

search[s1_, s2_] := 
 With[{path = ShortestPath[g, station@s1, station@s2]},
  {Map[names[[#]] &, path],
   Fold[{#2, #1[[2]] + aMatrix[[#1[[1]], #2]]} &, {First@path, 0}, Rest@path][[2]]}]

テスト1:search["渋谷", "護国寺"]

{{"渋谷", "表参道", "青山一丁目", "永田町", "麹町", "市ヶ谷", "飯田橋", "江戸川橋", 
  "護国寺"}, 9.8}

テスト2:search["茗荷谷", "目黒"]

{{"茗荷谷", "後楽園", "飯田橋", "市ヶ谷", "麹町", "永田町", "溜池山王", "六本木一丁目", "麻布十番", 
  "白金高輪", "白金台", "目黒"}, 12.7}

というわけで、最短経路探索はMathematicaなら簡単です。先に進まなければなりません。たとえば、経路探索で重要なのは、距離ではなく時間です。メトロネットワークにおいては、やっかいなことに、駅間の移動にかかる時間は一定ではありません。そのあたりも考慮することにすれば、Mathematicaにとってのいい題材になるでしょう。

おまけ(グラフの描画)

せっかくなので、絵を描いてみましょう。駅名を全部表示すると見にくくなるので、路線を3つ以上持つ駅に注目するようにします。

hubStations = 
 Map[First, Select[Tally[Flatten[Map[Sort@{#[[1]], #[[2]]} &, edges]]], 2 < #[[2]] &]];

最短経路の始点と終点、hubStationsに含まれる駅の駅名を表示することにします。

label[path_, name_, pos_] := Text[
  If[MemberQ[path, name] &&
    Or[name == First@path, name == Last@path, MemberQ[hubStations, name]], name, ""], pos]

グラフは関数GraphPlotで描きます。

stationPlot[path_] := 
 GraphPlot[g, 
  VertexRenderingFunction -> ({Gray, Point@#1, Black, label[path, names[[#2]], #1]} &)]

テスト1の結果はstationPlot[First@search["渋谷", "護国寺"]]で描けます。

stationPlot[First@search["渋谷", "護国寺"]]

テスト2の結果はstationPlot[First@search["茗荷谷", "目黒"]]で描けます。

stationPlot[First@search["茗荷谷", "目黒"]]

マイケルジャクソンが死んだ。

こんな理由でレーザーディスクプレーヤーを持ち出してくることになるとは思わなかった。そう、当時10代だった私は、CDでは飽きたらず、彼のLDまでも買い揃えていたのだ。LDがすぐに廃れるなんて思いもよらずに。

メディアはさっそく特集を組んで、「永遠のスーパースター」だなんて言っている。自宅を遊園地にしたり整形したりすることは本人の自由のはずなのに、変人と決めつけて奇異の目で報じていたのは誰? 犯罪と無関係な芸術と、犯罪ゆえの芸術との区別なんてできるはずもなく、もし有罪だったら彼をサポートすることにどのような道義的責任が生じるのだろうと悩むファンなどお構いなしに、裁判を単におもしろおかしく報じていたのは誰? 結局無罪だったにも拘わらず、その後の名誉回復にはまったく協力しなかったのは誰? 「マイケルジャクソンが好き」って言った後で、幼児虐待や整形について言い訳しなきゃいけないような雰囲気を作っていたのは誰?

世の中というのは恐ろしいもので、人気が上がっていくうちはもてはやしておいて、ちょっとでも隙を見せると手の平を返してよってたかって叩きまくる。「彼はもう古いよ」って言っていたくせに、今になってCDを買い直したりレンタル屋に駆け込んだりしている人は恥を知って欲しい。

4860203208

深夜に及んだ追悼会の2次会では、HistoryのDisc 2、最後の3曲でしんみりしてしまった。

機械で「心」を作る~「AIの父」ミンスキー氏が早稲田大学で講演

コンピュータサイエンスは重要だがコンピュータそのものが重要なわけではない、とミンスキー氏は強調した。それは解けない方程式があっても、コンピュータを使うことで何が起こるかを見る事ができるからだ。それがコンピュータがなく数学しかなかった時代との違いだとミンスキー氏はいわゆる「3体問題」など力学の問題を例に出して説明した。

ピタゴラス3体問題とは、図のような3:4:5の直角三角形の頂点上に静止させた、質量3, 4, 5の質点の運動を調べるというものです。

天体力学のパイオニアたち―カオスと安定性をめぐる人物史〈上〉 (シュプリンガー数学クラブ) (単行本)この問題は1893年には知られていましたが、数値的にでさえ、解決は1966年になってからです。ディアク,ホームズ『天体力学のパイオニアたち』によれば、粒子の2つが連星を形成し、第3体が高速度ではじき飛ばされるという結論は、驚くべきものだったそうです。

これを数値的に解くのは、コンピュータ無しではまあ無理ですよね。ちょうど、Mathematicaならケプラー問題の数値解を簡単に求められるという記事に対して、「でも、計算精度は大丈夫でしょうか」と訊かれたところだったので、コンピュータがあれば簡単だということを確認してみましょう。

必要な精度は状況によるので、絶対大丈夫とは言えませんが、たいていの場合には、十分よい精度で計算すると思います。有名なピタゴラス3体問題で調べてみましょう。

下の動画は、重力定数を1とした場合の計算結果の最初の70秒の様子です。

計算の準備は簡単です。運動エネルギーとポテンシャルエネルギーからラグランジアンを計算し、運動方程式を導きます。

運動方程式を解くのも簡単です。

この解の軌跡は、上で紹介した動画における軌跡とは明らかに違っています。

「この問題をちゃんと解くのは大変ですよ。(よく知られた微分方程式の数値解法である)ルンゲ・クッタじゃぜんぜんだめですよ」と言っていた天体力学の教授の言葉が思い出されます。

うまくいっていないことは、エネルギーを調べるとわかります。保存されているはずのエネルギーがかなり変化しているのです。

MathematicaのNDSolveは、保存量を指定することもできるので、それを試してみましょう。(参考:NDSolveのProjection法

運動量と全エネルギー、角運動量を保存させながら計算すると、なんとなく似てきたような気もしますが、まだずいぶん違います。

下のように、手法も指定すれば、正しく計算できます。この記事の最初の動画が計算結果です。

この結果は、Burrau's problem of three bodiesで紹介されているものとあっています。(リンク先にはこの問題を数値的に解いたSzebehelyの論文があります。)

頭脳勝負―将棋の世界 (ちくま新書) (新書)

2007年11月10日発行の『頭脳勝負』において、著者の渡辺明さんは次のように書いていた。

私は、トッププロがコンピュータに負け越す日が来るとは思っていません。

コンピュータについての羽生さんのかつての発言とはかなり違っているような気がする。しかし、肝心の羽生さんの発言が見つからない。やはり、検索可能な形で記録しておくことが大事だ。

多くのウェブサイトでJavaScriptが使われています。JavaScriptが動作しないウェブブラウザにも対応させることが、ウェブサイト制作における常識だったはずですが、最近はそうでもないようです。たとえば、みんな大好き英辞郎のウェブサイトでは、検索のためのボタン「英和・和英」にはJavaScriptだけが割り当てられているので、JavaScriptが動作しないブラウザでは使えません。次のコードでは、トップページは取得できても検索結果を取得できません。

use WWW::Mechanize;

$m = WWW::Mechanize->new();
$m->get('http://www.alc.co.jp/');
print $m->content;

動かない場合は、管理者になって(必要ならhttp_proxy, ftp_proxyを設定した状態で)「perl -MCPAN -e shell」とし、「install WWW::Mechanize」。テストに失敗するようなら、とりあえず「force install WWW::Mechanize」。

ウェブから情報を集めるために簡単なロボットを作ろうとするときなどに、このことは大きな障害になります。プログラム中でたいていのHTTPクライアントは(JavaのHTTP ClientやPerlのWWW::Mechanizeなど)、JavaScriptに対応していないからです。英辞郎はhttp://eow.alc.co.jp/単語/UTF-8/?ref=saというようなGETが使えるので実は問題ないのですが、すべてのサイトがこんなに親切なわけではありません。

ウェブアプリケーションのテストに使うSeleniumが、この問題の一つの解決策になります。

まず、Seleniumのサイトで、FirefoxのアドオンであるSelenium IDEをインストール、SeleniumのためのコントローラであるSelenium Remote Control (RC)をダウンロード・展開します。

FirefoxのツールメニューからSelenium IDEを起動して、(記録中にして)ブラウザを操作します。英辞郎の場合は、こんな感じになるでしょう。

このテストケースを自分が使いたいプログラミング言語用にエキスポートし(ファイル名はeijiro.plとする)、適当に修正します。Perlならこんな感じでしょうか。

use strict;
use warnings;
use Time::HiRes qw(sleep);
use Test::WWW::Selenium;
use Test::More "no_plan";
use Test::Exception;
use utf8;

my $sel = Test::WWW::Selenium->new( host => "localhost", 
                                    port => 4444, 
                                    browser => "*chrome", 
                                    browser_url => "http://www.alc.co.jp/" );

$sel->open_ok("/");
$sel->type_ok("//input[\@name='q' and \@value='' and \@type='text']", "inquisitor");
$sel->click_ok("//input[\@value='英和・和英']");
$sel->wait_for_page_to_load_ok("30000");
print $sel->get_body_text();

これで完成です。Perl以外にも、JavaとGroovy、C#、PHP、Python、Rubyに対応しています。

java -jar selenium-server.jar

としてコントローラを起動し、

perl eijiro.pl

として実行すると、ウェブブラウザが自動的に起動し、英辞郎で検索、結果を表示してくれます(Ubuntuをプロキシサーバが必要な環境で利用している場合には、システムのプロキシを設定しておくといいでしょう)。「install WWW::Selenium」が必要かもしれません。テストに失敗する場合はとりあえず「force install WWW::Selenium」(「install CPAN」と「reload CPAN」が先かもしれません)。

アクセスするたびにウェブブラウザが起動するんじゃ遅くて使い物にならないと思うかもしれませんが、eijiro.plに相当するスクリプトを起動しっぱなしにしておいて、そこに対して何らかの方法で命令を渡していくように実装すれば、簡単なJavaScript対応ロボットになるでしよう。やっつけ感が気になる人は、ロボットの本体を置き換え可能に設計しておいて、あとで真面目に作り直してください。

逆二乗の中心力のもとで物体がどのように運動するかを調べるケプラー問題。微分方程式を解く能力がなければ楽しめないかと言えば、そういうわけでもない(物理を勉強する人にはもちろん必須)。

最近の強力なプログラミング環境を使えば、物体の軌道を簡単に視覚化できる。インタラクティブなものにするのも簡単(さすがに、微分方程式は立てられないといけない)。

Mathematicaならこんな感じ(インタラクティブに操作できるのは、重力の強さを決めるkと時間の上限tmax、初速度v0、初期座標pos)。

実際に動かしてみたい人は、Mathematica Player用のノートブックを使って欲しい。Mathematica Playerはフリーソフトウェアではないが無料で使える。ブラウザ上で動くようになるとすごいと思う。

Mathematicaの微分方程式ソルバーNDSolveはかなり強力で、このエントリのような単純なものだけではなく、摂動があるような問題も扱える。

解析的に解きたい人は、ランダウ=リフシッツ『力学・場の理論』のような教科書を参照して欲しい(福島登志夫『天体の位置と運動』の方がやさしいかな )。ジンマーマン, オルネス『物理学のためのMathematica』では、ハミルトン=ヤコビ方程式を使う方法が紹介されている。

関連:プリンキピアを読む

ニュートン力学の聖書『プリンキピア』は、その著者が微積分学の創始者(の一人)であるにも拘わらず、解析学ではなく初等幾何の言葉で書かれています。そのため、今日の基準からすると親しみにくく難解です。物理というよりは科学史への興味から読まれることがほとんどでしょう。

しかし、力学を解析的にとらえるのが主流の今日において、初等幾何的にとらえるニュートンの試みには、知的な価値を見いだすことができます。物事を複数の視点から見ようとする態度を忘れてはいけませんし、何より新しい(?)ことに挑戦するのは楽しいことでしょう。

そうは言っても、(英訳なら無料で読める)『プリンキピア』そのものに取り組んでもたいていの人(含私)は挫折してしまうので、エッセンスだけを取り出したガイドのようなものがあるとうれしいです。

プリンキピアを読む―ニュートンはいかにして「万有引力」を証明したのか? (ブルーバックス) (単行本)和田純夫『プリンキピアを読む』は、『プリンキピア』へのガイドとして、とてもよいものだと思います(もっと本格的なものが欲しい人は、偉大な『チャンドラセカールの「プリンキピア」講義』にあたるといいでしょう)。特に、3部構成からなる『プリンキピア』の第3編「世界の体系」の紹介がいいです。「ライオンは爪を見ればわかる」とまでは言えませんが、次のようなことを書いていたことについては感心せずにはいられません。

規則1 自然現象の原因は、それらの諸現象を真にかつ十分に説明するもの「以外」を認めるべきではない。(p.41)

しかし、肝心の力学についてはというと、ちょっと物足りない気もします。ニュートン力学のもっとも重要な事実の解説が、あっさりしすぎているからです。楕円軌道から逆二乗則を導くという命題については詳しく解説されているのに、逆二乗則から楕円軌道を導くという命題は簡単に紹介されているだけなのです。

ファインマンさん,力学を語る (単行本(ソフトカバー))前者が重要であることに異論はありません。これが、法則の発見を追体験するものだからです。しかし、法則を使って自然現象を説明する後者も、前者に劣らず重要でしょう。これが近代科学の態度なのです。実際、一見本書と同じテーマに思える『ファインマンさん,力学を語る』の主要なテーマは後者です。

ニュートンはその著プリンキピアの中で「惑星は太陽のまわりを楕円軌道を描いて回転している」ことを重力の逆2乗の法則から示した。これはニュートン力学の「へそ」にあたるもっとも重要な事実であり、このことが分水嶺となって近代科学は誕生したのだった。(ソデ)

ニュートンが言ったこと、そして一個の惑星に関してやったことは、次のようにまとめることができる。それは、等時間での速度の変化はみな太陽の方向を向くこと、それからその大きさは距離の二乗に反比例することである。われわれのいまの問題は、そのことから、軌道が楕円であることを証明することである。それがこの講義の主な目的なのである。(p.169)

解析学的アプローチにおいては、前者は微分方程式を立てることに、後者は微分方程式を解くことに相当します。まとめると、次のようになります。

  • 楕円→逆二乗則:法則の発見の追体験。解析学的には微分方程式を立てることに相当する。和田さんが詳しく解説している。
  • 逆二乗則→楕円:現象の説明の追体験。解析学的には微分方程式を解くことに相当する。ファインマンが詳しく解説している。いわゆるケプラー問題(参考:ケプラー問題の数値解

404 Blog Not Foundに、「遠山啓の『数学入門』下巻に登場する、楕円を極座標表現してから微分方程式を立て、それを淡々と解いていくやり方」という記述がありますが、『数学入門』下巻でなされているのは前者であり、後者つまりそこで立てた微分方程式の解法は紹介されていません。淡々と解いてなんかいません。

閑話休題。実は後者を初等幾何的に証明するのは並大抵のことではありません。実際、あのファインマンでさえ、ニュートンの議論の筋道をたどるのをあきらめて、独自の方法を工夫しています(前掲書p.123)。とはいえ、その工夫を量子力学の発見の一因となるラザフォード散乱に話に繋いで講義をまとめているのはさすがです。ニュートン力学最大の成果とニュートン力学打倒に至る道筋を、逆二乗則というたった1つの話題でエレガントに見せてくれるのですから。(力学の教科書で散乱を扱うことの重要性については、ランダウ=リフシッツ 『物理学小教程 力学・場の理論』の山本義隆さんの解説を参照)

そう言えば、高校物理のカリキュラムは、初等幾何的なアプローチを採用していました。ファインマンのような天才でさえ手を焼くものを、高校生が容易にマスターできるはずはありませんから、高校物理が暗記科目になるのは当然です。幸いなことに私は、文科省のカリキュラムにとらわれない塾や参考書に出会うことができたので、高校物理で苦しむということはありませんでした。しかし、そういう出会いがないために苦しむ高校生が今もまだたくさんいるであろうことを考えると、胸が痛みます。もし、そういう高校生が近くにいたら、あの山本義隆さんの『新・物理入門』をそっと渡してあげてください。私が使った時には「新」は付いていませんでしたが、大学受験の枠を超えて読まれていい名著だったと思います。

2008年1月10日にソースコードが公開されたシムシティあらためマイクロポリス(ライセンスはGPL)。

ソースコードはMicropolis Downloadsからダウンロードできるが、そのままではビルドできない。

Slashdotの記事についたコメントで、パッチが発表されている。このパッチは、Mac用として配布されているが、他の環境でも利用できる。(「パッチを当てたソースの最新版がhttp://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis?a=snapshot;h=HEAD;sf=tgzにある」とパッチに書いてある。)

初代SimCityを試してみたいというだけなら、ブラウザで遊べるシムシティクラシックが簡単だが、せっかくコードが公開されたのだから、自分でビルドしてみたい。

GNU Linux (Ubuntu)の場合(Windowsの人はandLinuxで)

まず、必要なパッケージをインストールする。

sudo apt-get install libxpm-dev tk8.4-dev byacc libxext-dev
#andLinuxの場合
#sudo apt-get install libxpm-dev tk8.4-dev byacc libxext-dev mplayer

次に、ソースコードをダウンロードする。

wget -O micropolis.tar.gz http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis?a=snapshot;h=HEAD;sf=tgz

Mac OS Xの場合

まず、開発環境をインストールし、音が出るように、playをPATHの通った場所に置く。

次に、ソースコードをダウンロードする。

curl -o micropolis.tar.gz http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis?a=snapshot;h=HEAD;sf=tgz

ビルド・実行

tar zxf micropolis.tar.gz
cd micropolis/src
make
make install
cd ..
./Micropolis

画面サイズが大きすぎる場合には、res/whead.tclとres/wscen.tcl、res/wsplash.tclを修正する。

MicropolisからMegalopolisへ

人口が50万人を超えるとメガロポリスになる。クリックで拡大。(1920x1600より少し大きいディスプレイがあれば、マップ全体を表示したまま遊べるのかな。)

Megaloporis

祝福メッセージを読みたい人は、実際に作ってみたらいいと思う。よく知られたテクニック(チート)は以下の通り。

  1. 道路・火力発電所は建設しない
  2. 中心部と沿岸部が重複しない地形を選ぶ
  3. 工場・港・空港はマップの端に建設する(港についてはチート)
  4. 災害はオフにする(チート)
  5. 税率は7%。人口が45万人を超えたら0%にする(チート)
  6. 消防署は一つだけ(チート)
  7. 地価が高い場所(マップの中心部と緑や公園の近く)は住宅地と商業地のみにする。警察署も不要(チート)
  8. 地価の高い場所の教会と病院は解体する(チート)
  9. 建物は、線路に1ブロックでも接していればよい(チート)
  10. 線路は繋がっていなくてもよい(チート)

クラウド化する世界 (ハードカバー)邦題『クラウド化する世界』(ニコラス・G・カー著)

電力資源の確保方法の変化と計算資源のそれとを対比させた第1部「一つの機械」と、クラウド化による世界の変化への警鐘を鳴らす第2部「雲の中に住んで」からなる。(邦題は内容を矮小化しているのではないだろうか。)

さすがにこの業界にいれば、この本で初めて知るような話はないのだけれど、以下の引用部分が何を言っているのかよくわからない人は、第10章「クモの巣」だけはちゃんと読んだ方がいいと思う。

一般に行政府は、オンラインの世界を旧来の地政学的境界線に沿って分割し始めている。そればかりでなく独裁主義的政権は、インターネットはその権力にとって、当初恐れたほどの大きな脅威を引き起こすものではないと悟り始めている。(p.239)

引用の引用

「誰もが人生の途上で、数多くの質問が記載された数多くの記録書類に記入する」と、アレクサンドル・ソルジェニーツィンが小説『ガン病棟』に書いている。「一つの書類の一つの質問に対する答えは、細い糸となって、その人を個人記録管理局の地方センターに永久に結びつける。こうして、何百という糸が一人の人間から放射して、全体では何百万もの糸となるのだ。これらの糸が突然目に見えるようになれば、空全体はクモの巣のように見えるだろう・・・誰もが、この見えない糸を常に意識して、ごく自然にその糸を操る人々に対する敬意を育むのだ」(p.250)

「敵意」ではないところがさすが

特別な事情でMac OS X解像度を指定しなければならなくなったときは、/Library/Preferences/SystemConfiguration/com.apple.Boot.plistに次のように記述すればよい。

<key>Graphics Mode</key>
<string>1024x600x32</string>

ブログ論壇の誕生 (文春新書) (新書)佐々木俊尚『ブログ論壇の誕生』

本書の大部分はウェブ上の言論(ブログやはてなブックマークのコメント)の引用なのだが、集合知だけで本書ができるかというと、それはなかなか難しいだろう。つまり、ネットサーフィンをするだけでは得難い知見が本書にはある。これが良書であることが、ウェブには何か足りないものがあることを物語っている。

2006年に『ウェブ進化論』でスマッシュヒットを飛ばした梅田望夫さんが、インタビューで「日本のWebは残念」だと発言したそうです(Web、はてな、将棋への思い 梅田望夫さんに聞く)。

最近の梅田さんは、ちょっと弱気になっているようです。たとえば、ひろゆきとの対談を断ったという話を、『本人 vol.09』でひろゆきさんが披露していました。

もし彼に度胸と自信があれば、たぶん一緒に議論をして、どっちが正しいか決めよう、もしくはお互いの間違いを認めようってなると思うんですけど、たぶんそういうことをしたら、自分の状況が不利になるぐらいの計算は立つ人だと思うんですよ。

そんな弱気な梅田さんに、たくさんの人が励ましの言葉を寄せています。

梅田さんは「ところで、お前はてなのコードどんだけ書いたの?」とつっこまれたり、「ポジショントークの人」と言われたりしているので、どちらかといえば軽く見られているのだと思っていました。そういえば、『本人 vol.09』では、ひろゆきさんにこんなふうに言われていました。

もともとあの人って、コンサルタントじゃないですか。だからインターネットはこれからうまくいきますよとお金を持っている人に言って、投資をお手伝いしますよ、その代わり手数料をくださいというビジネスでしょう。そうすると、インターネットは夢がありますって言わないと仕事にならないじゃないですか。

しかし、実際はそうではなかったようです。たくさんの人が梅田さんの発言に注目し、貴重な時間を費やしてコメントしています。ウェブ業界のスターたちも例外ではありません。私なんかもうリンクを張るだけでおなかいっぱいです。

でも、なんて言うか、励ますならまず、梅田さんの最近の著作について暖かいコメントを出して、Amazonへのリンクを貼ったりしてほしいです。大部分の人が「将棋」をスルーしているじゃないですか。「ロジックの通じる友達が多いです」というひろゆきさんでさえ、次のような勘違いをしたりするんです。こういう誤解をロジカルに解くなんていうのは、梅田さんにぴったりじゃないですか。

囲碁や将棋って持ち時間があるでしょう? そうすると、相手に迷惑をいくらかけても、長く考えたやつの方が強いんです。(『本人 vol.09』

梅田さんと将棋に関する発言で、私の目にとまったのは切込隊長さんのものだけです。曰く、

将棋とシリコンバレーなんてどうでもいいだろ、正直なところ

これでは台無しです。どうでもいいなんて言わないでください。

こんな感じで書いてもらいたいのです(参考:404 Blog Not Found)。皮肉を言っているように見えるかもしれませんが、そういう意図はありません。

  • ブログで発言するものは、今後本書を読まずしてガラパゴスについて語るべからず
  • この本をどれだけイイ!と思えるかで、進化の段階を測れる、そんな一冊だ
  • 結論だけ言えば、才能というものに対し、少しでも「なにかしたい」という思いがある人は、必ず目を通すべき一冊である
  • 面白い! 著者の作品の中では、最も面白かった

私の想像ですが、梅田さんは次のような図式で日本の文化を整理しようとしているのだと思います。

グローバルガラパゴス
Nokiaケータイ
英語日本語
囲碁(チェス?)将棋

「ガラパゴス」というキーワードで日本を語ることが有意義かどうかの判断にはもう少し時間がかかると思いますが、これまで「ケータイ」と「日本語」しかなかったこの枠組みに、実例をもう一つ追加し、そこに一生懸命スポットライトをあてようとする姿勢はもっと評価されていいと思います。

「羽生さんは日本で一番優れた、日本で一番貴重な人だと思うからね」(インタビュー後編)という発言における、「日本」が「世界」になることはおそらくないでしょう。囲碁の世界選手権に相当するものは将棋にはありません。碁打ちになるか将棋指しになるか悩んでいる子どもにとって、「世界チャンピオン」に成り得るという点では囲碁のほうが魅力的でしょう。その子が大人になる頃に、コンピュータに対して人間が優位を保っているのは、おそらく将棋ではなく囲碁でしょう。外国で書かれた人工知能の標準的な教科書で、オセロとチェス、囲碁が取り上げられているのに将棋が取り上げられていないのは、そんなにおかしなことではありません。(参考:囲碁と将棋の違い

こういうことに対する梅田さんの悔しい思いに、もっと共感してもいいのではないでしょうか。

梅田さんの新著は、「何語に翻訳してウェブにアップすることも自由」だそうです。これは、ガラパゴスから脱却する方法の一案なのでしょう。それなのに、「どうせならクリエイティブ・コモンズにすれば、日本語版も」とか「日本語版は売れるけど、それ以外は翻訳費用の元が取れないからボランティアにやらせてる」、「お金にならない部分を利用可能にしただけなのに、オープンソースを語るな」とか揚げ足を取らないでください。梅田さんは「オープンソース的協力」と言っているのであって、「オープンソース」と言っているわけではないのです。たいていの場合、「・・・的」と「・・・」とは似て非なるものなのです。

揚げ足取りのネガティブなウェブから高め合いのポジティブなウェブへ。ここまで当プロジェクトがやってきたのは、ポジティブな風を少しでも吹き込めるようにするための土台作りです。(「英訳版「敲(たた)かれ台」がウェブ上に一般公開されました!」より)

梅田さんの言葉の影響力がうらやましいです。

portrait

 

Translation

著書

schedule

 

2009年6月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

関連商品(Amazon)

関連サイト(Google)

アーカイブ

twitter

  •