Browser version numbers are a bit complicated (for server code)

Suppose, not entirely hypothetically, that you're writing code thatfor some reason wants to determine a 'browser version' from somethingand then cross-check it against other sources of browser versioninformation. Possibly you also want to notice when you're notworking with real browsers and notapply your version consistency checks to them. When you're startingout, it looks like what your code should do is return a browsername and version number. Unfortunately, this is a naive view, partlybecause of


Our problem with finding good 10G-T Ethernet switches (in 2025)

We have essentially standardizedour 10G Ethernet networking on 10G-T , whichruns over relatively conventional copper network cables. The pragmaticadvantage of 10G-T is that it provides for easy interoperabilitybetween 1G and 10G-T equipment. You can make all of your new in-wallcabling 10G-T rated and then plug 1G equipment and switches intoit because those offices or rooms or whatever don't need 10G (yet),you can


It's now a bad idea to look like a browser in your HTTP User-Agent

Once upon a time, something like the following was a perfectly decent User-Agent header string for a web crawler or a web fetching agent:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 (compatible; Yourbot; +https://some/url)

You weren't hiding, after


Shooting myself in the foot with Git by accident

Today I had a Git experience :

It has been '0' days since I hit a mysterious Git error out ofnowhere, during a completely routine 'git pull' in a repository that'sidentical with upstream:

error: fetching ref refs/remotes/origin/master failed: incorrect oldvalue provided

What should I do? What's wrong? Good luck figuring it out. Fortunatelythis is just a tracking repository, so maybe the correct answer is'delete and re-clone'.

This turned


Fake "web browsers" and their (lack of) HTTP headers: some notes

It's hopefully not news to people that there is a plague of disguisedweb crawlers that are imitating web browsers (and not infrequentlycrawling from residential IPs, through various extremely questionablemethods). However, many of these crawlers have only a skin-deepimitation of browsers, primarily done through their HTTP User-Agentheader .This creates a situation where some of these crawlers can currentlybe detected (and blocked) because they either lack entirely or havenon-browser values for other HTTP headers. I've


What an error log level should mean (a system administrator's view)

Over on the Fediverse, I had a grumpy reaction to one program'snew logging behavior :

Tell me you don't look at your logs without telling me that youdon't look at your logs: arrange to log perfectly routine events as'level=ERROR' reports.

Thank you, Prometheus Blackbox version 0.28.0, you have been voted offthe island. We will not be upgrading to you from 0.27.0. Maybe therewill be a 0.2


The FreeBSD 15 version of PF has basically caught up to OpenBSD

When we initially became interested in FreeBSD a year ago, I said thatFreeBSD's version of PF was close enough to an older version ofOpenBSD PF (in syntax and semantics) that we could deal with it.Indeed, as we've moved firewalls from OpenBSD to FreeBSD we found that most of our rulesmoved over without trouble and things certainly performed well(better than they had on OpenBSD). Things have gotten even betterwith the recent release of FreeBSD 15, as covered in Updates tothe


The systemd journal, message priorities, and (syslog) facilities

If you use systemd units or systemd-run to conveniently captureoutput from scripts and programs into the systemd journal, one ofthe things that it looks like you don't get is message prioritiesand (syslog) facilities. Fortunately, systemd's journal support isa bit more sophisticated than that.

When you print out regular output and systemd captures it into thejournal, systemd assigns it a default priority that's set with SyslogLevel= ;this is normally 'info', which is a good default choice


String formatting with named format arguments and format flexibility

Suppose, not entirely hypothetically, that you have a tool thatprints out records (one per line) and each record has a bunch ofinformation associated with it, which you print out in columns.You'd like to provide a way for people to control which columns ofinformation are printed for the records. If there's only a fewoptions, maybe you can do this with a few different format stringsusing the traditional "%s %s %s" approach of positional formatting(because you'


The annoyances of the traditional Unix 'logger' program

The venerable 'logger' command has been around so long it's partof the Single Unix Specification (really, logger — log messages ).Although syslog(3) is in 4.2 BSD (along with syslog(8) ,the daemon), it doesn't seem to have been until 4.3 BSD that we got logger(1) ,with more or less the same arguments as the POSIX version.Unfortunately, if you want to do more than throw messages into yoursyslog and