logo

Plumbin'
Smalltalk-80 Application Architecture by Example

Ward Cunningham
Cunningham & Cunningham, Inc.

Computers should devote their full attention to serving the needs of their users. This was understood in 1980. But how exactly does one instruct a computer to do so?

The user-centric battle cry rose over Xerox's Palo Alto Research Center throughout the '70s. Smalltalk was one vehicle for that research. By 1981 I had it running on my desk. And I had source code.

Smalltalk source code was amazingly easy to read. I could flip to just about anywhere, start reading, and make sense of what was there. It reveiled its secrets quickly, except for one: how to make an user-centric application.

My answer was Plumbin'. It's a self contained Smalltalk application written to be used in the hands-on lab section of an advanced Smalltalk class. Students were asked to read the program and then extend it. Plumbin' is designed to be small enough to read in one sitting while still offering interesting capability.

Plumbin' has a direct manipulation interface. One arranges assorted tiles by dragging them with the mouse. When dropped, the tile aligns itself percisely with the rest of the mosaic. A shift-drag pulls off a copy of a tile. This makes for an endless supply of material.

Tile
  Faucet
  Spout
  StraightPipe
  TeePipe
  ElbowPipe
  ReverseElbowPipe
  PressureTank

    
Plumbin' is a game of sorts. The goal is to connect a faucet to a spout. The images on each tile can change. A drop appeared at a spout the moment the path is complete.

Plumbin' is also a simulator. Each tile models a device capable of propagating both pressure and flow. A right-click on the faucet gets a menu for changing the pressure. We offered a pressure tank as an add-on. It relates pressure to flow and vice-versa. The level of the tank (state held within the tile) is animated as the simulation progressed.

The name Plumbin' is a take off on Truckin', another educational simulator developed by the Loops group under Lynn Conway at Xerox PARC. Their spelling probably goes back to the Greatfull Dead, Janice Joplin or Robert Crumb.

Jim Besemer has reminded me that an earlier reference to Truckin' is the old, black, blues musician, Blind Boy Fuller, in his song Keep on Truckin' Baby [Truckin' them blues away...].

Mosaic example edit One launches the Plumbin' application by sending edit to a mosaic. The mosaic class will create an example on demand. It creates mosaics preloaded with one of every kind of tile.
I've recently retrieved Plumbin' from an old Tektronix 4404 that had been collecting dust in the basement. I've loaded it into Squeak Smalltalk and gotten all the graphics converted to color. Oooh.

I've also added an infinite recursion check. Plumbin' was originally written for a dialect that could only allocate 32 thousand objects. If you assembled a loop of pipe the simple simulator would loop too and quickly exhaust all but a small reserve of the object space -- just enough to bring up a notifier. I thought this behaviour to be quite sophisticated and loved to show it off. Now an infinite loop just drives Smalltalk into paging so I have to explicitly check for loops and issue my own notice.

PlumbinBin.zip
800k

PlumbinSrc.zip
10k

I've zipped up the portable image with a Windows interpreter. Drop the image on the exe to get Squeak running. This image will work on any Squeak platform. Check the archives for an interpreter for your Mac or Unix or whatever. I've also zipped up the source and a couple of patches I needed for version 1.20. You will want to get a full Squeak environment (with source and change files) before you try to look at these.

Hans-Martin Mosner has converted Plumbin' to use Squeak's new Morphic graphics model. File-in this change set after you have tried the MVC version.

Add-On Tiles Try adding a new kind of tile to Plumbin' yourself. Make a subclass of Tile and TileView or TileController too, if you need them. Put it in a category with your name on it, something like Plumbin-PressureTank, and email me the fileout. I'll add it to the add-on repository.

ward@c2.com © 1997