Art of the One Day Project

Sometimes in conversation the idea just comes over you that there is something worth coding in there but it might be hard to explain. Better to start building.

This works when there are lots of familiar parts close at hand, when even subassemblies are visible as they work, and when once realized, even in its simples form, the idea is best explained in a show and tell.

I've seen and experience many variations but three stand out: Smalltalk at Tektronix, Cybords at Dorkbot, and recently Frame scripts in federated wiki. We will recall each and then look for some distinguishing features.

# Smalltalk

I worked for two separate labs, Systems and Cybernetics first, and then Computer Research where I filled two different postions.

Kent Beck and I had both explored the hundreds of abstractions that came with Smalltalk-80. We recognized we were privileged and sought to understand more deeply what the new machines at our desks could do. We often did this together and noted anything exceptional that happened as we worked.

A typical day started over coffee in the cafeteria when some new idea would be offered. Wait, can we code this with x, y and z?

We would proceed to one or the other of our desks. Browsing the classes we had considered we would run "doits" within key methods. We could put together key operations in a workspace then create the class that would reasonably hold the state that we had already developed.

new function: "Comment explaining function." "One line function demonstration." get some objects. have them do something useful. return other objects of interst

We could add some graphic rendering in a minute or two because every object could write anywhere. When the screen got cluttered we would just refresh everything and continue with all of our instantiations in place. By lunch we would know if this was working. After lunch we would fill in details to make it look like Smalltalk had been invented to make this program.

Before the day was out we were calling our neighbors to come have a look. Some folks made amazingly insightful observations. Most ask how it was we got to work on such cool stuff.

# Dorkbot

I cast a number of multi-microcontroller projects under the name Cybords. My most successful ran Bynase, my biologically inspired protocol.

The Portland chapter of Dorkbot electronic arts community met every other Monday evening at a pub two blocks from my work. On Sunday mornings I would start sketching how I could build something interesting to show at tomorrow's meet. I would plug together tiny computers often scavenged from previous projects. Sometimes I would need a new signaling function so this would be coded up in assembler and burned into a new part.

start: initialize state loop: trigger scope sync sample input lead compute new state manipulate application leads signal output lead goto loop

I build on prototyping boards glued into clear plastic boxes with three volts of AA battery included. Occasionally I would build and motorize with foam core, hot melt, and model airplane servos.

By mid afternoon I would reassess how much was working and how I could tell a story over a beer or two about how that is exactly what I had intended all along.

My projects reminded me of patching computations into an analog computer except that the modules that I was wiring together had whole computers devoted to the single behavior that was expected of them. I debugged circuits with an oscilloscope and other instruments I built out of more computers.

# Frames

We make pages here mostly for the making experience.

Federated wiki encourages mashups of uniformly licensed pages offered up on individually owned sites. We expect copies to proliferate and thus built an interface that supports selecting and propagating alternatives.

Pages ordinarily composed of Paragraphs and Images can include several dozen more specialized items. The most configurable items are Assets and Frames corresponding to shared files and html scripts.

<input type=text> <button onclick=doit> <div id=result> <script> import const const result = something interesting

more

# Observations

more