# recutils exploration

*Entered: in emacs on GPD Pocket X7*
*Date: 20230824*

## ever since

Tomasino [posted about recutils][1], I have been
intrigued. In my [2022-06-06 phlog post][2], 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.

[1]: https://labs.tomasino.org/gnu-recutils/
[2]: gopher://1436.ninja/0Phlog/20220606.md

## 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.