Text Fragment Links in Firefox 131+

It’d been bugging me since sometime last year that Firefox didn’t do Text fragments in links.

The test case that resonated the most with me was on the Firefox Terms of Use via Information Age (IA), not scrolling or highlighting. Today, it’s still not. But that’s most likely because the “Mozilla” which was present has been dropped. So today the IA link could be better written like this one.

TLDR: As of Firefox 131, text fragment links do work, for example, here’s Roger Price BBS 069 – God’s Sovereignty. It’s awesome to see this feature come to Firefox!

Reflections through time on SSH RSA to Ed25519, rUNSWift and Neytiri

When one has been in technology as long as I have, one tends to accrue battle scars and war stories as things change, things always change.

Things like SSH on macOS historically used the cryptosystem algorithm of Ron Rivest, Adi Shamir, and Len Adleman, or RSA as its default. As it’s fundamentally just applied math, even a quarter century ago, there were clearly known attacks, at least for some keys.

Today in 2025, macOS Sequoia’s ssh-keygen program generates Ed25519 keys by default, i.e. no longer RSA.

So that means if I want to access a computer or robotics system, like a Nao V5, from the period 2014-2018, and an associated rUNSWift code release, which doesn’t support Ed25519, I may well need to know how to go back to RSA.

As the fine folks at OSXDaily noted in 2022, assuming I kept a backup of at least my private SSH key from that era (which I thankfully have), it has been done at a Terminal prompt with the command:

sudo nano /etc/ssh/ssh_config

Plus adding the following lines and saving:

HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

From context, the default username was nao. This allowed me to plug in my Ethernet cable via a USB-C adapter, and so complete:

ssh nao@neytiri.local

The state I’d left Neytiri in was likely a fresh sync of the robot soccer team’s instructions from 2018, for example there was a Python error which I fixed for myself by renaming GameController.py to GameControllerV2.py and also changing the class name accordingly. It’s nice that some things coded from that era still work, like single chest button press and wait four to seven minutes for a successful power on, double chest press to stiffen, head stroke (or type after completing SSH) to start/kill the runswift program, and a lit up red right eye if a soccer ball is detected by runswift. It’s a shame both new(ish, not even a year?) Nao batteries are no longer holding their charge, so Neytiri struggles to stand up, let alone play some real soccer. But it’s also fair to say, nothing in this world lasts forever, indeed even heaven and earth will pass away. As good as it was collaborating with B-Human as B-Swift to win the Mixed Teams 2018, and of course be part of the outright rUNSWift Grand Final in 2015, perhaps it’s time to sunset this era of history, to close a chapter, as “The end of a matter is better than its beginning”, Ecclesiastes 7:8a (NIV).

I’m only two months into this Sabbatical period of my life. That stated, I’m also reminded that, to personalise 1 Corinthians 10:31, whether I eat or drink or whatever I do, I do it all for the glory of God.

I wonder what else God has planned to change in the next quarter century?

A brief survey of virtualization on Apple Silicon M3 / Sonoma in 2024

As a Christian, I’m called to be a good steward of what I’ve been given. So while I prefer to post woodworking stuff here, I also do a lot of technology for a living, and as it was time, I recently got a shiny M3 Mac.

I’d like to boot my Ubuntu Desktop 22.04.3 LTS ISO and use it to install Ubuntu, x86-64, cross compile some legacy i386 (32-bit) software that’s not yet expensive enough to rewrite and SSH to other machines from there.

I’d generally go for something FOSS where possible because I like being able to build and debug things for myself, so I can really understand them and tend to have fewer surprises, both for myself and the people I may be called to lead.

That rules out Parallels and I think VMware Workstation, though they’re probably great options too. I also don’t like the absence of a perpetual fallback license in the event I stop educating myself or developing and just want it to work forever, as long as the older machine is still bootable. So call those Options 1 and 2, likely out.

I’ve also used Option 3, Oracle (for better or worse) VirtualBox (GPLv2 for everything that I needed, I’ve evaluated the extension pack though it never quite worked for me anyway) in the past. But the state of Apple Silicon M1, M2 and M3 is extremely unstable so I didn’t try, though it may be worth revisiting.

Option 4 was using brew.sh to install QEMU and virt-manager which I’ve also used in the past, and have found it great for running x86-64 virtualized workloads. I don’t quite understand enough about for example qemu system vs session yet. So unfortunately while there’s a workaround to virt-manager crashing immediately, I decided not to proceed for now:

virt-manager --no-fork

Option 5 was to have a look at this Andrew Cunningham article and try VirtualBuddy. I could download and install it on macOS 14 Sonoma and it has a really slick interface, but similarly, some analogue of crash occurred, this time after choosing Linux and attempting to start a VM, and with no logs or debugging message visible, that’s a dead end for now.

Option 6 again via Andrew Cunningham is UTM. My first run through I forgot to eject the disk ISO when prompted after the installer completed, so UTM went straight back to booting from that ISO, i.e. I was back at Try or Install Ubuntu. I let myself get a bit frustrated as the UTM start screen doesn’t show while a VM is running, and tried some other things briefly, but ended up reopening UTM, deleting this VM from the directory of ~/Library/Containers/UTM/Data/Documents found using the secondary/right click menu option to Show in Finder, and rerunning the install again.1

I definitely liked that it warned me Emulation mode, compared to virtualisation, will be slow, and it definitely feels sluggish compared to running bare metal Ubuntu on an Infinity O5 for work. But so did VirtualBox, before I found the 3D acceleration checkbox. As a new tool for me it’ll likely take some time to unlock the potential.

One nice thing – UTM is QEMU under the hood. Using macOS Activity Monitor and taking a sample of QEMULauncher I could see the UTM app is using QEMU, which is definitely heading in a good direction.

/Applications/UTM.app/Contents/XPCServices/QEMUHelper.xpc/Contents/MacOS/QEMULauncher.app/Contents/MacOS/QEMULauncher

I’m not sure yet how to make it aware of multiple physical cores.

For networking, I was able to configure UTM as Bridged (Advanced) and then in Ubuntu as link-local, which let me ping and SSH to a “remote” host plugged in via Ethernet cable.

Thus, touch wood, I’m in a good enough starting place now to know it’ll work, should I ever need just this Apple Silicon machine rather than an older Intel-based one. Though it needs a lot of work, multicore seems like the biggest “easy” win, to be competitive with Intel-based machines for this kind of workload.

Aside: UTM on GitHub supports iOS too, so that could be something worth playing with, should all my other machines kick the bucket – I doubt I’ll ever be short enough of things to try to do so, but who knows?

Another aside:

  1. “It’s sort of shocking how many people uninstall and then reinstall their software when things start behaving wrong, because at least they know how to do that. (They’ve learned to uninstall first, because otherwise all the broken customizations are likely to just come back).” – Joel Spolsky, Choices ↩︎

St Anne’s @ Christmas

– The Home Alone 2: Lost In New York Children’s Hospital is… St. Anne’s

– Enemy of the State (hardly a Christmas film…but it has a surprising number of moments)… has a young Jack Black playing Fiedler and saying “McClean, Baltimore, between Hood and St. Anne’s

– I visited St Anne’s Strathfield while I lived nearby for several years, they do live streams I still occasionally have the pleasure of making some time between other commitments for

Our brains are brilliant at noticing coincidences, aren’t they?

P.S. I’m sure it barely needs mentioning today, though Wikipedia is a great place to start researching almost anything, including Saint Anne.

A hardwood bench

Goal: A bench to sit on; to replace an unsafe, falling apart and badly rusted garden swing.

You cannot tell creativity,

“I would like ten of those, please.”

The OatmealEight marvelous and melancholy things I’ve learned about creativity

This is a chronicle of my somewhat creative (though arguably more on the engineering than artistic side) journey repurposing some 290x45mm KD mixed hardwood from the local timber yard, which I had around from a previously abandoned project.

This took place on and off over the last eight weeks.

To cut the shorter plank in half for the bench legs, I used the 210mm Ozito Compound Mitre Saw I’ve been using for nearly a decade now.

I flipped the piece to be cut in half a few times, and made 4 cuts which got close, but was still joined.

So I decided to go with a hand saw for that last little bit in the middle …

… what I have just learned appears to be an astroid.

(I originally thought about “inverting” the sides of a Reuleaux square for lack of a better definition – it’s not a quadrilateral because the 4 sides are a round shape).

That’s starting to look like it could become a bench!

Next challenge – joining wood. I chose dowels.

But as I suspected from my Year 7-10 woodworking …

… too many dowels is a bad idea!

This ultimately required a little improvising to plug the extra holes,

and chiselling off the excess dowel, after binding the dowels and plank with a cross-linking PVA glue, wiping away excess glue with a sponge, and letting it dry.

“… you have to build the machine that makes the machine …”

Elon Musk – Inside Elon Musk’s plan to build one Starship a week—and settle Mars

Drilling holes for the crossbeam turned out far more complicated.

As my existing dowel jig (I could probably get a better one at some point) was definitely not wide enough, I used multiple clamps and some spare wood to rig up something for it to hold on to.

This actually worked out quite well.

Looking through the hole to the destination, I actually drilled the first side dead-on target.

However, I think I properly re-learnt my lesson about dowels here (glad I didn’t try 6), even 4 points and a slight bow in the cross piece meant that the ideal spot didn’t quite line up with the actual.

To keep the main 3 planks square, I worked with the slight bow in the crosspiece as indicated by being off target center when I used a pencil to draw around and thus mark the dowel’s destination.

To test final assembly, I didn’t have a 1.2m long (or longer) clamp and they’re not cheap, so I used two short clamps to clamp two 1m long clamps together.

Sanding always takes time, especially as I do it by hand. If memory serves, 2-3 days of time.

I could probably get an orbital or belt sander, but at this stage of my life (jobless & car-less, though that may change soon, and definitely not yet home-owning) I actually kind of like keeping things as cheap (or efficient) as reasonably possible – and a ~$1 sheet of sandpaper that gets 4 usable squares is far cheaper than acquiring more power tools.

Oiling (or painting) is pretty standard – lay out a lot of newspaper to catch any excess flicks and drips.

What you can’t see here is more spare wood underneath the oiled pieces, so they don’t stick to the newspaper.

I also used a wood putty I had on hand to fill most of the holes – the exception being the very large knot. I might need to fill that in at some point as it holds water until it dries out, though I will see how it goes for now.

Though I did end up buying the last two 900mm clamps that were on special for $20 each with a small amount of cosmetic surface rust – they’re a lot less rusted than the two I inherited from my Dad.

It worked out, as I needed them to hold the long pieces together until the cross-linking PVA glue took hold.

Final mass: 27kg.

Final dimensions: 1200 mm long, 530mm high and 290mm deep.

Thank you for reading, I hope you learned something.

P.S. The crossbeam off-cut turned into something a little more creative and sparked a stack of other things I mig.

Coronavirus: [Not a] Black Swan of 2020

I agree with Damien Klassen here:

I object to the term black swan … for me a black swan is something that is not only unlikely, but [is an event] you never even thought could possibly happen, whereas this has been an event for weeks now … I think it’s an event that has been pretty well telegraphed …

Damien Klassen, Macrobusiness

Indeed Bill Gates has been warning about a pandemic for years (as I think I heard on TWiT 760 though can’t find a transcript to confirm, perhaps they can look into the BBC’s react-transcript-editor as demonstrated by James Dooley at ReactConfAU).

That minor caveat stated, when (via Vox), Sequoia makes a statement like this, one cannot help but take notice:

Having weathered every business downturn for nearly fifty years, we’ve learned an important lesson — nobody ever regrets making fast and decisive adjustments to changing circumstances. In downturns, revenue and cash levels always fall faster than expenses. In some ways, business mirrors biology. As Darwin surmised, those who survive “are not the strongest or the most intelligent, but the most adaptable to change.”

Sequoia Capital

In any case, I’m glad I didn’t buy a house or car and cancelled my Netflix subscription, leaving me with plenty of capital and time, and far freer to consider the pursuit of genuinely inspiring opportunities to do the most good in God’s world, whether they be in employment, study or otherwise, wherever or however they may arise. It’ll be interesting to see how God’s world continues to change.

The Remote Leader’s Guide to Managing a Team

Via Angel.co:

https://www.matthewbarby.com/remote-leadership/

Thoroughly agree with things like how precise communication needs to be (and how easy it is to mess up which can require much patience and forgiveness) having been fortunate to be in a globally distributed team with no timezone overlap at MongoDB (Australia, New York, Berlin), an Australia-Vietnam team at Adam & Paul, and also most recently a semi-remote Melbourne/Perth/Sydney team at Arup.

I particularly like the reminder that not all employees can work remotely from home – I’ve been known to try coworking spaces, community rooms, libraries, parks, coffee shops and even trains, though would definitely recommend a decent coworking space as soon as there’s the need to Zoom, Skype, call or chat about anything deeper than a few messages on Slack.

6 things I loved about the most impressive resume I’ve ever seen—based on 20 years of hiring

Thank you Gary Burnison.

Hopefully it helps you if stumbled across my blog and you find yourself like me today, looking to get hired.

https://www.cnbc.com/2019/06/26/most-impressive-resume-ever-based-on-20-years-of-hiring-and-interviewing.html

I can’t live up to all of this, though it’s good enough advice I remembered and was able to dig it up, and will apply what I can.

I most loved the bit about the convicted felon, wonderful to hear of someone willing to be honest, admit their past mistakes, and most importantly pick themselves up and make it clear they’re willing and able to get hired.

For me, that was I think a little simpler, like quitting the best job I’d ever had with MongoDB with no plan after the 2018 Robocup World Championship, having seen the (metaphorical) handwriting on the wall as per Daniel 5:5 and praise God having the grace to hire and train my replacement.

Where to?

God knows, I’m eager to find out!

Battlestar Galactica Corners

For the BSG corners on my about me picture, inspired by this codepen, in Firefox I used the CSS clip-path (MDN), disabled the body background image of chrome://global/skin/media/imagedoc-darknoise.png, screenshotted it then used the macOS Preview magic tool to cut out the background to get the clear alpha.

clip-path: polygon(
20% 0, 80% 0,
100% 15%, 100% 85%,
80% 100%, 20% 100%,
0% 85%, 0 15%
)
Some version of me chilling in the Hollywood Hills, shortly before my 30th birthday