Squeak Ambivalence

I’ve been dinking with Squeak again lately.

The thing with Squeak is that there are numerous levels to it.

There’s the classic Smalltalk level.

There’s the new Morphic environment, which was borrowed from the Self programming environment. Morphic was originally (in Self) designed as the visual environment for prototype-based programming par excellance, but of course Squeak is Smalltalk, which is class-based, not prototype-based, so there’s less than a 100% perfect fit there.

There’s the eToys programming environment, which is a visual programming environment built within and on top of Morphic. eToys is prototype-based, and this is accomplished, as best I understand it, through a hack on the Smalltalk environment in which every new object in the eToys environment generates a new singleton class. eToys is an entirely visual programming environment; you literally write code by dragging and dropping tiles into code templates. It’s suprising how much cool stuff you can accomplish there.

I’ve been infatuated with Squeak for several years, but it’s a very stormy relationship. There is so much to Squeak — there is so incredibly much in there — and it’s been developed nonstop very rapidly for years — and the documentation is abysmal, and gets very rapidly out of date. If you look at the Squeak mailing list (populated by elder gods of programming like Douglas Englebart and Alan Kay!) you will find a constant stream of newbies fascinated by Squeak, trying to accomplish something, and baffled by the overwhelming uberty of the Squeakiverse.

I have this dream of using Squeak to make neat little toy programs that my kids would enjoy. Like, I want to make something where you have these little blocks with different colors and they play different notes. And you can put them in a row in a container and play the whole container to make a tune.

That seems perfect for Morphic/eToys. So I tried it. First I tried to just do it in eToys. It was a hoot playing with eToys’s visual interface, and the neat tricks you could make things do, but I found out there seemed to be no connection between eToys and the internal Midi music system in Squeak. Whoops! Environment shear! So I had to go into the Morphic world and make a Morph that could do what I wanted. I succeeded with some effort, but never did quite figure out 100% how to give it a menu that would let you choose the note that the thing played. (I did set it up so that the morph was a different color based on what note it was, and that was wayyy slick how that worked. I was jazzed about Squeak when programming that part.)

I thought, “I should make this morph work in the eToys environment. If I could program it with tiles, I could do the rest of what I want easily.”

No luck there. I couldn’t find doco anywhere on how to give a custom morph its own special set of tiles, and I couldn’t figure it out by reading the code in existing morph classes before frustration and anger at wasted time overtook me.

This is always how it happens. I have a neat idea, I figure out how to do it 40, 60, 80%, and then the rest of it just kills me.

I need to swear off the Squeak. It’s so cool and powerful that it tempts me, it sucks me in, and then it bites me on the ass every time with its lack of documentation and overwhelming complexity.

I think I need to learn Flash or someting. People are always doing in Flash the general sorts of things I would like to do in Squeak. I wonder how much it costs.

Gotta get me away from that Squeak. It sucks all my free time and gives me temporary delight and ultimate disappointment.