Gopher Madness
--------------

Over the last month or so, a ridiculous amount of my spare time has
been sapped up by my (re-)discovery of gopher, and all of the
connecting rabbit holes.

I've been mucking around on the internet in various forms since 1994
or so, when I bought my first modem.  (A 14.4k internal Zoltrix, if I
remember correctly.)  This led to local BBSs initially, and some of my
first memories of the capital "I" Internet were thanks to the amazing
sysop of Verbal Verbatim BBS who provided an email address to each of
his users free of charge.  (An important factor for a 14yo.)  In
return for some basic subop work, I was given access to more exciting
applications, including a Gopher client (probably Lynx?).  Of course,
things rapidly changed and I forgot all about Gopher in favour of the
trendier HTTP, but I do remember trying out some Archie searches.

Fast-forward to a month or so ago, when a "band" that I enjoy, Master
Boot Record, (https://masterbootrecord.bandcamp.com) released another
one of their marvelous 90s computing themed metal albums: "Internet
Protocol". Now when MBR release an album, which they do incredibly
frequently, they usually include (along with the ansi art and great
music) a puzzle.  In this case, the album page contained an IP address
for a server with open ports usually reserved for FTP, IRC, Telnet,
Gopher, HTTP, POP and SMTP services.  (Incidentally, these are all
names of the tracks on the album.)  The puzzle turned out to be a
fairly easy but incredibly fun series of riddles, each of which would
allow you to authenticate with one of these services, leading to
further riddles.

At some point while solving these, I of course had need for a gopher
client. This is the point at which I discovered that Firefox no longer
supported the gopher protocol natively (although Lynx still does, of
course!) and thus I went hunting for ways to add gopher support to
Firefox.  This is where I stumbled on Floodgap, SDF, and the rest of
the modern Gopherspace.

The first thing I did after finding these gems was to try to find a
gopher client for Emacs.  (Having swapped back and forth between Emacs
and Vi for almost TWO DECADES, I've recently discovered that Emacs is
not a text editor at all, but rather something akin to a full LISP
machine in disguise - a topic for another post.)  I was extremely
surprised to learn that, at that time, there was none!  At least none
currently maintained and accessible via the Emacs' modern package
management system.

Thus a plan was hatched - I would finally dive into Elisp good and
proper in order to write Emacs' missing gopher client.

This turned out to be harder than expected, but it was hugely
enjoyable and caused me to learn all sorts of things about both Emacs
and Gopher.  The main product of this was "Elpher": the Elisp Gopher
Client, which is now available via the MELPA Emacs package archive.
You can also clone it directly from my public git server at
git://thelambdalab.xyz/elpher.git, or browse it via my gopher
gateway at:

gopher://thelambdalab.xyz/1/scripts/browse-git.scm|elpher.git

Of course, it was never going to be enough to simply browse
gopherspace, I had to be able to contribute to it!  I therefore
finally bit the bullet I'd been threatening to bite for some time and
acquired a VPS to host a gopher server. But what server software to
use?

At this point I should say that over the last few years I've become
quite infatuated with all things Scheme.  (There's a separate and even
longer story behind this that involves FORTH and Douglas Hofstadter
but that will have to wait for another post.)  Thus, I naturally had
to write my own gopher server in Scheme.  My absolute favourite scheme
implementation for general hacking is Chicken (https://call-cc.org),
as it has a fantastic community, a large library of extensions, and
compiles down to portable C.  (It also is well-supported by Emacs!)

Thus was born Scratchy, my own super-flaky Gopher server written in
Chicken Scheme.  It's definitely still a work in progress, but it's
serving up the page you're currently reading.  If you're interested in
the hideously undocumented Scheme code, you can clone it from
git://thelambdalab.xyz/scratchy.git, or browse through it via:

gopher://thelambdalab.xyz/1/scripts/browse-git.scm|scratchy.git

Which more-or-less brings us to today, where I finally have the server
online, and can happily bounce around gopherspace using Emacs.

Life is good. :-)