30. My First Laptop Had A Trackball And Wrist Rests
At some point, I decided I wanted to buy a laptop. I figured they were cool, and since I was writing the short screenplays at Taarna, I could rationalize the expense.
Back in the old days, you had to visit a computer store to buy a computer. So I visited a local retailer and was seriously contemplating buying a Toshiba laptop running DOS.
Then Apple released PowerBook line of laptops.
I was aware of the Mac, having played with the original Macintosh at MIT. We also used it as an office computer at Neo-Visuals. But since my domain was 3D graphics, it wasn't a computer I paid much attention to. Tiny screen and underpowered CPU compared to the Lisp Machines, VAXs, and SGIs I was used to.
But trying out the PowerBooks at our local Apple retailer, I was immediately taken by them. They were ergonomically so much better designed than the Toshiba. The Powerbooks not only had the keyboard placed to the back of the laptop, creating wrist rests, there was also a built-in trackball. And the Mac OS (System 7) was so much nicer than DOS.
So I bought a PowerBook 170, the top of the line model: 68030 processor, 640x400 screen, 4MB of RAM, 40MB hard drive, and a built-in modem.
I happily used my Mac for my writing and for logging in to the GEnie BBS service, where I hung around the science fiction rooms (and shared my science fiction poetry — yes, I went through a poet phase), while developing my next-generation 3D software on the SGI workstation.
Then I discovered Apple’s Macintosh Common Lisp.
Design & Code
I decided to investigate designing protocols by implementing point-generator-mixin
.
The idea is that all point-based geometry classes will implement this protocol. The above listing shows the curve-shape
and polyhedron
classes doing so.
Diving more deeply into multiple inheritance here.
I am curious to discover whether this will lead to more general and uniform interfaces to modeling routines such as polygonal extrusions, sweeps, and instancing, or whether it will prove to be an unnecessary complication.
The image above illustrates a sweep-mesh
extruded along a particle-system
generated from a curve-shape
using the protocol.
Over-designed OO and excessively complex class hierarchies are something I am wary of. This is a way to find out, I guess.
As always, I have taken the simplest route (as I did with the procedural mixins) to implement a feature. I suppose some sort of CLOS-based defprotocol
system would result in a more formal definition. Currently, my approach is based on a convention, with no language verification or support.