会話するLISP
スケッチ
Talking REPL. Common Lisp forms from SLIME are captured with Emacs Lisp and sent to Festival's old Scheme to be spoken. All communications are done in S-expression. Fun but not great. yet. pic.twitter.com/mrExwGJ3sJ
— Minori Yamashita (@ympbyc) February 19, 2019
LispマシンMirai
この記事は lisp Advent Calendar 2018 の25日目に書かれました。
メリークリスマス!
一月ほど前に、ワイヤードを漂っていたMiraiのバイナリをうっかり手に入れてしまったので、 環境を作って少し遊んでみました。*1
CG制作統合開発環境Miraiのコードベースは、1980年代のSymbolicsで作られたS-Graphicsに端を発します。S-Graphicsは92年にニチメングラフィックス(旧:日本シンボリクス,現:NGC)に売却され、IRIXとWindows NTに移植されてN-Worldになり、これを下敷きにしてMiraiが作られました。現在はIzWareが権利を保有しています。Miraiのリリースが1999年なので、20年前のソフトウェアということになります。
ここら辺の事情は、Practical Scheme WiLikiのLisp:Geometryの項目を参照してください。
簡単に機能の一部を紹介すると、
- Geometry: Winged Edgeポリゴンモデラ
- Painting: テクスチャエディタ
- Animation: アニメーションエディタ(スケルタル、ディスプレイスメント、スクリプトなど色々使える)
- UV Editing: UVマップエディタ
- 3D Painting: モデルに直接色が塗れる
ソリッドボディやゼリー状の物体の物理シミュレーションなども行えるようです。
Miraiと言えば映画Lord of the Ringsのゴラムのモデリングに使われたエピソードが有名ですが、この記事ではモデラとしての側面ではなく、Symbolicsから連綿と受け継がれてきたLispマシンのバイブスに注目します。モデラに興味がある方は、Wings 3Dを使ってみるとよいかと思います。
MiraiはAllegro Common Lisp 5.0のACL Runtimeの上で動いています。面白いのが、裏にLispのリスナがいて、タスクトレイのアイコンのコンテキストメニューからInterrupt Lispを選ぶだけで、簡単にアクセスできてしまうことです。
他にもなにかしらエラーが発生したときに出るダイアログのDebugボタンなどから、すんなりとLispリスナに落としてくれます。
REPLが繋がっているというのは、そんなに珍しくはなくて、例えばBlederではPythonコンソールが使えたりしますが、Miraiのリスナのすごいのは、これがMiraiのプロセスそのものだというところです。
単純にスクリプティング用にAPIが提供されているというのではなく、動いているプロセスの実装そのものであるところの生きたオブジェクトがウヨウヨいる海を自由に泳ぎ回ることができます。CLOSのMOP等も使って、アプリケーションを実行中に内側から好きなように改変できてしまうという魅力が、上記WiLikiのLisp:Geometryにて存分に語られています。
さてこのリスナ、そのままだと使いづらいのですが、ACLのEmacs連携機能を使って、Emacsに繋いで使うことができます。Miraiに付いてきたelispはEmacs20用のものでしたが、数か所書き換えたらすんなり動きました。ネットワーク越しに繋ぐので、ローカルでもリモートでもいけます。
こうなるともういつものLispハッキングと変わりません。ACL Runtimeは、dumplispやdisassembleが無いのと、ドキュメンテーション文字列が皆無でdescribeも大して役に立たないことを除けば、普通のAllegro CLです。*2
準備が整ったら、どんどん式を評価していきましょう。
aproposでどんな手続きが定義されているかは探れるのですが、describeがまるで役に立たないので困ります。
N-Worldのオンラインドキュメンテーションを公開してくれている方がいるので、それとにらめっこすることになります。以下のリンク先のWide Open World Programmer's GuideにLispの情報が載っています。N-Worldのものですが、Miraiと高い互換性があります。 N-World 3.0 Online Documentation
全然大したことはしていませんが、動画を撮りました。のんびりご覧ください。ほんとはかっこよくboidsでも飛ばしたかったんですが、Lispエイリアンのモデリングで力尽きてそこまでいけませんでした。
Lisp界隈だとライブオブジェクトプログラミングという言い方はあまり聞きませんが、開発と実行が分かれていない環境はやはり楽しいし、オブジェクトの数が多ければ多いほど、ソフトウェアが複雑であるほど面白いように思います。こんなソフトウェアが増えればいいなあ。
Lisperならこんなに面白いおもちゃもなかなかないんじゃないでしょうか?うっかり手に入れちゃった人は遊んでみましょう。
just ask
関西Lispユーザー会でしゃべってきました
13日に神戸大学で開催された関西Lispユーザー会に初参加して、発表してきました。
スライドです。 docs.google.com
瀧先生のLispマシン TAKITAC 7
懇親会でも憧れの人たちと濃い話ができて面白かったです。
当日お会いした方々、運営の皆様お世話になりました。今後とも一つよろしくお願いします。
Lisp最高!
id:t-sin さんが詳細なレポートを書かれています。 octahedron.hatenablog.jp
自然保存プロジェクト Nature Conservation Project
夏の過ごし方 -- 外気からエネルギーを得て生きる
あまりエアコンが好きではない。
どこもかしこも冷やしすぎだ。冬より寒いわ。 キンキンに冷えた室内で寒い寒いと思って、外にでて暖まっていると、他の人が出てきて、「暑っ!」とか言っている。アホかこれが普通じゃ、と思う。
毎年夏は夏バテ気味で乗り切ってきて、夏はバテるもんだと思ってきたけど、今年はバテていない。
飯を最小限しか食わなければ全然暑くないという事に気付いた。
夏は皮膚から熱エネルギーを得れるから炭水化物はあまり必要ないんじゃないか。
キュウリに塩塗ってかじったり、スイカ食べて体温下げたり、川で泳いだりして、余裕しゃくしゃくである。
人間、冬は太り、夏は痩せるものさ。
熱量(カロリー)を摂って燃焼させておいて、暑い暑いといってエアコンで地球を暖めるのは止めて、外部エネルギーを取り込もう。火力発電から太陽光発電に切り替えるようなものだ。
地球から生まれた人間が、地球で生きられないはずはないじゃないか。環境は敵対ではなく適応するものである。
理論編
生命活動維持に外気のエネルギーを利用できることが信じられない人のために。
ヒトの体温調節より、人体が一定の温度に保たれるとき、以下の等式が成り立つ。
M = E ± R± C ± S
- M:代謝による熱産生量
- E:蒸発
- R:輻射
- C:伝導,対流
- S:蓄熱量
身長172cmウエスト70cmの人体を37°Cで保温(S=0)することを考える。
放射率表より皮膚の放射率は0.99、服は0.95
2-14. 種々の物質の熱伝導率より綿の熱伝導率は0.03、綿布は0.08(W/m K)
蒸発はとりあえず0とする。
これを ★ 熱の計算: 放熱に入力して計算する。
冬 (外気0° 3cm厚の綿):
M = 0 + 36×1.72 + 41×1.72 + 0 = 132W = 113kcal/hr
夏(外気37° 綿シャツ一枚):
M = 0 + 0 + 0 + 0 = 0W = 0kcal/hr
めっちゃ大雑把だけど、言いたいことは、冬は体温を維持するためだけでかなりの熱量を産生する必要があるが、夏の暑い時間は外気温だけで保温できるので、熱を産生する必要がない。ということ。
発汗によって失われる水分やミネラルは補給する必要があるが、糖はいらない。