Not-stalgia

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.

Screenshot of the game Last Call BBS, showing a fictional operating system initiating a dial-up connection to a BBS; a game of Solitaire can be seen in the background.
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 Zachtronicsfinal 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…).

Screenshot of the game Last Call BBS, showing a fictional operating system initiating a dial-up connection to a BBS; a game of Solitaire can be seen in the background.×

A Little Redesign

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!

Screenshot showing the homepage of DanQ.me. The headline post is "How cool are Silo's credits?"
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:

Screenshot showing a "footer" area from a checkin post, showing links to other posts, a map showing the location (in Athens) of the checkin, tags, and syndications.
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.
  • Made my HTML nicer to read in View Source mode.4
  • Added some new static pages: a colophon to explain how the site works, a summary of the implications of the license I publish under, etc.
  • 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.

A blurred "todo" list; about half the items, mostly towards the top, are done.
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 twice onto 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.

Screenshot showing the homepage of DanQ.me. The headline post is "How cool are Silo's credits?"× Screenshot showing a "footer" area from a checkin post, showing links to other posts, a map showing the location (in Athens) of the checkin, tags, and syndications.× A blurred "todo" list; about half the items, mostly towards the top, are done.×

Inspiring Leaders

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!

What is RSS Club for?

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:

  1. The popularity2 of a post seems to be only barely-related to the amount of time that went into it. Consider for example:
  2. 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!

Note #20563

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!

RSS Club for WordPress

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:

  1. 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.
  2. 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Posts tagged "rss-club" shouldn't appear outside of RSS, so:
// 1. Prevent main queries from returning such posts, except in RSS feeds:
function rss_club_pre_get_posts($query){
  if ( is_admin() ) return; // always see rss club posts in the admin interface
  if ( is_feed() ) return; // always see rss club posts in RSS feeds, duh
  if ( 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:
function rss_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' );

The Shape Of Depression

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:

Graph showing mood dipping over time, and then climbing again. A point just before the lowest ebb is labelled "A". A point just after that is labelled "B", a point most of the way back up the side is labelled "C".
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:

Graph showing a portion of the "downhill" section of the earlier graph, but instead of going down across its entire length, it goes down, then up again, then plunges down once more, creating a local maxima.
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.

Update: turns out that what I was coming down with at point “B” this time was Covid. Delightful.

Graph showing mood dipping over time, and then climbing again. A point just before the lowest ebb is labelled "A". A point just after that is labelled "B", a point most of the way back up the side is labelled "C".× Graph showing a portion of the "downhill" section of the earlier graph, but instead of going down across its entire length, it goes down, then up again, then plunges down once more, creating a local maxima.×