How to set up an IRC server

Adam in Setting up an IRC server / a Neatnik Guide:

You don’t need Discord for plain text chat. IRC gets the job done just fine, costs less than a “server boost” to run, and puts you firmly in the driver’s seat (especially where privacy is concerned). And you also get to run a real server, not whatever it is that Discord considers a “server”, which is definitely not a server.

Great guide from Adam on how to set up an IRC server. I love IRC. I think I might set up a general chat server at some point, share the details here and see if someone pops up.

More people should.

forecourt networking

The way I see it, few parts of American life are as quintessentially American as buying gas. We love our cars, we love our oil, and an industry about as old as automobiles themselves has developed a highly consistent, fully automated, and fairly user friendly system for filling the former with the latter.

I grew up in Oregon.

Premium: The Hater's Guide To Microsoft

Have you ever looked at something too long and felt like you were sort of seeing through it? Has anybody actually looked at a company this much in a way that wasn’t some sort of obsequious profile of a person who worked there? I don’t mean

Starmer's moment of reckoning
Where is the competent boring government we were promised?
Starmer's moment of reckoning
Where is the competent boring government we were promised?
The Tragic End of the New START Treaty
The Expiry of this Nuclear Arms Control Pact Is a Loss for the World, America, and Me
Linux on Apple silicon

It's been hectic lately. Once things settle down a bit, I think I'm ready.

Going to give Asahi Linux a go.

It's disappointing every time

Today I came across a post in my feed reader. From a blog that I've enjoyed reading for a long time. It's been raw, personal and distinctly human.

Imagine my surprise then, this afternoon when I opened the new post only to be greeted by the classic "Here's why XYZ makes sense" followed by a generic boilerplate list of bullet point that doesn't really say anything at all.

When a real human being I've connected to on some level resorts to using AI to generate posts for their website, I feel conned. A dupe that's fallen for a classic bait and switch. And, look, I get why some people might want to use AI to assist in creating content. But when I follow a personal blog, I want to read things actually written by that person. I want a glimpse into the mind and existence of another human being. My quota of AI generated marketing slop gets filled elsewhere.

After I wrote What we make, I came across a new post on Brandon Sanderson's blog.1 It's a transcript (it would be a great plot twist if the transcript was AI generated) from a talk Sanderson gave called "The Hidden Cost of AI Art". He tackles the subject far better than I ever could, and the talk is worth watching or reading.

I've only read the transcript.

The following part captures the essence of why using AI for creating quote-unquote art is entirely pointless (emphasis mine):

…the books aren’t the product. They aren’t the art--not completely. And this is the point. The most important thing to understand is that the process of creating art makes art of you.

My friends, let me repeat that. The book, the painting, the film script is not the only art. It’s important, but in a way it’s a receipt. It’s a diploma. The book you write, the painting you create, the music you compose is important and artistic, but it’s also a mark of proof that you have done the work to learn.

Because in the end of it all, you are the art.

The most important change made by an artistic endeavor is the change it makes in you. The most important emotions are the ones you feel when writing that story and holding the completed work. I don’t care if the AI can create something that is better than what we can create, because it cannot be changed by that creation.

Many thanks to Brandon for penning these words. Now I have something to refer to when I want to express my view on why AI created blog posts are pointless.

Around the same time, Alberto Galaco published the post What happens when everything is perfect? pontificating some of the same issues. Alberto writes:

That friction between wanting to make something and actually making it used to matter. It was part of learning. Part of ownership. You struggled, failed, tried again, and through that process the idea became yours. When creation becomes instant and disposable, what remains of that bond? What does it even mean to make something anymore?

You should read the full post. I agree with every point Alberto's making. It is clear that this is something that occupies the mind of many smart and competent people, myself notwithstanding. Whatever the eventual outcome of this struggle between man and machine, I hope to see more human written posts in my feed reader in the future.


  1. I have a dedicated category in my feed reader for authors I've read that have a personal website/blog with an RSS feed. Not nearly enough of them do, meaning it's hard for me to keep up with their work. Sad! 

Will the U.S. Strike Iran—or Strike a Deal?
Iranians want a deal on democracy, not a deal on nuclear weapons. We should too.
A Chaotic Start to 2026: I Can’t Retire Yet!
Reviewing January’s projects and publications
Text scaling

Josh Tumath in Try text scaling support in Chrome Canary:

Tip 1: Don't override the initial font size

The default font size comes from the initial value of the CSS font-size property. If an author doesn't specify a size, the initial font-size is medium. But what is medium? Typically it's 16px. But on desktop browsers, users can change it to whatever they want.

Came across this about text scaling, which is definitely a much needed feature, via Luke Harris. Josh's post is clear with good advice on how to support text scaling on your website. I have a ways to go, and need to dive into my CSS to fix it.

Ironically, I've only overridden the initial font size on my site here because I find initial font size to be too small!

The International Order Is Not Dead Yet
But it’s on a lifeline, becoming less liberal, and will only survive if we work hard to reform and renew it
Premium: The Hater's Guide to Oracle

You can’t avoid Oracle.

No, really, you can’t. Oracle is everywhere. It sells ERP software – enterprise resource planning, which is a rat king of different services for giant companies for financial services, procurement (IE: sourcing and organizing the goods your company needs to run), compliance,

Matt Goodwin and the end of England
How one man's career explains our public life.
Matt Goodwin and the end of England
How one man's career explains British public life.
The Cosmere is coming to an Apple TV near you

Borys Kit for the Hollywood Reporter in Brandon Sanderson's Mistborn, Stormlight Archive to Get Movie, TV Show:

Could the next great fantasy screen franchise be here? Apple TV believes so. The streaming giant has closed what has been described as an unprecedented deal to land the rights to the Cosmere books, the fictional literary universe by fantasy author Brandon Sanderson.

Cannot wait!

What we make

Every year I make a family highlights movie. Throughout the calendar year, I try to whip out my camera or, if it is all I have at hand, my phone, to capture a glimpse of something that might be worthy of including.

None of it is anything special. And that is kind of the point. I can't dictate the memories my children retain from the childhood. But, my goal with these videos is to shape them. To reinforce the happy moments we shared as a family. Remind them of how their grandparents — even though they might not see them too often in their day to day lives — were there for every special occasion. Show them that they were happy and active and healthy and loved.

Not rarely I need that reminder myself. In the hubbub of daily life it easy to feel doubt that you're doing enough. Going through a plethora of recorded evidence to the contrary reminds me otherwise.

Making these annual movies is quite an endeavour. Capturing the source material is one thing. Sorting it, deciding what to keep and what to discard as I try to weave a story of the year that passed, is no small task. I am no videographer, no movie director, much as I think myself Wes Anderson's slightly less talented, albeit unappreciated cousin as I'm battling iMovie for the seventh year in a row, trying to remember the key combination for cutting a clip before eventually giving in and looking up the answer. When I'm finally done, I feel relieved.

In this day and age, there are tools out there that could do the job for me. I could just dump the raw footage in a chat and something akin to my yearly movie would pop out after a short while. In all likelihood, the movie it produced would be objectively better than anything I can finagle out of iMovie. Smoother, more polished, with a tailor made soundtrack and so on. Far more impressive.

Sometimes I'm tempted to give it a go. Then I take a step back and ask myself "what would be the point?" and I go back to wrestling with iMovie.

Because I know that the end product, the movie itself, is not the point. Making it is. The magic is in hand-picking the moments that make up our family's highlight reel of the year that came and went. My idiosyncratic use of transitions. The way I abuse iMovie's various title effects to superimpose dry-wit commentary atop most clips. An eclectic soundtrack from my own music library to give my kids little hints of who their father was and what he enjoyed listening to.

All these little things inject a little bit of my humanity into the end product. And that is the point. Not just of these movies, but of anything that you and I and everyone else make. To inject as much humanity as possible into the things we make.

Don't fall for the temptation of using technology to produce something polished, soulless and void of humanity when all that matters is to imprint as much humanity as possible.

The cults of TDD and GenAI

I’ve gotten a lot of flack throughout my career over my disdain towards test-driven development (TDD). I have met a lot of people who swear by it! And, I have also met a lot of people who insisted that I adopt it, too, often with the implied threat of appealing to my boss if appealing to me didn’t work.

The basic premise of TDD, for those unaware, is that one first writes a unit test that verifies the expected behavior for some function they want to write, observes the new test fail, and then one writes the implementation, iterating on it until the test passes.

Talking Trump on The Court of History Podcast
Discussing the fallout from the U.S. president's reckless Greenland gambit
Hidde builds his own digital music collection

Hidde de Vries in I'm back to building my own digital music collection:

Over the past months, I realised it was about time I moved away from music streaming, to keeping a personal music collection that I control.

Great post from Hidde on why he's now back to building his own digital music library. His reasoning is very much in line with why I embarked on the same journey last year.

Related post: Building a digital music library in 2025.

My home server? My laptop

A couple of years back, I began experimenting with self-hosting. I dug out an old laptop and set it up as an always on home server. It did many jobs. Stuff like acting as a file server with access to external storage and backups, automating tasks with scripts, music server, running a torrent client for my legally acquired content and more.

It worked fine. But, the added complexity of another machine bugged me slightly. Most of the tasks could be solved on my daily driver laptop. There was also the fact that it didn't run the latest software from Apple. This caused a lot of friction. I couldn't run Homebrew. It caused a lot of issues when trying to install or update packages. Most current programs would not run on my ancient version of MacOS.

These issues made me want to shut down this "server" and simplify my setup. To do so, I had to solve two problems:

I've solved both problems and decommissioned my old home server. The light bulb moment? Realising that my "home server" doesn't need to be a separate machine. My regular, daily driver laptop can do the job! A server is, after all, just a computer that's always on. My regular laptop can do that, too.

Let's dive into each of the specific problems mentioned above.

Storage space

As mentioned, my laptop doesn't have enough space for all my data. Using cloud storage and an external drive for local backups, I've been able to work around this limitation.

The past year I've been using a remote installation of Nextcloud for cloud storage, and much more. With the aim of simplifying my setup, I wanted a solution that required less maintenance. After considering multiple solutions, I landed on going back to Apple's iCloud.

Both my laptop and phone are Apple devices. iCloud services are neatly integrated. And, having migrated away from iCloud recently, I feel like I have a solid grasp of what my setup should look like to minimise dependency and vendor lock-in.1 After shopping around, I also realise that the 2TB storage tier is actually reasonably priced. Lastly, it let me go back to using iCloud Photos to browse my photos and videos. It works well and I like it.

I don't want to rely solely on a third party and "the cloud" to preserve all of my data. Especially precious photos and videos. To solve this, I've landed on the following routine:

At the beginning of each month, I export all of my photos and videos from the previous month from Photos to my external drive.2 I then export every other file and document stored on my cloud drive to the drive.

Is it bullet proof? No. I'm susceptible to losing as much as a month's worth of data with this approach. In contrast to a total wipe out, something I can live with.3

Remote access

Above I mentioned two specific cases of remote access that I had come to rely on:

  1. Music collection.
  2. Updating my website.

By setting up my laptop as a de facto server, I've solved both.

Accessing my music collection on the go

I iterated through several approaches for making my music collection available remotely. I first tried Doppler and their sync to iOS feature. While I think Doppler is hands down the best app for playing music on both Mac and iPhone,4 I found the sync cumbersome.

Next, I thought of using iCloud Drive as a "music server". Surely some app could watch a folder in my iCloud Drive and automatically add new files to my music library? Well, you'd think so. But no. I couldn't find any decent app(s) that solved this to my expectations. Plus, my phone doesn't really have enough storage to save my full music library locally. Which really only left me with one option: Setting a full-fledged music server.

This was the solution I had been using for the last few months, running Nextcloud Music on my Nextcloud instance. I resigned myself to the fact that I needed a remote virtual server to solve this. As I'd been wanting to test out Pikapods, I decided to try out Airsonic Advanced. It was too advanced (I have no right to be surprised) and I couldn't get it set up exactly to my liking. Instead, I switched to Navidrome and I found it an absolute delight. I couldn't believe how fast and lightweight it was!

It worked well and, as a bonus, I could continue using Amperfy which I had become comfortable with these last few months. One thing was still bothering me: Streaming and caching my music collection from a remote server, when it was already stored in full on my Mac, was incredibly wasteful. Realising I was (again) on the lookout for a music player to play music on my Mac left me feeling like I was back to square one. Eventually, though, the penny finally dropped:

"Navidrome is so lightweight, I could probably run it on my laptop without any issues!"

Using Homebrew, setting up Navidrome on my laptop was a five minute job. Configuring my laptop to automatically launch Navidrome on startup took me another five minutes. Now we're (rocking and) rolling! The native Navidrome web interface is perfect for playing music on my laptop. And all I had to do to access my music collection from Amperfy on my phone was change the server URL and authentication details.

I didn't really mind only being able to access my full library while on my home network. Amperfy has great caching and downloading the albums I want is no hassle. The only inconvenience was keeping my laptop open and awake to access my music.

Luckily, the other penny dropped at this point. This is a solved problem! I already set up a Macbook as a "home server" and there's no reason I can't do it with this particular Macbook. So, I ran the terminal command5 and I was off to the races. Despite decommissioning my home server, I once more had a "server" running at home. Just one that doubles as my daily driver laptop.

Remotely updating my website

With my laptop running as a server, this problem was solved as well. It was simply a matter of updating my old workflows to rely on iCloud Drive instead of my old Nextcloud instance.

Because I'm not the smartest guy around, my site generator is quite simple: A script monitors a "content" directory. When a new file appears, the site generator runs to process this file and upload all the new and modified files to the server that hosts my website. This lets me update my website from anywhere without having to worry about remote access to my home server. All I have to do is save a text file to the content directory. Whichever cloud service I'm using then does the sync magic, and my home server a.k.a. my laptop, updates my website.

Even images exist only as a file in my content directory. If I reference them in a text document, the site generator picks them up and uploads the file(s).

And that's it. I can now create posts and notes from my phone while I'm on the go. I don't know that I ever will, but at least I can rest comfortably knowing that I can. And that's the most important thing.

TL;DR

I tweaked a setting on my laptop to make sure it doesn't go to sleep when power is connected. I connect to it with my phone to listen to my music and update my website when I'm on the go.

Postscript

You didn't think I'd actually settle on not being able to access my full music collection while on the go, did you? About five minutes after thinking I could live with that, I remembered Tailscale. With my "server" running a current version of MacOS, I could actually install it and rely on it for proper remote access.


  1. That topic probably deserves its own post. The short version is: Make sure that you control your own data, and that it is stored in open file formats. Picking up your files and going elsewhere is always easier than trying to export data from a proprietary storage solution. 

  2. Photos and videos is a great example of where you should make sure that you have your data stored as actual files on a disk. 

  3. I always imagine that somehow a "delete all" command will hit my cloud data. Because of syncing, it also wipes out my local copies. That's why I want complete separation for my backups. In that sense, a disconnected external drive makes perfect sense. 

  4. Doppler's refund policy also deserves a shoutout. I bought the Mac version and tried it for a couple of days. When I found it wasn't for me, I sent them an email and requested a refund. My money was promptly refunded, no questions asked. This experience made me want to purchase more software from Brushed Type. 

  5. sudo pmset -b sleep 0; sudo pmset -b disablesleep 1 disables sleep on a Macbook while connected to power, even when you close the lid. 

Ukraine is not losing the war, but it cannot fight forever
A lasting peace will require Europe and America to work together to raise the cost of war for Russia
the essence of frigidity

The front of the American grocery store contains a strange, liminal space: the transitional area between parking lot and checkstand, along the front exterior and interior of the building, that fills with oddball commodities.

An Especially Flawed Relationship
There have been valid questions about the Transatlantic Relationship for years.
Premium: The AI Bubble Is A Time Bomb
Breaking Trump
It was a week in which you could almost feel the world shudder. But Europe held firm.
Breaking Trump
It was a week in which you could almost feel the world shudder, but Europe held firm and Trump began to lose control.
Thoughts on The Tawny Man trilogy

Say one thing for Robin Hobb, say she knows how to write a trilogy.

The Tawny Man trilogy is the third three-book collection set in the "Realm of the Elderlings". After Liveship Traders took us south to the Satrap's lands of Bingtown, the Rain Wilds and Jamaillia, Tawny Man takes us back North to the Six Duchies. It was here the story kicked off with the Farseer Trilogy.

Tawny Man is a reunion. It centres around the same main cast of characters as the original trilogy, but not without adding new ones to the mix.

As with both previous trilogies, I found myself unconvinced at the outset. Hobb takes her time to set the scene. But, also as with both previous trilogies, this one grew. And grew. By the middle of the second book, I had a good idea of where the story was going. I was hooked. I didn't get many pages (or locs, to be more precise) into Fool's Fate before I was struggling to put the book down.

This is not unusual with Robin Hobb. All of the three trilogies I've read so far all have the feel of one big book split into three, rather than three distinct stories. The middle books in particular don't even pretend to be stand-alone stories. Instead, they build on the foundation of the first book and creates momentum in the story towards the eventual climax in the final third.

I think it's great.

Although Tawny Man doesn't reach the heights of Liveship Traders, it was a very enjoyable read. In terms of where it falls short, I think there's something about the first person storytelling that is limiting. You don't really get enough perspectives to make all the characters (bar one) feel as real and fully fleshed out. That said, I enjoyed getting closer to what is the most interesting character of all of them throughout these stories.

All in all, this felt like a worthy send off for both Fitz and the Fool. But I still wonder if we aren't going to get to hear more about the former's maternal origin. There's a story yet to be told there, I think, and there are some hints that we will learn more about "Keppet" in time.

I'll close with some of my highlighted quotes and passages from the books:

It could not compare to that moment of completion when minds joined and one sensed the wholeness of the world as a great entity in which one's own body was no more than a mote of dust.

Fool's Errand

Hobb has a way with framing that sense of belonging to something greater than just yourself that one can sometimes experience.

Sometimes I think there is more rest in that place between wakefulness and sleep than there is in true sleep. The mind walks in the twilight of both states, and finds the truths that are hidden alike by daylight and dreams. Things we are not ready to know abide in that place, awaiting that unguarded frame of mind.

Fool's Errand

It is a magical place.

It was a boy's thing to do, this immediate offering to share a prized possession, and my heart answered it, knowing that no matter how long or how far apart we had been, nothing important had changed between us.

Fool's Errand

That's true friendship.

His air of petulant command mimed perfectly that of a foppish dandy of the noble class.

Fool's Errand

I just loved that sentence. Poetic.

… (I) knew that, as it always would, the past had broken free of my effort to define and understand it. History is no more fixed and dead than the future. The past is no further away than the last breath you took.

The Golden Fool

The more history I read, the more I come to agree with this world view.

How many words have I set down on paper or vellum, thinking to trap the truth thereby? And of those words, how many have I myself consigned to the flames as worthless and wrong? I do as I have done so many times. I write, I sand the wet ink, I consider my own words. Then I burn them. Perhaps when I do so, the truth goes up the chimney as smoke. Is it destroyed, or set free in the world?

Fool's Fate

More on the futility of capturing the moment, of defining it, and the truth. Doesn't mean we should stop trying. Just that we can never fully succeed.

Every small, unselfish action nudges the world into a better path. An accumulation of small acts can change the world.

Fool's Fate

It is. And it can.

Give him to me, she said with a woman's weariness at a man's incompetence.

Fool's Fate

Close to home!

No man, in the fullness of his years, should have to experience afresh all the passion that a youngster is capable of embracing. Our hearts grow brittle as we age.

Fool's Fate

I've been pondering this. Is it true? Is it self defence that our emotions dwindle as we age?

Home is people. Not a place. If you back there after the people are gone, then all you can see is what is not there anymore.

Fool's Fate

Home is people.

No One Likes a Bully
Reflections on the future of US-European relations in the age of Trump
Wildwood trailer

Wildwood is an upcoming stop-motion movie by the studio Laika. I cam across the trailer earlier today, and it looks awesome. The work and passion that goes into creating a good stop-motion movie is mind boggling.

What really caught my mind, however, was one the main characters, a golden eagle (emphasis mine):

The General, voiced by Honorary Academy Award recipient Angela Bassett, a fierce warrior and leader of the skies

My cousin used to call my grandmother "The General". When I watch this movie I'll undoubtedly imagine that character a representation of my grandmother.

Can't wait!

On Air to Discuss Trump and Greenland
Speaking on MS NOW about why Trump's idea isn’t just dumb — it’s dangerous.
When Denmark sells an island
Trump might think that buying a country is normal
The case for uppercase

Kev Quirk in Use the Bloody Shift Key!:

Personally, I can’t abide it. When I come across one of these posts, even if the title sounds genuinely interesting, I just can’t bring myself to read the content. Instead, I end up focusing on the obvious lack of uppercase letters. I know I’m missing out on interesting posts because of this, and that makes me sad.

I share this pet peeve with Kev. When I see someone omitting uppercase letters from their writing, I simply move on. I know it's a stylistic choice and all, but I just nope out of there. First person I remember seeing doing this was Sam Altman. That alone should be reason enough to reconsider the practice for those who engage in it.

air traffic control: the IBM 9020

Previously on Computers Are Bad, we discussed the early history of air traffic control in the United States. The technical demands of air traffic control are well known in computer history circles because of the prominence of SAGE, but what's less well known is that SAGE itself was not an air traffic control system at all.

Premium: This Is Worse Than The Dot Com Bubble

Soundtrack - Radiohead - Karma Police


I just spent a week at the Consumer Electronics Show, and one word kept coming up: bullshit. 

LG, a company known for making home appliances and televisions, demonstrated a robot (named “CLOiD” for some reason) that could “fold laundry”

Adelaide and the crisis of free speech
The implosion of Australia's literary festival offers some harsh lessons.
McFaul’s World Podcast: Talking Iran with Abbas Milani
Stanford’s leading Iran scholar on the regime, protests, and what comes next
Some disparate thoughts on Badenoch vs Jenrick
Let's just start by recognising that this is very funny.
CSS grid tutorial

Alex Chan in The Good, the Bad, and the Gutters:

To help me understand how this layout works, I’m going to step through it and explain how I built the new version of the page.

You won't find a clearer and more understandable walkthrough of how to set up and style a CSS grid than this one from Alex. Making a note of their trick for fixed height for the cover images for my reading log which is crying out for exactly that.

Update: Inspired by Alex, I've updated the reading log CSS to use fixed height instead of fixed width. Looks much better!

Iran's Protests: what's going on?
My conversation with Charlie Gammell
Mole mac cleaner

Came across Mole: 🐹 Deep clean and optimize your Mac. today. It is an open source, command line based utility for cleaning your Mac.

I generally don't install much, and try to be pretty diligent about keeping my Mac clean. Nevertheless, I was able to clear up a few gigabytes worth of junk that was lying around.

Redesigning my microkernel from the ground up

As you may recall, circa 2022-2023 I was working on a microkernel written in Hare named Helios. Helios was largely inspired by and modelled after the design of seL4 and was my first major foray into modern OS development that was serious enough to get to a somewhat useful state of functionality, with drives for some real hardware, filesystems, and an environment for running user programs of a reasonable level of sophistication.

Helios development went strong for a while but eventually it slowed and eventually halted in a state of design hell.

L'État, c'est moi
From Sun King to Spray-Tan King
Everybody leaves

Except me. I'll never leave. Not ever. I'm here until it's lights out.

Invading Greenland – Trump’s Worst Idea Ever?
It’s time to end this discussion now.
Harry Litman and Michael McFaul: What’s next in Venezuela?
A recording from a live video filmed on 5 January.
Dark Triad: The disturbing personality traits on the British right
A new survey hints at an alarming psychological distinction in political life
The Dark Triad personality traits on the British right
A new survey hints at a deep psychological distinction in political life
Windows? Onedrive? No thanks

Rob Beschizza in Everyone hates OneDrive, Microsoft's cloud app that steals then deletes all your files for Boing Boing:

If you want control over your files (or simply like knowing where they are and be certain they still exist) use another operating system.

Sums up in a single sentence why I'll never again use Windows on a personal computer. The enshittification is unbelievably bad. Rob continues:

And it's such a mess: an operating system packed with ads, upsells and bloat. Something about Microsoft reminds me of oil companies in the southwest: risky environment, externalized costs, nauseating conditions, cunning alignments of liability and safety, no-one cares if it works so long as money is made.

Skiing across a lake

Photo taken on an ice covered lake, where snow covered skiing track are shown under a blue, sunny sky.

Winter finally started in earnest these last few days. Got out for my first cross country skiing session of the year today.

Crossing an ice covered lake in an otherwise quiet landscape is eerie. The ice is constantly shifting, cracking and resettling, resulting in intermittently ominous sounds.

File over app

Steph Ango in File over app:

File over app is a philosophy: if you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you this freedom.

This philosophy is what I hinted at in footnote 9 in my recent post about my current tech stack.

Storing data in open and accessible file formats is the way to go. It minimises lock-in and gives you great portability and freedom of choice.

Buying socks

Socks have always been a problem for me. I remember my mother, back when I was a kid, lamenting that I wrecked my socks too quickly. And this has remained a problem all through my life. I don't know the cause. Perhaps I drag my feet when I walk. Maybe I mess around and slide slide too much, even as a middle aged man. All I know is that when I buy two ten packs of regular cotton socks, holes start appearing a month or two later.

As a forty year old man of means1 I've decided that enough is enough. No longer will I suffer the discomfort of walking around with holes in my socks. Instead, I will approach this problem methodically, with a twofold aim:

In my advanced age, I've come to prefer wool over cotton in many cases. After embarking on an exhaustive study of sock durability, I seem to be in luck. Wool blend socks appear, in general, to be more durable than cotton socks. Further, my extensive research efforts led me towards two particular brands2:

There seems to be a loose consensus in sock durability awareness communities that these two brands offer the most value of any socks on the market. Well, I'll find out.

My first experiment will be pitching Smartwool's Everyday Anchor Line Crew Socks against a Norwegian market generic brand wool-blend sock.3

Now, I fully expect the Smartwool socks to outlast its opponent. But, the thing is, they also cost five times as much. For the price of three pairs of Smartwool socks, I bought fifteen pairs of the generic brand wool-blend socks. Fifteen!

I've therefore devised the following experiment:

Will the three pairs of Smartwool socks outlast fifteen pairs of the generic brand wool socks? I have my doubts, but I will let you know. Naturally, I will also award extra points for comfort, if one or the other stands out in that regard. Like and subscribe to make sure you don't miss the results!4

The second phase of this experiment will be pitching the winner against Darn Tough socks to determine the ultimate winner. Whoever it is, they will, in all likelihood, gain my patronage for the remainder of my life. Well, if I can find a way to purchase Darn Tough's more anonymous colourways here in Norway. I'm just a plain socks kinda guy.


  1. LOL! But I am financially secure to the extent that I am now ready to handle the sock problem once and for all. 

  2. I have no affiliation with any of these brands. 

  3. This online store is my place of employment, and it is where I bought these socks. 

  4. LOL! 

Trump’s Greenland Idea Is Not Only Insane, It’s Dangerous
We need to call it out for what it is.
The U.S. Priority in Venezuela Must Be Democracy, Not Oil
Long-term evaluations of the success or failure of the U.S. military intervention in Venezuela will be determined by what happens next.
AI and the human condition

Ben Thompson in AI and the Human Condition:

Perhaps it follows, then, that the devaluing of labor Patel and Trammell warns about actually frees humans up to once again create beauty?

A person can dream. (Relevant link: The Youtube video Why is the modern world so ugly? by the Cultural Tutor.)

On the whole, I'm with Ben on his optimistic take. In a way, it would be posthumous vindication for J.M. Keynes, who thought that the eventual outcome of technological progress would be that we'd all essentially spend our days with close to endless leisure time.1


  1. It's been a while since my economic history studies, so take this claim with a pinch of salt. 

Malcolm in the Middle is coming back!

Thanks to Robb I came across this teaser trailer confirming that Malcolm in the Middle is coming back.

I loved the original series. Can't wait for this! Hope the full cast is coming back. Looks promising based on the trailer.

Stranger Things
The 1980s Nostalgia of Trump's Foreign Policy is probably going to end up, like Stranger Things, as a horror show.
New Year's Resolutions 2026
How to change your life
Your New Year's Resolutions for 2026
How to make less of a twat of yourself in 2026 than you did in 2025.
Your New Year's Resolutions for 2026
Some practical and political commitments so you can make less of a twat of yourself this year than you did the last.
Thank you Substack Readers!
McFaul's World will be even more active in 2026.
Wearables

Nicolas Solerieu in On wearables:

The marketing is a mishmash of sport, lifestyle, health value propositions fading in a goodness mush, rarely delivering much beyond a wrist-mounted stream of numbers.

Couldn't agree more. After a few years of wearing my sports watch 24/7, I realised that the data and the way it was presented did my head in, and had no positive effect on my health and fitness. For the past couple of years I've worn an analogue watch, only switching to my sports watch to track my actual workouts.

Totals

Screenshot from the workout log, showing differing totals for year and week in the first week of the year.

I am unreasonably proud of getting this right in the workout log before actually getting there and seeing that something was off.

Calendar years and ISO weeks don't really intermingle. Can't wait for the scramble at work on Monday as people start trying to figure out what's what because of this fact.

McFaul’s World — 2025 Year in Review
Looking back on a turbulent year.
2025, A Retrospective

Hey all,

I'm not dropping this on the actual newsletter feed because it's a little self-indulgent and I'm not sure 88,000 or so people want an email about it.

If you want to support my work directly, please subscribe to my premium newsletter.
Out with the old, in with the new

The last day of the year is coming to a close. As I begin drafting this post, four more hours remain until the year of our lord twenty twenty five is but a memory.

I didn't plan on writing a "year in review" for this year. Don't get me wrong, I love it when those posts pop up in my feed reader and I wish more people would write them. This was just a particularly ordinary year on my end. There isn't all that much to report.

But with the four year old in bed and asleep, and the seven year old upstairs playing Minecraft with his mother in an attempt to stay awake until the new year rolls around, I'm suddenly sat in the living room. Alone and with time to spare. So I thought I'd give myself a small challenge. Write and publish a post. Right here, right now, before the year ends. I don't know what it will become. Call it a "word vomit" inspired by Meadow and let's see what comes out.

It was a another year

There was absolutely nothing of particular note to report from my 2025. It was a year without big stories, inspirational turnarounds, remarkable comings of age and uncomfortable upheavals. A good thing, in most respects.

Kids

Both children continued to prosper and grow. At seven and four, we're now reaching that phase of their lives where they might begin to encounter problems outside the little bubble of the world their mother and I can influence. Parental duties so far have been challenging, yes, but rewarding. When their challenges are "small"1 and manageable, you come a long way by just showing up and being there. At the same time, I know that as they continue to expand their contact surface with the world, they will begin to face challenges beyond our immediate control.

I can't help but feel ill equipped to guide them through these situations.

Watching my kids apply themselves to an activity is my favourite thing. Both are active and participate in several activities. The boy plays football and handball, while the girl (despite my continued lobbying that she should start playing football) loves dancing. To see them practice with passion and make headway gives me great joy. I have no aspirations on their behalves, I'm just there for the ups and downs and all that'll teach them.

Loss

After battling cancer for over a year, my grandmother passed this fall. It was sad and I miss her. Given she'd been living with cancer for so long, I thought it would lessen the impact of her parting. It didn't. Her passing was also the oldest kid's first real experience with mortality. He was absolutely devastated at her funeral. It was a hard day.

Savne deg, mor.

Reading

As shown in my reading log for 2025, I read 18 books this year.2 Eight of them I read aloud to one of my children. Of those, the Narnia books (which I had been wanting to read for many years) were my favourites. I wrote a post with my thoughts on the series.

Of the books I read on my own, Jonathan Strange & Mr Norrell was a particular highlight. In a post about the book I shared some of my thoughts and my favourite excerpts.

What I did not write about was the Liveship Traders books. Late last year, I read Ship of Magic before setting aside the trilogy for Wind and Truth (which left me a bit disappointed). I though Ship of Magic was OK, but it really set the scene for the rest of the story. And what a story it was! The Mad Ship was excellent before the trilogy concluded with the even better Ship of Destiny. I think these three books combined is perhaps my favourite work of fantasy writing. If you haven't read them yet, you should! Although they work fine as a stand-alone trilogy, they are part of Robin Hobb's Elderling universe. You'll probably appreciate them even more if you begin with Hobb's Farseer trilogy.

I only managed to finish two non-fiction books this year. Ray Bradbury's Zen in the Art of Writing (thoughts) and Ceasar by Adrian Goldsworthy. I want to double that next year.

Physical activity

Going through my workout log for 2025 I was surprised to find that I had the most active days in a year since I began tracking my workouts in 2017. 312 active days is nine up from the previous high in 2021. My sessions are shorter on average than back then, and total active time of 323 hours is not near the 379 hours of my peak years of 2023 and 2018.

Although it was a good year of physical activity, I am not quite satisfied. I "only" managed 55 hours of strength training. Now in my forties, I think working a wide range of muscles to reduce age-induced decay will only become more important. An hour a week is a little less than where I want to be.

I caught the running bug again earlier this year. It should therefore come as no surprise that running, at 244 hours, made up the bulk of my active time. Going out for a run in quiet surroundings, on trails or a back country road, gives me great joy. I'm also acutely aware of the fact that window of opportunity for bettering my personal bests is closing quickly. Realistically, I have three to five years to do it.

That in mind, I am gearing up for giving improving my personal bests one last go. This year was all about getting back to it. I got back to regular workouts, and increased my volume significantly compared to 2024. However, I'm still around 1500 kilometres behind for the year compared to where I need to be to get close to my PBs. In 2026 I will attempt to get back to that training volume and positioning myself to run a (hopefully) fast marathon in 2027.

Work

In 2024 I transitioned to a new role internally. This year was all about fully settling and coming to grips with the expectations and deliverables of this role. It's taken longer than I'd expected, but after a year and a half, I believe I'm starting to get there. The role is quite different to what I'd expected. And, to be frank, it doesn't exactly play to my strengths. The responsibilities are less direct deliverables, and more mediation, meeting room influencing and stakeholder management than I'm comfortable with

There's a lot to learn and plenty of room to grow in a situation like this. The upside is that the team around me is great. My colleagues keep inspiring me to do my best and evolve my skills to better handle the role. That said, I find it hard to see myself in this role for the long term. If an opportunity that better matches my skill set presents itself, I will consider it. That might happen in 2026, or beyond.

The end

The new year is still two hours away. But I'm ready to go to bed. What next year brings will have to wait until tomorrow.

Happy new year!


  1. As a parent, and a human being in general, I think it's important to remember that what might seem small to you can be mountainous and incomprehensible to a child. Or any other person, for that matter. 

  2. I've also spent more than half the year working my way through Letters from a Stoic. I still have a few letters left. Because I count all books as read in the year that I finish them, it'll show up as read in 2026. 

The Enshittifinancial Crisis

Soundtrack: Lynyrd Skynyrd — Free Bird

This piece is over 19,000 words, and took me a great deal of writing and research.

But Not By Means of a U.S. Military Invasion

Ruslan Osipov in Home is where my stuff is:

Some of these versions of myself are still relevant. Some aren’t. The hard part isn’t identifying which is which - it’s accepting that letting go of the object means letting go of that version of me. Admitting that I’m not that person anymore. Or that I never became the person I bought that thing for.

I never became the guitarist I thought that fancy guitar would make me. But I'll never, ever let it go.

When I last made some updates to the workout log and wrote about it, I said:

The only thing remaining to make it a proper replacement is some more data on the activity level. Heart rate details (cookie diagram for zones or just a line chart), elevation numbers and line chart plus, possibly, a map of some sort. For the last one, I'm not sure, because I'm loath to introduce third party content on the site. And building a map engine isn't exactly on my list of things I want to tackle.

But I'll keep thinking about that. Either way, I think I want to make some changes to how I'm handling workout data upstream before I tackle any of those. To make the solution a bit more robust.

Lo and behold, in ToDo-WindrunnerSSG.md, my to do list for my static site generator, were the following entries:

  • ( ) Workout log improvements:
  • ( ) Add splits bar chart (ala Strava where bar width = duration, bar height = pace)
  • ( ) Heart rate graph
  • ( ) Elevation profile
  • ( ) GPS coordinates route to SVG
  • ( ) Refactor title and notes to support unified workout data storage

The workout log has been the defining project of 2025 for me. With the end of the year in sight, I was motivated to take a stab at solving these last remaining features. And now I have. The most recent update in the version log for my static site generator:1

0.2.5

22.12.2025

  • Updated workoutlog_processing to include more data per activity. This includes splits, route, heart rate plot and elevation plot illustrations. Code was also refactored to adjust for upstream changes in workout data storage. The script is now pulling data from individual text files per activity. Minor changes to generate_feeds.py and windrunner.py to account for logic changes.
  • No remaining items in ToDo-WindrunnerSGG.md. Is this thing feature complete?

True to form, I'll spend this post going through my thought process when attempting to solve each of these. The post will be long, boring and only suitable the particularly peculiar persons who wants to know how I've "vibe coded"2 my way to a fully functional Strava replacement as a component of my own static site generator.

Reworking the data architecture

If you read my initial post about the workout log you probably remember (lol) that my data flow was as follows:

  • Connect my Garmin watch to my laptop.
  • Script extracts new workout files to my laptop.
  • Another script parses the workout file(s) and writes the details of the workout to a CSV file.
  • I add a workout title and notes to the new workout by modifying the CSV file.
  • My site generator creates the workout log based on the data in this CSV file.

This worked OK. But it had two glaring issues:

  1. Manually editing CSV files is cumbersome.
  2. Workout titles and notes, as well as manually recorded workouts, only exists in the CSV file.

I routinely messed up the CSV file and caused errors by being sloppy with commas and escaping. Adding even more data for visualisations would require changing the setup. The second point was also nagging me. My workout data was not unified in one place. The .fit activity files were stored in one place, while my notes on the workouts existed only in the CSV file. Manually added workouts existed only as a row in the CSV file.

As directly enriching the activity files is not possible, my idea was to create companion files for each activity file. These files would be identically named text files (only with a differing extension, .md in this case) and they would contain key details of the workout as well as my notes on each workout.

This solved both issues. Editing a single text file with dedicated lines to the title and notes is easier than fiddling with a CSV file. Likewise, it centralises all of my workout data in a single location: The directory where my activity files are stored. Each workout is now merely a text file with a few data points, and — if I happened to be wearing a device to capture more detailed data during the workout — there will be an identically named .fit alongside it containing all additional data like a GPS track, heart rate stream and more.

Next, I had to figure out how to approach generating the workout log based on this new data structure. My initial idea was to keep the CSV as the source for generating the workout log. Intuitively, this seems significantly more efficient than accessing thousands of individual files each time I generate the site. Some testing confirmed that to be true. Generating the workout log based on data in a single CSV file was around an order of magnitude faster than fetching the same data from 3000+ individual text files.

While that may seem like a lot, in practice we're talking about going from 100-200 milliseconds to 1-2 seconds. It was a cost I was willing to swallow. Because introducing a middle layer meant increasing the complexity of the setup significantly. This because there is more often than not a time delay from when the workout file is created and I get around to adding a title and notes. So when do I generate the CSV file to ensure that it is current? My site is rarely generated more than a couple of times per day, either way. The solution can only be "every time a workout file is updated" for there to be any significant resource savings.

Not worth the added complexity.

That said, xan and his followers need not worry. There is still a CSV file. I recently created a workouts feed for anyone who wants to keep up with my workouts.3 Like Strava, only built on an open protocol! To avoid having to access thousands of files twice every time I generate my site, the script creates a CSV index while accessing the files on the first go. This index is then used when generating the workouts feed later in the build process.

  • (X) Refactor title and notes to support unified workout data storage

Route visualisation

Routes have been on my mind since I first began working on the workout log. The context provided by a visual illustration of where you've run (or biked, skied, skated or anything else) simply cannot be replaced.

But there were some immediate stumbling blocks. Maps, for one. I do not want to introduce third party components on my site, even if there are great options out there. Self-hosting tiles seemed like too much hassle. Plus, there's this privacy thing. While I've been privileged to never really have to worry too much about that since, well, forever, openly sharing my exact geo-location every single day seems a step too far.

Because of this, I left routes alone. When I, thanks to Josh Comeau's excellent friendly introduction to SVG began to wrap my head around SVGs, the solution seemed obvious: Generate an SVG showing the path. This way I can provide some context of what the run was like by showing the route without revealing everything. And I must say, I'm really happy with the result.

Everyone who's run the Berlin Marathon will immediately recognise the route and probably get an emotional response when seeing it in the activity from when I ran it back in 2019:

Screenshot of an activity from my workout log showing the route from the 2019 Berlin Marathon

Similarly, here's a point to point example when I ran Ecotrail Oslo the same year:

Screenshot of an activity from my workout log showing the route from the 2019 Ecotrail Oslo 50k

I think it provides a lot of context for the activity. Even if it doesn't reveal the exact location, it conveys something about what the run was like that is difficult to get across with words alone. Especially paired with the next point.

  • (X) GPS coordinates route to SVG

Elevation profile

You can describe an activity with numbers such as metres climbed and descended. But, like with routes, an illustration can give an intuitive understanding of what the activity was like that is difficult to replicate with words. To add a simple chart to show the elevation profile of my activities, therefore, seemed obvious.

After sorting out the route illustration, I decided to use the same approach for the elevation profile: A simple SVG. It is responsive and works fine. Let's look at what this looks like for the same activities mentioned above. First, the Berlin Marathon:

Berlin Marathon elevation profile

One flaw in this implementation is that the elevation changes are all relative. Meaning that the elevation profile for the pancake flat Berlin Marathon (total metres climbed is 74 metres) looks quite hilly. On the other hand, the Ecotrail Oslo 50k looks like a straight drop by comparison:

Ecotrail Oslo 50k elevation profile

Even if Ecotrail has a significant net drop, the total metres climbed is 896 metres and more than ten times as much as Berlin. You wouldn't know just looking at these two charts.

My first iteration was just the lines chart. To add a little more context to the chart, I decided to add labels for the highest and lowest points. Although this doesn't quite solve the relativity issue, it helps mitigate it. And I prefer it to a "fixed height" approach, because the most important point is to get a feel for the relative changes within a particular activity rather than comparing activities.

  • (X) Elevation profile

Heart rate chart

For the heart rate chart, I reused the exact same approach as for the elevation profile. And it works well. Just have a look at the chart from this 8 x 1000m workout from earlier this year:

Chart illustrating how the heart rate changes throughout a 8 x 1000m workout

Although not a tool for detailed analysis of a workout, the chart illustrates how the heart rate fluctuates throughout the workout. It goes up throughout the reps, dipping sharply during the standing rests. With the label for the highest value, we can see that it peaks during the last rep at 177 beats per minute.

  • (X) Heart rate graph

Splits bar chart

The last thing I wanted to implement was a bar chart illustrating the pace and duration of the workout splits. Splits, or laps, are segments of a workout. For a regular jog, I use auto split per kilometre. If I'm doing a structured workout, I will manually split at the beginning and end of each repetition.

Looking at these splits is my preferred method of quickly assessing a workout afterwards. For many years, I paid for a Strava premium subscription because I liked their bar charts better than anything else I had found. Suffice it to say, I wanted to get these right.

Conceptually, the bar chart is quite simple:

  • Each bar represent one split/lap.
  • The height of the bar represents the pace for that split. The taller the bar, the faster the split.
  • Split duration is represented by the width of the bar. A wider bar means a longer lasting split.

My first implementation used a relative approach. The fastest split was set at the max height, the slowest at the minimum height, and everything else was given height relative to these two outer points. It worked… OK.

The first thing that bothered me was that for a workout where everything was fairly evenly paced, it would look like pace varied significantly. I could live with that. But, as soon as I looked at a structured workout, I knew I had to improve the approach. Just look at this:

Bar chart with completely relative sizes showing the laps of an 8 x 1000m running workout

What's interesting here is the variance between the tall bars, which represents the 1000 metre repetitions. Because the rest intervals (walking rest) are so slow by comparison, there is absolutely no granularity between the reps. I am instead wasting space illustrating the meaningless differences between the walking rests. This won't do!

I need a way to scale these bars that will preserve the granularity at the faster end at the expense of the slower end. Bonus points if it solves the issue of exaggerated differences during a run with fairly even splits. To someone smarter than me (low bar!) the solution is likely obvious. My first thought, however, was introducing some kind of fixed pace range. Where 3:00 min/km or faster is set to max height and 7:00 min/km or slower is set to minimum height.

This would work… OK. For running. But if I go for a bike ride, it wouldn't because the paces won't fit that range. A more flexible approach would be better. After consulting with my friendly neighbourhood Claude, the light bulb went on. I can maintain a "relative" approach by anchoring the scale to the fastest lap split pace and capping the slow end based on some factor. In other words, anything X percent slower than the fastest split gets drawn as the lowest bar. For everything in between, I use the available canvas.

In theory, this should solve both issues — as long as I can find the correct multiplier.

After trying various multipliers on for size, I settled on 2. That is, anything that's half the pace of the fastest split gets suppressed at the lowest height. It is a fair compromise between detail at the pointy end, and lack of detail at the slow side. Going back to the same workout we saw above, here's what it looks like with the new approach:

Bar chart with slow split cap showing the laps of an 8 x 1000m running workout

There's clear separation between the repetitions, while maintaining a visual distinction between the warm up and cool down splits. A more aggressive cap, like 1.5, resulted in even more granularity between the fast repetitions, but at the cost of any distinction between the warm up and cool down splits. This compromise works.

Looking at a recent run, it also solves the problem of fairly even splits coming across as wildly different:

Bar chart showing splits of an even pace treadmill run

Paces here range from 5:50 min/km to 5:36 min/km. With the old approach, the bars would've given the (completely erroneous) impression of a aggressive progression run.

I can now confidently proclaim that this bar chart illustration of workout splits is equal to that which I used to Strava for the privilege of using. It is also fully responsive and works on mobile.

  • (X) Add splits bar chart (ala Strava where bar width = duration, bar height = pace)

Is this thing complete?

As I wrote in the changelog, there are now exactly zero remaining items on my to do list. Not just for the workout log, but for the entire static site generator that powers this website. A year after finishing the first iteration, I have implemented everything that I had the idea of doing "sometime" when I first began working on this thing. That probably warrants a post of its own. As does the question of whether or not it is complete.

What I can declare with absolute certainty, however, is that the workout log is finished. It does exactly what I want it to do. Nothing more, nothing less. I have no desire for new features or additional elements. If I have to stick to one way of tracking and analysing my workouts for the rest of my life, I am perfectly content with this being it.

That's a nice feeling. And a good note on which to end a year.


  1. Yes, like a proper wannabe developer sans actual developer skills, of course I keep a changelog for this thing. And the version numbering is, naturally, completely made up. Whenever I make a change I just ask myself "what do I want to call this version?" before landing on a number. It's pretty cool. 

  2. Back when I began using LLMs to put together a static site generator that matched my mental model of how these things should work, the term "vibe coding" didn't exist. But now it does, and I suppose it fits what I'm doing here. 

  3. Not so much because I think that anyone would want to subscribe to my workouts in their feed reader, but, rather, because I have a dream of lots and lots of people tracking their workouts in a way that lets me follow their workouts in my feed reader. Because I get a lot of motivation from seeing other people getting out there and doing the work, and I really miss that aspect of Strava. Be the change you want to see and all that. 

I was buying a couple of albums to add to my growing collection of legally acquired music. After completing the purchase over at Qobuz, they hit me with this warning:

Screenshot of a warning from Qobuz after buying a digital album from them. Full text below.

Certain works may be withdrawn from the service for legal reasons, such as a revocation of rights. The titles purchased will then no longer be available for re-download. Download your purchases quickly.

Don't mind if I do!

Appreciated this frank message. It perfectly captures exactly why someone would consider building a music collection in 2025, instead of trying to hide the reality and instead push you towards platform dependency.

PS: I bought two albums. Young, Loud and Snotty and We Have Come for Your Children, both by the late 70s by American punk rockers Dead Boys.

Recommended listening!

Photo alt text

Cast iron waffle maker. Fry waffles straight on the fire. 10/10 will do again!

One apropos: Not ideal with impatient kids running around anticipating a big stack of waffles asap. This is slow food and you’ll be enjoying every heart.

Welcome to the second annual celebration of all that is best and worst in our political culture.
Welcome to the second annual celebration of all that is best and worst in our political culture.

Backing up Spotify - Anna’s Blog:

Anna’s Archive normally focuses on text (e.g. books and papers). We explained in “The critical window of shadow libraries” that we do this because text has the highest information density. But our mission (preserving humanity’s knowledge and culture) doesn’t distinguish among media types. Sometimes an opportunity comes along outside of text. This is such a case.

This is a magnificent effort by the people at Anna's Archive. 86 million music files archived, with metadata for 256 million tracks.

As I've begun constructing my own music library recently, it feels like the people at Anna's and I are kindred spirits of a sort. My library is currently at 50 artists, 69 albums and 708 songs. Good to know that I'm not running out of options for stuff to add any time soon.

Via.

Some years ago, I had a frustrating and largely fruitless encounter with the politics of policing. As a member of an oversight commission, I was particularly interested in the regulation of urban surveillance.

How even the most implausible films tell us something about the world they came from

Photograph of the sun shining over a rural landscape showing a back country road going through fields covered by hoarfrost

Went for a run yesterday. Happened to bring my phone along, which I rarely do, and couldn't resist the temptation to grab a photo only a few hundred metres out from the house. These cold, clear winter days, snow or no snow, are why winter is my favourite season.

The light of the sun is never more cherished than during the darkest days of winter.

Hello and welcome to the final premium edition of Where's Your Ed At for the year. Since kicking off premium, we've had some incredible bangers that I recommend you revisit (or subscribe and read in the meantime!):

A song by former students brings down the curtain on 11 years in the job

Working on a simple way to display the route for my runs in workout log. To avoid map dependencies (and as a small privacy measure) I'll be displaying a simple SVG showing the activity route based on the GPS waypoints.

The route was looking right, but the aspect ratio was all wrong. As always, the blame lies with the Mercator projection. Or, in this case, the opposite: I wasn't applying any corrections based on latitude. At 60°N that results in some serious distortion.

Here's a screenshot showing the difference between no Mercator projection at the bottom and the more "correct" version with the Mercator projection applied at the top:

Screenshot showing the difference between a route with the Mercator projection applied versus the same route with no projection.

You learn a surprising number of things trying to set up your own workout log!

A year has passed since the first time I wrote about my tech stack. What better occasion to repeat the exercise and see if there have been any changes? This year, inspired by Melanie Kat I'm going for a more readable list format. Comments, if any, in the footnotes.

First, the usual disclaimer: I've no commercial ties with anyone mentioned in this list, and I paid for everything mentioned with my own money.

Hardware

  • Computer: Macbook Air M2 (2022)1
  • Phone: iPhone 11 (2019)
  • E-reader: Kindle Paperwhite (2017)
  • Sports watch: Garmin Fenix 5s (2017)2
  • Daily watch: Omega Speedmaster 3513.50.003
  • Camera: Sony ZV-14

Software

Services

Thoughts

A few notable changes. I simplified my setup. Particularly on the hardware side, where I retired two computers. While the idea of a dedicated device for writing made sense on paper (hah), I'm gravitate towards using just a single computer. Realising that I could use that same laptop as my home server as well, made it an even better deal.

On the software side, I swapped out my feed reader and my password manager. By changing the latter, I managed to get rid of a subscription.10 Throughout the year I also experimented with many browsers. The aim aim was replacing Firefox, as I have no interest in using an "AI browser". In the end, I couldn't find a better option. Vivaldi was the most promising, but the stutter and lag during touchpad zooming was unbearable.

Ad blockers are new entries. I was using uBlock even last year, but forgot to list it. AdGuard is new, as I found that even what little casual browsing I am doing on my phone was getting unbearable without an efficient ad blocker. I've also added Tailscale to be able to connect to my music collection from my phone when I'm out of the house.

Last year, I said the following:

I am always tempted by some new gadget, app or service. But if I have one goal for the coming year, it is to make even better use of what I currently have at my disposal. The opportunities feel endless. It is only a matter of being willing to put in the time to make it work.

Will give myself a pass there. My only purchase was a second hand and fairly cheap camera. That's despite being tempted and doing much window shopping. At some point I will inevitably switch to Linux. I think. But I want to do it when I can't get more mileage from my current laptop. Likely I'll have to do something about my phone first.

My goal for the next twelve months will be the same: Buy as little new stuff as possible. Get as much use as I possibly can from what I already own.


  1. The two other computers mentioned last year have both been retired. 

  2. Didn't get a mention last year because I originally stopped using it as the battery was in a pretty poor state. As I was contemplating buying a new sports watch earlier this year, I remembered this one and ordered a $10 replacement battery from AliExpress. It worked wonders and this watch now does everything I need. It also pairs with my Stryd and has replaced my old Series 6 Apple Watch as my alarm clock. 

  3. Forgot to mention this one last year. Or, rather, it's an affectation and I was probably too embarrassed to list it. But it's probably the most impressive piece of technology I own. I mean, just look at this

  4. The idea was that a dedicated camera would help me use my phone less. In reality, I very often forget my camera at home and end up using my phone anyways. I'm also disappointed with the video stabiliser on the ZV-1. When I'm moving the camera, the resolution is chopped a lot and the footage is still quite choppy compared to when I'm filming with my ancient phone. 

  5. Throughout the year Reeder Classic began crashing quite often. As development seems to have stopped, and bug fixes didn't appear forthcoming, I decided to look for an alternative. The NetNewsWire user experience doesn't have the same polish, but it's rock solid and does the job. 

  6. I self host my music collection directly from my laptop. When I'm listening to music on the laptop, I use Navidrome's excellent and blistering fast web player. 

  7. Had no real problems with 1Password, which I was using last year. But I'd heard good things about KeePassXC, and when my 1P subscription was coming up for renewal, I decided to give KPXC a go. Thought it was great and cancelled 1Password. 

  8. All the details on why I'm using OpenBSD.amsterdam here

  9. Since last year, I've done a full 360 and ditched iCloud, setup my own Nextcloud and returned to iCloud again. Really need to a do a full write-up on that, but the key takeaway is that I make sure to store all my important data in a way that makes it super easy for me to pick it up and move around. 

  10. Some of the saved money is being donated to the KeePassXC team. I try to donate to projects that put out free and open source software that I use frequently. 

A video of my recent book talk at Stanford University
One major error, one smaller one, and one tragic one.
One big, one small, one tragic and very painful.

Photo of two cans of fish balls from Vesteraalens

After fresh fish, this is the next best thing. Serve in a white sauce made on the broth from the fish balls, boiled potatoes and carrots and some fried bacon on the side.

Luxury meal!

Sublime Text is my text editor of choice. Every word I write on my computer, I write in Sublime Text. Every note, every blog post, every forum submission. When I code? I do it in Sublime Text. It is likely the program I spend most time with on my computer.

This has been the case for two years now. And yet, it shames me to say, until the other day I had never paid a dime for this magnificent piece of software that is the engine my of my digital life.

Now, you're probably thinking that free and open source software is nothing unusual. People use free software all the time, never paying or contributing. And that's true. But Sublime Text isn't actually open source. It is proprietary software that requires a license. Sublime just doesn't enforce it. Instead, they rely on an honour system of sorts. From the Sublime Text buy page:

Sublime Text may be downloaded and evaluated for free, however a license must be purchased for continued use.

The free download comes without any restrictions. You get the complete program with all all features, and there are no time restrictions. The only visible difference compared to a licensed version is a small, but rare pop-up reminding you to acquire a license if you want to continue using the program.

A software license based on mutual trust? How refreshing, I thought when discovering it for the first time.

Then I immediately went and completely abused that trust for two years, never purchasing a license and displaying why this is likely not a viable business model.

I am why we can't have good things.

It's not that I set out to abuse this trust. Every time the reminder popped up I was like "ah, yeah, I really need to get around to purchasing a license" before seeing the price and thinking that it would have to wait another month, or maybe two. At $99 USD, the license is not an insignificant outlay for a poor cheapskate like myself. Nevertheless, it was a poor excuse. In the years since I started using it, I've had countless less meaningful expenditures of similar size.

The other day, however, I finally got around to it. I purchased a license and gave myself the Christmas gift of being able to use Sublime Text for all my writing and coding with a clear conscience.

Better late than never?

The Mackinderian worldview in Trump's National Security Strategy
And Its Nixon-era Defeatism Undermines American National Interests

I keep trying to think of a cool or interesting introduction to this newsletter, and keep coming back to how fucking weird everything is getting.

Two days ago, cloud stalwart Oracle crapped its pants in public, missing on analyst revenue estimates and revealing it spent (to quote Matt Zeitlin of

US leaders should continue selectively decoupling in key economic and security domains
Your questions answered.
Your questions answered.
If you enjoy this free newsletter, why not subscribe to Where's Your Ed At Premium? It's $7 a month or $70 a year, and helps support me putting out these giant free newsletters!

At the end of November, NVIDIA put out an internal memo (that was

My latest, as published in TIME.

One of the difficult things about describing a grift, or at least what became a grift, is judging the sincerity with which the whole thing started. Scams often crystallize around a kernel of truth: genuinely good intentions that start rolling down the hill to profitability and end up crashing through every solid object along the way.

The 'new' national security strategy is the admission of defeat from a declining country
A recording of my latest Q+A with subscribers
The West's decision to give up interventions has created a new trend

[Editor's Note: this piece previously said "Blackstone" instead of "Blackrock," which has now been fixed.]

I've been struggling to think about what to write this week, if only because I've written so much recently and because, if I'm

More...