vieweditattachhistoryswikistopchangessearchhelp

SqueakLogo

Uploaded Image: squeaklogo.jpg

Morphic GUI がデフォルトになった 3.0 から、Squeak の起動画面に現れるようになったネズミのマスコットをかたどったモーフ。
英単語の squeak になじみのない人には、犬やキツネだと思われがち。
だが、たしかによく見ると、先入観なしでこれをネズミと思うのはちと無理があるかも…(^_^;)。--sumim


オリジナルのデザイナはTim Rowledgeさん(Webサイト)。"copy freely!"とされているので、みんな自由に使うことができます。感謝。--abee



SqueakLogo はたんなるスケッチやイメージのモーフではない。
フラッシュのキャラクタ(a FlashCharacterMorph)を
フラッシュプレイヤ(a FlashPlayerMorph)などから単離したかなり複雑なモーフに、
マウスポインタの動きに追従するムーブアイ(a MovingEyeMorph)をはめ込んで作ってある。

もともと目の動きをフラッシュでプログラムしたものをインポートしたが、うまく動かず、
そのままそれをベースに、ムーブアイをはめ込んで使ったのか、

フラッシュキャラクタなどに備えられているアンチエイリアス機能が使いたくて、
わざわざそうした(フラッシュでこしらえてインポートしてキャラクタを単離した)のかは不明。

だからというわけではないが、これをファイルに保存してそれを別の仮想イメージに、
(あるいは、SqueakLogo を削除した状態でスナップショットを撮った仮想イメージに、再び)
読み込ませることは案外うまくゆかない。

ファイルへの保存は成功するが、それをモーフとして読み込むだんに例外が生じて作業を続けられない。

原則として仮想イメージ(で起動した環境、の意味)内のオブジェクトは
比較的安全に file out 、file in できるクラスを除いてはやたらと削除しないほうがよいが、
SqueakLogo も例外ではない。

プロジェクトの一部としてなら保存して、読み込むことができるので、うまくやれば
いったん削除して失われても、もとに戻すことができる。(SqueakLogo において、
それを削除して失うことで不都合が生じることは考えにくいが、ユーザーとして、削除しても
いつでも復活できるという安心感はあるにこしたことはない)。

既存の機能の組み合わせでこの SqueakLogo を別の仮想イメージに移動する操作の例。--sumim
  1. 新規プロジェクトを作成
  2. プロジェクトウインドウをクリックしていったん移動し、また戻ってくる
  3. SqueakLogo をプロジェクトウインドウにドロップイン
  4. プロジェクトウインドウ内でマウスボタンをホールド
  5. PUBLISH (also saves a local copy) を選択
  6. SqueakLog などとプロジェクト名を入力して OK
  7. Save on loacal disk only ボタンをクリック

  1. SqueakLog を移動したい先の仮想イメージで起動した環境内に、先に保存した .pr を読み込む
  2. プロジェクトを開くと、そのプロジェクトへ移動してしまうのでいったん戻る
  3. プロジェクトウインドウ内でマウスボタン長押ししてメニュー呼び出し
  4. ENTER ACTIVE を選択
  5. SqueakLogo をクリックしてピックアップ
  6. ミニチュア画面の外にドロップ
  7. ミニチュア画面枠の右手にある白い部分をクリックしてプロジェクトに入る
  8. 元に戻って、プロジェクトを削除(プロジェクトウインドウをクローズ)


実はこの子の誕生にはちょっとしたいきさつがあったのです。

昔々、多分1999年の春、.boファイルなどが作れるようになってしばらくしたころ、Doraemorphという、EllipseMorphとPolygonMorphを使って某ネコ型ロボットの顔を作った人がいたのです。Squeakである以上動きがないとさびしいわけで、その人はついでに動く目玉を作ったりもしていたわけでした。
http://www.is.titech.ac.jp/~ohshima/squeak/book/
当時はKlattがまだなかったので、EyeMorphという名前でよかったのですが、その後名前を奪い取られてしまったため、イメージ内ではMovingEyeMorphという名前に変わっています。

Balloon2D版のねずみは、Torsten BergmannがBSSかどこかに載せたものだったと思います。確かそのときにはすでにこのEyeMorphが使われていました。

Squeak3.0を目前にして、Morphicを最初のスクリーンから使いたい、というときに、Danから、せっかくだから「この」ねずみの目がマウスを追っかけるようなものをMorphicの目玉として最初の画面に出しておきたいよね、という話が出ました。とりあえずその人が、そういうものは実はもうあるよ、ということをメールで書いたら、スケーリングしたときや回転させたときに矛盾が生じていたところをBert Freudenburgが直してくれて、一晩にしてあっというまに出来上がってしまったのです。
http://lists.squeakfoundation.org/pipermail/squeak-dev/2001-February/012651.html

というわけで、実はTorstenがいつやったのか知らないのですが、そのようないきさつでした。

ちなみに、目の中の白い部分は瞳孔ではなく光の反射であって、本当はマウスポインタを追っかけているのではなく、マウスポインタが光源でその照り返しを描写しているのだ、という説を唱えた人もいます。 -- Yoshiki


おお。そんな経緯があったのですか。MovingEyeMorph が おおしまさん作というのは
気づきませんでした。おみそれしました。それにつけても、ドラえモーフとはまたベタな…。--sumim






しくみは多少複雑であったとしても、モーフはモーフなので、
デバッグハロー → save morph in file でファイルに保存、それを別の仮想イメージで読み込み…という方法を
ユーザーとしては使いたいところ。そこで、対症療法的に読み込み時に例外が生じないよう改変を試みてみました。
このチェンジセットを file in しておくと、
ファイルリストで load as morph したときに、マウスポインタの位置に SqueakLogo がニョキっと現れます。

MatrixTransform2x3 >> #restoreEndianness が欠落していたのを補完したのはいいとして、
ShortIntegerArray と ShortPointArray の restoreEndianness がどうして仕様に整合性を欠いた状態で
わざわざ追加されなければならなかったのかは理解できていないので、
これらを削除した結果、なにか不都合が生じるかもしれません。--sumim


multibytes のストリームの実装の関係か、
このチェンジセットだけでは nihongo6(m17n for 3.6)では動きません(相変わらず、例外が生じます)。
bytesPerElement とか追加してゆけばなんとかなるかと思ったのですが、それだけでは駄目で、
思ったより事情は複雑だったのであきらめました。--sumim



nihongo6 でも(先のチェンジセットを file in してあれば)
(FileDirectory default fileNamed: 'my FlashCharacterMorph.morph') fileInObjectAndCode openInHand
などとすれば読み込めることが分かりました。--sumim



このページを編集 (6310 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 3409 times.