Thursday, January 04, 2018

The ridiculous gopher project

My primary New Year's Resolution for 2018 is to start no new projects, and to only finish old ones.  In looking over my repos  -- more aptly titled the graveyard of 1,000 Saturdays -- I have excavated a couple of projects from the earth.

I'm starting, for now, with what is one of the most ridiculous of all possible projects: a gopher-protocol blog.  Do you remember gopher?  It was a protocol and a network ecosystem that existed just before HTTP took over the world.  I presented the world as directories that contained files, and users could poke around and look at those files to their heart's content.

There is a reason that I'm nostalgic for those days, and it lies primarily in how all of the world of HTTP and the world of iPhone and Android applications are really data-mining spy operations.  The gopher protocol is too primitive to allow the wholesale data mining operations that the modern web has become.  I has no client side scripting and cookies.  And because the world of gopher is so strange and hard to reach, there is a bit of a pioneer mindset among aficionados


So yeah, gopher.  A big directory of files of the types on the following list.  Take a look at this table of filetypes that Gopher handles natively.


Itemtype Content
0Text file
1Directory
5PC binary
6UNIX uuencoded file
8Telnet Session
9Binary File
gGIF image
sSound
IImage (other than GIF)
0Text file

Pretty old school, eh?  Just feel the power of the 1990s.

There are a lot of people running blogs in Gopher.  Really they just are directories of plain text files, ordered by date.  It is very pure, but, slightly boring.  So I looked at that list and asked myself if I could create a modern (lol) Gopher blog engine.

You can, of course, write servers that push out dynamic-generated content, but the clients only receive these static files.  Do you remember back when Perl5 was the way one would write CGI scripts that created "dynamic" HTML?  You can to the same thing here: make CGI scripts that create text files or GIF images.

In my conception, a modern gopher weblog engine would have text files of blog entries, a gallery of GIFs, and a commenting system.  Lacking any other gopher available method, the commenting system would be a Telnet session.

So I have picked up a couple of old ideas: a weblog software with a Gopher interface, a web gallery with a Gopher interface, and a tiny Telnet BBS where people can leave comments.  I've (re)started with the BBS, because it is the most ridiculous.

Monday, January 01, 2018

Writing as little as possible

My New Year's Resolution for 2018 is to start no new projects.  For 2018, I will only finish my many, many uncompleted projects.

I've started up with one of my most pointless coding projects: a telnet BBS.  Writing a BBS in the late 1980's and early 1990's was something of a rite of passage.  Much like writing your own blog software was in the late 1990's and 2000's.

But going back to the idea of finishing things, I've given myself some additional constraints.
  • Write as little code as possible.
  • Use common libraries and components sensibly and liberally.
  • Bend my concept to the strengths and constraints created by the libraries and components, instead of wrangling them into matching my vision.
This ends up being very hard to do.  To be specific, it is very difficult to quash my ego and perfectionism; that perfectionism is why my repo has two dozens projects, of which only three are functional.

One of the forces that pushes me to write my own code, instead of using other people's code, is that reading and understanding other people's code and documentation is hard and it doesn't feel like an accomplishment.  To properly use another library, one really does need to put in the work of reading the docs and understanding their logic, which is deeply unsatisfying.

Will 2018 be the year I recover from Incompletion Syndrome?  Time will tell.