top recent

Smalltalk


目次

  1. Morphic レッスン(もうひとつの Squeak 入門)...
  2. なんちゃって Squeaker のページ...
  3. UndefinedObject...
  4. NHKの紹介するアラン・ケイ博士...
  5. Alto、Star、Smalltalk、Lisa、Mac 年表...
  6. 多国語化Squeakホームページ...
  7. メディアの中のアラン・ケイ博士 and/or Squeak...
  8. eToyであそんじゃうっす!!...
  9. SmalltalkHichHikersGuide...
  10. Emacs Like Keys for Squeak...
  11. ARTware: Systems Designed under the ART Principle...
  12. Smalltalk/JVM Servlet...
  13. うちはJDK1.3が入っているんだけど...
  14. 「じゅん for Smalltalk」 テキストブック ...
  15. RobocodeをSqueakでやったら‥‥‥...
  16. Squeak:3次元キャラクタを作って動かす...
  17. Squeakに対するストレス...
  18. うーむ、深い。...
  19. Morphicに限らず...
  20. まとめ...
  21. Smalltalkに限らず(ぉ)ストレスが…...
  22. 版画と彫塑...
  23. Lem さんによる、Morphic 奮闘記...

Morphic レッスン(もうひとつの Squeak 入門)

http://sumim.no-ip.com:8080/morphiclesson

Squeak/Smalltalk-80 は、単なる開発環境やオーサリングツールの枠組みでは説明できない奥深さを持っています。逆に、それがゆえにインストールしたのはいいけど、何がなんだかさっぱり…という方も多いようです。そこで、初心者でも取っつきやすい eToys (最近は商標の関係でこの呼び名は使われないようになってきています) と呼ばれるタイルスクリプティング・システムから始める Squeak 入門を書いてみました。よかったら試してみてください。ただ、Squeak 入門ですが、Smalltalk 入門までまだ至ってません(eToys は Smalltalk で実装されていますが、タイルスクリプティングは Smalltalk プログラミングとは似てもにつかぬものです)ので、その点、あらかじめご容赦いただければさいわいです。

なお、このサイト( Squab Squeaker's Swiki) は Squeak 版 Wiki である“Swiki”で構築されています。遊び場も用意しましたので、Wiki クローンのバリエーション(Smalltalk による実装例)を知るといった興味で訪れていただくのもよいかと思います。--sumim
signature: URL

[[id:336]] 2002-05-11 21:59:09


なんちゃって Squeaker のページ

http://homepage.mac.com/sumi/index.htm
「Squeakってよく分からん」という人へ。
GIFアニメで動くのでどんなものかよく分かります。
Swikiあり。

註:上の「Squab Squeaker's Swiki」の準備サイトです。--sumim
signature: URL

[[id:476]] 2002-05-11 19:06:36


UndefinedObject

http://www5.ocn.ne.jp/~minami/
Squeakのコードと情報。かなり。
- Swiki拡張
-- アクセスカウンタ
-- サイトマップ
-- SwikiBrowserのMVC対応
- TestBrowser
-- SUnitに付いてくるTestRunnerの発展版です。
- InspectWorkspace
-- Workspace変数を表示するWorkspaceです。
- ClassDefinitionChangeList
-- Class定義の変更履歴を取ります。
- OSProcess
-- Squeak上から、Unixのコマンドを叩く方法。
- メモ
-- フォーマット(pretty print)の際、":="を"←"に変換しない かつ "←"を":="に変換する
-- フォーマット実行(pretty print)をショートカットキーに割り当てる

signature: URL

[[id:477]] 2002-03-14 21:15:15


NHKの紹介するアラン・ケイ博士

http://www.nhk.or.jp/future/room/alan.htm

放送時の実況中継(?)があります。--sumim
http://sumim.no-ip.com:8080/morphiclesson/11

[[id:519]] 2002-05-11 19:08:16


Alto、Star、Smalltalk、Lisa、Mac 年表

http://sumim.no-ip.com:8080/collab/24

どのように互いに影響を及ぼし合ったのかを知るにはやはり時系列に並べてみるのが基本なので、自分の頭の中の整理も兼ねて阿部さん(多国語化Squeakホームページ (#6))の協力のもと作ってみました。Smalltalk とは直接関係ないのですが、Mesa 環境がどのように Star につながったのかについての公開された資料が少ないので難儀しています。=b
signature: sumim

[[id:550]] 2002-05-11 21:31:53


多国語化Squeakホームページ

http://squeak.hoops.ne.jp/

Smalltalker、Squeaker として著名な阿部和広さんによる“多国語化 Squeak ”のサポートページ。多国語化 Squeak は、その名の示すとおり、Squeakに日本語や中国語、韓国語をハンドリングするための機能を付加したもの。最初、大島さん(ザウルス版 Squeak「ざうちゅう」でも有名)が手を付けたものを阿部さんが引き続き、Squeak 最新版への対応、独自の拡張を施し本ページで公開しています(近く、大島さんも開発を再開されるとのこと)。

面倒なインストール作業がいらない、仮想イメージ化された日本語版、SqueakNihongo3 もこちらから。 これさえあれば、あとはソース(仮想イメージ中で使用されているオブジェクトの定義、すなわち Smalltalk コードを納めた巨大なテキストファイル。仮想マシンのソースコードに非ず)とお手持ちの環境向けの仮想マシンを揃えるだけ(註)で、即、動かせます。

註:仮想マシンは実行型ファイルなので、環境によってはソースの入手や修正、再コンパイルの要あり

#sumim

[[id:551]] 2002-05-11 21:32:02


メディアの中のアラン・ケイ博士 and/or Squeak

http://sumim.no-ip.com:8080/collab/18
signature: sumim

[[id:559]] 2002-05-11 23:41:20


eToyであそんじゃうっす!!

http://hw001.gate01.com/~thoru/squeak/etoy/etoy.html
いい感じっす!!
----
これって、NHKの番組の中で使っていたやつですよね。
番組見ながら、Flash(の安楽で美しいお絵かき加減)と融合したら素敵なのにって思ったのは秘密です。

[[id:842]] 2002-07-05 21:07:46


SmalltalkHichHikersGuide

http://www.ops.dti.ne.jp/~cake-smd/wiki/SmalltalkHichhikersGuide.html

[[id:887]] 2002-07-18 09:07:26


Emacs Like Keys for Squeak

http://www.ops.dti.ne.jp/~cake-smd/wiki/EmacsLikeKeysForSqueak.html

[[id:888]] 2002-07-18 09:07:37


ARTware: Systems Designed under the ART Principle

http://www.kid.rcast.u-tokyo.ac.jp/systems/ARTware/
ARTware is designed under the design principle called ART (Amplifying Representational Talkback), and developed in VisualWorks Smalltalk 2.5/3.0/5i.1, 5i.2, 5i.3 and 5i.4 (and thereby runs both on Windows and on Mac OS) using the open-source Jun library.

[[id:693]] 2002-07-30 15:32:54


Smalltalk/JVM Servlet

http://www.missionsoft.com/InstallingSmalltalkJVM.htm
http://www.missionsoft.com/servlet.htm

[[id:868]] 2002-08-05 12:44:57


うちはJDK1.3が入っているんだけど

Re: Smalltalk/JVM Servlet (#12)
うまく動かないみたい。ドキュメントには1.2.2を入れろって書いてあるしなー。

[[id:879]] 2002-08-05 12:45:40


「じゅん for Smalltalk」 テキストブック

http://www.sra.co.jp/people/h-asaoka/study/SmalltalkTextbook/SmalltalkTextbook.html
『青木さんがメーリングリストに投稿された文章をビジュアル化してまとめました 』というページ。

----
http://www.sra.co.jp/people/h-asaoka/study/SmalltalkTextbook/08/Textbook08.html で、
モノトニーの否定を掲げてますね。

ヒューメイン・インタフェース―人に優しいシステムへの新たな指針 (本棚)でモノトニーが求められていたのと対照的だなと思いました。
Smalltalkは大脳的、(ヒューメイン)インタフェースは小脳的、ということなんだろうなあ。

#ところでWintelかどうかはあまり関係無いような気がする。 Wintelまんせー状態になってしまえばヤバイが、
#自分の大脳活動のためのインフラとしてしか見ないなら、はっきり劣ったものでない限り選択はどれでも良さそうなもの。

[[id:1044]] 2002-08-25 18:53:42


RobocodeをSqueakでやったら‥‥‥

ロボットはやっぱりRoboMorphですよね。

参照:dW:闘え、Robocode (ロボコード) !

イメージとしては、
-タイルスクリプトでもRoboMorphのサブクラスを作って本格的に作り込んでも可
-ひとつのProjectがそのまま戦場。そのへんに置いてあるブラウザとかEllipseMorphとかがそのまま障害物になったりして。
-戦場におのおののロボを置いて、ヨーイドンで戦闘開始。最後まで生き残ったほうが勝ち。
-Nebraskaでわいわいやったら楽しそう。

で、武器なんですが、RoboMorphはBulletMorphというのを射出できるようにする。
-BulletMorphは基本的に直進しかできない。
-なにかMorphに当たると、そいつをレシーバにして任意のメッセージをひとつだけ送ることができる。
-メッセージが炸薬。でも delete なんて強力すぎるだろうか。まあオーバーライドするという対抗策もある。知恵比べという意味ではよいかも。
-スクリプト派のために定番なBulletは前もってそろえておく。

といった感じで、Robocode + CoreWars といった趣になると思います。素朴にHitPointを削るだけの弾を打ち合って楽しむのか(Robocode系)、陰険に秘術の限りを尽くすのか(CoreWars系)で、方向性がだいぶ変わってくるかもしれませんね。

あと勝ち負け(生き死に)の境界をどこに引くかっていうのが難しい。

# SHIMADA

- 面白そうですね。何か簡単なところからやってみましょうか?--sumim
- 多分BulletMorphが一番難しいのじゃないかしら。Morphにコリジョンってあります?--SHIMADA
- コリジョンを私が正しく理解できているか(morph 同士の衝突・接触判定ということですよね?)分かりませんが、Player>>#touchesA: を応用して作ればいいのではと。 そのままだと同じ Sketch 同士が接しているかどうか(しかも矩形境界)しか判断しないので細工が必要ですが。--sumim
-なるほど、ありますねー。"appearsToBeSameCostumeAs:" あたりの判断を省けばいいのでしょうか。あと弾が小さくて丸ければ矩形でも違和感は少ないと思います。--SHIMADA

発射はこんな感じ?
| bullet |
bullet _ BulletMorph new:[ :anEnemy | anEnemy delete ].
bullet launch: (self getHeading)
----
弾を出して、弾に当たると弾ごときえてしまうしくみを SqueakToys (プラスα)で借り組みしてみました。SqueakToys の勉強をもっとしないといけないことも分かりました(ぉ--sumim

http://sumim.no-ip.com:8000/swiki/uploads/wiki/455/Robo.pr

-おお、早い。続きはSqueak:RoboTankで…。--SHIMADA

[[id:1061]] 2002-08-31 08:52:56


Squeak:3次元キャラクタを作って動かす

http://sumim.no-ip.com:8080/morphiclesson/7
これはものすげー。
-三次元空間にフリーハンドでくるっと楕円をかく。
-それがもこもこっとした暖かみあふれる球体に。
-いくつか組み合わせてぬいぐるみを作ろう。
-命令パネルを組み合わせると動き回る!

TeddyとTileScriptingの合わせ技でものすごいインパクト。

# SHIMADA

- 他で普通に使っているペイントツールで、そのまま三次元空間内のオブジェクトに彩色できるのも OO 環境ならでは(もちろん弊害も露呈しますが…(^_^;))かと。--sumim

[[id:1072]] 2002-08-30 00:03:31


Squeakに対するストレス

Squeakをいじりはじめると必ず感じるのが、GUIで目に見えるオブジェクトの世界と
Workspaceでテキストとして書くプログラム片の世界の隔絶ですねー。

そこに目に見える形で存在するMorphを、なぜ俺様はこの | aMorph | に代入できないんだー! と。
BTRONの仮身みたいに参照をWorkspaceに直接貼り付けできればいいのに。
<言語のセマンティクスを無視して好きなことを言ってます>

いっそのことインスペクタを開いて、self をグローバル変数に代入してしまう?
安直だけど。
# SHIMADA
- Morphic はそもそも Self からの(SqueakToys=タイルスクリプティングシステムを実現するための半ば無理矢理の)移植で、Smalltalk とは異質な世界のものですから、そういう意味でも越えがたいギャップは構造的に存在せざるおえないでしょう。Morphic でなにかをしようとすると、Smalltalk-80 ですんなりいった「オブジェクトを手中にできる…」というような感覚がどうしても異質なものになります。
- “異質”というのは、例えば「そこに目に見える形で存在する morph を、なぜ俺様はこの | aMorph | に代入できないんだー!」という要求も(実はこれは下の方法である程度回避できますが)、「そこに目に見える形で存在する morph に何かさせたいのですが…」「では青ボタンクリックして選択し、ビューワを呼び出しましょう、もしくはタイルを生じさて、他の morph のスクリプトに参照させましょう…」という SqueakToys ユーザなら違和感なくできるのが、Smalltalk ユーザとして同じことをしようとすると四苦八苦することになるという具合です。
- というわけなので、Morphic のほとんどの汚らしい実装は、相容れないはずの Self (ご存じの通り、Self はそもそもが Smalltalk-80 へのアンチテーゼです)を Smalltalk 上で、ひいては、(繰り返しになりますが) SqueakToys を実現するためのものなので、まずここいらあたりから入って感覚を掴むのが遠いようで近道かと思います(拙著の「 Morphic レッスン」も実はここいらへんをちょっとだけ意識しています)。--sumim

----
プログラムはRunするものなのか? (プログラミング)で言ってる世界観に通じますね(^^;。 -戯
テキストなソース(全部とは限らないが、とりあえずSmalltalkみたいな言語では限りなく全部に近い殆ど)は
runを記述してる世界であり、一方で見えてるMorphは非runの世界の住人なんだと思います。

セマンティックというならば、見えてるもののほうにもセマンティックがあるはずであり、
要するに両者の間にセマンティック"ギャップ"があるぞ、と。

----
Morphからソースエディタ(の特定の単語)へのDragDropみたいな操作は、サポートされていますか?
-てゆーか作る。これ埼京。
- Workspace のタイトルバーにあるメニューボタンに「 create textual references to dropped morphs」というオプションがありますので、これを選択してチェックをオンにします。すると、ドロップインした morph を、このとき挿入される 'morphNNN' のようなワークスペース変数で参照できるようになります。ずばりでは?--sumim

[[id:1073]] 2002-08-30 14:45:31


うーむ、深い。

Re: Squeakに対するストレス (#17)
> テキストなソース(全部とは限らないが、とりあえずSmalltalkみたいな言語では限りなく全部に近い殆ど)は
> runを記述してる世界であり、一方で見えてるMorphは非runの世界の住人なんだと思います。

ソースはRun前でオブジェクトはRun中、という *伝統的* な見方もできると思います。;-)
-それは違うはず。だって、1つのObjectが有るとして、それに縁故のあるCode(と継続?)を全部削除してしまったとしても、相変わらずObjectはそこに有り続けるはずなので。-戯
--もちろん、Codeとかを削除したらObjectも心中させるというService(余計なお世話?)が存在する系も、有る(作れる)でしょうけども。
-Run前の世界とRun中の世界には、Runした後(読み込まれて処理系の内部表現が生成された後)は依存関係はないので、Run中のソースを削除してもRunし続けるのは当然では? --SHIMADA
--継続"Object"の削除をどう見なすか?ということですね(^^;-戯
---そういや、継続(=Process)が存在する間は対応するソース(=実行ファイル)を削除できない、というOSもありますね。UNIX系とかで。
---でもそれを言ったらソース文字列(オンメモリのBufferにある奴)だって継続だってThreadだってCPUだって、Objectなので…
-というか、ソースとThreadObjectの関係の問題じゃなくて、ThreadObjectと他の(受動)Objectとの関係が問題なのでは?


> ドロップインした morph を、このとき挿入される 'morphNNN' のようなワークスペース変数で参照できるようになります。

{89643D21-7B2A-11d1-8271-00A0C91F9CA0} みたいなリテラルでいいから貼り付けできんもんかなー、と思っていたんですが、もうあるんですね。すばらしい。

# SHIMADA

- 上の例では Workspace の各インスタンスが bindings というインスタンス変数でワークスペース変数とそれが参照するオブジェクト(具体的には morph )の組み合わせを管理しています。Workspace>>#bindingOf: あたりが参考になるかと。Workspace>>#acceptDroppingMorph:event:inMorph: と似たような仕組みで、どこにでも同様の細工は可能です。もちろんこれ(#acceptDroppingMorph:event:inMorph:)は Morphic の提供するサービスなので、やはり Morphic フレームワークをひととおり修めて(クラス Morph の定義をひととおり眺めて)おかないとなにがなんだか…になりかねませんが(^_^;)--sumim

-Delphiはその問題から斯様に逃げています。ちょっとずるい。Form単位での永続化 (Delphi)
-でもあるワークスペースのテキストにアクセスしたい、というのは「Formの複数Instanceを作ってしまうとアレな事になるが…」で発生する問題に直面するということと同じですねよ?--SHIMADA
--そういう問題に直面するチャンス(自由度でもある)を潰してる感じ…。名前空間(?)がFormのクラスの中で閉じてるので、たとえば今注目してるFormインスタンスにComponentを名前で問い合わせるとか、名前つけて登録する(衝突してると例外出る)とか、それ「だけ」をサポートし、他はユーザーから忘れさせようとしてるってゆーか…
--どっちにせよPascal的な意味での"コンパイル"言語なんで、この程度の逃げ方でもユーザーに怒られない(期待されない)、かなと。

[[id:1076]] 2002-08-30 21:56:12


Morphicに限らず

sumim said in Squeakに対するストレス (#17)
> Smalltalk-80 ですんなりいった「オブジェクトを手中にできる…」というような感覚がどうしても異質なものになります。

実は上記のようなことは、MVC環境の頃から思っていたんですよ。
あるワークスペースに書いてあるテキストを、別のワークスペースに書いたコードで取り出して print-it させようとしたら、なんかもう環境からたぐっていって、タイトルの文字列で識別するしかないとかそういう話でうぐぐと思ったわけです。--SHIMADA
----
まったく同感です。以前、とある Smalltalker に「Smalltalk のオブジェクト(インスタンス)には“名前”がない(hash のようなものが前面に出ていない)から、たとえば今、目の前にあるワークスペース内のテキストを云々しようとしても、Workspace allInstances で候補を列挙して、その中から欲しいものを探し出す手間があり“オブジェクトを自在に”っても実は案外面倒なんすよね…」と申し上げたところ、「Morphic なら debug ハロからの inspect morph で、MVC ならアクティベートした状態でインタラプトかけてデバッガに落ちれば一発ですよ」と一蹴されました。そういうものなようです(笑)。

で、最近は自分で作ったインスタンス(オブジェクト)は変数で参照して、他人の作ったインスタンスは(必要なら)デバッガやインスペクタで特定して捕獲(やはり変数で拘束)する技(っても、まさしく安直とされる「インスペクタを開いて、self をグローバル変数に代入」ですな(^_^;))を習得し、あまり違和感を感じなくなりました。ただ、繰り返しになりますが Morphic の場合は morph と player の二重構造になっているので、ここいらへん( の必然性と不条理)を理解できていないとドツボにはまるようです。--sumim
----
そのお方はもしや‥‥‥(以下略)。
やってみたらPluggableTextControllerの懐に入る(selfを得る)ことができました。
「自分の書くコード片に固執するな、環境すべてを使い表現せよ」ということでしょうかねー。 --SHIMADA (^^;;;

- 某A氏ですがA師ではありません、有名な某N氏によると総統だということですが(笑)。
- あくまでコード片という形態にこだわるなら、タコで実際は使えないという批判もありますが storeString というのもありますしね。私は結構、重宝しています(が、ほとんど書き換えなければいけませんので本当はきっと使い物にはなってません(笑))。--sumim

[[id:1077]] 2002-08-30 15:28:15


まとめ

Re: Morphicに限らず (#19)
インスタンスには一意名がないので、プログラムテキストの世界の中では直接ポイントできない。
一方そのインスタンスが画面に表示されている場合、マウスを使って「これ」とポイントはできる。
しかも "Inspect it" などいうメニューを選択することで、そのインスタンスの中身を見たりいじったりするインスペクタも開くことができる。
しかしインスペクタのコードペインの中では "self" として参照できるそのインスタンス自身を、こっちのワークスペースからはどんな名前でも呼ぶことができない。(はがゆい)
仕方が無いので、インスペクタの中で、"Smalltalk at: #MySweetObject put: self" という文を Do it することで大域変数に束縛し、ワークスペース中では MySweetObject という名前で呼ぶことにする。

# SHIMADA
- 「どんな名前でも」はコードではだめということですよね? 例えばインスペクタで捕まえることさえできれば hash (一意) は分かるわけで、これを使ってどこからでも EllipseMorph allInstancesDo: [ :inst | inst hash = 1291 ifTrue: [ ^ inst ]] とかで呼び出せるとか。--sumim
- ああ、hash というものは知りませんでした。それがあれば大丈夫そうですね。--SHIMADA

[[id:1166]] 2002-09-11 23:40:06


Smalltalkに限らず(ぉ)ストレスが…

目では見えないとしても、大抵の(?)プログラムでは、その実行(?)中に"Object"がメモリ上に浮いているわけですよね。
たとえばCやアセンブラ(ぉ)で普通に書いたプログラムだってそう。

#そういうObjectとかが幾つも浮いてるような図って、脳裏に常時浮かんでいたりしませんか?>プログラム経験のある人All
#で、それをコネコネと「動かして(=移動や変形や生成や消去という意味)」みて、狙ったとおりの動き方をしそうな動きの組み合わせを見出したら、
#その動きを模倣するような感じで、コードを書きおろす、と。

で、それに触れないことのストレスって、今回の話題のストレスと、似たようなものじゃないかな?
つまり、全く触れないストレスと、触れるけど適切(?)な触り方が出来ない「葦の髄から天井覗く」ストレスか、の違い。
うまくいじれないのがムカツクってのは同じ。

見えるデバッガだのグラフ計算ソフトだのを妄想したくなるのも、その辺の一連のストレスからですね、俺は。-戯
「そこにある」のに何故(上手くor全く)触れられないのだ?と。

----
そういや巷には色々な(種類的にも色々な)「ビジュアル」言語がありますが、
あれらの多くも、それなのでは?
つまりストレスの産物。

#まあ必要は発明の父母だというだけの話だが。

[[id:1082]] 2002-08-30 22:08:34


版画と彫塑

I said in Morphicに限らず (#19)
> 自分の書くコード片に固執するな

これってもしかして、版画は板に彫って、しかし紙に転写したものを作品とするが彫塑は彫ったものそのものが作品となる。
そいういう違いなんでしょうかね。 --SHIMADA

----
戯が、自分の幼児体験(?)を下敷きにして感じるのは、「(Objectは)粘土(である)」ですね。
-粘土なら、手でこねることも、型を押し付けることも、その両者を"順不同に"組み合わせることも、可能です。そういう意味では実は的を射てるのでわと自画自賛。

[[id:1078]] 2002-08-30 17:06:54


Lem さんによる、Morphic 奮闘記

http://sumim.no-ip.com:8080/morphiclesson/23
sumimさん、「はまる」なんていう言葉でリンク張るから何かと思ったら、むっちゃ面白いじゃないですかー。
これほど面白くて分かりやすいMorphicのチュートリアル&オーバービューは、そうそうないんじゃないですか? --SHIMADA
- どもども。Lem さんが聞いたら喜ぶと思います。--sumim

[[id:1081]] 2002-08-30 22:23:23


top recent

HashedWiki version 3 beta
SHIMADA Keiki