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. :-)