Synchronized Gopherholes (18-1-11)

   _Happy New Year, by the way, and a warning upfront: the following post
   is mostly an outline of an idea!_

   Although I had vacation over the holidays, I was totally inactive on
   the phlogging side. Family consumed quite some of my time (in a good
   way though), and I was not that motivated anyway, although I partly
   followed the activity on SDF.

   With the recent hiccups on SDF, I was thinking about where best to
   establish one's [ph|g|b]log presence to be least affected by downtime.
   Nothing's forever, though, and so one could establish a system of
   _interconnected gopherholes_ which automatically synchronize their
   contents, and publish all the locations so that people could look
   elsewhere, if one node goes down. Actually it's not restricted to blogs
   etc, but one's online presence in general.

   Of course neither the problem nor ideas to solve it are anything new.
   Think about torrents, or solutions like the [1]InterPlanetary File
   System, [2]Freenet, [3]zeronet etc. The problem with these systems is
   the requirement to install some specific client or to use some kind of
   gateway. I want a solution working with normal clients, especially for
   gopher.

   In principle, this might be accomplished by dynamic DNS or even a Round
   Robin DNS system. However, that's again a single point of failure:
   recently, some of my solutions temporarily broke because of mdns.org
   (hosted by SDF) being offline.

   In total, it boils down to "search all places where stuff could be and
   try to connect to them" which must be done either by a client (zeronet
   etc) or by the audience themselves (publish a set of entry points to
   the same content on different servers, and people try to find a working
   one). Currently, I don't want to use the former approach, and therefore
   a package for easy installation of a synchronization system seems the
   best solution. Obviously, the servers themselvesmcould well use some of
   the former systems in the background for their synchronization.

   As my [4]plog suite already contains code for git-based handling of
   source texts and publication into websites and gopher directories, it
   might be a good starting point. The final goal is an interconnected
   system of servers providing the following:
     * source texts can be injected into any running server, and after
       some hours, every other running server updates to the new content
     * conflicts, e.g new texts from different servers, are handled
       automatically (git should mostly do this already, with some
       additional script logic)
     * each server runs a web and gopher server, automatically generates
       its static pages from source texts, and may also run mailinglists
       (like already implemented in plog -- but there is a problem to
       solve, as only one e-mail per post and recipient should be sent)
     * source texts can generate plog entries, but may also update
       existing pages for managing synchronized static sites (web and
       gopher)
     * servers coming up after being offline try to find another server
       for updating themselves, and if a new server is added to the swarm,
       this information is automatically shared among the others, i.e a
       server only needs to know about a single one and will learn from it
       about the others

   Perhaps I should rewrite the plog suite; currently it's a bit messy, as
   the functional parts are rather intermingled. It might be better to
   have separate scripts or functions for (git) synchronization, source
   text conversion, publication, and mailing.

   Actually, it might even be best to completely separate the git
   synchronisation logic from all the other components, because it could
   be used for any kind of content like private repos, backups etc.

   Anyway, we'll see which goals I'll manage to implement in the near
   future!

   .:.

References

   1. https://ipfs.io/
   2. https://freenetproject.org/
   3. https://zeronet.io/
   4. https://gitlab.com/yargo/plog