Arena Unix II swim cap

Speaking of surprises, I wasn’t aware that AT&T had invested in swim cap technology! This was in a newsletter I got this morning, emphasis added:

We revamped our classic fabric swim cap with gorgeous new colours and an updated logo stamp. Unix II is the perfect headcover for fitness swimming and total comfort. This style is made of three panels of fabric for better stretch and fit. One of the easiest swim caps to put on in the world, take the fuss out of getting pool ready.

It almost looks like a giant TrackPoint:

Photo of a navy-blue Arena swimcap

Some other utilities that appeared in Unix II include echo(1) and stty(1), though it remains to be seen how effective either of these would be at covering your head.

They also have a Long Term Support range for men and women as well that match this Unix headgear, though at best these could be considered Unix-like.

Our Learn To Swim (LTS) swim products provides the essentials to empower anyone new to swimming. These core training suits provide a comfortable and easy introduction to swimming without the investment.

The men’s costumes are also referred to jammers, which presumably you’d want to use ZFS with then to prevent data loss.


A discussion with Allan Jude on Twitter lead me to read up on NNTP on Wikipedia again for nostalgic feels, where I made a shocking discovery:

The Network News Transfer Protocol (NNTP) is an application protocol used for transporting Usenet news articles (netnews) between news servers and for reading and posting articles by end user client applications. Brian Kantor of the University of California, San Diego and Phil Lapsley of the University of California, Berkeley wrote RFC 977, the specification for the Network News Transfer Protocol, in March 1986. Other contributors included Stan O. Barber from the Baylor College of Medicine and Erik Fair of Apple Computer.

NNTP is… my age? Does that make NNTP young, or me old? Let’s not think about it too much.

Update: I read the original RFC, and it says its February 1986, not March. So NNTP is older than me after all.

Writing without backpacks or spaces

I wrote this last Friday but forgot to publish it. This may have been a good thing, but I’ll let you decide.

Back when I was studying in Adelaide I’d start writing a post with absolutely no idea what it was about or where it’d go. I wouldn’t be allowed to hit backpack backspace and delete, nor could I go back and change any words until the end when spelling corrections were permitted. I wouldn’t say the results were ever particularly good, insightful, or a third word, but it felt oddly liberating and…

There’s a new song playing at this cafe I don’t recognise; the singer keeps saying Roxanne is in Malbu and only wants to do is party all night long. I suppose she didn’t take what Sting sang to heart. That may be one of the oldest person things I’ve said here.

…interesting to force myself to write.

I’ve only ever used Macs for half the time, and I grew up on DOS and Windows 3.1 with IBM keyboard layouts, but the ENTER key will always be RETURN to me. Even on my FreeBSD tower I have to swap the Windows/Command and Alt keys or they’re in the wrong place. It makes far more sense to have the Command key adjacent to the spacebar because that’s where your thumbs can more easily reach them. I mention this because I hit the RETURN key after that previous line, and I get the distinct impression another is coming.

Reach is something I’ve been most humbled by since pontificating online. I remember when I first blogged something that generated feedback: it was a gentleman in Moscow of all places. It gave me an oddly fuzzy feeling knowing someone on the other side of the world was reading my words and, more importantly, felt them worthy of comment. I probably should import my old WordPress comments from 2005ish here at some point.

I wonder if centipedes are jealous of millipedes? That went on Twitter first, but I’m trying to incorporate more of what I write there here as well. My blog might be humble and rather silly, but it’s more permanent than social networks. And besides, both have the letter D.

Using spreadsheets as databases

I tweeted this yesterday:

Rule #1: Don’t use a spreadsheet as a database

Rule #2: Definitely don’t use a spreadsheet as a database

Rule #3: Named ranges and AutoFilters are awesome for use as a quick database (but you didn’t read that)

@djackman replied:

Also, if you’re a multibillion dollar Australian corporation, don’t run your distribution centre database on bloody Microsoft Access.

And @markashworth (private account):

True story. Some very big (huge) companies do this and they use email to distribute their ‘databases’

I’m sure there must be a German word for cry-laughter, when you’re both bemused and sad at the state of things. It needs to describe something that’s both awful, and utterly believeable.

Then @michaeldexter:


I poorly summarised in a tweet, but I use them heavily to track my own collections of pointless stuff. Like LaserDiscs, vintage IT parts, and personal projects. It’s great to be able to filter by whether I’m selling something, the condition of a part, whether things need replacing, or even where something is.

In a past life I feel like I would have used something like FileMaker, or even SQLite3 with a simple Perl-based CLI. But spreadsheets work fine.

When junk blogs stifle troubleshooting

There’s a particular type of junk blog out there that regurgitates posts from other blogs without any original research. They’re not as blatant as those that merely scrape RSS feeds and republish, but they still lift entire posts wholesale and only make token efforts to change the content. I’ve seen blogs even use the same screenshots, right down to the same mis-cropped window or blatant watermark, albeit with a few more JPEG artefacts from several steps of lossy compression along the way. This is unfortunately easy to do with instructional material, as the steps involved in configuring something will necessarily follow a predictable set of steps.

Plagiarism is obviously unethical, but almost as irritating is getting the same repurposed results when you’re trying to solve a problem. If it didn’t help the first time, having it appear another dozen times is a recipe for losing hair.

As an example, it’s been a while since I’ve had to boot Windows Server in safe mode. So I was looking online about how to do it. The first pages of search results are showed the exact same three steps:

  1. Using msconfig after Windows has booted
  2. Using Windows Settings after Windows has booted
  3. Using bcdedit after Windows has booted

See anything wrong with these? If you’re attempting to boot in safe mode, it’s almost certainly because the damn thing won’t boot. Being told once to change a tyre while your car is running is strange. Being told ten times is bananas.

I’m tempted to create a blocklist to feed to uBlock Origin or ABP to filter out these sites.

Owner-occupiers driving house demand

Greg Jericho in the Guardian:

House prices remain a major issue of the economy as once again we see prices in Sydney and Melbourne go up after significant falls. For now the market is being driven by owner-occupiers, and investors remain largely absent. That is good news for first-home buyers who are make up a greater share of buyers than at any time since the GFC.

As it should be. Houses are for living, not speculating. Every property investor has deprived a family of a home they can afford to buy. If you disgaree and think we should all be renters, then by all means advocate for amendments to tenancy legislation to bring Australian states in line with Western Europe.

Smartphone book readers on the train

I was getting the peak-hour train to work this morning, carrying my regular backpack and a new toaster for the office. I was catching up on the release notes for NetBSD 9.0, and playing a little Fate/Grand Order before the latest event finishes. This was a difficult balancing act at first, but I managed to find a corner to sit the bags between stations.

Then I noticed something that if you asked me before jumping on the train I would have given a probability of zero: everyone standing around the same part of the carriage vestibule as me were looking at their phones, but as far as I could tell all of them were reading books. There must have been a dozen of us.

Somehow I found this encouraging. Social media platforms basically treat us like addicts at this stage, so to see people eschewing—gesundheit—them was a pleasant surprise. The sight of it also made me feel calmer by proxy in a weird way, like I was in a hushed library on wheels hurtling through a tunnel and across the Harbour Bridge.

I might even finish my pile of Steven Pinkers and Japanese Light Novels on the train.

What started as investigating /opt on FreeBSD

Last month I wrote a post about symlinking svnlite(1) to /opt/bin/svn on stock FreeBSD, thus allowing Ansible’s subversion module to checkout a repository in a playbook I was writing. This lead to more research into this file system structure than I expected.

Did I get this from Solaris?

This post was SPARC’d—hah—from a discussion with two other Australian BSD gentleman on The Twitters last week. This wasn’t the first awful Solaris joke I’ve made today.

Here’s Ben Woods, whom I had the pleasure of meeting at the FreeBSD miniconf last month at

/opt/ ???? I feel dirty :)

And Jason Tubnor, whom I met at AsiaBSDCon:

Old skool Solaris admins still do

illumos icon

I now felt dirty, and was questioning whether I picked up the /opt habit from using Solaris myself. I did use SunOS briefly at when studying at UniSA, and OpenSolaris was my introduction to ZFS back in the day. I even ran the first closed-source Solaris on my HP Microserver after Oracle sank their teeth into Sun. But I’m fairly sure my usage predates these.

My justification had always been about preventing package manager collisions with my own manually installed tarballs and scripts. The standard place for these is generally /usr/local, but that’s where the BSDs put their packages by default, and macOS Homebrew puts brews. More on that later in this post.

Checking out /opt on the BSDs

This rote behaviour got me curious, so I decided to do a bit of digging and checked out the hier(7) manpage on various operating systems, starting with everyone’s favourites.

Interesting! So wherever I picked this up, it was outside the BSDs. It’s starting to look like it might have been a Solaris-ism after all.

GNU/Linux does mention it

systemd’s file-hierarchy(7) page doesn’t include /opt. But the Linux manpage does mention /opt/, and as a bonus didn’t even tell me to look in the GNU Info page instead. It also mentions another use at the start I didn’t recognise:

/etc/opt Host-specific configuration files for add-on applications installed in /opt.

/opt This directory should contain add-on packages that contain static files.

I use /opt with separate directories for each package I’m installing, so my config would be in /opt/$PACKAGE/etc not in /etc/opt. And I’d put consolidated config into /opt/src.

The manpage also mentioned the Linux Filesystem Hierarchy Standard, which sure enough describes /opt in section 3.13, last updated in 2015:

/opt is reserved for the installation of add-on application software packages. A package to be installed in /opt must locate its static files in a separate /opt/<package> or /opt/<provider> directory tree, where is a name that describes the software package and <provider> is the provider’s LANANA registered name.

The Rationale section has some interesting history:

The use of /opt for add-on software is a well-established practice in the UNIX community. The System V Application Binary Interface [AT&T 1990], based on the System V Interface Definition (Third Edition), provides for an /opt structure very similar to the one defined here.

The Intel Binary Compatibility Standard v. 2 (iBCS2) also provides a similar structure for /opt.

Generally, all data required to support a package on a system must be present within /opt/<package>, including files intended to be copied into /etc/opt/<package> and /var/opt/<package> as well as reserved directories in /opt.

The minor restrictions on distributions using /opt are necessary because conflicts are possible between distribution-installed and locally-installed software, especially in the case of fixed pathnames found in some binary software.

Those possible conflicts are also another reason why I prefer running FreeBSD over other non-BSD operating systems. Keeping installed packages and the base system separate prevents whole classes of problems, and makes the system easier to maintain.

The System V Interface Definition

I was invested in researching this hierarchy, so I went to the source as described in the above Rationale section and downloaded the System V Application Binary Interface documentation from… SCO. That and Sun Microsystems break my heart. Under the File System Stricture and Contents section on page 189:

The directory /opt of the / file system is the point of access to the /opt subtree. This directory subtree contains files installed by add-on application packages. The following describes the structure of the /opt subtree:

  • /opt – The top directory of the /opt subtree.

  • /opt/pkg/bin – Executable files provided by application packages and invoked directly by users.

  • /opt/pkg – Where pkg is the abbreviated name of an add-on software package, contains all the static files installed on the system as part of that package.

Filesystem Hierarchy Standard

I wrote this post a fortnight ago, but left it in drafts so I could clean up the formatting. Since then I was reading this thread on the Gentoo forums about why Portage defaults to /usr, given it’s stated design inspiration was the FreeBSD port system that uses /usr/local. This lead to a PDF of the latest Filesystem Hierarchy Standard. Page 12 stated:

/opt is reserved for the installation of add-on application software packages. A package to be installed in /opt must locate its static files in a separate /opt/<package> or /opt/<provider> directory tree, where <package> is a name that describes the software package and <provider> is the provider’s LANANA registered name.

This to me is key, and a good place to end this post:

Distributions may install software in /opt, but must not modify or delete software installed by the local system administrator without the assent of the local system administrator.


The history for where I started using this is no less vague than when I started, but I love this kind of research. It gets me thinking what other *nix assumptions I’ve been living under over the last decade.

Am I using /opt correctly? I’d say at best, maybe.

STRICT_ALL_TABLES now default in MariaDB

Some tables joining. HAHA! Hah! Hah.

I’ve used MySQL and its offshoots in tandem with Postgres for most of my career and for personal projects, but with the fairly large caveat that it’s running in this mode, defined in my.cnf:

sql-mode = "STRICT_ALL_TABLES"

From the MariaDB docs:

Strict mode. Statements with invalid or missing data are aborted and rolled back. For a non-transactional storage engine with a statement affecting multiple rows, this may mean a partial insert or update if the error is found in a row beyond the first.

I never had the data loss or issues that Postgres friends warned me about, even with large-scale deployments. But I will readily admit that not accepting this strict mode by default made me nervous. Enabling it never made difference in operation, so why not?

(That’s not strictly speaking true, I trialled a few self-hosted blog platforms and wikis back in the day that stopped having problems when I turned this off. But that told me that I shouldn’t be using them).

I noticed recently though that this has changed:

With strict mode set (default from MariaDB 10.2.4), statements that modify tables (either transactional for STRICT_TRANS_TABLES or all for STRICT_ALL_TABLES) will fail, and an error will be returned instead. The IGNORE keyword can be used when strict mode is set to convert the error to a warning.

This is great news, and I’m only a few years late celebrating. The Tyranny of the Default means people weren’t running in this mode before. Being default means more people will be.

3801 is back in Thirlmere

Play 3801 Return to Thirlmere 24 01 2020

I watched so many VHS tapes of this iconic steam locomotive growing up. Perhaps the most memorable was when it ran with the Flying Scotsman 4472 around Australia for the Bicentennial.

She’d been having boiler problems for many years, so it was such a delight to see her steaming again under her own power. Clara and I will need to head back there to check her out once she’s been repainted.