Mastodon has really taken off this month, as a result of Twitter collapsing.
The instance I run with Colin Wright, mathstodon.xyz, has grown from about a thousand active users to just over 5,000 as I write.
There are lots of people running small Mastodon instances who suddenly need to support lots more activity than they're used to.
I've had to learn a lot about making a webserver run at scale, so I thought it would be worth writing down what I've learnt.
I didn't take proper notes while fixing things, so I've probably forgotten some important non-obvious stuff.
This is just the things that stuck in my mind recently.
Until now, we'd been stuck hanging on to support for Internet Explorer 11, but it seems to have finally faded away into insignificance.
So we needed a new target for compatibility.
We agreed that aiming for compatibility with 95% of devices in use would be a reasonable target.
I have been using caniuse.com to check individual features against their usage stats.
It's a really useful site!
But our policy shouldn't just be "any feature supported by 95% of browsers can be used": if two features each have 95% support, the set of browsers supporting both features could be anything between 95% and 90%.
With more features, the intersection of all those sets could end up being much lower than our target, and make Numbas inaccessible for a significant number of people.
I looked around for something that would let me specify a collection of features and see what percentage of browsers support them all.
I'm sure it exists, but I couldn't find it, so I spent a happy day making it.
I gathered MDN's compatibility data and caniuse.com's usage data, and presented it as a massive searchable tree of features you can tick off.
The other half of the screen shows you which browsers support all of the selected features, and their relative usage and release dates.
For each browser, you're shown which features force that particular version, so you know what to drop in order to be supported by older versions.
I've realised that I have to be quite careful about which features I tick when using this tool, particularly with respect to CSS: browsers usually silently ignore CSS rules that they don't support, so I should only tick features that are absolutely required for the page to function.
There's a function to download the set of selected features so you can documente what your project requires.
I haven't added this yet, but next time I need to do this job I'll add a feature to load in that file, so I don't have to start again from scratch!
Befunge is a classic esoteric programming language.
The idea is that it's a bit like a Turing machine, but instead of the instruction pointer moving along a one-dimensional tape, it moves around a two-dimensional grid.
A happy image occurred to me of the instruction pointer as a tractor, driving around a field.
So I decided to make it happen!
I found a really nice pixel art editor called Pixelorama, which I used to draw a v v shonky tractor, patches of grass, and bales of hay representing numbers on the stack.
The controls were more complicated than I expected.
I wanted everything to feel as "in the world" as possible, so the program should be edited by interacting with the graphics rather than typing in a code box.
I ended up giving the caret a direction, so it's just as easy to type upwards or backwards as it is left-to-right.
To avoid having a "reset" button, you can just pick the tractor up and move it, and right-click to empty the trailer.
Other Life stuff came up before I was completely finished with it, but I'm quite happy with my cute Turing-complete tractor.