= Gopher Logging in Eleven Lines of Shell =

Writing today's entry is a bit tricky because I'm writing it with
the help of the very thing I'm writing about; describing the
thing with the thing.  It feels a little like "Drawing Hands",
the MC Escher lithograph where a pair of hands draws each other
into existance.

As the title suggests, I finally broke down and scripted these
phlog entries using a shell script.  I've always said "make
the computer do the work", but I often get myself into trouble
by putting the cart before the horse: inventing automation for
things I haven't done yet even once manually.  Not this time;
I waited until I had a whole three entries under my belt before
having my first go at automation.

A whole three!  I'm practically an old hand, now.

Further, I practiced great restraint in the automation.
In fact, I turned the restraint into a bit of a challenge:
just how *little* programming would yield a phlog entry generator?

So here are the eleven lines:

 today.sh
------------------------------------------------------------------
       #!/bin/sh
       title=$1
       date=$(date +%Y-%m-%d)
       fname="$date-$(echo "$title" | tr ' ' '-')"
       srcpath="src/phlog/$fname"
       if [ ! -f $srcpath ]; then echo "= $title =" >> $srcpath; fi
       vim $srcpath
       sed "s/<phlog_updated>/$date/" src/gophermap > publish/goph...
       fmt -w67 $srcpath > publish/phlog/$fname
       scp publish/gophermap $sdf:gopher/
       scp publish/phlog/$fname $sdf:gopher/phlog/
------------------------------------------------------------------

To create this entry, I typed (let's see...CTRL-Z...)

       $ ./today.sh "Gopher Logging in Eleven Lines of Shell"

Which created the file you're now reading and wrote the title at
the top.  As soon as I finish editing this, it will pass the file
through 'fmt' to reflow the paragraphs to a mainframe-worthy 67
columns, and then upload the result to my Gopher space on SDF.org.

The neat bit, as you may have noticed above, is that I have also
turned my gophermap file into an ad-hoc template by putting a
placeholder on this line:

       Last updated: <phlog_updated>

Which is replaced by the 'sed' command with the current date.
The new gophermap is also written and uploaded.

It was quick and practically effortless.  Shell scripts would
suck if they weren't so insanely productive.

Here's what the structure looks like:

       dave@wizard~/d/proj/sdf/gopher$ tree
       .
       ├── publish
       │   ├── gophermap
       │   └── phlog
       │       ├── 2018-08-09-First-Post
       │       ├── 2018-08-10-The-Logging-Habit
       │       └── 2018-08-12-Weekend-Tech-Scramble
       ├── src
       │   ├── gophermap
       │   └── phlog
       │       ├── 2018-08-09-First-Post
       │       ├── 2018-08-10-The-Logging-Habit
       │       ├── 2018-08-12-Weekend-Tech-Scramble
       │       └── 2018-08-13-Gopher-Logging-in-Elev...
       └── today.sh

       4 directories, 10 files

As soon as I save this, the new entry will end up in the publish/
directory with the rest.

I doubt my Gopher software will remain a mere eleven lines for
long.  But for now, I'm reveling in the minimalism.  I'll try
to hold off on complexity for as long as I can.

Oh, and I must add that I would absolutely be using 'rsync', but
it turns out that you have to be a MetaARPA member on SDF to have
permission to use it.  Thus the two 'scp' calls.  I could use 'scp
-r' to recursively copy everything in publish/, but that would
just be wasteful, especially when I get more content up here.

                           *   *   *

It was very nice meeting some of you on IRC (irc.sdf.org) on
the #gopher channel.

This is a very warm little community so far and I feel very much
at home here in my little burrow.

Good night my fellow rodents!


                           *   *   *

Next morning update: Naturally there was a mistake in one of the
"eleven lines" and my script happily published the *unformatted*
version of the entry.  My appologies to anyone who tried to
read it and found the text flowing off the screen.  I knew I
should have tested it, but it was late at night...which led to
bad descisions...which is why I have a strict policy about not
doing critical things when I am tired.  I've corrected the script
(and the copy of it above).  We'll see if I got it right when
I push out today's entry. :-)