A few random comments from an eToy newbie

Ned Konz ned at bike-nomad.com
Mon Apr 7 15:48:55 UTC 2003

Here are the notes that I made when doing my "Karel's World" project.
I realize some of this behavior is by design, but there were some eToy
behaviors that I found frustrating, difficult, or buggy:

Dot vs. Dot
	When you do a test for Holder.firstElement, the Holder may be empty. In
	this case, it returns *a* Dot.  However, this Dot is not *the* Dot.
	Instead, it is *a* dot owned (created, in fact) by the Holder.  I
	got confused when I started moving Dot name tiles around.
no test for Holder.isEmpty
	Instead of a simple test for whether a Holder is empty, you get a
	test of whether Holder.firstElement is (or is not) "dot".
no test for isDot (i.e. is unscripted)
	There seem to be multiple Dots (see above) filling in for (for
	instance) nil in cases where you have to return some default value.
	But there's no way I could see to test for dot-ness in a script.
Only test for firstElement ==/~= someObject
	Should perhaps have isKindOf or isLike test? What would this be (looks like/acts like)?
No metaprogramming
	Though phrase tiles and script editors themselves have identities
	and viewers, and you can get tiles for them, etc., there is no way
	to write (for instance) a script that adds to another script. I
	wanted to have programming by example, but couldn't manage it.
Can't get to objects via noun phrases
	Given a noun phrase (either a tile for an object, or a phrase that
	returns an object), how can I get to a viewer for the object (or the
	object's costume)? It doesn't seem to be easy. Finally I made a
	script that I could drop a noun phrase on that just did "Something
	doMenuItem viewer". But it would be nice to be able to directly get
	a viewer (perhaps from a context menu).
	The only phrase-specific menu item in the halo menu, though, is
	"sprout a new scriptor around this phrase".
Mysterious subclassing (duplicate A twice, script one A1, other A1 doesn't behave similarly)
	The structure of the various PlayerXX subclasses is not clear. It's
	easy to write scripts in the wrong subclass after duplicating a
No return values from scripts -- second class citizens
	How can I return a value from a script? Now that they take
	parameters, this seems like the only limitation of a script.
Grid behavior casual at best
	I wanted to have a properly gridded world. This was frustrating
	because grid handling is inconsistent and awkward:
		- polygons snap vertices to grid
		- move/size snaps to grid
		- but dropping SketchMorphs ignores grid.
		- And aligning on origins is often less convenient than aligning
		  *where the morph is picked up* with the grid (or center, etc.)
Removing projects leaves objects & classes intact (I didn't isolate the project; can you do this later?)
	Having built the project, I then wanted to load my new version for
	testing. I got all my objects renamed (i.e. Robot became Robot2,
	etc.) even though I'd removed the original project's window. It
	turned out that all these objects were being pointed to by script
	Didn't there used to be some way to isolate a project, or did that
	go away with 3.3?
Can't pick apart phrase tiles
	Given a phrase tile that says (for instance) "Holder's firstElement
	show", I can select a PhraseTile that says "Holder's firstElement",
	and then duplicate that PhraseTile. However, trying to use this new
	PhraseTile results in a walkback.
Walkbacks on unrecognized menu items
	If you tell an object of the wrong kind to do a menu item that it
	doesn't provide, you get a walkback. You can do this, for instance,
	by making a new script that has a Player parameter. Inside the
	script, you write
		Player doMenuItem viewer
	When you right-button the tile ("viewer") that says which menu item
	to perform you get a walkback.

Ned Konz

More information about the Squeak-dev mailing list