[Squeak-ja: 3256] squeak 初心者の質問:モーフの指定

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3256] squeak 初心者の質問:モーフの指定

iNOUE Koich!
井上@武蔵工大です。

ほんとに遅ればせながら梅澤さんの本でsqueakの勉強を始めました。90年頃に
smalltalk 80をほんのちょっとばかしかじっていまして、それでずっと
squeakも勉強しなくてはと思っていたのですが、子どもたちに遊ばせるばかり
でサボっていました。
このML以外に初心者質問用のMLなり掲示板なりはあるのでしょうか?あれば教
えてください。お尋ねしたいことはほんとに単純なことばかりで、こちらで質
問を連発するのも気が引けます。今、知りたいことは、プログラム内でオブジ
ェクトを作ってそれに対してメッセージを送るのではなくて、部品から取り出
したり絵を描いたりしたモーフをworkspace内のプログラムで指定するにはど
うするのだろうかということです。eToyなら名前のタイルを必要なところに張
り込めばいいのですけど、workspaceにタイルをドロップしても無駄でした。
(実はMacOSXのTerminalの動作のアナロジーでした。)こういうことはそのモ
ーフのスクリプトを新規に作って文字形式表示にしてそこに書くしかないので
しょうか?おそらく本を全部読破すれば分かることなのでしょうが、入門した
てでもちょっとやってみたいことでもあります。
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/             井上
.
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3257] Re: squeak 初心者の質問:モーフの指定

Toshiyuki Takeda
ワークスペースのメニューで、"create textual references to dropped
morphs"にチェックを選ぶとドロップしたモーフをワークスペース内で扱うことができるようになります。

モーフのハロからメニューを出して、デバッグから「モーフの検査」(inspect)、「モーフを探索する」(explore)を選ぶと、モーフの中身をみられたり、いじくれたりするので、これもおすすめです。

タケダ
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3258] Re: squeak 初心者の質問:モーフの指定

iNOUE Koich!
Toshiyuki Takeda さんが 2006.12.6ごろに
「[Squeak-ja: 3257] Re: squeak 初心者の質問:モーフの指定」の件で:
> ワークスペースのメニューで、"create textual references to dropped
> morphs"にチェックを選ぶとドロップしたモーフをワークスペース内で扱う
>ことができるようになります。

workspaceのメニューのどこに・・・と思いましたが、左のバッテンマークの
右にあるメニューの一番下ですね。ありがとうございます!これは面白い。け
れど、ドロップしたとたんモーフがゴミ箱に直行するのですが、これはこうい
うものなんでしょうか?

> モーフのハロからメニューを出して、デバッグから「モーフの検査」
>(inspect)、「モーフを探索する」(explore)を選ぶと、モーフの中身をみら
>れたり、いじくれたりするので、これもおすすめです。

実は・・・「モーフの検査」はやってみたのですが、そこにa StarMorph<星
>(811)とあるタイトルの通りに入れてもダメでしたのでこれはまた別なんだろ
うと思っていました。実際はa星811という名前でworkspaceに入りましたの
で、関係はあったのですね。inspectやexploreでいろいろ調査してみます。
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/             井上
.
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3262] Re: squeak 初心者の質問:モーフの指定

Tetsuya HAYASHI
井上さん、こんばんは。
林です。

On 2006/12/06, at 15:26, iNOUE Koich! wrote:

> Toshiyuki Takeda さんが 2006.12.6ごろに
> 「[Squeak-ja: 3257] Re: squeak 初心者の質問:モーフの指定」の件で:
>> ワークスペースのメニューで、"create textual references to dropped
>> morphs"にチェックを選ぶとドロップしたモーフをワークスペース内で扱う
>> ことができるようになります。
>
> workspaceのメニューのどこに・・・と思いましたが、左のバッテンマークの
> 右にあるメニューの一番下ですね。ありがとうございます!これは面白い。け
> れど、ドロップしたとたんモーフがゴミ箱に直行するのですが、これはこうい
> うものなんでしょうか?

もし、フラップからダイレクトに workspace にドロップすると、ゴミ箱にサヨナ
ラしてしまうようです。一度、ワールドにおいてあげる必要があるようです。

>> モーフのハロからメニューを出して、デバッグから「モーフの検査」
>> (inspect)、「モーフを探索する」(explore)を選ぶと、モーフの中身をみら
>> れたり、いじくれたりするので、これもおすすめです。
>
> 実は・・・「モーフの検査」はやってみたのですが、そこにa StarMorph<星
>> (811)とあるタイトルの通りに入れてもダメでしたのでこれはまた別なんだろ
> うと思っていました。実際はa星811という名前でworkspaceに入りましたの
> で、関係はあったのですね。inspectやexploreでいろいろ調査してみます。

この場合の a星811 というのは、「ワークスペース変数」という変数で、オブジ
ェクトのポインタも代入された状態にしてくれてるはずです。
梅澤さんの本にもあるかと思いますが、その他にも"ワークスペース変数"で検索
すると色々情報が見つかるかと思います(別な処理系や環境も出て来ますが…
適宜キーワードを追加されて…)。
頑張って(?)遊んでみてください。私も勉強になります。

--
林 徹也 Tetsuya HAYASHI
[hidden email], [hidden email]

Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3264] Re: squeak 初心者の質問:モーフの指定

iNOUE Koich!
Tetsuya HAYASHI さんが 2006.12.6ごろに
「[Squeak-ja: 3262] Re: squeak 初心者の質問:モーフの指定」の件で:
> もし、フラップからダイレクトに workspace にドロップすると、ゴミ箱にサヨナ
> ラしてしまうようです。一度、ワールドにおいてあげる必要があるようです。

ワールドに出した場合、他のものはゴミ箱行きにならないのですが、星と曲線
と多角形は何度やってもゴミ箱直行です。たまにゴミ箱の中からも消えている
ことがあります。

> この場合の a星811 というのは、「ワークスペース変数」という変数で、オブジ
> ェクトのポインタも代入された状態にしてくれてるはずです。

これは変数名だったのですね。もう少し初心者の質問をよろしいでしょうか。
変数というものはオブジェクトではない、squeakプログラムの構成要素の一つ
だと認識しているのですが、そこに代入されるオブジェクトそのものを直接に
指定する(リテラルとして)ことはできないのでしょうか。普通の数だとか文
字列だとか配列だとかにはリテラル表現がありますが、もしかしてシンボルと
いうものがそれなのでしょうか?
a星811が星のモーフを代入した変数名だとすると、Workspaceがモーフのドロ
ップを受けたときにそれを自動生成してくれたということですよね?この手段
以外で星のモーフをプログラム内で指定することはできるのだろうかというの
が質問の趣旨です。
それから、ActiveWorldやSmalltalkはグローバル変数だそうですが、
Transcriptもそうなのでしょうか。trueやfalseやnilは変数じゃなくてオブジ
ェクトそのものなのですよね?

> 梅澤さんの本にもあるかと思いますが、その他にも"ワークスペース変数"で検索
> すると色々情報が見つかるかと思います(別な処理系や環境も出て来ますが…
> 適宜キーワードを追加されて…)。
> 頑張って(?)遊んでみてください。私も勉強になります。

いろいろありました。ありがとうございます。googleのトップに出てきたペー
ジではグローバル変数の一種と書かれていましたが、Workspaceのインスタン
ス変数であると書かれているページもありちょっと混乱します。もしかして、
プログラムの中で使う変数というものはどれも何らかのオブジェクトのインス
タンス変数になるのでしょうか?

このML以外に初心者質問用の場所がないようでしたら、今後もちょびちょび質
問させていただこうと思いますのでよろしくお願いします。
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/             井上
.
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3268] Re: squeak 初心者の質問:モーフの指定

Kazuhiro ABE-3
阿部@新百合です。

On Thu, 7 Dec 2006 11:09:11 +0900
iNOUE Koich! <[hidden email]> wrote:
>このML以外に初心者質問用の場所がないようでしたら、今後もちょびちょび質
>問させていただこうと思いますのでよろしくお願いします。

以前はSqueak-JというMLがありましたが、トラフィックが絶えて久しいです。
他には以下の場所などがありますが、特に初心者用と銘打ったものはありません。

Squeaker's Scrapbook フォーラム
http://squeak.sakura.ne.jp/modules/newbb/

Squeakでマターリ語りましょうや
http://pc8.2ch.net/test/read.cgi/tech/1131349633/l50

SqueakToys掲示板3
http://swikis.ddo.jp/abee/20

SuperSwiki2 - 掲示板
http://squeakland.jp/seaside/SBSuperSwiki/BBS

このMLのスタンスは、以前も申し上げたとおり「Squeakに関することなら誰が何
を書いても良い」です。

http://www.smalltalk.jp/pipermail/squeak-ja/2006-May/002969.html

 //abee
--
阿部 和広  EMAIL [hidden email]
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3269] Re: squeak 初心者の質問:モーフの指定

Tetsuya HAYASHI
In reply to this post by iNOUE Koich!
井上さん、こんばんは。
林です。

On 2006/12/07, at 11:09, iNOUE Koich! wrote:

> ワールドに出した場合、他のものはゴミ箱行きにならないのですが、星と曲線
> と多角形は何度やってもゴミ箱直行です。たまにゴミ箱の中からも消えている
> ことがあります。

 バージョンが古いと、強制的にゴミ箱に行ってしまうことがあるようです。
 ワールドメニューの「ヘルプ...」から「サーバーからアップデートを取得」で
パッチをあてた場合、どうでしょう?

> これは変数名だったのですね。もう少し初心者の質問をよろしいでしょうか。
> 変数というものはオブジェクトではない、squeakプログラムの構成要素の一つ
> だと認識しているのですが、そこに代入されるオブジェクトそのものを直接に
> 指定する(リテラルとして)ことはできないのでしょうか。普通の数だとか文
> 字列だとか配列だとかにはリテラル表現がありますが、もしかしてシンボルと
> いうものがそれなのでしょうか?
> a星811が星のモーフを代入した変数名だとすると、Workspaceがモーフのドロ
> ップを受けたときにそれを自動生成してくれたということですよね?この手段
> 以外で星のモーフをプログラム内で指定することはできるのだろうかというの
> が質問の趣旨です。

 私よりも旨く正確に説明出来る方がほかにいらっしゃると思いますが(^^;;

 結論としては、リテラルのように指定する方法は残念ながら無いと思います。
(言語仕様を拡張して、分散オブジェクトのIDみたいなものを導入すれば出来る
のかもしれませんが、結構負担も大きそうです)

 ワールドの中からモーフを探し出す方法としては、モーフは、Morphic のフレ
ームワークで実現されてますので、その仕組みを利用します。
例えばモーフ/サブモーフの関係とモーフの持つ名前を利用して検索する方法が
あるかと思います(ここでいう名前は普段ハロなどで表示されているモーフの名前
です)。
        star := ActiveWorld submorphNamed: '星'
とかです。
# もっといいやり方もありそうですが…ほかの方お願いします。
# これって結構、私も悩むところだったりします(^^;;


> それから、ActiveWorldやSmalltalkはグローバル変数だそうですが、
> Transcriptもそうなのでしょうか。trueやfalseやnilは変数じゃなくてオブジ
> ェクトそのものなのですよね?

Transcript もグローバル変数です。
選択してインスペクトするとオブジェクトがバインドされてるか分かります。

true や false や nil についてですけど、変数というものが中身が入れ替え
可能なものという定義であるならば、変数ではないということになるかと思います。
書き換えができませんので。
でも、それぞれインスペクトするとオブジェクトを見ることができます。

 個人的には、乱暴な言い方をしますと上記のtrueや偽変数や変数、それにクラ
ス名など全部ひっくるめて「変数のようなもの」(オブジェクトがぶら下がって
いるもの=ひもつきのラベル)と捉えてます。

こう見ると、Smalltalkの構文は
    「変数のようなもの(オブジェクトがぶら下がってる)」+「メッセージ」
とシンプルになります。
逆にメッセージ以外はすべて「変数のようなもの」ということでもいいのかもし
れません(実際はリテラルがありますが限定されてますし)。

例えば、クラス名もグローバル変数だったりします。

> いろいろありました。ありがとうございます。googleのトップに出てきたペー
> ジではグローバル変数の一種と書かれていましたが、Workspaceのインスタン
> ス変数であると書かれているページもありちょっと混乱します。もしかして、
> プログラムの中で使う変数というものはどれも何らかのオブジェクトのインス
> タンス変数になるのでしょうか?

Workspace のインスタンス変数というのは、おそらくクラスWorkspace に
定義された bindings のことだと思います。これは『ワークスペース変数の
仕組み』を実現しているものです。このインスタンス変数には連想配列のオブジ
ェクト(Dictionary)がぶら下がってます。
ワークスペースで式を実行すると、式の中で出現したワークスペース変数名を
キー(添字)にして、そのワークスペース変数に代入(バインド)されたオブ
ジェクトが、この連想配列に登録されていきます。

        キー 値
        #a星2142   -> {星のオブジェクト}
        #a四角形233  -> {四角形のオブジェクト}
        #a楕円1482  -> {楕円のオブジェクト}
        ...

という感じです。
次の実行時には、式の中の変数名でこの連想配列を辞書引きして、その連想値で
あるオブジェクトに置き換えてるということですね。こうすると変数として機能
する見えるという仕掛けです。
また、bindings は Workspace のインスタンス変数なので、一枚一枚のワークス
ペース(Workspaceのインスタンス)ごとに別なオブジェクトになりますので、必
然的にスコープはワークスペースごととなります。ですのでグローバル変数ほど
スコープは広くはないです。

Smalltalk はそれ自身で言語が実装されてますので、変数の内、グローバル変数
なども同じように連想配列オブジェクト(辞書)を使って実現してたりします。
この辺りの実現方式の話が言語仕様と絡むとわやくちゃになってしまうのですが。
(ブートストラップといいましょうか、メビウスの輪といいましょうか)

> このML以外に初心者質問用の場所がないようでしたら、今後もちょびちょび質
> 問させていただこうと思いますのでよろしくお願いします。

こちらこそよろしくお願いします。
他の言語系のMLに比べればまだまだおとなしめかと思いますし…。

--
林 徹也 Tetsuya HAYASHI
[hidden email], [hidden email]


Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3270] Re: squeak 初心者の質問:モーフの指定

Tetsuya HAYASHI
ちょっと漏れがありました。

On 2006/12/07, at 18:53, Tetsuya HAYASHI wrote:

> Smalltalk はそれ自身で言語が実装されてますので、変数の内、グローバル変数
> なども同じように連想配列オブジェクト(辞書)を使って実現してたりします。
> この辺りの実現方式の話が言語仕様と絡むとわやくちゃになってしまうのですが。
> (ブートストラップといいましょうか、メビウスの輪といいましょうか)

使う視点で見れば、スコープと寿命で使い分けるということでよろしいのではないでしょうか?

といった感じで結ぶつもりでした。

乱文失礼しました。
--
林 徹也 Tetsuya HAYASHI
[hidden email], [hidden email]


Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3271] Re: squeak 初心者の質問:モーフの指定

iNOUE Koich!
In reply to this post by Tetsuya HAYASHI
Tetsuya HAYASHI さんが 2006.12.7ごろに
「[Squeak-ja: 3269] Re: squeak 初心者の質問:モーフの指定」の件で:
>  バージョンが古いと、強制的にゴミ箱に行ってしまうことがあるようです。
>  ワールドメニューの「ヘルプ...」から「サーバーからアップデートを取得」で
> パッチをあてた場合、どうでしょう?

サーバを選択で一番上のSqueakLandを選択して(他はalphaと書かれていまし
たから。)、25個何やらアップデートされた後はゴミ箱直行になりませんで
した。定期的にアップデートをしてやるべきなんですね。

>  ワールドの中からモーフを探し出す方法としては、モーフは、Morphic のフレ
> ームワークで実現されてますので、その仕組みを利用します。
> 例えばモーフ/サブモーフの関係とモーフの持つ名前を利用して検索する方法が
> あるかと思います(ここでいう名前は普段ハロなどで表示されているモーフの名前
> です)。
> star := ActiveWorld submorphNamed: '星'
> とかです。
> # もっといいやり方もありそうですが…ほかの方お願いします。
> # これって結構、私も悩むところだったりします(^^;;

なるほど、直接書いて指定する方法は用意されておらず、登録されているとこ
ろで検索してやるわけですか。複数の同じようなものから選択するには工夫が
必要なのでしょうね。

>  個人的には、乱暴な言い方をしますと上記のtrueや偽変数や変数、それにクラ
> ス名など全部ひっくるめて「変数のようなもの」(オブジェクトがぶら下がって
> いるもの=ひもつきのラベル)と捉えてます。

イメージが湧きます。リテラルを除き、オブジェクトは直接指定できず何かに
入ったその入れ物を(スコープも考慮に入れて)扱うことで、対象となるオブ
ジェクトを指定する(いじる)ということですか。

> 例えば、クラス名もグローバル変数だったりします。

smalltalk 80の黄色い本でもそのようなことを読んだような気がします。(嘘かも)

> Smalltalk はそれ自身で言語が実装されてますので、変数の内、グローバル変数
> なども同じように連想配列オブジェクト(辞書)を使って実現してたりします。
> この辺りの実現方式の話が言語仕様と絡むとわやくちゃになってしまうのですが。
> (ブートストラップといいましょうか、メビウスの輪といいましょうか)

メタメタになるというわけですね。(^^;
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/             井上
.
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3272] Re: squeak 初心者の質問:モーフの指定

iNOUE Koich!
In reply to this post by Kazuhiro ABE-3
Kazuhiro ABE さんが 2006.12.7ごろに
「[Squeak-ja: 3268] Re: squeak 初心者の質問:モーフの指定」の件で:
> このMLのスタンスは、以前も申し上げたとおり「Squeakに関することなら誰が何
> を書いても良い」です。
>
> http://www.smalltalk.jp/pipermail/squeak-ja/2006-May/002969.html

了解しました。本を読破するにあたって疑問が湧きましたらまた質問させてい
ただきます。。。。と、早速で恐縮ですが、Workspaceで編集に使えるショー
トカットはカスタマイズできるのでしょうか?指がctrl-hだとかctrl-eだとか
打ってしまうのですが、期待通りになりません。ある程度は流儀に慣れなくて
はいけないと思っておりますが、できればカーソル前の一文字削除・カーソル
のある一行選択・カーソル後行末まで削除がショートカットでできれば楽だな
と感じております。
--
https://www.ns.musashi-tech.ac.jp/%7einoue/Signature/             井上
.
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 3276] Re: squeak 初心者の質問:モーフの指定

Tetsuya HAYASHI
In reply to this post by iNOUE Koich!
林です。ども。

On 2006/12/07, at 19:35, iNOUE Koich! wrote:

> サーバを選択で一番上のSqueakLandを選択して(他はalphaと書かれていまし
> たから。)、25個何やらアップデートされた後はゴミ箱直行になりませんで
> した。定期的にアップデートをしてやるべきなんですね。

一安心しました。
ちょっと煩雑に感じるときも多いのですが、プリファレンスでupdateで検索して
出てくる updateFromServerAtStartup をONにしておくと起動時に毎回チェックす
るかどうか確認してくるようです。

> なるほど、直接書いて指定する方法は用意されておらず、登録されているとこ
> ろで検索してやるわけですか。複数の同じようなものから選択するには工夫が
> 必要なのでしょうね。

ActiveWorld にいるオブジェクトはコレクションで取ることができるので、必要
としている条件によるコレクションの操作で見つけることが出来るはずです。

> イメージが湧きます。リテラルを除き、オブジェクトは直接指定できず何かに
> 入ったその入れ物を(スコープも考慮に入れて)扱うことで、対象となるオブ
> ジェクトを指定する(いじる)ということですか。

あまり本質的な話ではないのですが、どこからも参照されてない(バインドされ
てない)オブジェクトはガベージコレクトされてサヨナラしてしまいます。です
ので、生成されたオブジェクトはどこかで参照されてないといけないという話も
あるかと思います。
リテラルについては、コンパイル時にどっかから引っ張ってきたり、配列リテラル
などは構文糖でその時にインスタンス生成が実行されてると言えるかもしれません。
式をワークスペースで実行する時もまずコンパイルをその場でやってます。

>> 例えば、クラス名もグローバル変数だったりします。
>
> smalltalk 80の黄色い本でもそのようなことを読んだような気がします。(嘘かも)

その当時は本当にグローバル変数で、クラス名に代入することができたという話
があります。
今は出来ませんけど。

>> Smalltalk はそれ自身で言語が実装されてますので、変数の内、グローバル変数
>> なども同じように連想配列オブジェクト(辞書)を使って実現してたりします。
>> この辺りの実現方式の話が言語仕様と絡むとわやくちゃになってしまうのですが。
>> (ブートストラップといいましょうか、メビウスの輪といいましょうか)
>
> メタメタになるというわけですね。(^^;

でも、それがイイ。という話もあったりしますね。

--
林 徹也 Tetsuya HAYASHI
[hidden email], [hidden email]