Wordle GS
A version of Wordle for the Apple IIGS, written in C and built using a modern development environment. I used the project as a way of exploring if I could bring contemporary practices along with me, including automated builds and unit tests that run on a normal Linux CI runner while the application itself runs on an Apple IIGS.



Links: GitHub Release Page
On the Blog: Running lcov on a GitHub Linux Runner
Elsewhere: Wordle GS was played on Ron’s Computer Videos, mentioned in Call-A.P.P.L.E., mentioned in Juiced.GS, covered by SUPERJUMP, and is supported by Jeremy Rand’s Apple IIGS Wordle Solver desk accessory.
Wumpus for PicoSystem
A PicoSystem take on the classic Hunt the Wumpus, visually inspired by the TI-99/4A version that first introduced me to the game. I built it while exploring Pimoroni’s RP2040-based handheld and its C++ SDK. It has custom sprites and animations for movement, arrows, bats, pits, and, of course, the Wumpus.
Links: GitHub Release Page
On the Blog: Compiling for the PicoSystem • Wumpus for PicoSystem v0.0.1 Released • Wumpus for PicoSystem v0.0.2 Released
Pen Plotter / Generative Art
I’ve spent time experimenting with using code to make physical artwork using an AxiDraw pen plotter. The results have ranged from Logo turtle graphics to triangular meshes and patterns distorted with Perlin noise, usually plotted with pen on paper though also sometimes with a stylus drawing directly in sand.



On the Blog: Generating Plotter Art From Berkeley Logo
Elsewhere: From Pixels to Ink featured my algorithmic postcards in the Plot Party postcard roundup and a sine-wave-based sand plot in its collection of plotter art made with unconventional media.
UCBLogo / Berkeley Logo
I’ve contributed to UCBLogo (Berkeley Logo) on and off for a number of years, with work spanning build and portability fixes, user-interface behavior, release automation, and support for modern platforms. Part of what keeps drawing me back is the challenge of helping a classic educational language remain usable on contemporary systems without losing the qualities that made Logo interesting in the first place.
Links: UCBLogo on GitHub
On the Blog: Building ucblogo (Berkeley Logo) on the Raspberry Pi 400 • Generating Plotter Art From Berkeley Logo
3D-Printed Modules for fischertechnik
I revisited fischertechnik as an adult and designed 3D printed parts to make new modules which fit into the existing construction system without modifying the original parts. What began as a simple press-fit lid for the standard cassette bottom turned into modules for things like a panel-mount voltmeter and speaker. It also became a starting point for other people to design compatible modules of their own.



Links: Lid for Use with fischertechnik’s Cassette Bottom • Voltmeter Holder for fischertechnik Cassette Bottom
On the Blog: Designing a Lid for the fischertechnik Cassette Bottom • Integrating a Voltmeter with fischertechnik
Elsewhere: The designs are catalogued in the ftCommunity’s collection of 3D-printable parts, and Jeroen Regtien remixed the cassette-lid design into some very cool additional electronics modules.
3D-Printed Slot Plates for the Apple IIGS
I designed a set of 3D-printable rear slot plates for the Apple IIGS to simplify mounting modern cable connectors without permanently modifying the case. My original goal was just to have a clean disconnect point for moving my IIGS around, but I found I enjoyed the challenge of seeing how cleanly I could make the plates blend into the computer.



Links: Slot Plates for the Apple IIGS on Thingiverse
Elsewhere: A version of the audio connector plate is included with the LiteSound stereo audio interface, and Xanxi used the plates as inspiration for a 3D printable RCA backplate.
Generated Towns in Townscaper
While playing Oskar Stålberg’s Townscaper, I became curious about how garden paths are calculated. I found Chris Love’s article on the Townscaper file format. Using that as a starting point, I built town maps in Processing using Perlin noise to determine height, color, and distance above the waterline.



On the Blog: Generating Towns for Townscaper in Processing
Elsewhere: The project was later linked by kottke.org alongside Clive Thompson’s experiments using Townscaper as a data-visualization tool.
Cistercian Logo
After stumbling across Cistercian numerals, I thought their geometric structure looked like well suited to Logo turtle graphics. I used them as the basis for a short series exploring how complicated numerals could be built up from simpler drawing procedures, gradually refactoring the Logo code as the patterns and relationships between the shapes became clearer.

On the Blog: Exploring Cistercian Numerals with Logo • Exploring Cistercian Numbers with Logo – Part 2 • Exploring Cistercian Numbers with Logo – Part 3
Elsewhere: The series was later referenced in a 2024 Habr article surveying the history of Cistercian numerals and modern experiments with them.
SocialChatter for Emic2
After experimenting with the Emic 2 text-to-speech module, I decided to try having it give an Internet feed a voice. I started with Adafruit’s Gutenbird sketch for its Internet of Things Printer and adapted it to read tweets aloud through the Emic 2.
That required a little bit of preprocessing of the tweets for a reasonable audio experience. SocialChatter translates characters such as # into words and detects URLs so they can be announced simply as “link” rather than read character by character. I also wrote a small wrapper class around the Emic 2 command interface, which was later ported by Krishnaraj Varma for use with the Spark Core.
Links: SocialChatter on GitHub
Elsewhere: Adafruit: Using an Arduino and the Emic 2 TTS Module to Read Tweets • Engadget: Arduino-based SocialChatter reads your Twitter feeds so you don’t have to • Spark Core Text-to-Speech using Emic2 Module
Train-Station Display for LEGO
After seeing Ladyada’s Workshop recreated in LEGO, I started thinking about how small electronics could be incorporated into LEGO models. I used a tiny color OLED display from Adafruit and an Arduino Uno to build a minifig-scale train departure board with a dynamically generated schedule.
I built a simple LEGO enclosure around the display and published the source code along with a printable bezel and LEGO building instructions. The project was subsequently picked up by both WIRED and Hackaday.



Elsewhere: Adafruit: OLED LEGO Train Schedule • WIRED: Adding a Real Screen to a Lego Train Station • Hackaday: Adding An OLED To A LEGO Set
Parts List Hack for LEGO Digital Designer
When LEGO launched LEGO Factory in 2005, its Digital Designer software let people design their own models and then order a custom set containing the bricks to build them. LEGO fulfilled those orders using bags of parts from existing sets, which meant choosing one part could bring along a number of others you weren’t expecting. The palettes shipped with Digital Designer were coarse-grained and didn’t make those relationships obvious.
I was part of a group of fans who worked out the structure of the data files used by LEGO Digital Designer. We created finer-grained custom parts palettes organized around the individual bags rather than the sets containing them. This let people design with a clear picture of which parts they were actually adding to an order, including when a particular choice was causing additional bags to be included.
This attracted wider attention than I had expected. CNET covered it in Hacking’s a Snap in Legoland, including LEGO’s surprisingly enthusiastic reaction to people modifying the software. The story was subsequently picked up elsewhere and was used as an example of user innovation in a German textbook on mass customization and production.
Elsewhere: CNET: Hacking’s a Snap in Legoland • Lego: sì all’hacking etico • Reichwald & Piller. (2006). Interaktive Wertschöpfung. pp. 254–255.