recutils exploration

ever since

Tomasino

posted about recutils

, I have been intrigued. In my

2022-06-06 phlog post

, I stated I had an idea to generate my gophermaps via a recutils database. This wasn't such a new idea for me, back in 2017 this gopherhole was run on a "CMS" system I wrote in C that fed from a MySQL database. This was overkill, and of course, ended up being a pain in the ass.

giving it a shot

The main thing that made it a pain in the ass, was I never got around to writing a frontend for the database. I used the PHPMySQL frontend to edit my site the entire time I used the CMS system. The PHPMySQL instance was only hitable from my internal network, and at the time that meant I used it via VNC most of the time.

Using recutils, well it's a damn text file. I ssh into my server often and can use the recutils utils, sed, awk, vim, etc. to make changes. Simple scripts can easily turn any gophermap into a recfile - gophermaps are tab delimited files already made up of fields.

I wrote a cgi-bin script that uses the $QUERY_STRING to receive the name of a gophermap (strips all non-alpha characters) and then it recsels the matching entries and feeds the results to a recfmt template as described in my phlog entry above (but a lot less kludgily).

I really like that everything is in one central file. I do not need to navigate all over to make changes to menu structure. Another plus is consistent look - I have the main gophermap (itself a script feeding from the recfile) and the page cgi script both displaying the same header file. Change in one place and it is reflected instantly everywhere,

sitelog

I also went ahead and converted my sitelog into a recfile. Recfiles only sort ascending. This posed the issue of how to pull just the latest sitelog entry to display on the main gophermap. I came up with this:

recsel -n $(echo $(grep Date /path/to/sitelog.rec | wc -l)-2 | bc) -P Date,Log /path/to/sitelog.rec

Okay, not everything is less kludgey, but I'm working on it.