This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
In case I wasn’t having a challenging enough fortnight… while playing in a pool with the kids I accidentally smashed my face into the side of the pool. 😢.
Time to check when my (ex-)work private dental cover expires, I guess. Really hoping it’s not, like, today or something.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
I imagine that many people take a sabbatical or other extended break from work in an effort to avoid (or recover from) burnout.
But obviously that’s not the way I fly. Clearly my game’s a bit different.
Something something Icarus something something.
My project to move Three Rings servers, which I’d written about once or twice before I completed it on Wednesday, has weighed heavily in my mind my many moths, and has almost-completely occupied it since the start of my sabbatical. Even before that, the project was “owned” by a different volunteer at Three Rings from whom I took over after their progress stalled (their life got in the way – life has a habit of doing that – and it’s perhaps only
because I expected to spend several months away from my “day job” that I felt confident to take over from where he left off), and I’ve had a peripheral involvement in it since… well, a
long while ago.
And it turns out it’s been hard.
Had I fully-appreciated the scale of the “server move project” I was taking over when the reins were passed to me… I might have selected a beverage with a higher ABV…
The work… is impactful: it paves the way for the next generation of Three Rings‘ ability to grow and support more tools, more volunteers, and more voluntary
organisations… as well as making a clean break with some architectural baggage we’d picked up over our last, y’know, twenty-two fucking years of providing this service. That
impact might not be felt on day one (although I’m already hearing good thing about real-world performance gains), but it supports the long-term growth and stability of this wonderful
system: it’ll pay off in time.
But the weight of the problem didn’t just come from the eventual benefit it’d one-day provide… it came from the risk of failing. I’m a developer first and a devops person
second, and I’ve made my fair share of mistakes in getting to the point where I’m at long last as comfortable with the latter as I am with the former. But the cost of a mistake today is
orders of magnitude more that what it would have been, say, one and a half to two decades ago. Three Rings isn’t just “some tool that supports volunteering”, any more: it’s
become a critical part of charity infrastructure supporting multiple volunteer-years of effort every single day. There are organisations who’ve never known any other
way of working, who absolutely depend upon it.
If Three Rings completely fails today then (for a hopefully-short period while they adapt to the change): soup kitchens and food banks struggle to run, suicide helplines can’t
get enough counsellors onto calls, community libraries can’t coordinate their volunteers and fail to open their doors when they should, motorcyclists don’t get told which hospitals to
deliver vital blood donations to… oh, and that one volunteer-run pole-dancing class that uses the system doesn’t schedule a lesson this week, I guess?
My point is: if I fucked-up the specification of a server, of the strategy for a low-downtime data transfer, or broke the DNS configuration mid-flight… and didn’t catch my mistake in
time… then it’s not inconceivable that somebody could die.
Which is a strange feeling when you’re doing voluntary work on a computer system that you invented mostly to prove to yourself that you could, on a lazy weekend when you were barely
into your twenties. It seems that somewhere along the journey, the stakes can change.
You can have all the monitoring and notifications in the world and still sleep badly at night, it turns out.
It turns out that the pressure was getting to me for a while there. That may have been evidenced to others by the huge sigh of relief that I’m sure my fellow volunteers on our “launch
party” Zoom call heard when the servers were moved and (almost) everything worked perfectly first time. But for me, the realisation came a little over a day later.
A thing came up. The specifics aren’t important, but the thing that came up – shortly after everything went so wonderfully well and the new Three Rings server architecture was
deployed – fell firmly within the categories of (a) “family/home life” and (b) “this thing needs somebody to champion it for a few weeks and make sure it gets sorted out”. And as the
rusty gears of project management started to turn within my brain started I began thinking about what it’d take to be the one to pick-up-and-run with this new piece of work…
and I realised that I simply didn’t have enough spoons.
Even thinking about what to do next was exhausting. I simply couldn’t bring myself to do it.
That’s when I realised, yesterday afternoon, that I’d allowed myself to stray perilously close to burnout.
Don’t be fooled by my tone. This is a healthy observation. Spotting when I to slow down before crashing is infinitely superior to, y’know, afterwards.
My mistake these last few weeks has been to focus on time, and the superfluity of it with which I imagined myself to have.
Being on my sabbatical, I figured that I’d temporarily gained up-to-40 hours a week for “free”, and reasoned that I could just bolt some significant portion of that on top of the
up-to-10 hours a week I was already giving to Three Rings. But while time works like that, it’s not the only resource that you “spend” when you’re giving your entire focus
to a deep, detailed, and complicated project. In fact, focussing on time is incredibly deceptive, because it tricks you into completely sidestepping any consideration for the mental
effort your mind’s engaged in. An effort that takes place even in your “downtime”.
A critical project with high stakes and which stokes your passion can quickly grow into something that occupies your thoughts when you’re trying to unwind… and when you’re trying to
socialise… and when you’re trying to sleep. I’d been burning hard at my server move project for months without letting my brain take a break, and it took until the job was
complete before I stopped and thought for even a moment that “hey, that was fucking exhausting wasn’t it?”
So yeah. I’mma thinking I’ll take a few days off of doing “projects”. Quick wins, tasks that take less than a day and can be put down at any time… those are fine. But anything that
can’t be set aside and forgotten about probably doesn’t belong in my head until at least next week.
Tomorrow Later today, but after I’ve slept… I’m going to try to have a day in which I do very little: some childwrangling, of course, some fun activities, some socialising with friends in the evening. And then see if I can carry on that vibe
throughout the weekend. For once in my life, to stop picking up new things, and just coast for a while with the things I’m already carrying.
I’ve learned the hard way that trying to power-on through this particular kind of tiredness is a recipe for disaster. I’m proud that I’ve (at long last!) gained a level of
self-awareness to spot that I was on a path to burnout without actually reaching that place of total uselessness. So now it’s time to stop, recharge, and then start
moving again.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
We’re in the process of replicating all of WordPress to a modern tech stack (Node.js & Next.js) called NextPress.
🤨 Wow.
I get that forking WordPress is hip right now because of, y’know, drama. (But it needn’t be,
because there’s already a great fork in the form of ClassicPress, if that’s your jam.) Forking’s fine.
I even get the idea behind making semi-compatible alternatives that aren’t forks: I’ve kinda done myself on a couple of occasions! That’s what OpenPress is trying to do, and they seem to be going in a reasonable direction, except for the whole “designed for AI integration” thing, whatever that
means. Interestingly: NextPress, like OpenPress, seems to use a .ai TLD?
Anyway: NextPress seems to be… something else entirely. Apparently their effort is to reimplement WordPress as-is… but in JavaScript instead of PHP. Their principle argument for doing
so seems to be performance… to which I’d say: why not Go then?
NodeJS isn’t significantly faster than PHP at this kind of task; the bottleneck is rarely the language but the implementation (and the database); a high-performance site should be using
static caching regardless of the language, etc. etc. Reimplementing an application in a functionally-identical way but in a different language is an arduous job, and in this
case it doesn’t even seem like it’ll provide anything more than the tiniest benefit! It’s like winning the battle to lose all the wars.
There’s lots of ways in which WordPress can be improved. But I’m not convinced that NextPress or OpenPress represent good approaches to doing that, and I’m not sure about AspirePress either: right now these projects seem to have produced very little, with the possible exception of OpenPress which is moving along slowly. I’m
not entirely sure what FreeWP is trying to achieve (I watched the video – man, I’d have preferred text – and I agree with many of Kellie
Peterson’s points… but I still don’t have a clue what she’s trying to achieve!).
That all sounds like I’m dumping on forks. That’s not the case. Did I mention that ClassicPress is great? I’d be using it myself if it weren’t for the fact that I use one plugin that’s
incompatible with it! Maybe some day.
I guess what I’m dumping on is the idea that the best way – or even a tolerable way – to fix WordPress’s shortcomings involves re-writing it in a different programming
language. If you’re going to start over, you might as well start over better: I’ve long been impressed by Kirby, for example. NextPress,
though? I’ll pass.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
Ugh, I’ve had enough of the WordPress community drama that’s going on right now. I appreciate that I’ve contributedandamplified, and you can call me a
hypocrite if you like, but sometimes you just need to step away and get on with things.
I love WordPress. I’ve been blogging since 1998 and on WordPress since 2004. There are few or no pieces of software I’ve used as long. It’s got some sharp edges and
smells1, but it’s still a great CMS and an excellent blogging platform.
I love open source. About once every 4 years I contemplate switching platforms for this blog. I often try out a few; sometimes I’ve even implemented like-for-like themes and
functionality only to throw them away. The closest I’ve got to switching has been when I tried ClassicPress2,
Kirby3,
and a homegrown toolchain that eventually grew into Bloq (which I must open source the rest of some day). But it’s always to an open source solution.
I love Automattic. I’ve worked there for five years, this week4, and that’s primarily because I get to work on cool open source things that
help the world, alongside smart and principled folks I get to learn from all the time. And I truly believe that Matt has the best interests of both
Automattic and WordPress at heart, even when he sometimes trips over his own tongue and courts controversy5 by choosing his
words, or his timing, badly.
In this metaphor, Fry is played by Matt, but his understudy is, y’know, everybody else who’s made a scene. Me included.
But man, the drama’s gotten out of control. It’s at the point where it’s gone from a niggle to a distraction. It’s stressful.
And I’ve got colleagues who’ve been affected by it much more than me: just today, a colleague announced that he’d be departing from his role at Automattic after close to nine years, and
among the reasons he cited was a mention of the stress and uncertainty created by, y’know, recent stuff. He’s clearly not the only one.
I just want to get back to writing blog posts about whatever random shit I’m thinking of when I’m not at work, and making awesome (and often open source) WordPress-adjacent software
when I am at work. But right now, I can only achieve that if I put my fingers in my ears and close my eyes and sing “la la la la la” at the top of my lungs.
Ugh.
I look forward to a time with less WordPress drama. But, sadly, I don’t think that’s coming any time soon.
Footnotes
1 Naming structures, legacy hooks, 50% of all plugins, fucking wpautop, etc.
2 I don’t use Gutenberg functionality on this blog anyway, and I like their media library,
but I can’t make VaultPress JetPack Backup – which has saved my bacon a few times – work on it.
3 I’m not impressed with the plugins for commenting and webmention integration in Kirby,
yet. I’m also not a huge fan of their licensing model; I’m happy to pay for a license (I have paid for one, though I’m not actively using it!), but I don’t want to feel
forced to pay for one. That said, I’m contemplating trying it out on my family intranet as a P2-like tool.
4 Which means I’m eligible for my first sabbatical – that’s crazy! – more on that later.
5 Hey, we’ve all done it. Well, any of us with enough influence and attention in our
field, anyway. It’s only a matter of time; that’s part of being human!
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
<pclass="feed-email-link">
Thanks for reading this post via RSS. RSS is great, and you're great for using it. ❤️
</p>
Kev’s RSS feed contains this message appended to the content of each post
Matthias went on to mention a snippet of WordPress code shared by Jeremy Herves, which he uses
to achieve a similar thing but with a randomly-selected one of eight different messages of thanks:
/** * Display a nice welcoming message to folks reading posts via RSS. * * Kudos Kev Quirk for the idea! * * @param string $content The current post content. * * @return string */functionjeherve_welcome_rss_readers( $content ) {
$welcome_messages=array(
'Thanks for reading this post via RSS. RSS is great, and you’re great for using it. ♥️',
'Congratulations on being an RSS reader! You are part of an elite group of people who know how to stay updated in style.',
'Hey there, RSS reader! You’re one of a special few, choosing this old-school yet awesome way of staying informed. Kudos!',
'You are a true RSS aficionado! While others are drowning in social media noise, you enjoy the simplicity and control of RSS. Congrats!',
'RSS readers like you are the unsung heroes of the internet. Keep up the good work!',
'You are a master of efficiency! By using RSS, you save time and avoid distractions. 👏',
'RSS readers like you are the secret sauce of the internet. Keep rocking and staying informed!',
'Hey there, RSS reader! You’re cool. Keep being awesome! 😎',
);
$welcome_message=$welcome_messages[ wp_rand( 0, count( $welcome_messages ) -1 ) ];
returnsprintf(
'%1$s<p>%2$s</p>',
$content,
$welcome_message
);
}
add_filter( 'the_content_feed', 'jeherve_welcome_rss_readers' );
Jeremy’s solution.
Like Jeremy, I was inspired by Kev Quirk and have been appending a message onto my posts in RSS feeds for a while. My approach is a little different, though:
Rather than a random number, I use the post ID modulus the number of random messages to choose which “random” message to select. This means that a given post
has a consistent message, which minimises the risk that a post will be detected as having been “changed” by a feed reader, and it also helps to reduce “runs” of the same
message after multiple posts in a row. I have a prime number of random messages to reduce the risk that patterns in my posting (e.g. a series of posts, without drafts, each with
exactly one image, like my recent and ongoing Bleptember series) end up introducing a predictable pattern to the messages.
I only use the random message if a specific one is not provided via postmeta. I’ve got a metadata field in my editing interface which, if filled, overrides the random
message. This lets me put a specific or targetted message in, usually/especially if I’m talking specifically about RSS-related things!
When I author a post, sometimes I’ll override the message that appears for that post.
Here’s the code I use to inject the messages into my RSS feed:
functionq23_rss_thanks_default( $post ) {
$rss_thanks_messages= [
"💖 RSS is fantastic, and so are you for using it. 🎆",
"👏 Congratulations on being an RSS user. 🎉",
"🥰 You're reading this post via the RSS feed. That makes you one of the best people on the Internet! 🏆",
"📰 Using a feed reader is the best way to read my blog posts. How clever you are to know that! 🚀",
"🌟 You're reading this post via the RSS feed, you star! 🌠",
"🪄 Feeds are wonderful, and you're a wonderful person for using them. 🔮",
"❤️🔥 You're reading this post via the RSS feed. You're on fire! 🔥",
"🧨 RSS is dynamite! Thanks for subscribing to my blog. 💥",
"🤘 You're subscribed to DanQ.me using the RSS feed. You rock! 🎸",
"🕵️ Subscribing to DanQ.me's RSS feeds means that you'll get to see secret bonus posts not publicised on the main site. Clever you! 🧠",
"🧡 I love RSS feeds. And I love you for using them. 💙",
"🎗️ Using RSS feeds is a great way to keep up-to-date with my blog. Thanks for subscribing! 🤗",
"🦸 You're my hero! (For using RSS to follow my blog.) 🥇",
];
$post_id=intval( $post?$post->ID:0 );
return$rss_thanks_messages[ $post_id%count( $rss_thanks_messages ) ];
}
functionq23_rss_thanks( $content ) {
global$post;
$rss_thanks_message= get_post_meta( $post->ID , 'rss_thanks_message', true );
$rss_thanks_message=empty( $rss_thanks_message ) ? q23_rss_thanks_default( $post ) :$rss_thanks_message;
return$content."<p style=\"margin-top: 0.5ch; padding-top: 0.5ch; border-top: 1px solid #ccc;\">$rss_thanks_message</p>";
}
add_action( 'the_content_feed', 'q23_rss_thanks' );
Note my use of intval( $post ? $post->ID : 0 ) to get the post ID, % count( $rss_thanks_messages ) to get it-modulus-the number of messages, and my
get_post_meta and empty( ... ) check to allow post metadata to override it. Oh, and that code is CC0/public domain, if you want it.
Regardless of whether or not you love RSS as much as I do, thanks for reading my blog via RSS!
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
One rainy weekend a few weeks ago I wrote a really, really stupid WordPress extension, and I think it might finally be time to show it to the world (and open-source it, in case anybody
wants a copy of their own).
But before I do that, I’d like you – yes, you – to help me test it out and check that it doesn’t break my blog too much! 🤞
This might be a bad idea. 🍆
The extension replaces the comments form’s <textarea>, on selected posts, with a <canvas> and some code1 to let you draw me a
picture instead of typing a comment. You’ll be assigned a random palette of colours2:
perhaps see if you can think of something to draw that makes use of the colours you have available?
Draw me something you can see. Draw me something abstract. Draw me something thoughtful. Draw me something scrappy. Just scrawl your thoughts in your own handwriting. Draw whatever you
like3.
The tools I’ve provided are neither good nor easy-to-use, and that’s deliberate: it helps level the playing field between the talented artists and us regular Joes.
Naturally, the comments section below might be NSFW. That’s always true, I suppose, but perhaps doubly-so today.
Anyway: I hope that you’ll scroll down and draw me a picture. Everything should get piped through my usual moderation queue so if you’re not a regular commenter you might find
that your drawing doesn’t appear rightaway.
You’re among the people who get to see this thing first. Grab your paintbrush!
I might copy some of the drawings below to my upcoming blog post publicly announcing the feature. If you don’t want me to do that with your drawing, put a note in the “Name”
field – e.g. put “(private)” at the end of your name! – so I know not to.
1 Obviously this silliness requires JavaScript, but in the spirit of progressive
enhancement you’ll still get a classic comment form if you don’t.
2 Don’t like the colours you’ve been assigned? Wait until somebody else comments, or 20
minutes, and it’ll change. You can’t just change it client-side though, you sneaky hacker: the colours are generated server-side and signed with a salted hash to prevent tampering!
3 I appreciate that when I try this out with a wider audience I’ll probably see a lot of
penises. If you want to draw a penis, I suppose you can, but please don’t.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
Three decades ago, as a child, I was a victim of sexual abuse.1
For most of those decades, I wouldn’t have told you about it. I couldn’t have. By a variety of denials, distortions, and disassociations, for the vast majority of my life I
repressed, rationalised, and reframed what happened to me; hiding the truth behind a series of psychological defences.
At one point, for example, I’d internalised the events as both consensual2
and unimportant… to the extent that I intellectualised the fact that I wasn’t seeking nor receiving help for a clearly-traumatic experience as evidence that it
wasn’t really wasn’t a big deal.
By a later point – and for most of my adult life – the mental wound was wrapped in so many overlapping layers of shielding it became nearly impossible for me to reach the memories at
all. And where I could, it felt like a half-remembered dream.3
Without going into detail about what precipitated it, suffice to say: I ended up in therapy. I’ve seen several rounds of therapy over the last few years, punctuated by “homework”
periods of exploration by myself, or with on-demand help from specialised services. My initial goal was to find a safe environment in which to unwrap that long-hidden psychic injury,
to allow myself to grieve and, perhaps, begin to heal.
A challenge I faced right from the start was a nagging doubt that I really had made the whole thing up. That none of it was real. That I was wasting my time and everybody
else’s, chasing the tail of a dream.
My journey of proving to myself that my recollection could be trusted was an odyssey in itself:
It involved revisiting places from my childhood, physically walking in the footsteps of my younger self: one foot firmly in the safety of adulthood while the other stepped tentatively
into a childhood reverie.
It involved Subject Access Requests to the NHS followed by hours of poring over ancient notes, handwritten by
doctors4,
faxed, partially-censored5,
then re-scanned for delivery to me.
It involved awkward and tearful conversations with people whose circumstantial recollections of events on the fringes of my memories helped narrow down a timeline. Helped show me what
was real. Helped me to at last be able to say out loud the truth:
Three decades ago, as a child, I was a victim of sexual abuse.
Since then, my recovery has had a different focus: “joining the
dots”. Even though I spent my teens, twenties, and most of my thirties unable to consciously comprehend what happened to me6, it seems
inconceivable that my experience won’t have unconsciously shaped my later life.
Being unable to conclusively say how it did so – or rule out how it didn’t – is uncomfortable. I’m working on that.
Was my vulnerability to falling into an abusive relationship as an adult foreshadowed by my experience as a victim of sexual abuse as a child? What other connections can
be found in my life, my personality, my presentation, my sexuality, my identity, my outlook…?
Not to go all Sliding Doors, but: who would I be had one pivotal moment in 1991 gone differently? And would that be a more… authentic “me”?
You might rightly ask why I’m blogging this. The answer is integrity.
I’ve been blogging for more than half my life, and it simply feels inauthentic to avoid writing about this. I want there to exist a post – this post – that one day,
maybe, I can link back to. From a post, perhaps, in which future-me recontextualises this point in my life through the lens of hindsight. I’d feel dishonest to conceal one of
the most-significant things I’ve been up to these last few years!
But this post’s publication is artificially limited. It won’t appear on my recent posts lists, nor get syndicated to a half dozen different social channels. You can share
it or linking to it or talk about it – those things are all fine – but I just don’t want it to be dominate my homepage, overshadowing whatever I write next. People who just
casually drop by my site don’t need this post in their face!
You chose to pass the content warning. You chose to read this far. And I’m really grateful that you did. Because now you get to be part of the story of my recovery, too. If
hypothetical future-Dan links back here one day, you’ll know that you were a small part of the journey I took to get there. So: thanks.
I’m still “recovering”. But I’ve come a long way over the last four or so years, and the hardest parts are, I’m confident, now behind me.
Footnotes
1 Don’t get hung up on terminology. Even legally-speaking, definitions vary: today, it
might be described as kidnapping and sexual assault, but these are terms whose meaning has changed in the interim. Again, though: the terminology’s not important.
2 Again, I’m not interested in getting hung up on terminology. But in the unlikely event
that it needs stating: a ten-year-old is neither legally nor developmentally competent to consent to sexual activity with an adult. Fucking obviously.
3 I spent the longest time in a state of cyclical reasoning: I must have completely
imagined it, because if it had really happened, then I’d be traumatised, and if it was that big I’d be able to remember it clearly, right? This outermost line of
psychological defence stood impenetrable for twenty years.
4 The oft-told joke about doctors’ handwriting becomes significantly less-funny when each
sentence deciphered is a fragment of a story a child was too hurt to give voice to himself, too scared to share in a way that he would be understood.
5 Over-zealous data handlers, fresh from their GDPR compliance courses, for some reason saw fit to black out my parents’ names from some (but not all) of the documents I
received in response to my SAR. Like I wouldn’t know who was meant when they wrote, for example, “Daniel was brought in by his
mother, [redacted], on 19 June 1991”!
6 Perhaps-unsurprisingly, my memories “around” the period during which I was victimised
have long been shaky, too, compared to my earlier and later childhood.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
I first met my now-metamour JTA 19½ years ago (the week after next).
For most of that time I’ve been aware of, and have ocassionally mocked, his capacity for nostalgia, which is so strong that he’s able to look back on things that he never even
experienced in the first place: he still wants his eleven days back, for example.
This post might have been inspired by Last Call BBS, which incidentally is on sale on GOG and Steam this week…
But his demonstrable nostalgia for technology (even from before his time) is something I really appreciated
when it gave me a “buddy” with whom to watch BBS: The Documentary (and Get Lamp) many
years ago. Despite having missed out on the BBS scene and only brushed the edges of text based adventures, he can really “get”
the enthusiasm for it. And that’s awesome.
Anyway: if you’ve not tried Zachtronics‘ final game Last Call BBS yet, it’s worth a look. At least: it is if you
either have fond memories of trading warez on clandestine dial-in microcomputer systems or else have a love for that whole BeOS aesthetic and want to experience the 90s dial-up world
one last time (in a rose-tinted way)!
Update: I suppose if I’m talking about nostalgic tech, I should point out that this post is available over Gemini (gemini://danq.me/posts/not-stalgia), Gopher (gopher://danq.me:70/0/not-stalgia), and even Finger
(run finger not-stalgia@danq.me at your favourite terminal…).
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
I’ve soft-launched a bit of a redesign on DanQ.me: the old one was getting a little stale, and I wanted space to try out some new ideas!
The new design is squarer, flatter, and fluidly-responsive (without breakpoints).
A major “theme” to my new design has been technical simplicity and performance. WordPress is great as a CMS, but the fact
that it’s so easy to install “just one more plugin” to solve a problem can leave some WordPress sites feeling a little bloated. Plus, heavyweight sites seem to be the norm
these days, sadly!
So I’m proud to have –
Almost halved the number of WordPress plugins in-use from 35 to 18. (Of those 18, two are mine.)
Dramatically reduced the number of scripts and stylesheets injected into the frontend by plugins from 7 to 0. (Virtually all the plugins that remain are for backend functionality.)
Halved the total Javascript payload of a typical page from 8.3kb (compressed) to under 4kb (uncompressed, with full comments).1
Made the Javascript and CSS that remain so small that they can be inlined, in their entirety, into each page, and
still fit into a typical TCP slow start window.2
Re-encoded most of the images as WebP for browsers that support it.3
What else? Lots of things that I’d been meaning to do for ages, but wanted a clean slate for:
Ignoring the nice new maps for a moment: I’m pretty pleased with these <details> elements, enhanced with a little stylistic CSS.
Improved accessibility, especially with regard to colour contrast.
Switched out the maps that appear on checkin posts so they’re precached images from OpenStreetMap rather than Google Maps.
Added a second font (oooh!), for headings. I’m still not 100% convinced by it.
Made it easier to see how people can reply to my posts, including by email.
Added code to discourage search engines from indexing “RSS Club” posts, like this one!
And lots more!
My aim is not to deliver this new generation of my site and have it be “complete” for a few years, like on previous ocassions.
Somehow, my “things to do while redeveloping the site” list has gotten longer as I ticked items off!
Instead, part of the reason I’ve gone for a blank slate is to try to make it easier for me to do some “personal website gardening” more often. Lately I’ve written a lot of
content… but I haven’t done much with my code. My digital garden has been delightful to relax in, but unruly to cultivate. A fresh start makes it easier to work on new things.
Footnotes
1 All Javascript remains optional, and the site works fine without it. Progressive
enhancement for the win! Specifically, the Javascript on this site (a) launches a service worker, to enable “smarter” caching and so improve performance, (b) fires up instant.page, to start preloading links when you hover over them briefly and so improve performance, (c) make 360° photography WebGL friendly, and (d) make
some disclaimer text “dismissible”. That’s all.
2 This is a Web Performance 201 thing. Here’s the skinny: while a web server is working out how much data it can
dump on a user agent at once, it’ll typically send out about 14kb in the first tranche of data and then wait for guidance from the user agent before it continues. If you send 8kb of
HTML in that first 14kb window, and then the browser parses the HTML and realises it needs 4kb of CSS too, then the browser it has to make a separate
request for that CSS. In that instance, it would have been more-efficient to include the CSS in the initial HTML! This flies in the face of everything you learned in
Web Performance 101 because that CSS now can’t be cached and re-used for subsequent page loads, but so long as most
pages (by popularity) come in under the 14kb window it’s always more-efficient to bundle them with some of their resources. It reduces the length of your request chains too. Same
principle applies to other dependencies – even (small) images!
3 Even my image-heavy homepage would comfortably fit twiceonto a 1.44Mb 3.5″ floppy disk, with all resources, nowadays. I mean: if that’s the kind of
thing you’re into.
4 I learned to code on the Web with thanks to View Source, and while I respect that the
(new-fangled) Inspector tool is generally more-useful, I still think we owe it to future developers to not obfuscate the kinds of code that we ourselves learned from.
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
Despite my best efforts, I periodically find myself running teams: usually only when anybody who could conceivably be better at it is unavailable. I’m not… terrible at it, but
I’m not great either, and I get frustrated if I spend more of my time in meetings than writing code (which seems to often be the case when I take any kind of managerial position).
A conversation with my excellent coach this morning1
got me thinking about leaders I’ve worked alongside or under that I particularly admire. Especially those who’ve demonstrated skills that I don’t have, or that I’m weaker at, but that I
could learn to improve. Those that came to mind include:
Formerly at the Bodleian, my colleague Liz, who
seemed to make project management look effortless: keeping track of dozens of moving parts while promoting a relaxed, creative atmosphere. I competed with her for a
management role once; I’m so glad she got it, she did a much better job than I would have.
Three Rings‘ head of development (who took over from me last year, allowing me to focus more on the technical
aspects of my work) Beverley, who brings emotional honesty in professional environments. I admire the fact that they’ve got the
courage to start a meeting by asking everybody present, for example, “what kind of weather represents how you’re feeling right now?”
My team lead Bero at Automattic, who’s proactive support in putting his team first means I’ve always felt safe to speak my
mind.
It’s perhaps inevitable that I’ll keep ending up in leadership positions, whether ir not I desire it!
But I’m optimistic that a greater awareness of the places I’ve got potential to grow as a person will help ensure that when it happens, I’m a better leader than I was the previous time.
Footnotes
1 My coach also inspired my blog post about doing what you’re bad at and the accompanying vlog
version. I always come out of sessions with her with so many ideas for blog posts, but – as always – I have less spare time for blogging than I’d like!
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
For members of RSS Club (all of whom I follow, thanks to FreshRSS‘s awesome Dynamic OPML
feature), RSS Club provides varying purposes. We probably all agree that it’s a great excuse to celebrate how awesome
RSS is, but beyond that we differ.
A common purpose seems to be to provide a platform that’s slightly less well-publicised, slightly more-ephemeral1
than the majority of the content that authors put on their blog, while still continuing to host and control it indefinitely. I’ve enjoyed seeing how some members choose to show content
via RSS only that they might not be ready to share more-widely: weeklogs, half-finished ideas, and so on.
That’s been a big part part of the attraction for me. As my drafts folder continues to grow and half-finished ideas stagnate indefinitely, I’ve become increasingly concerned that I’m
perhaps too much of a perfectionist about my blogging. Rationally, I know I needn’t be, for two big reasons:
The popularity2
of a post seems to be only barely-related to the amount of time that went into it. Consider for example:
Sisiphus: The Board Game (Digital Edition) was thrown together in about two and a half hours and that includes the time taken to
implement the game, and really took off – enough that I feel embarassed by the apalling code I wrote to make it!
My primary target audience for my blogging for the last few years remains: myself! I aspire to write content that I myself would enjoy, distribute it by appropriate channels in
case it’s of interest to others, and not care one way or another about whether anybody else ever reads it3. Clearly I don’t always succeed, as I’ve demonstrated in the
bullet point above, but that’s my goal and for the most part it works for me.
I’m trying to get better at publishing things when they’re “good enough”, and RSS Club is in some ways a gateway to that. In
my RSS only posts, I don’t always feel like I even have to re-read them before I click “publish”. If there are
mistakes, I’ll go back in and fix them later! It’s an effort to encourage a more-casual and laid-back attitude to my blogging, and I feel like it’s working.
Also; writing RSS only posts helps me feel like I don’t have to stay on-topic as much as I might otherwise. On which note:
I’m really loving how the “Twitter Migration” has breathed a whole new level of energy into the Fediverse; I dusted off my old Mastodon server earlier this month, installed… umm… let’s
just say a lot of patches (ahem)… and started chatting to newcomers. I’ve helped a couple of other instances manage their scaling-up, and I’m loving the fact that the old vibe
still remains and the toxicity of the “birdsite” has so far been kept out. Fingers crossed for its future. If you’ve not come and said hi to me there yet, you’ll find me – of course –
as @dan@danq.me.
Footnotes
1 Like Derek’s notes, where you can only see
the most-recent 10 unless you already know where they are (or are, you know, willing to reverse-engineer the source code of his
“random note” page: the risks of a static site implementation!).
2 I’m only really able to track popularity by direct feedback, such as comments and
reshares, because I’ve been working at stripping all other analytics tools out of my infrastructure to improve the performance and privacy footprint of my personal websites.
3 Again: this is part of why I actively avoid analytics!
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
Having upgraded FreshRSS last week for the new XMLPath scraping feature, I’m also
loving the dynamic OPML feature! Dave Rupert’s RSS Club publishes an OPML feed of its members and that means I’m able to instantly and dynamically subscribe to all my fellow RSS Club members.
It’s been interesting – but perhaps to be expected – to see the overlapping interests that many of us share outside of the joy of RSS!
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
I’ve started publishing posts that are only publicised on my RSS feed (and places that syndicate it, I suppose), not on the
HTML pages of my blog nor via any social media channels. It’s a concept promoted by Dave
Rupert as “RSS Club”. Of it, he says:
What kind of content should you post? Whatever you want. More personal, less personal, weird. It doesn’t matter.
These posts aren’t very “secret”; they’re at publicly-accessible web addresses and linked from a publicly-accessible, promoted feed. But in an era where feed readers don’t
enjoy the popularity they once had (and perhaps still ought to have!), it provides a fun and quirky way to artificially reduce the audience that some of your blog posts get. So
I’m enjoying playing with it a bit.
I came across the idea via Jim Nielsen‘s blog, and I’ve wanted to get in on the action for a while, but I’d been putting off getting the code
in place to support it. Dave uses Jekyll, so he just had to tweak his buildchain to not include his
“RSS only” posts. I assume Jim’s process was similar (he’s powered by Metalsmith). But
me? I’ve got multiple decades of history in WordPress format, and I can’t see that changing anytime soon, so I needed to roll my sleeves up and get
hacky before I could join the club.
I tried Lutz Schröer‘s plugin, which should have “just worked”, but it didn’t: probably
because of the huge stack of custom code I’m already running on this site! So instead I came up with my own. My goals were:
Posts with the “rss club” tag should not appear on listing pages, blog search results, previous/next post links, the homepage, or in the “related posts”
section.
But these posts should be visible if you go directly to their URL, as well as in RSS feeds, and if you go to the listing page that specifically shows all posts with that tag (incidentally, WordPress takes this setup and ensures I
have an RSS feed of just the “RSS only” posts!).
My resulting code turned out tiny – much smaller than the plugin I couldn’t make work – so I just dumped it into my theme’s functions.php. In case it’s any use to you, here
it is:
// Posts tagged "rss-club" shouldn't appear outside of RSS, so:// 1. Prevent main queries from returning such posts, except in RSS feeds:functionrss_club_pre_get_posts($query){
if ( is_admin() ) return; // always see rss club posts in the admin interfaceif ( is_feed() ) return; // always see rss club posts in RSS feeds, duhif ( is_tag( 'rss-club' ) ) return; // if we've found the rss-club tag and we're specifically looking for things in it, show them$tag= get_term_by('slug', 'rss-club', 'post_tag');
if ( !$tag ) return; // if we don't have an rss-club tag, drop out here// filter the query:$query->set( 'tag__not_in', $tag->term_id );
}
add_action( 'pre_get_posts', 'rss_club_pre_get_posts' );
// 2. Previous prev/next links "skip over" such posts:functionrss_club_prev_next_where($where){
global$wpdb;
$secret_post_ids=array_map('array_shift', $wpdb->get_results('SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id=1137', ARRAY_N)); // need to use wpdb so we don't hit our own hook above!$secret_post_ids[] =-1; // add a dummy item to ensure the SQL is valid even if there are no secret posts$secret_post_ids_list=implode(',', $secret_post_ids);
// Append our filter onto the query:return$where." AND p.id NOT IN ($secret_post_ids_list)";
}
add_action( 'get_previous_post_where', 'rss_club_prev_next_where' );
add_action( 'get_next_post_where', 'rss_club_prev_next_where' );
This post is secret; you can only find it via my RSS feeds (and places which syndicate them). It's okay to talk about it or link to it, though. Thanks
for being part of RSS Club!
My mental health has good days and bad days. Most days are good days, but bad days tend to cluster together, 2±1 times a year, into a significant low spell. Because I’m keen on developing coping strategies for when I’m not doing so well – and because I’m a nerd – I’ve been trying to understand what a depressive episode looks like.
Let’s draw a curve:
When life’s a rollercoaster, you make rollercaosterade graphs.
For most of my life, I’ve often only been able to see the shape of the curve as I come out of it; about point “C” on the graph, or even later on. One time, about 12 years ago,
I had a bad winter that I couldn’t identify as depression until months after it ended. I just sort-of internalised my sadness and lethargy as “just who I am”; it took a lot of
distance before I could say “oh wow; I was really low back then”.
Nowadays I do a lot better: I tend to spot that I’m depressed at about point “A” on the curve. That’s before I hit the bottom, which helps with taking steps to mitigate the worst of it
(talk, diet, mindfulness, exercise, sunlight, etc. as applicable).
It’s still not as soon as I’d like, but better self-awareness will, I hope, keep pushing point “A” earlier and earlier. The challenge is, of course – as any data scientist can tell you
– not getting distracted by false maxima/minima:
Zoom and enhance! The smooth ride downhill at point “A” might be bumpier up-close.
Getting to point “A”, making positive steps to try to course-correct, and then feeling better for a few days doesn’t necessarily mean I’m on the up-and-up, and that’s
dispiriting. But still: having the full curve to-hand serves as a reassuing reminder that, in the end, I’ll come “up” the other side, as I have time and again. This too shall
pass, and all that.
Point “B” is where I often get sick, as a reminder that psychological and physical health so often go hand-in-hand. It’s a bit disheartening that I’m usually right at the point where
I’m thinking “hey, things are getting better” and then the next day come down with a cold or something, but at least it’s on the right hand side of the curve. I’m acutely aware of this
part of the process because I got sick early this week and I’m still not quite feeling myself again, but still: at least I’m on the up-swing of the curve.
I’ve gotten to be moderately good at spotting the whys that act as harbingers to upcoming low spells. So now I’m focussed on understanding the hows of what it’s like
to enter and leave them. Maybe someday I’ll be good enough at making course-corrections, early enough, that I can flatten out these graphs. But for now, I’m going to get back to my
point-“B”-to-“C” self-care.