OFFLFIRSOCH thoughts and observations
-------------------------------------

Okay, a little later than expected, but as promised, here's a quick
write up some thoughts and observations arising from the (IMHO)
very successful first edition of the annual OFFLine FIRst SOftware
CHallenge in March.  It's not such much specific observations of
submitted programs, most of which I freely I admit I haven't yet
tried to run, more like stuff that is relevant to a hypothetical
small future community of people who might like to spend time
thinking about and writing this style of software.  Whether or
not OFFLFIRSOCH will help crystalise such a community, I dunno.
I'll be pleased if it does, but not devastated if it doesn't.

One important point which can't be emphasised enough is that such
a community need not and ought not begin its work from scratch.
OFFLFIRSOCH really underscored to me that there are valuable tools
out there with really low awareness.  I got emails from people
who have been computing in the *nix/FOSS sphere for decades who
said they'd never heard of the `units` tool which I mentioned
in the OFFLFIRSOCH announcement.  Matto built his Goodreads.com
replacement tool on top of GNU `recutils`, which I had never
heard of.  OFFLFIRSOCH-observer adiabatic wrote[1] "if you have
programming chops, you may want to consider improving an existing
program before making one of your own", which is excellent advice.
OFFLFIRSOCH needn't be a NIH club or wheel reinventors.

It's not just crusty old classic stuff which isn't as well known or
as well used as it ought to be.  Bandali's OFFLFIRSOCH entry made
use of `fzf`, a "command line fuzzy finder" which allows easy and
interactive selection of an option from a list via incremental
filtering of partial matches.  This is exactly the kind of
functionality which makes search engine extensions so attractive -
you don't need to know the exactly correct spelling of a city name
to find out what the current time is there, if you get it roughly
right, Google will "know what you mean".  Offline tools designed to
replace these extensions can benefit tremendously from replicating
this interface.  I had no idea there were command-line tools out
there designed as reusable modular components for doing this kind
of thing.  Are there others?  OFFLFIRSOCH folks ought to know about
them and ought to write tools in such a way that they work nicely
with them.  If you know of any, let me know and I'll mention then
in an update here.

My final thought is around standardising on some environment
variables.  There are standardised variables out there, like
$TZ (which my `city` tool leverages for quick and easy timezone
conversions using the `date` tool), and, perhaps the most well
known case, $LOCALE, which programs can use to determine aspects
of their behaviour.  My `city` tool doesn't do any distance
calculations when you give it the name of a single city, but of
course it would be possible for it (and other tools) to be aware
of the user's home city via an environment variable, and then it
could also tell you the distance of a single city from your home
by default.  It could also support via a different environment
variable knowing the user's home latitude and longitude rather than
city name.  This latter could be useful for other offline tools,
such as one for calculating local sunrise and sunset times, plus so
many other things that I suspect such an environment variable must
already be defined out there somewhere.  I'd also like to rely on
an environment variable for toggling the output units between SI,
US and UK (I think those last two are distinct here, both would
want distances in miles but elevations should be in feet or meters
respectively, right?), rather than having to clutter up the code
with logic to parse --units and -u options.  This is something
which I feel ought to be designed carefully for wide reuse.  `units`
recognises a $UNITS_SYSTEM variable but it's doing something a bit
fancier than this and doesn't appear to be applicable here.  If you
know of well-defined and widely used environment variables which
would be relevant to software which was written for OFFLFIRSOCH
this year or which you'd like to see written in future years,
let me know and I'll mention them in an update here.

[1] gemini://gemini.circumlunar.space/users/adiabatic/scrawlspace/2024/