飛行機
UA 885便は2つの連続したセグメントに同じ便名が付いているのだが、当初からそうではないかと思っていたものの確証がなくて、空港に行ってからようやく納得した次第。
SFOにはRed Carpet Clubが複数ある。さすがSFO。
なにしろ僕は小市民なので、飛行機の中では肘掛によって規定された空間外を侵食したりする意図は持たないわけなのだが、最近は太平洋を横断するたびにその辺をあまり気にしない人と隣り合わせになってばかりのような気もする。今回の隣人は体形的にもリラックスするとひじがおなかに当たって外側にはみ出してしまう感じのある人だったのだが、特に睡眠を取ったりするとこちらにひじが出てくるわけである。そうなると僕も自分のひじを使って無言のまま国境に防衛線を張ってしまうわけだが、寝ている人相手なのでなかなか難しい(小エロ?)
という具合に徐々に高まる国境紛争の緊張を感じていたら、隣人さんは「んあっ!もー」と呟いて体を入れ替えてまた眠りに落ちてしまった。どんな夢をみさせてあげることができたのだろうか。
速度比較
私はid:sumimさんではないのですが(当たり前だ)、id:khiさんのhttp://d.hatena.ne.jp/khi/20040916
を見て現実逃避的に。SqueakのWorkspace Programming版はこんな感じ? 他の言語でもtimeToRunに相当する標準メソッドくらいはありそうですが、とりあえず等価なコードになっています。
benchmark := [:n :c |
([n timesRepeat: [c value] ] timeToRun) * 1000.0 / n.
].
fact := [:n | (2 to: n) inject: 1 into: [:s :t | s * t] ].
'Squeak: ', (benchmark value: 10000 value: [fact value: 10]) printString, ' MicroSeconds per call'.
これだと、Pentium M 900MHzで
'Squeak: 9.8 MicroSeconds per call'
くらい。ちなみに、fact2とか言って
fact2 := [:n | n factorial].
というものを定義してみると、
'Squeak: 3.9 MicroSeconds per call'
くらいですね。khiさんの環境がどのようなものなのかわかりませんが。当然ながらSqueakの方がPythonよりは速くてそしてコードも短いわけではあります。J5があれば3倍くらいは早くなってもよさそうですね。
LargeIntegerの速度を測ったりする人が出てくることに期待。
ついでにVisualWorks 7.2では、factのほうで
'VisualWorks 7.2: 1.49 MicroSeconds per call'
fact2だと
'VisualWorks 7.2: 0.28 MicroSeconds per call'
でした。思ったより速い。さすがElliot。
毛玉
大改良中。
いろいろなシステムをいじってきたときになんども理解しては何度も忘れていることだが、あるシステムの大改良を目指すときにも、インクリメンタルな変更の積み重ねになるようにすることが重要である。システムの一部があるべきすがたになって、残りはまだ古いままという状況でも、なんとなくそれっぽく動いてテストができるようにしておく、という。
特に野望が高いときは、AをA'に書き換えて、BをB'に書き換えて、CをC'に書き換えて、全部がそろわないとテストできない、というか全部がそろうと美しい世界が待っているからそれまでテストしたくない、という心理状態に陥ることもある。が、こうなると結局A'、B'、C'が揃う前に挫折するのが落ちである。
というわけで、自戒を込めて日記に書いておこう。
Dan Ingalls
Danは鉄道にも詳しいのだが、Ferropolisで話したときに彼のおじいさん(だったと思う)はChesapeakeあたりで鉄道会社を経営していたとか言っていた。今日になって調べたら、彼はこういう人だったわけである。
http://www.indianahistory.org/library/manuscripts/collection_guides/M0754.html
とてつもないおじいさんを持ち、かつSmalltalkを作ってしまうもの静かなこの男。僕の知り合いで「驚異」の一人である。そういえば、父上は言語学者だったとか。
John McIntoshのおじさんもカナダ鉄道省(?)の主任科学者(?)かなにかで、Ferropolisで燃えていた人の一人であった。