retro challenge roundup

In at least some parts of the world, it’s still July 31, so I’ll claim this Apple 2 gopher client as being a 1.0 release within the Retro Challenge timeframe. A last minute change of platform, to be sure, mainly because gopher really needs 80 columns. Here’s a screenshot:

A2 Gopher Sreenshot 

To use –

  • You must have an Apple 2 with an uthernet in slot 3 (or at least an emulator like AppleWin), and a functioning DHCP server on your LAN.
  • Press up and down arrows (or ^P / ^N) to scroll up and down between pages.
  • Press TAB to enter a new gopher server (just the server name e.g., not a full URL like gopher:// and bad luck if you want to connect to a non-standard port)
  • Press the left arrow (or ^B) to go back to the previously visited location.
  • Press any letter displayed in inverse to navigate to to the adjacent resource (e.g. pressing’c’ in the screen shot above would take you to arfink’s gopher space)
  • There are lots of bugs/issues etc, the most notable being pages over 16KB will crash the client. But hey, at least I hit the launch date. And 16KB should be enough for anyone. Except maybe luddite.

Some reflections:

  • UI design is harder than implementation. I believe that the Mac was the first operating system to provide APIs for applications to use a standard “look & feel”. The coding I’ve done this month is the first major app I’ve ever done where I couldn’t take for granted widgets or common interface metaphors. And it sucks, both as a user and a developer.
  • Although the end product may resemble an authentic Apple 2 application, this was far from an authentic Apple 2 development process. Kudos to the chaps I met from MtKfest who do it “the hard way”. I never could have done this without a decent text editor, google to find RFCs, irc and newsgroups for instant answers to questions, an edit/assemble/execute cycle measured in seconds not hours and all the other conveniences that eliminate the accidental and let one focus on the essential 
  •  State Machines are both a marker and a reducer of complexity. If a design has a state machine, it’s probably solving a complex problem, but it will be simpler (and easier to write) than an alternative design solving the same problem with a diffuse and intertwined set of globals.