English page is available here.
Squeak/Zaurusは、テーマパークなどを多数持つ'W'(または'D') で始まる名前の某大企業が行った、「ゲストのための携帯情報 機器」実験のプラットフォームとして使用されました(以下これを 某プロジェクトと呼びましょう)。なぜSqueak/Zaurusだったのかと いう質問に関しては、Squeak/Zaurus の利点についてまとめましたので、興味のある方はお読みくだ さい。
細かい話は抜きにしてとにかくダウンロードしてみたい方はとにかくダウンロードへどうぞ。
ダウンロードしたあと、取りあえず一通りできることを試してみたい、 と言う方はデモの使い方をご覧下さい。
ザウラーのためのSqueak入門と題して、 Squeak に関する知識がまったく無い方でも、 「本当にZaurusだけでプログラムの開発ができるんだ」 という感触を味わっていただけるページを作りました (注: これは以前のバージョンのために書かれたものなので、 今のバージョンにそのまま適用することはできません。 ただ、 Zaurus 上で Squeak を使う場合の基本操作を修得することはできると思われます)。
Squeak は Smalltalk-80 の直接の子孫とも言うべきシステムでありますが、 現在ものすごい勢いで開発が行われているシステムであり、 さまざまな機能が追加 (追加だけではなく統合と言うべきものも多いですが) された結果、 Smalltalk-80 の子孫とは言うものの、 まったく新しいシステムであると言っても過言ではないようなものになっています。
「Smalltalkの直接の子孫」 というのは言葉以上の意味を持っています。 Squeak開発の中心には、 「あの」 Alan Kay と Dan Ingalls、 「パーソナルなコンピュータ」というコンセプトを最初に考えた人と、 そのコンピュータのためのプログラミングシステムである Smalltalk のデザインと実装を行った人が座っているのです。
オープンソースソフトウェアの価値は、組み込み機器で使うとき にさらに強く発揮されます。ある程度の規模のソフトウェアを構築 する場合、OSやウィンドウシステム、あるいはVMなどのような他の 人が書いたレイヤを利用することが一般的ですが、そのような場合 には、ほぼ常になんらかの不具合に衝突したり、ちょっとした拡張 を施す必要が出てきます。もしそれらのレイヤの変更が難しいと、 それらの問題に対処するために書かなくてはならないコード (workaround)が複雑となり、ただでさえ制約の強い組み込み機器で 安定したソフトウェアを作るのが困難になってしまいます。また、 原理的には変更が可能なレイヤであったとしても、レイヤの数が多 い場合には、現実的には修正するのが不可能である、ということも ありえます。Linux上で動くXの上で動くGTKを使えば、自由に拡張 できるシステムになる、というというのは原理的には真ですが、例 えば「あるアプリケーションで特定の大きさの画像を多用するので、 それをXサーバーでキャッシュするようにしたい、というようなこ とが本当に自由にできるでしょうか。
Squeakの場合には、完全にオープンなVMとライブラリを使って、 さらに言えばVM自身もSqueakで書かれていることから、自分達の目 的にかなったシステムを構築しようとする際の障害が非常に少なく なっています。
Zaurus OSの部分に関してはソースもなければ変更もできないのは 確かですが、Squeak/Zaurusの場合にはシャープからの多大なバッ クアップのおかげで、workaroundを書くための非常に多くの情報を もらっており、それらがVMの実装に取り込まれています。
Squeakの場合には、非常に多くのプラットフォームに同じVMが移 植されており(他のどんなVMよりも多くのプラットフォームに、と いっておきましょう)、グラフィックスライブラリやスレッドなど もSqueakのライブラリとして提供されているので、ひとつのプラッ トフォームでデバッグしたアプリケーションは、どのプラットフォ ームでもほぼ「まったく同じに」動作します。某プロジェクトでも、 2人の人間がWindowsとMacとで別々に書いたプログラムを組み合わ せて、Zaurusで動かす、という形でシステムが開発されました。
某プロジェクトのアプリケーションでは、基本的なイベント処理 を行うループの合間に、さまざまな周辺機器の状況をチェックしな くてはならなかったのですが、そのようなコードも自由に、そして 簡単に書くことができました。
Javaの既存のGUIフレームワークをPDAで使うことを考えた場合、 AWTはフレームワークの移植性が非常に低く、Swingはメモリ使用量 が必要以上に多すぎます。かといって、Javaでは独自のGUIフレー ムワークを自分で記述するのは困難です。例えば、VMを変更しない ままで、画像のコピーなどの回数を最低限に押さえたようなGUIフ レームワークが構築できるでしょうか。
世の中には、管理領域や2のべき乗に丸められてしまって大きな メモリオーバーヘッドがあるようなシステム(場合によっては256k にまで丸められてしまうかもしれません)、フラグメンテーション を起こしてしまって、割り当てと開放を繰り返しているうちに割り 当てられなくなってしまうシステム、ガーベージコレクションに semispaceを使うアルゴリズムを採用しているために、結局必要な 領域の2倍のメモリを使用してしまうシステム、ガーベージコレク ションのアルゴリズムの問題から、使用されていないはずのメモリ 領域が完全に回収できないシステムなどが存在します。
Squeakの場合、QVGAのイメージデータひとつを管理するために必 要となる領域の大きさは12ワード(48バイト)だけです(つまり、 150k + 48バイトという意味です)。もちろんガーベージコレクタは 100%ごみを拾ってくれます。Squeak/Zaurus上でシステムを構築す る時には、このようなコンパクトな表現の利点を生かし、かつ実装 の詳細も参考にしながら、メモリ管理の細かいところにも気を配っ たきめの細かいアプリケーションを構築することができます。
さらに、アプリケーションを動かすために最低限必要となるメモ リ使用量も考慮すべき点です。デスクトップ環境においていくらメ モリが安くなっているといっても、ちょっとした画像をアニメーシ ョン処理しようとしたりするだけのプログラムが20MB、30MBのメモ リを要求する、というVMが世の中にはありますが、そのようなVMで はハイエンドPDAには移植できませんし、違うVMを作って動かそう とする場合には結局VMごとの違いに悩まされることになります。
皆さんは、自分のプログラムの多くの部分が、なんらかのデータ の集合になんらかの処理を適用して新たなデータを作りだしていく、 という動作の繰り返しになっていると思われたことはないでしょう か。Squeakでは、「データの集合」を抽象化した強力なCollection ライブラリと、「なんらかの処理」を抽象化したブロッククロージ ャがあるので、それらを組み合わせるという自然な形でプログラム を書くことができます。
意外と知られていないことですが、Squeakにはコンパイル時のさ まざまなチェックがあります。存在しない変数や、初期化していな い一時変数の参照をしようとしたり、存在しないメソッドを呼ぼう としたりしている時には、メソッドをコンパイルしようとした時点 でコンパイラがチェックしてくれます。ただ単にチェックしてエラ ーを出すだけではなく、可能性のある正しいプログラムの候補を提 供してくれるため、プログラムのつづり間違いなどの場合には、一 度コンパイルすれば、プログラムに誤りがあったとしても半自動で 正しいプログラムに書き直すことができます。いずれにせよ、Java のコンパイラに期待されているようなエラーチェックのほとんどは、 Squeakのコンパイラも行うことができます。
が、しかし、結局のところコンパイル時のチェックや単純な初期 化し忘れのチェックは、エラーの中でもたいしたものではありませ ん。コンパイルが通った後、ちょっと実行したりすればいずれすぐ に見つかるようなものです。プログラムのバグというのはもっと発 見するのが難しいやつが問題になるわけですが、そのようなものを 発見するときにこそ、Squeakの威力が発揮されます。
例外のような機構をサポートしているほとんどの言語では、 プログラムの実行中にエラーが起こった場合には例外がスタ ックを下向きに飛んでいき、エラーに至るまでの実行時スタックに 格納されていた貴重な情報は失われてしまいます。そのため、結局 できることはエラーに至るまでの呼び出し関係を表示して実行を終 了するぐらいのものです。典型的なデバッグ方法としては、エラー が出た後おもむろにprintf()を適当なところに挿入し始めて、も う一度同じエラーが起こってくれることを神に祈る、というような ことくらいでしょう。
一方Squeakの場合には、エラーが起こった場合、スタックの情報は 完全に残したまま、エラーハンドラ(デバッガ)がそのスタックの上 で動き始めます。そのため、そのデバッガでは、エラーに至るまで の情報を完全に生かした形で、なぜエラーが起こったのかを調べる ことができます。デバッガの中にスタックフレームに格納されてい る値を使用するような式を入力して実行し、どのような値になるか を調べたりもできてしまうわけです。
某プロジェクトで使ったときにも、一般の人に大量のユニットを使 ってもらったりすると、オフィスで数人でテストしているきには思 いもよらなかったエラーが起きてしまうことがありました。そのよ うな場合でも、エラーを出してしまったPDAを回収して、そこで動 いているSqueakのデバッガを使って調査することによって、なかな か特殊な条件がそろわないと発生しないエラー("tricky"なエラー) を次々とfixすることができました。仮にJavaのような言語を使っ ていたら、何が問題だったのかを究明するのは非常に困難だったこ とでしょう。
なにより、21世紀にもなって、「デバッグするときはプログラム のそれらしいところにprintf()を挿入してね...」などどいう前近 代的なデバッグ方法がまかり通っているのはおかしいと思いません か?そもそもPDAにインストールするようなソフトではprintf()デ バッグなんて格好がつきませんし。フィールドテストをやったとき に出てくるようなトリッキーなバグは絶対に捕まえられません。
中には、そもそもちゃんとした型チェックのある言語を使えば、 そのような妙なエラーは起こらない、という方もいらっしゃるかも しれません。が、本当にそうでしょうか。MLのようにまっとうな型 チェックのある言語ならともかく、JavaやCやC++を念頭においてい る場合には、ありとあらゆる実行時エラーを起こしてきたことがあ るはずです。中には、ハードウェアデバイスやユーザーの入力のタ イミングによって起こるエラーもあるでしょう。多くのSqueakerの 経験によれば、Squeakでプログラムを書いたときの妙な実行時エラ ーで、JavaやCのコンパイラが見つけてくれるであろうものはほと んどありません。
KVMの場合、数十k程度の大きさのメモリを持つ機械をターゲット にしたVMであって、GUIなどのライブラリも専用ものが提供されて います。非常に制限の厳しい環境を対象として、なかなか良い設計 になっていると言えますが、オブジェクト指向的ではないプログラ ミングスタイルでプログラムが書く必要があり、ライブラリも特殊 なものを使用しなくてはならないわけで、WORAの宣伝文句は的外れ であるということに留意すべきです。将来携帯電話に載るメモリ量 が今のハイエンドPDAのように数MBから数十MBになるときには「ス ケール」しないフレームワークになってしまっていると言えるでし ょう。
KVMは今のハードウェアのため、Squeakは未来の携帯機器のため のシステムであると考えることもできます。
DRAM 搭載量が 2MB 以下の機種、 すなわち MI-506 以前の機種でも動くことは動きますが、 機能はかなり限られてしまいます。
動作確認機種のリスト:
以下では、 DRAM が 8MB のモデルを対象とした説明をしますので、 2MBモデルで試してみたい方は 2MBモデル の節をお読みください。
Squeak/Zaurus の実行に必要なものは、
8MB の DRAM を搭載した Zaurus 用の VM は、 "wtii" という「アプリケーション識別名」を持つ MORE ソフトです。 一方仮想イメージのほうは 3.5MB 程度以下の大きさのものであればどれでも Squeak/Zaurus で使用できます。
Zaurus 版独自の特殊機能を使うために、 いくつかの file out をまとめてあります。 自分で作ったイメージで Zaurus 版独自機能を使いたい場合は、 これらのファイル を file in してください。
Squeak/Zaurus を動作させるためには、 仮想機械 (VM) と仮想イメージを格納するスペースが必要になります。 VM は 400k 程度、 イメージは最低でも 1MB 程度の大きさですので、 それらを格納するだけのスペースが、 本体内または拡張カード内にあることをまず確認してください。
Squeak/Zaurus をインストールして実行しても、 既存のデータが失われることはまずありません。 しかし、 念のためここでバックアップを取っておくことをお勧めします。
その後、 MORE ソフトのメニューからそれらのファイルを 「展開」 をすればインストールが完了します。
イメージファイルを選択することによって、 そのイメージの実行が始まります。
メニューはスクロールバーとウィンドウの境界付近(のスクロー ルバー側)にペンをタッチしてもメニューを出すことができます。
右上のキーパッドボタンにタッチするとキーパッドが on/off されます。 「半角」「英数」になっていることを確認して使ってください。
MI-E1で画面を縦型にしている場合、 組み込みのキーボードが使用できます。 ただし、組み込みのキーボードを使っても Squeak に必要な文字の中で、 入力できない文字があります。
ただし、 Squeak が異常終了して簡易リセットすることになっても、 組み込みアプリケーションなどのデータが消えることはまず間違いなくありません。 ちなみに、 大島は開発際してさまざまな機種を数え切れないほどのリセットしてきましたが、 それでもデータが消えてしまうことは一度もありませんでした。
今回は、Instant OnをサポートしたVMは諸般の事情で別のVMにな っています。Instant Onの機能を使って、自分のZaurusをSqueakマ シンとして使うことにチャレンジしたい、という人は、VMとして wtii010126i.ZAC を使ってください。このVM上でWTIIQVGA.IMAを起動すると、バック グラウンドメニューに'suspend'というメニューアイテムが現れま すので、それを選ぶと見かけ上Squeakが終了します。その状態で Squeakを起動すると、"suspend"前の状態に戻ります。
ここで用意されている機能は某プロジェクトでの「完璧なSqueak マシン」を作るために必要となった機能群です。みなさんもこれを 使って自分のアプリケーションマシンを構築してみてください。
MI-E1の場合は、カード設定をSDカードにすれば、SDカードスロッ
トにあるイメージを起動することができます。その場合でも、CFカ
ードスロットのカメラは使用できます。
デモの使い方
MOREソフトとして登録されたSqueakを起動すると、
"WTIIQVGA.IMA"
という要素を含むリストが表示されます。
ここでそれをを選択すると、
数秒後に
Squeak
の画面が出てきます。
そこで出てくる肌色のウィンドウには、 いくつかのデモを起動するための記述が書かれています。
画面にある
"----------"で囲まれた部分を 「選択して実行(後述)」 すると、 それぞれのデモを実行できます。
機能キーを押してからウィンドウ内にタッチする (ペンをしばらくタッチしたままにしておく) と「中ボタンメニュー」を出すことができます。 「選択して実行」というのは、 ペンのドラッグによって必要な部分 のテキストを反転させ、 その後「中ボタンメニュー」から "do it" を選ぶ、 という意味です。
以下の箱入り娘やお絵描きツールの実行のように、 一行だけを選択して実行する場合は、 その行にカーソルを置き、 どこも選択されていない状態で"do it"を選ぶと、 自動的に行全体が選択されて実行されます。 結構便利です。
ダブルクオート'"'で囲まれた部分はSqueakのコメントです。
デモをやっているうちに訳が分からなくなってしまったら、 「中断」 キーを押して割り込みをかけ、出てきたピンク色の小さなウインド ウを閉じれば普通は元通りに戻るでしょう。 それでも駄目な場合は、 有無を言わさず 「切」 を押して電源offすることをお薦めしておきます。 その後、 もう一度電源を投入してSqueakを起動し直してみましょう。
Hako2 start. "puzzle game"の行を選択して実行します。すると、パズルゲームの画面が出てき ます。 ゲームの目的は、 一番大きい「娘」を一番下の段の中央に持っていくことです。
箱入り娘のプログラムは、 せきさん(m_seki@mva.biglobe.ne.jp)がオリジナルを書き、 おおしまがちょっと拡張した300行ほどのSqueakプログラムです。
SimpleDraw open. "simple drawing tool"を選択して実行します。 画面が白くなったらペンで適当に絵を描くことができます。
お絵描きソフトが動き出した後は、 機能キーを押してから画面にタッチすると単純なメニューが出てきます。 そこで "fill" を選ぶと次に指定した点を囲む部分を塗り潰し、 "color" を選ぶとカラーパレットが表示され、 "save and quit" を選ぶと "WTIIDRAW.GIF" という名前のGIFファイルに指定した矩形をセーブします。 後でマイコンテンツに取り込み、メールに添付して送ることもできます。
(Life new size: 150) run. "..."の行を選択し実行してください。 死にかかったセルをペンでぎゅっと押すようにすると復活させるこ とができます。 終了させるときは「機能」キーを押した後、 画面にタッチしてください。
画面に残ったゴミは、 「バックグラウンドメニュー」 から "restore display" を選ぶと消すことができます。
2MBモデル上でのMOREソフトは、 スタック領域、 グローバル領域、 ヒープ領域を合計して、 最大800KB程度のメモリしか使用することができません。 そのため、 Squeakでは最小限の機能だけを持ったイメージファイルしかロードできず、 起動できてもウィンドウをいくつか開いていくと、 メモリ不足でプログラムが終了してしまいます。 そういうものだと思ってあきらめてください。
Squeak/Zaurus も、 最初に入っているイメージファイルの名前はこの規約に従っています。 しかし、 イメージファイルに別名を付けて保存したり、 .stファイルを作ったりすることを考えると、 この制約はいささか強すぎます。 "wtii"で始まるファイル以外は Squeakから見えなくしてしまい、 Squeakがアクセスするファイルのファイル名に "wtii" を付加することもできますが、 そうすると8+3のファイル名のうち 4文字が固定されてしまうことになってしまいます。
そこで、 Squeak/Zaurus では、 システムファイルを含む任意のファイルを操作できることにしました。 そのため、 Squeakからファイルを操作する場合は十分に注意してください。 一般に、 Zaurus の 「パソコンデータ」 で表示されないファイルとは Squeak/Zaurusは縁がないはずです。 あらかじめ 「パソコンデータ」 のファイル一覧を眺めておいて、 そこに表示された以外のファイル には手を出さないのが得策かと思われます。
これで「ビルド」すればバイナリが生成されます。
Squeakから生成されるべきcのコードは、 zau-chu2000.7.tar.gz に入って いるZaurusVM3076というイメージを使って作ってください。
Squeakでかかれた関数電卓(暫定名:電卓君)が、このURLにあります。使い方に関しては こちらを参照してください。また、 ソースコードは こちらにあります。