毛玉
いまいち集中していないのだが、Tweak版毛玉。Andreasと並列言語のセマンティクスについてちょっと意見交換をしつつ、クラス定義が変わったときの処理を実装。
毛玉の場合、基本的には、ひとつの種類のタートルを定義すると、内部的には(今は3つ、だけど将来は4つ)のPlayerクラスを作る。それぞれは、Exemplarとしての振る舞い、集合としての振る舞い、直列実行するときの振る舞い、タートルの変数に格納されたときの振る舞いを記述するためにある。これらのうち、ユーザーが実際に操作するExemplarを他のものの親クラスとするので、ユーザー定義のスクリプトをコンパイルしたCompileMethodは親クラスに定義するだけで、子クラス達からも呼べるわけである。
Tweakの場合は、Uniclassのインスタンスの定義を変えたときには、さっさと新しいUniclassを作ってしまい、そのインスタンスのクラスを(class pointerを張り替えることによって)新しいUniclassに替える。そこに継承関係がなければそれで良いのだが、毛玉のように継承関係をつけようとしている場合には、もともとの子クラスのインスタンスには知らされないまま、友達だと思っていたやつのクラスが変わってしまうことになる。もちろん、例えばExemplarに新しく定義されたはずのメソッドも呼ぶことができない。
これを回避するために、Tweakのイベントモデルを使う。メソッド定義が変更されたときやインスタンス変数が追加されたときにはイベントが発生するので、そのイベントのイベントハンドラーを書いておき、実行時に必要な情報を組にしたイベントを発生させれば、関連するインスタンスたちにその情報が伝わり、彼らも自分のクラスを変えて親子関係をとりもどすことができる。
Tweakのイベント良いです。C++のフレームワークであるQtのイベントモデルにも似ているのですが、メタプログラミングでもどんどん使えますし、例によってクラスをインスペクターで開きつつ、デバッガで追いつつプログラムが書けますので。eToys版のときのやったように、闇雲にPlayerクラスのメソッドをオーバーライドする必要もないです。
ポジティブ・フィードバック
昨日の講義録http://d.hatena.ne.jp/squeaker/20050505#p3は、"If you are the smartest person in the room, you are in the wrong room."のところが多くの人の琴線に触れた^^;ようで、警句としてリンクが張られている。せっかく書いたのでありがたいことだが、あくまでも「良いコミュニティ」に属したり作って誰も"the smartest"にならないようにするのが重要、ということの振りだった、ということでよろしくお願いします。
はてなブックマークの見出し(http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/squeaker/20050505%23p3)を見るとAlanの言葉みたいに見えますが、彼はあくまでも引用していただけです。が、誰の言葉といったのか実はメモが取りきれなかったのですが、案外James Watsonの言葉と言いつつAlan流にアレンジしたものだったかもしれないので油断はならないわけですが。
もっとも、http://d.hatena.ne.jp/squeaker/20050124#p5に書いたように、格言は文脈を無視して抜き出しても意味があるからこそ生き残るのかとも思いますが。
日記のエントリが参照されるかどうかということには、運良くちょっとリンクされるとあちこちにぱっと広まっていくと言うポジティブフィードバックがあります。が、一方AmazonのLong Tail論のように「一見メジャーでなくても積分すればメジャーになる(超訳ですが)」というものもあります。僕の日記は完璧マイナーなほうだけど、存在していることくらいは知っている人は知っている、という状況でまあ丁度良いかなと思っています。
UCLAの授業
京都側はお休みではないのだが、今日はそれぞれローカルでやった。Javaの遅延評価処理系LazyJ (http://www.cs.ucla.edu/~awarth/lazyj/)を作ったAlexは、"look like"できれいに書いた論理回路シミュレーションをSqueak eToysで作ってデモしてくれた。
Alanがその後がんがん話をした。面白かったね。Alanはプリンストンの数学科に行くことも考えていたそうな。John McCarthyもMinskyもプリンストンの数学科だったこともあり。もちろんファインマンもプリンストンだった。Feynmanの「ご冗談でしょう、ファインマンさん〈上〉 (岩波現代文庫)」あるように、学生は授業はいくら休んでも良いが、週何回かあるお茶会には絶対に出なくてはならない。Marvinによれば、これはあくまでも大学院生のためであり、偉い先生達(super achievers)といろいろな話をすることによって、「ちょっと成長した自分たちのパーソナリティを備えていた人を見習う」ことができるが、なによりも「偉い人々もそれぞれみな『スタイル』が違う」ということを見ることによって、「スタイルは違っても良いのだ」ということを強く印象付ける効果がある。
日本は多くの文化を共存させて、それでも日本人であることを忘れないでいる。文化の豊かさは世界一だと言える(前一緒に京都の錦小路を歩いていたときも、BGMに流れていたベートベンのラジオを聴いて「ほらね」という感じで言っていたが)。他の国に行くのは視点を豊かにする一番の方法である。
「もしあなたが部屋の中で一番賢い人だとしたら、あなたは間違った部屋にいる」と言う言葉がある。良いコミュニティでは、誰も一番賢い人がいない、という状況になる。PARCでも週に一度は全員が集まって話をする会があった。数時間で終わることもあれば、朝の4時まで話したこともある。PDP-10クローンを作ってしまうか、会社が言うようにXerox Sigma-7を使うかというような決定もあった。Ericのお父さんが多大な貢献をして、PDP-10クローンはクラッシュしないくらいちゃんと動いた。最初のICメモリーを持ったコンピュータも作った。
Butler Lampsonが言った、「100人のユーザーを想定しないようなものには力を割くべきではない」と言う言葉が魔法の効果をもたらした。最初は、「研究なのだから一台だけが実験的に動けばよいのではないか」という抵抗もあったが、Butlerは議論になったら激しい言葉を使わなくても相手を完膚なきまでに叩きのめすことができる人だった。が、結局は実験機も、複製を作ることを考えて作ると安定性が増し、すぐに複数の人が使えるようになるので効率が良かった。ネットワークも安定して稼動した。技術の飛躍的な進歩を生んだ強力な概念だった。
■
某映画プロデューサーとAlanとKimとLanceとでお昼。Robert Heinleinの話が出たが、Alanは本当に写真的に本の内容を記憶しているわけなので、どんどん引用が出てくる。俺も全部(矢野徹訳で)読んだけど、言われてそうだったかなあと思い出すのがやっとである。Heinline は一日40フィートくらいテレタイプで執筆してジュブナイルと一般向けとを同時に書いたりして、年のうち3ヶ月働き、残りの9ヶ月は旅行していたそうである。Alanが訪問した翌年くらいに作風ががらっと変わったが、そのころ某体調の変化があった。家のピアノで空軍のなんらかの曲を演奏してあげたそうである(というのはAlanがまだ20歳ごろのこと)。そのときの家が数年後に書かれた小説に出てきた家とそっくりだったそうである。
創作童話: 博士(はくし)が100にんいるむら (その2)
http://www.geocities.jp/dondokodon41412002/index.html
オチの数字に関するフォローをしてくださっている人がいます。
http://d.hatena.ne.jp/rna/20050505#p1
http://hakasenoikikata.com/posdoc_report01.html
やっぱり無理があるという方向で。
帰投
id:propellaの山宮さんにSJCまで送ってもらい、すいすいと自宅まで帰ってきました。
擱座とか帰投とかはXPのIMEだと変換できないのね。軍事系用語は嫌われているのかな。久米さんはいつもどうしているのだろう。違う帰投はいろいろあるんだけど(この段落は久米さんのコメント禁止)。