Of all the discussions I’ve ever been involved with on the subject of religion, the one I’m proudest of was perhaps also one of the earliest.
Let me tell you about a time that, as an infant, I got sent out of my classroom because I wouldn’t stop questioning the theological ramifications of our school nativity play.
I’m aware that I’ve got readers from around the world, and Christmas traditions vary, so let’s start with a primer. Here in the UK, it’s common1
at the end of the school term before Christmas for primary schools to put on a “nativity play”. A group of infant pupils act out an interpretation of the biblical story of the birth of
Jesus: a handful of 5/6-year-olds playing the key parts of, for example, Mary, Joseph, an innkeeper, some angels, maybe a donkey, some wise men, some shepherds, and what-have-you.
Maybe they’re just higher-budget nowadays, or maybe I grew up in a more-deprived area, but I’m pretty sure than when I was a child a costume consisted mostly of a bedsheet if you were
an angel, a tea-towel secured with an elastic band if you were a shepherd, a cardboard crown if you were a king, and so on. Photo courtesy Ian Turk.
As with all theatre performed by young children, a nativity play straddles the line between adorable and unbearable. Somehow, the innkeeper – who only has one line – forgets to
say “there is no room at the inn” and so it looks like Mary and Joseph just elect to stay in the barn, one of the angels wets herself in the middle of a chorus, and Mary, bored
of sitting in the background having run out of things to do, idly swings the saviour of mankind round and around, holding him by his toe. It’s beautiful2.
I was definitely in a couple of different nativity plays as a young child, but one in particular stands out in my memory.
“Let us go now to Bethlehem. The son of God is born today.”
In order to put a different spin on the story of the first Christmas3, one
year my school decided to tell a different, adjacent story. Here’s a summary of the key beats of the plot, as I remember it:
God is going to send His only son to Earth and wants to advertise His coming.
“What kind of marker can he put in the sky to lead people to the holy infant’s birthplace?”, He wonders.
So He auditions a series of different natural phenomena:
The first candidate is a cloud, but its pitch is rejected because… I don’t remember: it’ll blow away or something.
Another candidate was a rainbow, but it was clearly derivative of an earlier story, perhaps.
After a few options, eventually God settles on a star. Hurrah!
Some angels go put the star in the right place, shepherds and wise men go visit Mary and her family, and all that jazz.
So far, totally on-brand for a primary school nativity play but with 50% more imagination than the average. Nice.
What the Meteor Strike of Bethlehem lacked in longevity, it made up for in earth-shattering destruction.
I was cast as Adviser #1, and that’s where things started to go wrong.
The part of God was played by my friend Daniel, but clearly our teacher figured that he wouldn’t be able to remember all of his lines4 and expanded his role into three: God, Adviser #1, and
Adviser #2. After each natural phenomenon explained why it would be the best, Adviser #1 and Adviser #2 would each say a few words about the candidate’s pros and cons,
providing God with the information He needed to make a decision.
To my young brain, this seemed theologically absurd. Why would God need an adviser?5
“If He’s supposed to be omniscient, why does God need an adviser, let alone two?” I asked my teacher6.
The answer was, of course, that while God might be capable of anything… if the kid playing Him managed to remember all of his lines then that’d really be a miracle. But I’d
interrupted rehearsals for my question and my teacher Mrs. Doyle clearly didn’t want to explain that in front of the class.
But I wouldn’t let it go:
“But Miss, are we saying that God could make mistakes?”
“Couldn’t God try out the cloud and the rainbow and just go back in time when He knows which one works?”
“Why does God send an angel to tell the shepherds where to go but won’t do that for the kings?”
“Miss, don’t the stars move across the sky each night? Wouldn’t everybody be asking questions about the bright one that doesn’t?”
“Hang on, what’s supposed to have happened to the Star of Bethlehem after God was done with it? Did it have planets? Did those planets… have life?”
In the end I had to be thrown out of class. I spent the rest of that rehearsal standing in the corridor.
And it was totally worth it for this anecdote.
Footnotes
1 I looked around to see if the primary school nativity play was still common, or if the
continuing practice at my kids’ school shows that I’m living in a bubble, but the only source I could find was a 2007 news story that claims that nativity plays are “under threat”… by The Telegraph,
who I’d expect to write such a story after, I don’t know, the editor’s kids decided to put on a slightly-more-secular play one year. Let’s just continue to say that the
school nativity play is common in the UK, because I can’t find any reliable evidence to the contrary.
2 I’ve worked onstage and backstage on a variety of productions, and I have nothing but
respect for any teacher who, on top of their regular workload and despite being unjustifiably underpaid, volunteers to put on a nativity play. I genuinely believe that the kids get a
huge amount out of it, but man it looks like a monumental amount of work.
3 And, presumably, spare the poor parents who by now had potentially seen children’s
amateur dramatics interpretations of the same story several times already.
5 In hindsight, my objection to this scripting decision might actually have been masking
an objection to the casting decision. I wanted to play God!
6 I might not have used the word “omniscient”, because I probably didn’t know the word
yet. But I knew the concept, and I certainly knew that my teacher was on spiritually-shaky ground to claim both that God knew everything and God needed an advisor.
Once all the matches have been burned, you can’t use them to light any more fires. It’s not the best metaphor, but it’s the one you’re getting.
If I were anybody else, you might reasonably expect me to talk about work-related burnout and how a sabbatical helped me to recover from it. But in a surprise twist1, my recent brush with burnout came during my sabbatical.
Somehow, I stopped working at my day job… and instead decided to do so much more voluntary work during my newly-empty daytimes – on top of the evening and weekend volunteering
I was already doing – that just turned out to be… too much. I wrote a little about it at the time in a post for RSS subscribers only, mostly
as a form of self-recognition: patting myself on the back for spotting the problem and course-correcting before it got worse!
When I got back to work2,
I collared my coach to talk about this experience. It was one of those broadening “oh, so that’s why I’m like this”
experiences:
The why of how I, y’know, got off course at the end of last year and drove myself towards an unhealthy work attitude… is irrelevant, really. But the actual lesson here that I took from
my sabbatical is: just because you’re not working in a conventional sense doesn’t make you immune from burnout. Burnout happens when you do too much, for too
long, without compassion for yourself and your needs
I dodged it at the end of November, but that doesn’t mean I’ll always be able to, so this is exactly the kind of thing a coach is there to help with!
Footnotes
1 Except to people who know me well at all, to whom this post might not be even remotely
surprising.
2 Among the many delightful benefits to my job is a monthly session with my choice of
coach. I’ve written a little about it before, but the short of it is that it’s an excellent perk.
Their inclusion of non-news content such as plugs for iPlayer and their apps,
Their repeating of identical news stories with marginally-different GUIDs, and
All of the sports news, which I don’t care about one jot.
Well, it turns out that some people want #3: the sport. But still don’t want the other two.
Some people actually want to read this crap, apparently.
I shan’t be subscribing to this RSS feed, and I can’t promise I’ll fix it if it gets broken. But if “without the crap, but with the sports” is the way you like your BBC News RSS feed,
I’ve got you covered:
What do you reckon? Is he trying to go for a domination victory without ever saying “MY THREATS ARE BACKED BY NUCLEAR WEAPONS!”? His track record shows that he’s arrogant enough to
think that the strategy of simply renaming things until they’re yours is actually viable!
After I saw Mexico’s response to Google following Trump’s lead in renaming the Gulf of Mexico, this stupid comic literally
came to me in a dream.
Adapts screenshots from Sid Meier’s Civilization (1991 DOS version), public domain assets from
OpenGameArt.org, and AI-assisted images of world leaders on account of the fact that if I drew pixel-art world leaders without assistance then
you’d be even less-likely to be able to recognise them.
I’ve a notion that during 2025 I might put some effort into tidying up the tagging taxonomy on my blog. There’s a few tags that are duplicates (e.g.
ai and artificial intelligence) or that exhibit significant overlap (e.g. dog and dogs), or that were clearly created when I
speculated I’d write more on the topic than I eventually did (e.g. homa night, escalators1,
or nintendo) or that are just confusing and weird (e.g. not that bacon sandwich picture).
One part of such an effort might be to go back and retroactively add tags where they ought to be. For about the first decade of my blog, i.e. prior to around 2008, I rarely used tags to
categorise posts. And as more tags have been added it’s apparent that many old posts even after that point might be lacking tags that perhaps they ought to have2.
I remain sceptical about many uses of (what we’re today calling) “AI”, but one thing at
which LLMs seem to do moderately well is summarisation3. And isn’t tagging and categorisation only a stone’s throw away from
summarisation? So maybe, I figured, AI could help me to tidy up my tagging. Here’s what I was thinking:
Tell an LLM what tags I use, along with an explanation of some of the quirkier ones.
Train the LLM with examples of recent posts and lists of the tags that were (correctly, one assumes) applied.
Give it the content of blog posts and ask what tags should be applied to it from that list.
Script the extraction of the content from old posts with few tags and run it through the above, presenting to me a report of what tags are recommended (which could then be coupled
with a basic UI that showed me the post and suggested tags, and “approve”/”reject” buttons or similar.
Extracting training data
First, I needed to extract and curate my tag list, for which I used the following SQL4:
SELECTCOUNT(wp_term_relationships.object_id) num, wp_terms.slug FROM wp_term_taxonomy
LEFTJOIN wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id
LEFTJOIN wp_term_relationships ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
WHERE wp_term_taxonomy.taxonomy ='post_tag'AND wp_terms.slug NOTIN (
-- filter out e.g. 'rss-club', 'published-on-gemini', 'dancast' etc.-- these are tags that have internal meaning only or are already accurately applied'long', 'list', 'of', 'tags', 'the', 'ai', 'should', 'never', 'apply'
)
GROUPBY wp_terms.slug
HAVING num >2-- filter down to tags I actually routinely useORDERBY wp_terms.slug
Many of my tags are used for internal purposes; e.g. I tag posts published on gemini if they’re to appear on gemini://danq.me/ and
dancast if they embed an episode of my podcast. I filtered these out because I never want the AI to suggest applying them.
I took my output and dumped it into a list, and skimmed through to add some clarity to some tags whose purpose might be considered ambiguous, writing my explanation of each in
parentheses afterwards. Here’s a part of the list, for example:
I used that list as the basis for the system message of my initial prompt:
Suggest topical tags from a predefined list that appropriately apply to the content of a given blog post.
# Steps
1. **Read the Blog Post**: Carefully read through the provided content of the blog post to identify its main themes and topics.
2. **Analyse Key Aspects**: Identify key topics, themes, or subjects discussed in the blog post.
3. **Match with Tags**: Compare these identified topics against the list of available tags.
4. **Select Appropriate Tags**: Choose tags that best represent the main topics and themes of the blog post.
# Output Format
Provide a list of suggested tags. Each tag should be presented as a single string. Multiple tags should be separated by commas.
# Allowed Tags
Tags that can be suggested are as follows. Text in parentheses are not part of the tag but are a description of the kinds of content to which the tag ought to be applied:
- aberdyfi
- aberystwyth
- ...
- youtube
- zoos
# Examples
**Input:**
The rapid advancement of AI technology has had a significant impact on my industry, even on the ways in which I write my blog posts. This post, for example, used AI to help with tagging.
**Output:**
ai, technology, blogging, meta, work
...(other examples)...
# Notes
- Ensure that all suggested tags are relevant to the key themes of the blog post.
- Tags should be selected based on their contextual relevance and not just keyword matching.
This system prompt is somewhat truncated, but you get the idea.
That post already has the following tags (but this wasn’t disclosed to the AI in its training set; it had to work from scratch): children, language, languages (a bit of a redundancy there!), spain, and unicode.
Testing it out
Let’s see what the AI suggests:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json"\
-H "Authorization: Bearer $OPENAI_TOKEN"\
-d '{ "model": "gpt-4o-mini", "messages": [ { "role": "system", "content": [ { "type": "text", "text": "[PROMPT AS DESCRIBED ABOVE]" } ] }, { "role": "user", "content": [ { "type": "text", "text": "My 8-year-old asked me \"In Spanish, I need to use an upside-down interrobang at the start of the sentence‽\" I assume the answer is yes A little while later, I thought to check whether Unicode defines a codepoint for an inverted interrobang. Yup: ‽ = U+203D, ⸘ = U+2E18. Nice. And yet we dont have codepoints to differentiate between single-bar and double-bar \"cifrão\" dollar signs..." } ] } ], "response_format": { "type": "text" }, "temperature": 1, "max_completion_tokens": 2048, "top_p": 1, "frequency_penalty": 0, "presence_penalty": 0}'
Running this via command-line curl meant I quickly ran up against some Bash escaping issues, but set +H and a little massaging of the blog post content
seemed to fix it.
GPT-4o-mini
When I ran this query against the gpt-4o-mini model, I got back: unicode, language, education, children, symbols.
That’s… not ideal. I agree with the tags unicode, language, and children, but this isn’t really abouteducation. If I tagged
everything vaguely educational on my blog with education, it’d be an even-more-predominant tag than geocaching is! I reserve that tag for things that relate
specifically to formal education: but that’s possibly something I could correct for with a parenthetical in my approved tags list.
symbols, though, is way out. Sure, the post could be argued to be something to do with symbols… but symbols isn’t on the approved tag list in
the first place! This is a clear hallucination, and that’s pretty suboptimal!
Maybe a beefier model will fare better…
GPT-4o
I switched gpt-4o-mini for gpt-4o in the command above and ran it again. It didn’t take noticeably longer to run, which was pleasing.
The model returned: children, language, unicode, typography. That’s a big improvement. It no longer suggests education,
which was off-base, nor symbols, which was a hallucination. But it did suggest typography, which is a… not-unreasonable suggestion.
Neither model suggested spain, and strictly-speaking they were probably right not to. My post isn’t about Spain so much as it’s about Spanish. I don’t
have a specific tag for the latter, but I’ve subbed in the former to “connect” the post to ones which are about Spain, but that might not be ideal. Either way: if this is how
I’m using the tag then I probably ought to clarify as such in my tag list, or else add a note to the system prompt to explain that I use place names as the tags for posts about
the language of those places. (Or else maybe I need to be more-consistent in my tagging).
I experimented with a handful of other well-tagged posts and was moderately-satisfied with the results. Time for a more-challenging trial.
This time, with feeling…
Next, I decided to run the code against a few blog posts that are in need of tags. At this point, I wasn’t quite ready to implement a UI, so I just adapted my little hacky Bash
script and copy-pasted HTML-stripped post contents directly into it.
If it worked, I decided, I could make a UI. Until then, the command line was plenty sufficient.
In this post, I shared that my grandmother and my coworker had (independently) been taken into hospital. It had no tags whatsoever.
The AI suggested the tags hospital, family, injury, work, weddings, pub, humour. Which at
a glance, is probably a superset of the tags that I’d have considered, but there’s a clear logic to them all.
It clearly picked out weddings based on a throwaway comment I made about a cousin’s wedding, so I disagree with that one: the post isn’t strictly about weddings
just because it mentions one.
pub could go either way. It turns out my coworker’s injury occurred at or after a trip to the pub the previous night, and so its relevance is somewhat unknowable from this
post in isolation. I think that’s a reasonable suggestion, and a great example of why I’d want any such auto-tagging system to be a human assistant (suggesting
candidate tags) and not a fully-automated system. Interesting!
Finally, you might think of humour as being a little bit sarcastic, or maybe overly-laden with schadenfreude. But the blog post explicitly states that my coworker
“carefully avoided saying how he’d managed to hurt himself, which implies that it’s something particularly stupid or embarrassing”, before encouraging my friends to speculate on it.
However, it turns out that humour isn’t one of my existing tags at all! Boo, hallucinating AI!
I ended up applying all of the AI’s suggestions except weddings and humour. I also applied smartdata, because that’s where I worked (the AI couldn’t have been expected to guess that without context, though!).
This post talked about Ash and I’s travels around the UK to see REM and Green Day in concert5 and to the National Science Museum in London where I discovered that Ash was prejudiced towards…
carrot cake.
The AI suggested: concerts, travel, music, preston, london, science museum, blogging.
Those all seemed pretty good at a first glance. Personally, I’d forgotten that we swung by Preston during that particular grand tour until the AI suggested the tag, and then I had to
look back at the post more-carefully to double-check! blogging initially seemed like a stretch given that I was only blogging about not having blogged much, but on
reflection I think I agree with the robot on this one, because I did explicitly link to a 2002 page that fell off the Internet only a few years ago aboutthe pointlessness of blogging. So I think it counts.
I was able to verify that I’d been in Preston with thanks to this contemporaneous photo. I have no further explanation for the content of the photo, though.
science museum is a big fail though. I don’t use that tag, but I do use the tag museum. So close, but not quite there, AI!
I applied all of its suggestions, after switching museum in place of science museum.
I wrote this blog post in celebration of having managed to hack together some stuff to help me remote-control my PC from my phone via Bluetooth, which back then used to be a challenge,
in the hope that this would streamline pausing, playing, etc. at pizza-distribution-time at Troma Night, a weekly film night I hosted back then.
If you were sat on that sofa, fighting your way past other people and a mango-chutney-barrel-cum-table to get to a keyboard was genuinely challenging!
It already had the tag technology, which it inherited from a pre-tagging evolution of my blog which used something akin to categories (of which only one
could be assigned to a post). In addition to suggesting this, the AI also picked out the following options: bluetooth, geeky, mobile, troma
night, dvd, technology, and software.
The big failure here was dvd, which isn’t remotely one of my tags (and probably wouldn’t apply here if it were: this post isn’t about DVDs; it barely even mentions
them). Possibly some prompt engineering is required to help ensure that the AI doesn’t make a habit of this “include one tag not from the approved list, every time” trend.
Apart from that it’s a pretty solid list. Annoyingly the AI suggested mobile, which isn’t an approved tag, instead of mobiles, which is. That’s probably a
tokenisation fault, but it’s still annoying and a reminder of why even a semi-automated “human-checked” system would need a safety-check to ensure that no absent tags are
allowed through to the final stage of approval.
This post!
As a bonus experiment, I tried running my code against a version of this post, but with the information about the AI’s own prompt and the examples removed (to reduce the risk
of confusion). It came up with: ai, wordpress, blogging, tags, technology, automation.
All reasonable-sounding choices, and among those I’d made myself… except for tags and automation which, yet again, aren’t among tags that I use. Unless this
tendency to hallucinate can be reined-in, I’m guessing that this tool’s going to continue to have some challenges when used on longer posts like this one.
Conclusion and next steps
The bottom line is: yes, this is a job that an AI can assist with, but no, it’s not one that it can do without supervision. The laser-focus with which gpt-4o was able to
pick out taggable concepts, faster than I’d have been able to do for the same quantity of text, shows that there’s potential here, but it’s not yet proven itself enough of a time-saver
to justify me writing a fluffy UI for it.
However, I might expand on the command-line tools I’ve been using in order to produce a non-interactive list of tagging suggestions, and use that to help inform my work as I tidy up the
tags throughout my blog.
You still won’t see any “AI-authored” content on this site (except where it’s for the purpose of talking about AI-generated content, and it’ll always be clearly labelled), and
I can’t see that changing any time soon. But I’ll admit that there might be some value in AI-assisted curation and administration, so long as there’s an informed human in the loop at
all times.
Footnotes
1 Based on my tagging, I’ve apparently only written about escalators once, while playing Pub Jenga at Robin‘s 21st birthday party. I can’t imagine why I thought it deserved a tag.
2 There are, of course, various other people trying similar approaches to this and similar
problems. I might have tried one of them, were it not for the fact that I’m not quite as interested in solving the problem as I am in understanding how one might use an AI to
solve the problem. It’s similar to how I don’t enjoy doing puzzles like e.g. sudoku as much as I enjoy writing software that optimises for solving such puzzles. See also, for
example, how I beat my children at Mastermind or what the hardest word in Hangman is
or my variousattempts to avoid doing online jigsaws.
Today was my first day back at work after three months of paid leave1. I’d meant to write about the overall experience of my sabbatical and the things I gained
from it before I returned, but I’m glad I didn’t because one of the lessons only crystallised this morning.
This is about the point on the way back from the school run at which I pull out my phone and see what’s happening in the world or at work. But not today.
My typical work schedule sees me wake up some time before 06:30 so I can check my notifications, formulate my to-do list for the day, and so on, before the kids get up. Then I can focus
on getting them full of breakfast, dressed, and to school, and when I come back to my desk I’ve already got my day planned-out. It’s always felt like a good way to bookend my day, and
it leans into my “early bird” propensities2.
Over the last few years, I’ve made a habit of pulling out my phone and checking for any new work Slack conversations while on the way back after dropping the kids at school. By this
point it’s about 08:45 which is approximately the time of day that all of my immediate teammates – who span five timezones – have all checked-in. This, of course, required that I was
signed in to work Slack on my personal phone, but I’d come to legitimise this bit of undisciplined work/life-balance interaction by virtue of the fact that, for example, walking the dog
home from the school run was “downtime” anyway. What harm could it do to start doing “work” things ten minutes early?
Here. Here is where work happens (or, y’know, anywhere I take my work laptop to… but the crucial thing is that work has a time and a place, and it doesn’t include “while walking the
dog home after dropping the kids at school”).
But walking the dog isn’t “downtime”. It’s personal time. When I’m looking at your phone and thinking about work I’m actively choosing not to be looking at the
beautiful countryside that I’m fortunate enough to be able to enjoy each morning, and not to be thinking about… whatever I might like to be thinking about! By blurring my
work/life-balance I’m curtailing my own freedom, and that’s bad for both my work and personal lives!
My colleague Kyle recently returned from six months of parental leave and shared some wisdom with me, which I’ll
attempt to paraphrase here:
It takes some time at a new job before you learn all of the optimisations you might benefit from making to your life. This particular workflow. That particular notetaking strategy. By
the time you’ve come up with the best answers for you, there’s too much inertia to overcome for you to meaningfully enact personal change.
Coming back from an extended period of leave provides the opportunity to “reboot” the way you work. You’re still informed by all of your previous experience, but you’re newly blessed
with a clean slate within which to implement new frameworks.
He’s right. I’ve experienced this phenomenon when changing roles within an organisation, but there’s an even stronger opportunity, without parallel, to “reboot” your way of
working when returning from a sabbatical. I’ve got several things I’d like to try on this second chapter at Automattic. But the first one is that I’m not connecting my personal phone to
my work Slack account.
2 Mysteriously, and without warning, at about the age of 30 I switched from being a “night
owl” to being an “early bird”, becoming a fun piece of anecdotal evidence against the idea that a person’s preference is genetic or otherwise locked-in at or soon after
birth. As I’ve put it since: “I’ve become one of those chirpy, energetic ‘morning people’ that I used to hate so much when I was younger.”.
Another book I received at Christmas Eve’s book exchange
was We’ll Prescribe You A Cat by Syou
Ishida, translated from the original Japanese by Emmie Madison Shimoda. It’s apparently won all kinds of acclaim and awards and what-have-you, so I was hoping for something pretty
spectacular.
It’s… pretty good, I guess? Less a novel, it’s more like a collection of short stories with an overarching theme, within which a deeper plot which spans them all begins to emerge… but
is never entirely resolved.
That repeating theme might be summed up as this: a person goes to visit a clinic – often under the illusion that it’s a psychiatric specialist – where, after briefly discussing their
problems with the doctor, they’re prescribed a dose of “cat” for some number of days. There’s a surprising and fun humour in the prescription, each time: the matter-of-fact way that the
doctor dispenses felines as if they were medications and resulting reactions of his nonplussed patients. Fundamentally, a prescription of cat works, and by the time the cat is returned
to the clinic, its caretaker is cured, albeit not necessarily in the way in which they would have originally expected.
Standing alone, each chapter short story is excellent. The writing is compelling and rich and the characters well-developed, particularly in the short timeframes in which we
get to know each of them. There’s a lot of interesting bits of Japanese culture represented, too, which – as an outsider – piqued my curiosity: whether by the careful work of the author
or her translator it never left me feeling lost, although I suspect there might be a few subtler points I missed as a result of my geographic bias1.
The characters (whether human, feline, or… otherwise…?) and their situations are quirky and amusing, and there are a handful of heart-warming… and heart-wrenching… moments that I
thoroughly enjoyed. But by the time I was half-way through the book, I was becoming invested in a payoff that would never come to be delivered. The nature of the doctor, his
receptionist, and their somewhat-magical clinic is never really resolved, and the interconnections between the patients is close to non-existent, leaving the book feeling like a
collection of tales that are related to… but not connected to… one another. As much as I’d enjoyed every story – and I did! – I nonetheless felt robbed of the opportunity to
wrap up the theme that they belong to.
Instead, we’re given just more unanswered questions: hints at the nature of the clinic and its occupants, ideas that skirt around ideas of magic and ghosts, and no real explanation.
Maybe the author’s planning to address it in the upcoming sequel, but unless I’m confident that’s the case, I’ll probably skip it.
In summary: some beautifully-written short stories with a common theme and a fun lens on Japanese culture, particularly likely to appeal to a cat lover, but with no payoff for getting
invested in the overarching plot.
Footnotes
1 Ishida spends a significant amount of intention describing the regional accents of
various secondary characters, and comparing those to the Kyoto dialect, for example. I’m pretty sure there’s more I could take from this if I had the cultural foothold to better
understand the relevance! But most of the cultural differences are less-mysterious.
As part of our trip to the two-island republic of Trinidad & Tobago, Ruth and I decided we’d love to take a
trip out to Buccoo Reef, off the coast of the smaller island. The place we’ve been staying
during the Tobago leg of our visit made a couple of phone calls for us and suggested that we head on down to the boardwalk at nearby Buccoo the next morning where we’d apparently be
able to meet somebody from Pops Tours who’d be able to take us out1.
I could have shown you a picture of the fun ‘I ♥️ Buccoo’ sign from the boardwalk, but I got distracted by a Magnificent Frigatebird circling overhead2.
At the allotted time, we found somebody from Pops Tours, who said that he was still waiting for their captain to get there3
and asked us to go sit under the almond tree down the other end of the boardwalk and he’d meet us there.
It was only after we left to follow the instructions that I remembered that I don’t know how to identify an almond tree. So we opted to sit under a tree near a chicken teaching her
chicks how to eat a coconut4. I still don’t know if that was right, but the boaters found us in the
end so it can’t have been too far off.
We’d previously clocked that one of the many small boats moored in the bay was Cariad, and found ourselves intensely curious. All of the other
boats we’d seen had English-language names of the kinds you’d expect: a well-equipped pleasure craft optimistically named Fish Finder, a small dual-motorcraft with the moniker
Bounty, a brightly-coloured party boat named Cool Runnings, and so on. To travel a third of the way around the world to find a boat named in a familiar Welsh word felt
strange.
Either you’re an extremely long way from home, boat, or else somebody around here has a surprising interest in the Welsh language.
So imagine our delight when the fella we’d been chatting to came over, explained that their regular tour boat (presumably the one pictured on their website) was in the shop, and said
that his cousin would be taking us out in his boat instead… and that cousin came over piloting… the Cariad!
As we climbed aboard, we spotted that he was wearing a t-shirt with a Welsh dragon on it, and a sticker on the side of the helm carried a Welsh flag. What strange coincidence is this,
that Ruth and I – who met while living in Wales and come for a romantic getaway to the Caribbean – should happen to find ourselves aboard a literal “love” boat named in Welsh.
Long shallow sandbars and reefs almost surround the islands of Trinidad and Tobago, leaving enormous areas accessible only to low-draft boats (and helping to protect the islands from
some of the worst of the weather that the Caribbean can muster).
There probably aren’t many boats on Earth that fly both the colours of Trinidad & Tobago and of Wales, so we naturally had to ask: did you name this boat?, and why? It
turns out that yes, our guide for the day has a love of and fascination with Wales that we never quite got to the bottom of. He’d taken a holiday to Swansea just last year, and would be
returning to Wales again later this year.
It’s strange to think that anybody might deliberately take a holiday from a tropical island paradise to come to drizzly cold Wales, but there you have it. It sounds like he was
into his football and that might have had an impact on his choice of destination, but choose to believe that maybe there’s a certain affinity between parts of the world that have
experienced historical oppression at the hands of a colonial English mindset? Like: perhaps Nigerians would enjoy India as a getaway destination, or Guyanans would dig Mauritius as a
holiday spot, too?5
I wrote previously about visiting the Nylon Pool, an waist-deep bit of ocean on a sandbar a full half a mile offshore.
We took a dip at the Nylon Pool, snorkelled around parts of Buccoo Reef (replete with tropical fish of infinite variety and colour), spotted sea turtles zipping around the boat, and
took a walk along No Man’s Land (a curious peninsula, long and thin and cut-off from the mainland by mangrove swamps, so-named
because Trinidadian law prohibits claiming ownership of any land within a certain distance of the high tide mark… and this particular beach spot consists entirely of such land,
coast-to-coast, on account of its extreme narrowness. All in all, it was a delightful boating adventure.
(And for the benefit of the prospective tourist who stumbles upon this blog post in years to come, having somehow hit the right combination of keywords: we paid $400 TTD6
for the pair of us: that’s about £48 GBP at today’s exchange rate, which felt like exceptional value for an amazing experience given that we got the expedition entirely to ourselves.)
Any worries I might have had about the seaworthiness of our vessel as its owner repeatedly bailed out the back of the boat with a small bucket were quickly assuaged when I realised
that I could probably walk most of the way back to shore, should I need to! (sadly not visible: the Welsh dragon on front of his t-shirt)
But aside from the fantastic voyage we got to go on, this expedition was noteworthy in particular for Cariad and her cymruphile captain. It feels like a special kind of
small-world serendipity to discover such immediate and significant common ground with a stranger on the other side of an ocean… to coincide upon a shared interest in a culture and place
less-foreign to you than to your host.
An enormous diolch yn fawr7 is due to Pops Tours for this remarkable experience.
Footnotes
1 Can I take a moment to observe how much easier it was to charter a boat in Tobago than
it was in Ireland, where I left several answerphone messages but never even got a response? Although in the Irish boat
owners’ defence, I was being creepy and mysterious by asking them to take me to random coordinates off the coast.
2 It’s possible that I’ve become slightly obsessed with frigatebirds since arriving here.
I first spotted them from our ferry ride from Trinidad to Tobago, noticing their unusually widely-forked tails, striking white (in the case of the
females) chests, and relatively-effortless (for a seabird) thermal-chasing flight. But they’re really cool! They’re a seabird… that isn’t waterproof and can’t swim… if they land in
the water, they’re at serious risk of drowning! (Their lack of water-resistant feathers helps with their agility, most-likely.) Anyway – while they can snatch
shallow-swimming prey out of the water, they seem to prefer to (and get at least 40% of their food from) stealing it from other birds, harassing them in-flight and snatching it from
their bills, or else attacking them until they throw up and grabbing their victim’s vomit as it falls. Nature is weird and amazing.
3 Time works differently here. If you schedule something, it’s more a guideline than it is
a timetable. When Ruth and I would try paddleboarding a few days later we turned up at the rental shack at their published opening time and hung out on the beach for most of an hour
before messaging the owners via the number on their sign. After 15 minutes we got a response that said they’d be there in 10 minutes. They got there 20 minutes later and opened their
shop. I’m not complaining – the beach was lovely and just lounging around in the warm sea air with a cold drink from a nearby bar was great – but I learned from the experience that if
you’re planning to meet somebody at a particular time here, you might consider bringing a book. (Last-minute postscript: while trying to arrange our next accommodation, alongside
writing this post, I was told that I’d receive a phone call “in half an hour” to arrange payment: that was over an hour ago…)
4 Come for the story of small-world serendipity; stay for the copious candid bird photos,
I guess?
6 Exceptionally-geeky footnote time. The correct currency symbol for the Trinidad & Tobago
Dollar is an S-shape with two vertical bars through it, which is not quite the same as the conventional S-shape with a single vertical bar that you’re probably used to seeing
when referring to e.g. American, Canadian, or Australian dollars. Because I’m a sucker for typographical correctness, I decided that I’d try to type it “the right way” here in my blog
post, and figured that Unicode had solved this problem for me: the single-bar dollar sign that’s easy to type on your keyboard inherits its codepoint from ASCII, I guessed, so the
double-bar dollar sign would be elsewhere in Unicode-space, right? Like how Unicode defines single-bar (pound) and double-bar (lira) variants of the “pound sign”. But it turns out this isn’t the case: the double-bar dollar sign, sometimes called
cifrão (from Portugese), and the single-bar dollar sign are treated as allographs: they
share the same codepoint and only the choice of type face differentiates between them. I can’t type a double-bar dollar sign for you without forcing an additional font upon
you, and even if I did it wouldn’t render “correctly” for everybody. Unicode is great, but it’s not perfect.
7 “Thank you very much”, in Welsh, but you probably knew that already.
On the
flight over to Trinidad I finished reading James Acaster’s Classic Scrapes by James Acaster, which I received as part of our family’s traditional Christmas Eve book exchange. I’m a big fan of his stand-up work (and I maintain that his 2018 serialised
show Repertoire is among of the most artfully-crafted pieces of live comedy ever written) and clearly JTA recalled this fact
when giving me this book.
Many of the stories in Classic Scrapes have featured in his work before, in various forms, and I found myself occasionally recognising one and wondering if I’d accidentally
skipped back a chapter. It helps a lot to read them in Acaster’s “voice” – imagining his delivery – because they’re clearly written to be enjoyed in that way. In the first few chapters
the book struggled to “grab” me, and it wasn’t until I started hearing it as if I were listening in to James’s internal monologue that it gave me my first laugh-out-loud moment.
After that, though, it got easier to enjoy each and every tall tale told. Acaster’s masterful callback humour ties together anecdotes about giant letter Ws, repeated car crashes, and
the failures of his band (and, I suppose, almost everything else in his life, at some point or another), across different chapters, which is fun and refreshing and adds a new dimension
to each that wouldn’t be experienced in isolation.
A further ongoing concept seems to be a certain idolisation of Dave Gorman, whose Are You Dave Gorman? and Googlewhack
storytelling style was clearly an inspiration. In these, of course, a series of (mis)adventures with a common theme or mission becomes a vehicle for a personal arc within which the
absurdity of the situations described is made accessible and believable. But with James Acaster’s self-deprecating style, this is delivered as a negative self-portrayal: somebody who
doesn’t live up to their idea of their own hero, and becomes a parody of themselves for trying. It’s fun, but perhaps not for everybody (I tried to explain to Ruth why I’d laughed out loud at something but then needed to explain to her who Dave Gorman is and why that matters.)
I just finished reading Kate Manne‘s Entitled. I can’t remember where I first heard about it or why I opted
to buy a copy, but it had been sitting in my to-read pile for a while and so I picked it up last month to read over the festive period.
The book takes a pop-sci dive into research around male entitlement and the near-universal influence of patriarchal ideology. It’s an often bleak and sometimes uncomfortable read: Kate
Manne draws a line connecting the most egregious and widely-reported abuses of power by men to much-more-commonplace “everyday” offences, many of which are routinely overlooked or
dismissed. The examples she provides are a sad reminder of quite how deeply-embedded into our collective subconscious (regardless of our genders) are our ideas of gender roles and
expectations.
It’s feels somewhat chastening to see oneself in some of those examples, whether by my own assumed entitlement or merely by complicity with problematic social norms. We’ve doubtless all
done it, at some point or another, though, and we don’t make progress towards a better world by feeling sorry for ourselves. By half way through the book I was looking for action points
that never came; instead, the author (eventually) lays out what she’s doing and leaves the reader to make their own decisions.
The vast majority of the book is pretty bleak, and it takes until the final chapter before it reaches anything approximating hope (although the author refrains from classifying it as
such), using Manne’s then-imminent parenthood as a vehicle. She finishes by talking about the lessons she hopes to impart to her daughter about how to thrive in this world, which seems
less-optimistic than discussing, perhaps, how to improve the world for everybody, but is still the closest thing it delivers to answering “what can we do about this?”.
But I suppose that’s the message in this book: male entitlement is a product of our endemic patriarchy and, try as we might, it’s not going away any time soon. Instead, we should be
picking our battles: producing a generation of women and girls who are better-equipped to understand and demand their moral rights and of men and boys who try to work against, rather
than exploit, the unfair advantages they’re afforded at the expense of other genders.
That I’d hoped to come to the end of the book with a more feel-good outlook betrays the fact that I’d like there to be some kind of magical quick fix to a problem that I’ve
certainly helped perpetuate. There isn’t, and that’s a let down after the book’s uncomfortable ride (not a let down on the part of the book, of course: a let down on the part of the
world). The sadness that comes from reading it is magnified by the fact that since its publication in 2020, many parts of the Western world and especially Manne’s own USA have gotten
worse, not better, at tackling the issue of male entitlement.
But wishful thinking doesn’t dismantle the patriarchy, and I was pleased to get to the back cover with a slightly sharper focus on the small areas in which I might be able to help fight
for a better future. A good read, so long as you can tolerate the discomfort that may come from casting a critical lens over a society that you’ve been part of (arguably it could be
even-more-important if you can’t tolerate such a discomfort, but that’s another story).
(In 2025 I’m going to try blogging about the books I read, in addition to whatever else I write about. Expect an eclectic mix of fiction and non-fiction, probably with a few lapses
where I forget to write about something until well after I’m deep into what follows it and then forget to say anything about it ever.)
I had a smug moment when I saw security researcher Rob Ricci and friends’ paper empirically analysing brute-force attacks against SSH “in the wild”.1 It turns out that putting all your SSH servers on “weird” port
numbers – which I’ve routinely done for over a decade – remains a pretty-effective way to stop all that unwanted traffic2,
whether or not you decide to enhance that with some fail2ban magic.
I was just setting up a new Debian 12 server when I learned about this. I’d already moved the SSH server port away from the default 224, so I figured
I’d launch Endlessh on port 22 to slow down and annoy scanners.
Installation wasn’t as easy as I’d hoped considering there’s a package. Here’s what I needed to do:
Move any existing SSH server to a different port, if you haven’t already, e.g. as shown in the footnotes.
change InaccessiblePaths=/run /var into InaccessiblePaths=/var
Reload the modified service: sudo systemctl daemon-reload
Configure Endlessh to run on port 22 rather than its default of 2222: echo "Port 22" | sudo tee /etc/endlessh/config
Start Endlessh: sudo service endlessh start
To test if it’s working, connect to your SSH server on port 22 with your client in verbose mode, e.g. ssh -vp22 example.com and look for banner lines full of random garbage
appearing at 10 second intervals.
It doesn’t provide a significant security, but you get to enjoy the self-satisfied feeling that you’re trolling dozens of opportunistic script kiddies a day.
Footnotes
1 It’s a good paper in general, if that’s your jam.
2 Obviously you gain very little security by moving to an unusual port number, given that
you’re already running your servers in “keys-only” (PasswordAuthentication no) configuration mode already, right? Right!? But it’s nice to avoid all the unnecessary
logging that wave after wave of brute-force attempts produce.
3 Which I can only assume is pronounced endle-S-S-H, but regardless of how it’s said out
loud I appreciate the wordplay of its name.
4 To move your SSH port, you might run something like echo "Port 12345" | sudo tee
/etc/ssh/sshd_config.d/unusual-port.conf and restart the service, of course.
Our beloved-but-slightly-thick dog will sometimes consent to playing fetch, but one of her favourite games to play is My Ball. Which is a
bit like fetch, except that she won’t let go of the ball.
It’s not quite the same as tug-of-war, though. She doesn’t want you to pull the toy in a back-and-forth before, most-likely, giving up and letting her win1. Nor is My Ball a solo game: she’s not interested
in sitting and simply chewing the ball, like some dogs do.
I’d like to imagine the grunts and snorts she makes at about this moment actually translate to “My ball. Myyyy… ballll. Myyyyy ball! MY BALL! My… BALL!”
No, this is absolutely a participatory game. She’ll sit and whine for your attention to get you to come to another room. Or she’ll bring the toy in question (it doesn’t have to
be a ball) and place it gently on your foot to get your attention.
Your role in this game is to want the ball. So long as you’re showing that you want the ball – occasionally reaching down to take it only for her to snatch it away at
the last second, verbally asking if you can have it, or just looking enviously in its general direction – you’re playing your part in the game. Your presence and participation is
essential, even as your role is entirely ceremonial.
This might look like a game of tug-of-war, but you’ll note that my grip is just barely two-fingered. She’s not pulling, because she doesn’t need to unless I try to take the toy. This
is My Rope, she knows.
Playing it, I find myself reminded of playing with the kids when they were toddlers. The eldest in particular enjoyed spending countless hours playing make-believe games in which the
roles were tightly-scripted2. She’d tell me that, say, I was a talking badger or a grumpy
dragon or an injured patient but immediately shoot down any effort to role-play my assigned character, telling me that I was “doing it wrong” if I didn’t act in exactly the unspoken way
that she imagined my character ought to behave.
But the important thing to her was that I embodied the motivation that she assigned me. That I wanted the rabbits to stop digging too near to my burrow3 or the
princess to stay in her cage4 or to lie down in my hospital bed and await the doctor’s eventual arrival5.
Sometimes I didn’t need to do much, so long as I showed how I felt in the role I’d been assigned.
In this game, the chef was “making soup” (in the sink, apparently) and my job was to “want the soup”.
Somebody with much more acting experience and/or a deeper academic comprehension of the performing arts is going to appear in the comments and tell me why this is, probably.
But I guess what I mean to say is that playing with my dog sometimes reminds me of playing with a toddler. Which, just sometimes, I miss.
Footnotes
1 Alternatively, tug-of-war can see the human “win” and then throw the toy, leading to a
game of fetch after all.
3 “Grr, those pesky rabbits are stopping me sleeping.”
4 “I’ll just contentedly sit on my pile of treasure, I guess?”
5 Playing at being an injured patient was perhaps one of my favourite roles, especially
after a night in which the little tyke had woken me a dozen times and yet still had some kind of tiny-human morning-zoomies. On at least one such occasion I’m pretty sure I actually
fell asleep while the “doctor” finished her rounds of all the soft toys whose triage apparently put them ahead of me in the pecking order. Similarly, I always loved it
when the kids’ games included a “naptime” component.
Yesterday, I fulfilled the primary Three Rings objective I set for myself when I kicked off my sabbatical
twelve weeks ago and migrated the entire application to a new hosting provider (making a stack of related improvements along the way).
Months prior, I was comparing different providers and their relative merits, making sure that our (quirky and specific) needs could be met. Weeks beforehand, I was running a “dry run”
every four or five days, streamlining the process of moving the ~450GB1
of live data while minimising downtime. Days before the event felt like the countdown for a rocket launch, with final preparations underway: reducing DNS time-to-lives, ensuring users
knew about our downtime window, and generally fitting in a little time to panic.
I made reference on International Volunteer Day to how we needed to configure logrotate. When you’re building architecture for a system as gnarly as Three Rings, there’s
about a billion tools that need such careful tweaking2.
The whole operation was amazingly successful. We’d announced an at-risk period of up to six hours and I was anticipating it taking three… but the whole thing was completed within
a downtime window of just two and a half hours. And I fully credit all of the preparation time. It turns out that “measure twice, cut once” is a sensible strategy3.
It’s challenging to pull off a “big”, intensive operation like this in an entirely voluntary operation. I’m not saying I couldn’t have done it were I not on sabbatical, but
it’d certainly have been harder and riskier.
1Three Rings‘ user data is represented by a little under 70GB of MariaDB
databases plus about 380GB of organisational storage: volunteer photos, files, email attachments, and the like. Certainly not massive by comparison to, say, social media sites, search
engines, and larger eCommerce platforms… but large enough that moving it takes a little planning!
2 Okay, a billion tools to configure? That’s an exaggeration. Especially
now: since the architectural changes I’ve put in place this week, for example, production app server builds of Three Rings no require a custom-compiled build of Nginx (yes,
this really was something we used to need).
Some of these titles perhaps don’t look like they belong, but she doesn’t seem to mind.
My initial order of fake book fronts was damaged in transit but the excellent eBay seller I’d been dealing with immediately sent a comparable replacement. This had left me with a
spare-but-damaged set of fake book fronts, but with a little gluing, sawing and filing I was able to turn them into a second usable fake cabinet front.
My 10-year-old’s fake cabinet isn’t quite as sophisticated as mine (no Raspberry Pi Zero, solenoids, or electronic locks) – you just have to know where it is and pull on the correct
corner of it to release it – but she still thinks it’s pretty magical2.
I’ve no idea what she’ll store in here, and given that she’s on the cusp of becoming a teenager it’s possible I don’t want to know. But at least I know the secret to opening
it, should I have to.
A cut-down plank of plyboard stained the right colour, some offcuts of skirting board, a couple of butt hinges, some L-brackets, some bathroom mirror mounting tape, the fake book
fronts, and an hour and a half’s work seems totally worth it to give a child the magical experience of a secret compartment in their bedroom. My carpentry’s improved since my one, too:
this time I measured twice before cutting3 and it paid-off with a cleaner, straighter finish.
Footnotes
1 She was pretty impressed already at the secret cabinet, but perhaps more-so when she
discovered that the fake book fronts I’d used were part of the set of The School for Good and Evil, the apparently-disappointing film version of one of her favourite series’
of books.
2 Which, frankly, it is. I wish I’d had a secret compartment in my bedroom
bookshelves when I was her age!
Today is International Volunteer Day. And because I’m in the middle of my (magical) sabbatical, I’ve had no difficulty dedicating what would have been the entire workday to a variety
of volunteer activities for the benefit of Three Rings, the nonprofit I founded 22 years ago for the purpose of making volunteer management,
and therefore volunteering, easier.
Liveblogging my day
Step one in a highly productive day of tech volunteering is, as you might have expected: coffee.
I’m pretty sure that most folks don’t know what my voluntary work at Three Rings involves1,
and so I decided I’d celebrate this year’s International Volunteer Day by live-blogging what I got up to in a series of notes throughout the day (1, 2, 3, 4, 5, 6, 7, 8)2.
Maybe, I figured, doing so might provide more of an insight into what a developer/devops role at Three Rings looks like.
Regression-testing a fix
My first task for the day related to a bugfix that we’re looking to deploy. Right now, there’s a problem which sometimes stops the “mail merge”
fields in emails sent by Three Rings3.
We have a candidate fix, but because it’s proposed as a hotfix (i.e. for deployment directly to production), it requires a more-thorough review process involving more volunteer
developers than code which will be made available for beta testing first.
My aim with this task was to roll-back to an earlier version of the software, before the bug was first introduced (by fixing something different!), and ensure that the functionality
remained the same as it always had been.
It turned out that everything was alright, so I reported back to my fellow reviewers about how I’d tested and what my results had been. Once some
more eyes have hit the tests and the new/changed code, that’ll hopefully be ready-to-launch.
Three Rings volunteers primarily communicate via Slack: it helps us to work asynchronously, which supports the fact that our volunteers all have different schedules and preferences
for how they plan their volunteering: some spend whole days, some just a few hours now and then. We’re the ultimate “armchair volunteering” opportunity!
We’re all about collaboration, discussion, learning from one another, and volunteer-empowerment, so my suggestions in this case were non-blocking: I trust my fellow volunteer to
either accept my suggestion (if it’s right), reject it (if it’s wrong), or solicit more reviews or bring it to Slack or our fortnightly dev meeting (if it requires discussion).
Preparing new infrastructure
Next week we’re scheduled to do a big migration of server infrastructure to help provide more future growing-room: it’s exciting, but also a little scary4!
For now, though, all I needed to do was to tweak our logrotate and backup configurations in response to testing of our new systems.
Not all of our developer volunteers also wear a “devops” hat, but a few of us do5.
It’s quite a satisfying role – devops can feel like tidying and organising, and just as a physical space can feel clean, simple, and functional when it’s carefully and minimalistically
laid out, a well-organised cluster of servers humming along in exactly the way they should can be a highly-satisfying thing to be responsible for, too.
Sorting the post
It’s not all techy work, though. And while it’s true that Three Rings has a good group of less-nerdy6 people to handle many of the non-programming tasks that you need
to run a voluntary organisation like ours, it’s also true that many of us wear multiple hats and pull our weight in several different roles.
Our time as volunteers may be free, but our servers aren’t, so the larger and richer charities that use our services help contribute to our hosting costs. Most send money digitally,
but some use dual-signatory accounts that require they send cheques.
When people are stuck with Three Rings, or considering using it, or have feature suggestions, or anything else, we encourage them to fill in our contact form. The results of that make their way into our ticketing system where Support Team volunteers help people with whatever it is
they need7.
They asked if they could have a Slack notification when the form was filled, to grab their attention all the quicker if they were already online, so I obliged and added one.
Adding the Slack notifications meant writing some WordPress PHP code, which feels closer to my “day job” than my Three Rings volunteering!
That quick improvement done, it was time to move on to a task both bigger and more-exciting:
Wrapping up a new feature
I’ve recently been working on an upcoming new feature for Three Rings. Inspired by only occasional user requests, this idea’s been sitting in our (long!) backlog for a while
now8:
a way to edit the details of volunteers in your organisation in bulk, as though they were in a spreadsheet.
The feature’s been almost-complete for weeks now, but I had a few last tweaks to make, based on early feedback and show-and-tell sessions.
I’ve been working on this feature by a series of iterations since the end of October, periodically demonstrating it to other Three Rings volunteers and getting early feedback. In the
last round of demonstrations (plus a little user testing, at an in-person Three Rings event) I solicited opinions on how the new feature should be presented, and who it should be made
available to9.
So this afternoon I was working on bits of the user interface and, delightfully, got the feature to a point where I only need to update the test instructions and it’ll be ready for a
full review and consideration for inclusion in our next milestone release, early next year. Hurrah!
It’s only a draft PR for now, but at least the initial checks look positive.
Reflecting on my day
I don’t normally get this much Three Rings work done in a day. Even since my sabbatical started, I don’t always get so productive a day10,
and when I’m working normally I’d probably only get maybe one or two of these achievements done in a typical week.
So I’m hugely appreciative that my employer encourages staff to take a three-month sabbatical every five years. Because it
gives me the opportunity have days like this International Volunteer Day, where I can spend the whole day throwing myself headlong at some valuable volunteering efforts and come out the
other side with the satisfaction that I gave my time to make the world a very slightly better place.
If you’re not already volunteering somewhere, I’d highly recommend that you consider it. Volunteering can be purposeful, enriching, and hugely satisfying. Happy International Volunteer
Day!
Footnotes
1 In fact, most of the charities who use Three Rings’ services are surprised to discover
that we’re a voluntary organisation at all, because we provide the kinds of uptime guarantee, tech support response times, software quality etc. that they might have come to
expect from much-richer organisations with a much larger – and paid! – staff. That we’re a voluntary organisation helping voluntary organisations is so unusual that sometimes people
have been unsure how to handle us: one time, for example, a helpline charity that was considering making use of us declared us “unsustainable” without a commercial model. At some
point in the last decade or two they saw that we’ve outlasted many other services of our type, most of them commercial, and realised: yeah, okay, it turns out we’re in this for the
long haul.
2 Gosh: a nine-post day is gonna keep throwing the stats of my recent streak all over the place, isn’t it?
3 My use of italics for Three Rings isn’t arbitrary, but I’ll admit it is
confusing. “Three Rings” is the name of our nonprofit. “Three Rings” is the name of the software service we provide. Branding is hard when your company name and product name
are the same. And it’s even harder when all of your users insist on abbreviating both to “3R”. 🙄
4 With around 60,000 volunteers depending on Three Rings to coordinate their
efforts, the pressure is always on to minimise downtime. I’ve spent many hours over the last few weeks running and re-running through practice runs of the migration strategy before I
take the lead on it next week.
5 That said, one of the big things I’ve been pushing for in our new infrastructure is new
tools to make it easier for our developers to do “server stuff” like deploying new releases, in an effort to bring us closer to the dream of a continuous integration pipeline. Some
day!
6 Or “normal people”, as they might call themselves.
7 The Support Team are a wonderful and hard-working group of volunteers, who aim to reply
to every contact within 24 hours, 365 days a year, and often manage a lot faster than that. They’re at the front-line of what makes Three Rings a brilliant
system.
8 While we curate a backlog of user requests and prioritise them based on the optimisation
ratio of amount-of-good-done to the amount-of-effort-expected, our developer volunteers enjoy a huge amount of autonomy about what tasks they choose to pick up. It’s not unknown for
developers who also volunteer at other organisations (that might be users of Three Rings) to spend a disproportionate amount of time on features that their
organisation would benefit from, and that’s fine… so long as the new feature will also benefit at least a large minority of the other organisations that depend on
Three Rings. Also, crucially: we try to ensure that new features never inconvenience existing users and the ways in which they work. That’s increasingly challenging in our
22-year-old software tool, but it’s important to us that we’re not like your favourite eCommerce or social networking service that dramatically change their user interface every other
year or drop features without warning nor consideration for who might depend upon them.
9 The new feature’s secured such that it works for everybody: if you accessed it
as a volunteer with low privileges, you might be able to see virtually nothing about most of the other volunteers and be able to edit only a few details about yourself, for example.
But that’d be a pretty-confusing interface, so we concluded that it probably didn’t need to be made available to all volunteers but only those with certain levels of
access. We can always revisit later.