Smalltalk
キューブサット物語(エクスナレッジ刊)なんて言う本を読んだ。わずか10cm角の手作り人工衛星を 大学生が宇宙へ送り出す物語である。世界初の快挙。
物語は、1999年にハワイのカウアイ島から始まる。各国の大学が年に一度ハワイに集まり、宇宙開発の 相談をしてたそうな。前年は、カンサットと言う飛行物体をアメリカの砂漠から4km上空へ打ち上げて いたけど、それじゃつまらん。もっと上空へ宇宙へって言い出した、ほらふき?教授がいた。
すっかりその話に乗せられてしまった東大生と東工大学生は、その夢に向かって邁進する事になる。 衛星を打ち上げるにはロケットが必要。ロケットも自作すんの? それは、まあ無理。打ち上げは、 米国とかロシアの民間企業にお願いすることになった。
こういう民間企業は主顧客の衛星を打ち上げるんだけど、余ったスペースの有効利用を図る為、 1kgを1万ドルの費用で宇宙へ持って行ってくれるとか。ミニ衛星の射出装置はユーザーが用意 するらしい。何とか夢に手が届きそうな舞台が整った事になる。
とはいえ、いきなり宇宙へ飛び出す衛星を作るなんて無謀な事は出来ないので、まずは模型バージョン、 次に、エンジニアバージョン、そして最後にフライトバージョンって具合に段階を踏む事になる。
それぞれの大学には宇宙工学の研究室が有り、その研究室が夢に乗ったわけだけど、実際の技術に 話を落とすと知らない事だらけ。衛星の機構設計、電源設計、通信設計、そしてお役所仕事で 大量の書類作成等等。
いろいろな分野の協力を仰ぐ事になる。ビーコン信号(平たく言うとモールス信号発信機)を、マキ電機に 依頼したり、衛星追尾をJARLの近藤さんに依頼したり、技術検証アドバイスを、ハヤブサを作った 川口さんグループに依頼したり。。。実に多くの人の協力と根性が注ぎ込まれているんだなあ。
衛星の部品の中で一番高価なものは、太陽電池だったとか、120万円したそうな。制御コンピュータは 、秋葉原のあの店で買ったPICっぽかったぞ。メモリーが8kしかなくて、裏技を駆使したとか。 衛星を射出するのはバネ仕掛け。留めてあるナイロン糸をニクロム線に電流を流して焼ききるとか 、面白いなあ。でも、一番のはらはらどきどきは、どこの会社が打ち上げに付き合ってくれるかって、話だったよ。
gauche and gdb
ArchLinuxでもgaucheの組み込みに挑戦。Makefile中のSWを少々変えて、gdb対応にした。これで、 エンジン本体の動きも同時に眺められるかなあ。
Breakpoint 1, main () at load.c:52 52 GC_INIT(); (gdb) n 53 Scm_Init(GAUCHE_SIGNATURE); (gdb) Warning: Cannot insert breakpoint 0. Error accessing memory address 0x87343b8a: 入力/出力エラーです. 0xb7c93281 in siglongjmp () from /usr/lib/libpthread.so.0
こういうエラーは初めてだぞ。BPを置けないって、置きたい所はどうなってるの? /proc/pid/maps してみるか。
[sakae@arch ~]$ cat /proc/443/maps 08048000-08049000 r-xp 00000000 08:01 1183747 /home/sakae/e-scheme/a.out 08049000-0804a000 rw-p 00000000 08:01 1183747 /home/sakae/e-scheme/a.out 0804a000-081ab000 rw-p 00000000 00:00 0 [heap] b7ad4000-b7ad5000 rw-p 00000000 00:00 0 b7ad5000-b7c80000 r-xp 00000000 08:01 1443924 /usr/lib/libc-2.17.so :|
ここに表れていないって事は、カーネル空間ですかね?もう少し、Scm_initの中を探検して みると
189 Scm_Init_libvec(); (gdb) 190 Scm_Init_compile(); (gdb) 191 Scm_Init_libomega(); (gdb) Warning: Cannot insert breakpoint 0. Error accessing memory address 0x9bab5475: 入力/出力エラーです. 0xb7c93281 in siglongjmp () from /usr/lib/libpthread.so.0
エラーの箇所が変わったな。どうなってんの? 深追いは止めて、OpenBSDで試してみます。
$ ./a.out [error] cannot find "a.scm" in ("/usr/local/share/gauche-0.9/site/lib" "/usr/local/share/gauche-0.9/0.9.3.3/lib" "/usr/local/share/gauche/site/lib" "/usr/local/share/gauche/0.9/lib" ".") [error] invalid application: (#<unbound> (1 2 3))
Schemeの定義をロードするってのをやったんだけど、a.scmを入れるの忘れてた。そうすると こういうエラーが出て来るのね。いやー、参考になります。まるで、パアルの@INCだったかを 調べているみたい。エラーは友達だなあ。ああ、感心してる場合じゃないな。
(gdb) n 53 Scm_Init(GAUCHE_SIGNATURE); (gdb) 0x100743f0 in rex (rx=0x3c0d0de0, orig=0x3c0ba3f0, start=0x3c0c7fcf "gauche-0.9/0.9.3.3/i386-unknown-openbsd5.2", end=0x3c0c7ff9 "") at regexp.c:2731 2731 if (sigsetjmp(cont, FALSE) == 0) { (gdb) 2735 return make_match(rx, orig, &ctx); (gdb) bt #0 rex (rx=0x3c0d0de0, orig=0x3c0ba3f0, start=0x3c0c7fcf "gauche-0.9/0.9.3.3/i386-unknown-openbsd5.2", end=0x3c0c7ff9 "") at regexp.c:2735 #1 0x100790f6 in Scm_RegExec (rx=0x3c0d0de0, str=0x3c0ba3f0) at regexp.c:2807 #2 0x100f6b75 in librxrxmatch (SCM_FP=0x3c088050, SCM_ARGCNT=2, data_=0x0) at librx.scm:66 #3 0x100315f8 in run_loop () at ./vmcall.c:186 #4 0x1003f272 in user_eval_inner (program=0x300112c0, codevec=0xcfbe88a0) at vm.c:1416 #5 0x1003fb6f in apply_rec (vm=<optimized out>, proc=<optimized out>, nargs=268911600) at vm.c:1511 #6 0x100444ad in Scm_VMExecuteToplevels (cs=0x30082828) at code.c:99 #7 0x100f2788 in Scm_Init_libomega () at libomega.c:249 #8 0x10027e0f in Scm_Init (signature=0x3c000022 "0.9,utf8,none") at core.c:191 #9 0x1c000d8e in main () at load.c:53
Scm_Initを通過して、いきなり深い所へ潜って行きましたよ。そして、暫く追って行くと
(gdb) run_loop () at ./vmcall.c:189 189 if (TAIL_POS()) RETURN_OP(); (gdb) 190 NEXT; (gdb) 808 SWITCH(SCM_VM_INSN_CODE(code)) { (gdb) 453 (PUSH-ARG VAL0) (gdb) 454 (FINISH-ENV SCM_FALSE ENV) (gdb) 453 (PUSH-ARG VAL0) (gdb) 454 (FINISH-ENV SCM_FALSE ENV)
これって、Gauche語の本体? かな。追うならこの環境が良さそうだ。じっくり後でみる事に しよう。
そして、Netをさ迷ってて見かけた、 Vimで(も)schemeなんてのも面白いぞ。
小耳に挟んだ事
最近、ドットインストールなんて言う、3分間クッキング ならぬ、3分動画でいろいろ学べる所があるよと教えてもらった。忙しい現代人のための 学習サイトですな。バラエティーに富んだカリキュラムが用意されてる。人気コースも時代性を 反映してるな。
でも、おいらは天邪鬼なのでそういう人気品には手を出さない。一番人気の無さそうな(ヲィ) Smalltalkを、ひそひそとやってみる。
Pharo
まずは、処理系を取ってこいとな。Pharoとか言うそうな。
取ってきたのを展開するだけってのはイイネ。いらなくなったら、即ごみ箱へ棄てるだけで いいから敷居が低い。取ってきた物一つで、Windows,Mac,Linuxに対応するみたいだ。中にバッチが 用意されてるんで、そいつをダブルクリック。起動した。
けど、表示されてる文字が灰色で、年寄りには見辛いな。これに限らず、最近のWeb画面の文字は 灰色のやつが流行っているけど、これって年寄りは近づくなってサインなんでしょうかね。 Firefoxとかで見て、見辛いやつは、w3mで墨痕鮮やかにして見てますよ。
で、画面の文字色を変えるにはどうするの? あちこちクリックしてみたけど、見つからないので 挫折しました。やっぱり、年寄りは来るな、、ですな。
でも、初めて未知な言語に触る時、メソッド名とか補完してくれる機能は棄て難いな。それに、 PBE1-ja.pdfを公開します なんて言う資料も公開されるからなあ。。
squeak
代わりは居ないのかねえって探してみたら、squeakってのが有るみたい。日本の有志が 頑張って日本語化してくれている。 sqeuak-jaから、落としてこれる。 これも、一粒で3度嬉しい、Windows,Mac,Linux対応になってる。
勉強会も定期的に行われているようで、日本語の 資料も公開されてた。太っ腹な人達だなあ。
VisualWorks
とまあ、SmallTalkの有名どころは、3つのプラットフォーム用に公開されてるけど、*BSD用は 無いのかしらん? 探してみたよ。
The VisualWorks suite is the premier Smalltalk toolset for building instantly portable server, web-based, and client/server applications. With connectivity to all major relational databases, object databases, and internet standard protocols, VisualWorks offers a complete solution for Windows(R) (95/98/ME/NT/2000/XP), PowerMac, Intel Linux, AIX, SGI Irix, Compaq UNIX, HP-UX, and Solaris. With the most, well-respected, high-performance virtual machine architecture, VisualWorks is the preferred choice for internet development. WWW: http://smalltalk.cincom.com/
んでもって、普通の人は visualworks download からどうぞってな。
GNU smalltalk
もう一つ有ったぞ。GNU製のやつが。 GNU smalltalk がHPだな。portsから入れてもいいんだけど、自前でコンパイルしたよ。
[sakae@secd ~]$ gst GNU Smalltalk ready st> 1111111111111111111111111 * 11111111111111111111111111111111111111 12345679012345679012345677777777777777654320987654320987654321 st>
何となく、巨大数もサポートしてるな。でも、方言があるな。慣れるしかないんか。 とりあえず Smalltalk で最初にびっくりすべきところ そして、 GNU Smalltalk チュートリアルとか。