神山に引っ越してきました
玲音はBeOSユーザーだった!? lainのLisp開発環境を発掘!
こんばんは。アマチュアLisp考古学者の山下です。先週弊社でピザを焼きながら唐突に話題に上った、lainのHandiNAVIにLispのソースコードが表示されているシーンについて検証していきます。
幻のLisp開発環境を手に入れてコネクトワイヤードしたい!
まずは先人たちの研究によって判明している事項のまとめ:
- HandiNAVIのハードウェアのモデルはApple Newton
- OSはCopland OS Enterprise。これはMacのSystem 8の候補で、結局ヴェイパーウェアになったCopland Projectではないか
- ソースコードはCMU AIのリポジトリにある、ライフゲームのコード
- 言語はCommon Lisp
以上のことはwikipedia英語版のSerial Experiments Lainの記事にまとまっています。
ちなみに、このライフゲーム、お好みのCommon Lispのリスナーに書けば動くんですが、ちょっと見た感じ停止しないっぽいので、カウンターつけるなり、next-cycle
の頭とかに (sleep 1)
くらい入れてやると良いです。
それはさておき、今回特定したいのは、Lispを表示しているこのエディタ、開発環境の正体です。
この画像をよく見ると、一部隠れているもののウインドウのタイトルが読めます。CRowViewCL。まずはこれをGoogleサーチしてみました。
検索結果は一件。 なんと件の環境をブラウザ上に再現しているサイトが出てきます。
http://mebious.neocities.org/public_html/Infornography.html
mebious.neocities.org 謎しかないけどワイヤードの世界を体験出来ます。 誰か詳細知ってたら教えてください。 wired.entry.neocities
このページのおかげでわかったことは、CRowViewCLは実在のソフトウェアではないことと、件のエディタがIDEであるということ。確かに元画像にもIDEという文字は見て取れます。
Apple NewtonやCoplandへのリファレンスから、最初はMacかNeXTSTEPかのソフトウェアかと推理したのですが、よく観察するとどうもそうではなさそうです。
- メニューバーがウインドウに内包されている。
- フォントがChicagoだ。
Copland ProjectのPinkのスクリーンショットでも、メニューバーは画面上部にあり、Chicagoフォントが使われているのが確認できるので、アップルのシステムという線は捨てて捜査を進めました。
ではなんなのか
このページによると、各エピソードの終わりに表示される"To Be Continued"のBeのカラーリングがBe Inc.の昔のロゴをリゼンブルしているらしい。BeOSも出自からしてAppleと関係が深い。ビビビッと来ましたね。
- フォントが一致. どちらもCourier 10 BT Roman
- ウインドウの枠線が一致。1pxの線と直角を多用するBeOSの可愛らしい特徴が出ています
- メニューバーの色が一致
- メニューバーの項目、File Project Windowが一致。ツールバー右端にはみ出ている Data が決定的証拠.
- ツールバーの下の ▽sources が一致
この画面は、 CodeWarrior 1.5 for BeOSのスクリーンショットです。CodeWarriorなんて初めて聞いたけど、XCode以前に一大帝国を築いていたIDEらしいです。対応言語はC,C++,Pascal,Javaで、残念ながらCommon Lispは入っていないようです。
HandiNaviで動くLispの開発環境CRowViewCLのモデルは、Code Warrior for BeOSだということが判明しました。
また、HandiNAVIでBeOSのバイナリが走っていることから、Copland OS EnterpriseはBeOSの亜種なのではないかという仮説が立ちます。
Code Warrior for BeOSとlainを結びつける記述はどこにも発見できなかったので、きっと新発見だと思います。
せっかくなので再現画像を作ってみました。Code Warrior for BeOSのウインドウに、Emacsでハイライトしたライフゲームのソースコードをハメ込んでいます。
Reptoidsボタンがあるツールバーは依然謎のままです。昔の映像だと、他のボーダーはスムースなのにツールバーの上だけジャギってるので、ハメ込みじゃないかと思ってます。ちなみにReptoidはヒト型爬虫類のことです。あとは頼みます。
HandiNavi=Palm説 (追記 2018/09/30)
Reptoidsの出処を突き止めました。Reptoidという名前のゲームがCodeWorriorのPalm OS用SDKにサンプルとして付属していたようで、Palm,Inc.のRoger Floreというハッカーが作ったもののようです。
出典: Palm Hacker's Salon CodeWarrior講座 第2回 サンプルを改造してみる
ツールバーに注目
HandiNaviのハードウェアはApple Newtonをモデルにしているというのが定説ですが、Palm説も浮上してきました。
というわけで幻の開発環境の正体の本命は、Palm上のBeOSで動くCommon Lisp対応のCodeWorriorということになります。
p.s.
Clojure界隈楽しい & life on runtime
Clojure/West 2015のビデオ見始めたんですが、今年は豊作だったみたいですね。
多次元パラメータスペースを使ったジェネレティブアート。最高! Quilの上にMany Worldsってライブラリを作ったそうです。
前から気になってたcloxp。githubできてた。今日ちょっと触ってみて #tokyoclj で軽く紹介しました。JS版Smalltalk環境のLively Kernel上のClojureの開発環境という、超ニッチなところ攻めて来てます。ランタイムでlive object触って開発するのまじ楽しっすよ。今度のSmalltalk勉強会で日本のSmalltalker達に紹介する予定です。
ランタイムで開発といえば、ちょっと違うけどもう一つ。Figwheel。ランタイムの状態を壊すことなくトライアンドエラーサイクルを回せるってもの。こちらは普通のエディタ使えるのでマス受けしそう 。 www.youtube.com
まだいくつかしか観れてないですが、他にも面白いtalkいっぱいあります。乱数のやつとか。Clojure界隈不思議なことしてる人が多くて楽しいです。Something beyond ordinary programmingみたいなの好きな人は要チェック!
ランタイムでの開発って話でいうと実は僕も作ってるものがあって、近いうちに発表できるとこまで持って行きたいなと思ってます。Fluxアプリをブラウザ上で開発しちゃおうってもの。これはClojure関係なくてVanilla JS。まだPoCでWIP. よかったら一緒にやりましょう。
なんか久しぶりに開発意欲が湧いてきた。 #tokyoclj 行ってよかった。来週のClojureScript勉強会も行きます。
次元ベース宇宙の性質と勉強会のお知らせ
よく忘れるのでメモ。
任意のn次元空間Aからn+m次元図形aを観測できるとき、aが存在するn+m次元空間は必ずそのうちのn本の軸をAと共有している。
例えば、理想的な4次元空間(xyzw空間)に於いて、観測装置がxyz空間にあって、3次元立体がxyw空間にあるとき、この立体はxy平面に張り付いた体積0の2次元断面として観測されるはずだけど、z方向の厚みを素粒子一粒分すら持てないため光学的な観測は不可能。
重力はこういう風にはみ出てるんじゃないかっていうのがvacuum energyとかunified field theoryとかひも理論とかグラビトンの話につながる。証明が難しいけど論理的にはとても自然。
話は変わって、なんとなく勉強会というかビアバッシュでも開きたいなと思ってます。幾何学 ∪ 理論物理学 ∪ 計算機科学みたいなテーマで、ビール片手に語り合う会に興味がある方はぜひtwitterで教えてください。 Minori Yamashita (@ympbyc) | Twitter
数人でも興味ある方がいれば会場とビール確保してatndだかcompassだかなんだかで募集かけます。
Brian Greeneが最高
I wanna be a part of the pathway towards truth. I don't care what that truth is. I just wanna help to find it. And if string theory is wrong, get rid of it!
考えてることも科学に対する姿勢も話し方も大好き。World Science Festivalのディスカッション全部めちゃくちゃ面白いのでおすすめ。
日本語訳ついてるのだとこれとか
それから、これはひも理論関係ないけどe8の話面白い。
やっぱり理論物理学って面白い。
高次元立方体を描く
先日の記事で触れたように、次元数の軸が、どれかの次元の軸についての方程式になっていた場合どんな挙動になるのかの実験のためにn次元単位立体を描画するプログラムを書いています。プログラマだと実験の道具を自分の指先でちょちょいと作れてとても便利。
今日の夕方にJSFiddleで暇つぶしに書いていたら、n次元(0含む)の立方体の辺を描画するものが呆気ないほど簡単にできてしまいました。
超立方体 - Wikipedia
正八胞体 - Wikipedia
5次元立方体のワイヤフレーム。コード末尾の方のstate
のd
が次元数(軸の数)。"Edit in JSFiddle"から、この数値を変えたりして実験できます。
gistはココ: gist: Draw n-dimentional cube on canvas.
あくまでスクリプト的なコードで、効率などは無視していますが、わりかしシンプルに表現できました。
仕組みとしては、
- x軸の角度と、y軸の角度をパラメータとして受け取って、この2軸が作る角度を等分割して残りの軸を割り当てる。
- 次元軸の置換(permutation)について、 これと
{0: 1, 1: 1, ..., n: 1}
なベクタでplotVertex
を呼ぶ。 plotVertex
は座標ベクタを舐めて、各スカラーxについて半径xの円周と軸の交点に向けて辺を描画する。この交点を保存しておいて、次の辺のスタート地点とする。
という、定規とコンパスを使う時と全く同じ仕組みになっています。
出来上がった図形は、立体を2次元に投影するときに、互いに直角ではない角度を直角であると錯覚するのと全く同じように、全ての角度が直角であると錯覚して見る必要があります。
以下ギャラリーです。辺の重なりの奥-手前関係は考慮していないので注意。
2次元立方体 2-cube
3次元立方体 3-cube
4次元立方体 4-cube
5次元立方体 5-cube
6次元立方体 6-cube
7次元立方体 7-cube
8次元立方体 8-cube
9次元立方体 9-cube
ちゃんと各頂点に次元数本の辺が集まっているのが確認できます。
次元が増えるにつれて赤くなっていくのは、色を設定し忘れた軸方向の線が、デフォルトの赤で引かれているからです。
暇を見つけて改良していきます。任意の軸についての回転を実装すればだいぶ把握しやすくなりそう。
編集履歴
Apr 18 2015
- もっとうまいやり方を思いついたのでコードを修正しました。美しくなったけどネストした再帰のせいで重くなった。
Apr 19 2015
コードを修正して、軸を、等分割位置から0.1τずらすようにしました。ちょうど重なって繋がっているように見えていた線分がうまいことズレて見れるようになった。
任意の軸方向にスケールできるようにしました。