Blog

May 08, 2026 21:57 +0000  |  Cambridge Green Party Politics 0

I'm exhausted today. I know I haven't worked nearly as hard as many others sacrificing for this race over the last few months, but I had no idea just how worn-down I was until I came home and crashed on the couch. I believe the appropriate Britishism is "knackered".

To get the ego-centric news out of the way: I didn't win in King's Hedges. It wasn't exactly a surprise, since we weren't focusing our efforts there, but being at the counting today was was a roller-coaster of emotion: At first we thought I had an inexplicable win on my hands, then doubt, then new numbers suggested that it might happen. In the end, the winner (Labour) had 713 votes (27%) and I got 604 (23%). The Conservatives took third, followed by Reform, the Lib-dems, and then the two independents.

As a party though, the Greens smashed it. We won every seat we targetted and then some. Everyone was pouring themselves into this race and the results really panned out for us. Here in Abbey, all three of our councillors are Greens, and in Petersfield, we unseated the leader of Cambridge's Labour party. In the end, we won in Abbey, Arbury, Castle, Coleridge, Newnham, Petersfield, and Romsey, and lost 0 races where we were the incumbent.

I didn't enter into this race with any expectations other than that I'd probably lose, but if I'm being honest with myself, I'm still a little disappointed. It is just fantastic to finally see the ideals I've championed since I was 12 years old finally getting taken seriously and seeing real political might behind them. I love that I've been able to help Kathryn and Alex win Petersfield and Castle by volunteering with their campaigns, and I look forward to working within the party some more to get more of our agenda turned into real action. It is as exhilarating as it is exhausting.

Working with the Greens is brutal, but rewarding work. We don't have billionaire donors (cough Reform cough). We are funded entirely by small donations and the media in this country hates us. Showing up to build this party and movement is a process of painstaking, constant "grassroots" volunteering. Everyone around you is working hard to push the whole party in the same (general) direction, and knowing that the person standing next to you is here because they want the same better future you want, rather than because they're paid to pretend to care is deeply rewarding.

7 of my friends stepped up tonight to do the thankless work of trying to make this city safer, cleaner, and greener, and that's just awesome. I'm so proud of them, and I'm so proud of the work we did together to get us here.

May 05, 2026 22:45 +0000  |  Cambridge Green Party Politics 0

Politics here in the UK is wild right now.

The last general election resulted in a landslide victory for Labour, not because everyone suddenly loved the Labour Party (they remain profoundly unpopular) but rather the country had finally woken up to the reality that the Tories are a bunch of terrible people and wanted to punish them for being who they are. Regardless of whether you're a Brit or not though, I imagine that this is a familiar story. People don't generally vote parties in so much as other parties out.

What makes things in the UK exciting/crazy right now is that with Labour consistently making terrible choices and the Tories still roundly hated, the effective two-party system has broken down, leaving contenders like the Greens and Reform to try to replace them... and it looks like it's happening.

Reform (think Tories, but with more money and even more racism) is gobbling up vote share from the Tories and Labour and unless something can be done about their momentum, they will form the next national government. The Greens however have been exploding in popularity, stepping in and eating Labour support from the Left with our new unabashedly socialist leader Zak Polanski.

Every year, the UK runs a smattering of elections where representatives are elected into municipal and county councils across the country. Few if any councils are elected on a 4 or 5 -year term as a whole, but rather you see seats opening for ⅓ or ¼ of any given council every year, so you get an annual turnover of a portion of the council. It makes things complicated and expensive, but at least there's an opportunity for better public engagement.

I'm explaining all of this because a few weeks ago I stepped into this arena, running once again as a Green Party candidate, this time in the Cambridge ward of King's Hedges. This isn't a "target ward" for the party (read: they're focusing the money and volunteers in wards where the chances are high we'll win), but the people living there deserve the right to vote for the only party advocating for a sustainable world and against genocide, so I stepped up :-)

Despite the party not targetting the ward, there's a decent chance I could win it. There are seven contenders for the council seat running there, all of which with a decent chance to win, not least because the other six have a similar chance. It's conceivable that the winner could take the ward with just 19% of the vote thanks to the antiquated first-past-the-post voting system, and thanks to the complications at the national level mentioned above, this race has been crazy with the result of this election likely to be interpretted as a verdict on the sitting national Labour government. I fully hope and expect them to be decimated this week, and I just wanted to do my part to make that happen.

To be honest, I got into this to help where the Greens needed me, to help kick Labour in the teeth for being so profoundly terrible, and to serve democracy by giving people to chance to vote for the party they want. As we weren't targetting the seat, I wasn't planning to win, but as the race has progressed and I've gotten more involved with canvassing, leafletting, answering constituent questions... I'm really enjoying it. I think I could really be good at this job, and if they elect me I'll be both terrified and excited by the prospect.

Either way though, the Greens are looking very good here in Cambridge and across the country. People are finally mobilising behind ideals that put the screws to the rich that have been screwing the rest of us for decades. They want clean energy, clean air, safer streets, and to stop propping up a genocidal ethnostate. I've been in this boat for a long time, and it feels really good to finally feel some wind in our sails.

April 22, 2026 22:51 +0000  |  Activism Canada Employment Genocide Health Politics Technology The United States United Kingdom 0

Personal

There wasn't much on the personal front worth mentioning out of 2025 other than my two significant brushes with the UK's National Health Service. In the first case, I had a dark patch developing on my cheek that was starting to concern me. You know how it is: if something on your body starts changing colour, you start to worry that it might be Cancer, so I booked an appointment and got it checked by a dermatologist. I popped into Addenbrookes Hospital one morning where a doctor checked me out and asked some questions, then sent me to their photographer to take pictures of the patch from various angles. Apparently this was necessary for analysis or record-keeping or something. He then booked me in for a biopsy about a week or so later.

The biopsy was performed not by a surgeon or even a doctor, but by two trained nurses. Admittedly, I was a little worried by the prospect of being cut on by someone with only a nursing background rather than a surgeon's — this was my face after all, but I rolled with it anyway. I came back into the hospital lay down on a bed for a little while, and after some lidocaine and stitches, I walked out with a great big bandage on my face.

After a few days, the bandage came off, and a few days after that, the stitches came out. Everything healed up beautifully. I still had the ugly dark patch on my cheek, but at least it wasn't accompanied with a biopsy scar.

A week or two later, I had the results: it's basically a great big freckle. No Cancer, just unpleasant-looking. I'll take it. 12 points to the NHS on this one. I paid £0 and was taken care of through the whole processes. No notes.

My other NHS experience wherein I broke my foot on the other hand was... abysmal. 0/10, do not recommend. The NHS really screwed up there, and in the end, all they managed was an apology I wasn't looking for, and no indication that they would have done anything different, which to me is a colossal failure on their part.

Corporate

On the corporate front, 2025 was both wonderful and shite. I came into 2025 having just started a new job at Owlstone Medical, a great little company just 15min from my home by bike. The pay was less-than-stellar, but the work was reasonably interesting and the people I worked with were all fantastic. I was building a medical platform to interface doctors with patients and I built up that platform from scratch using Python/Django in the traditional start-up fashion of talking to someone about building a thing the same day that you build and deploy it.

Mostly though, I just liked having an office to go into again, and to spend time with cool people building interesting stuff that wasn't Evil. It's truly frustrating how rare that is in my field.

Unfortunately though, the company started running out of cash and had to start shedding people. I was the only contractor on my team, so I was first to go :-( I'm still in contact with everyone there, and meet Liam for lunch relatively frequently (the office is still just 15min away) so I didn't lose everything.

Still, I was out of work, so I started looking around and reconnected with my old manager from Limejump who was now at a London-based energy trading firm. A lot of people don't know this, but the UK's energy system is heavily financialised. A wind turbine might generate 1MW of energy today, but the energy it channels into your home was likely bought and sold dozens or even hundreds of times, hours, days, and even months before it was even generated. There's a crazy complicated market for energy, where people effectively bet on whether it'll be sunny on ${DATE} and thus whether the price of energy will be high or low in a given half-hour period on that date. There's also carbon trades, where one company earns carbon credits from their own work generating green energy, and they then sell those credits to fossil companies so they can continue to burn the world. It's an insane system really, but one that makes a lot of sense in an economy as financialised as that of the UK. This is where I work now.

It's not noble. I can't honestly say that the world is even a little bit better through my efforts there, but we're not the ones promoting fossils or even digging the stuff out of the ground. I don't think it qualifies as evil.

The people are pretty great though. I've got my old Limejump boss, who I was quite fond of, and I'm the technical lead for a proper team again. We're all going for karaoke next week in fact. We're also building a rather awesome "generic transformer" that reads pretty much any kind of data from any sort of source, allows you to apply entirely arbitrary mutations to that data, and then pushes the result into any number of available destinations. We call it: "Megatron".

Political

I also decided last year that I was going to try reaching out to the Greens a little more seriously and offer to help wherever they needed it. Mostly, this has meant showing up to local meet-ups and online meetings, and toward the end of the year they were looking for someone to run as a candidate for the Castle ward here in Cambridge, so I volunteered... that is until I learnt that someone else was happy to stand, so deferred to him. There's no sense in offering help where someone else is already happy to do the job after all.

Months later, (now in 2026), that all changed when the party came to me to ask if I'd be willing to stand in Kings Hedges instead. The people living there deserve the right to vote for a party that has the right priorities, so I'm now on the ballot for that ward instead. I'll have to post about this separately though.

World

My personal life wasn't all that eventful, but the rest of the world went quite insane in 2025.

The US

If we're going to talk about the world going mad, it makes sense to start with the US.

The LA Fires

2025 opened with the #LAFires. More than a year later, after everything that's happened since, the fire feels like another lifetime, but it was a rather horrific scene with whole neighbourhoods being razed to the ground.

Some of the more memorable takes from the event though were the assertion that every dollar spent on rebuilding should be understood as a fossil fuel subsidy, and that when prominent climate denier, James Woods watched his house burn down live on Twitter, another poster remarked: "You're gonna experience climate change through a series of short, apocalyptic videos, until it's your phone that's recording". It's refreshing to see people understanding a catastrophe in the broader context of cause & effect. I just wish it didn't take a catastrophe for people to make the connection.

Trump

He did exactly what anyone paying attention knew he would do, and yet we all stood around acting shocked when he did it. I'll try to list his actions from least to most egregious.

  • He declared a "liberation day" wherein he asked ChatGPT (this is the general consensus, though he hasn't admitted it) what the tariffs should be for every country in the world when considering a nation's trading deficit with the US. The numbers they went with were as extreme as they were bizarre, and most of the world (except for Spain, we love you Spain) lost their minds falling over themselves trying to suck up to Trump's ego. It was embarassing for everyone involved.
    • In response to the tariffs, Cory Doctorow had what I would consider to be the wisest response (though so far no country has taken his advice): if the US is going to slap you with tariffs, then you have no reason to continue enforcing the US DMCA laws that they bullied you into having lest they slap you with tariffs. We should be throwing out anti-circumvention laws and building up local industries that undermine the American IP-based economy. I continue to be infuriated by how little traction this is getting.
  • He continued to muse about "making Canada the 51st state", referring to "governor Trudeau". This, along with some of the more worrying rhetoric about annexation and invasion, sparked a boycott of all US goods in Canada as well as a massive reduction in Canadians crossing the boarder for any reason at all. This is largely referred to as #ElbowsUp, thanks to Mike Meyer's off-the-cuff stunt on Saturday Night Live.
  • He more or less put a nail in the coffin of the relationship between Ukraine and the US calling Volodymyr Zelenskyy into the oval office for a public take-down. It was embarrassingly petty and Zelenskyy walked out of there as the only man in the building with his dignity intact.
  • He ballooned ICE's budget to the ungodly figure of $9.13 billion, ramping up recruitment and stripping away what little training requirements that existed. The result was abductions of neighbours in broad daylight. Vans literally drive up on the sidewalk, throw a bag over someone's head and disappear them.
  • He continued to support Israel's genocide of the Palestinians, though I have a hard time believing that this would have been any different under a Democratic government.

The Epstein Files

Another big piece of US-based news in 2025 was the release of the Epstein files. In a sense, this was a good thing that his administration did, even though it revealed some of the absolutely deplorable behaviour of those in his government and elsewhere in society.

If you haven't read through them, you should. Some of the absolute worst people in the world, talking about, and sometimes caught on camera doing some of the worst things you can think of to children. I have seen children tarted up to look like adults, appearing in the same clothing in photo after photo, days, weeks, or even months apart as the girl gets thinner and weaker. I have seen children on literal kitchen cutting boards, and read callous emails from powerful men, begging Epstein to be invited to his next party where they can play with his "harem" of little girls.

These are men from all ends of the political spectrum, evil men, and we need to talk more about how they manage to continue to exist in a civilised society.

Canada

In the face of the existential threats coming from the south, Canadians went into an election with a uniquely distorted sense of priorities. The previous Liberal government was hugely unpopular, but so were the opposition Conservatives. The NDP was in disarray with weak leadership (see Hazel Thayer's excellent take on this if you're interested) and no one knew what they were going to do until Trudeau made the remarkably sane decision to step down to be replaced by Mark Carney.

Carney is charming, and came with a CV filled with "I'm the stable, sane one" vibes. Canadians looked to the madness in the south, then looked at the Conservative's support for that madness, and quickly fell in line with Carney, handing him a massive majority.

I have a note written here:

"How long did it take Canadians to realise that they hadn't elected Liberal Jesus?"

I guess I figured that they would have figured it out by the end of 2025... but no. Carney's support is still very high among most Canadians. Even after he's tried to pass bills that will allow the state to literally open your mail, or to push through fossil projects "in the national interest", people still talk about him like he's a brilliant statesman. Hell, in January of this year, Carney went to Davos and gave a speech outlining just how much he supported the idea of might-makes-right and somehow most people still think it was a moving and inspiring speech about the complete opposite.

I don't know what it's going to take for people to wake up, but so long as you have a septuagenarian with dementia in the White House, you could put Milton Friedman in 24 Sussex and people would still praise him as a man of the people.

Israel

They're still evil. They're still doing some of the most evil things any nation could do. They kidnapped people trying to deliver food and medical supplies to the people of Gaza by boat. They boarded the vessel in international waters, kidnapped the crew at gunpoint and commandeered the ship. The response from the world was largely muted, though unionised dock workers in Italy pushed back saying:

“If we lose contact with our boats, with our comrades – even for just 20 minutes – we will shut down all of Europe.” “Our young women and men must come back without a scratch, and all this cargo, which belongs to the people and is going to the people, must reach its destination, down to the very last box.”

Here in the UK, our morally bankrupt Labour government proscribed the Palestine Action activist group that attempted to disrupt the moving of arms to Israel by [checks notes] spraying buildings with paint and smashing windows. This basically labels them as a "terrorist" group, lumping them in with actual terrorists like Al Qa’ida and ISIS. The result is that throughout 2025 and 2026, the police have been arresting old ladies for doing nothing more than holding up a sign saying:

"I support Palestine Action"

This country is insane.

Toward the end of the year, a "ceasefire" was signed in Gaza, but as there are many many documented cases of Israel unilaterally violating the agreement, it hardly seems worthy of the name.

Technology

2025 was definitely the year of "generative" and "agentic" "AI". I know I went a bit heavy on the scare quotes there, but honestly they're all warranted. The whole thing is nuts. Pouring hundreds of billions of dollars into a technology that fabricates as often as it doesn't is bad enough, but the public's lapping up of this tech is bleeding what little faith I have in humanity dry.

In the "generative" corner (and from my narrow, tech-focused perspective), we have practices like "vibe coding" wherein someone writes tens-of-thousands of lines of code that they do not, and will never understand, and then declares loudly that "they wrote this". The code as-generated mostly does the job, but as no one really understands what's actually happening under the hood, and since the act of generation is not deterministic there's simply no guarantee that it will do the job properly in all cases. When an edge-case is discovered, the vibe coder's answer is to tell the agent to "not do that" and hope for the best.

The result is mountains of AI slop being fed into Free software projects, overwhelming maintainers (who are already working for free). If the code is accepted, that's a monsterous liability being rolled into foundational code that underpins the working of the entire world's communications infrastructure. And if it isn't, GenAI can be used to blackmail the maintainer that rejected it.

In the "agent" corner, we're seeing more and more adoption of tools that claim to do things on your behalf. All they require is access to everything in your life. What do you mean you don't trust a multi-billion dollar US-based company headed by a sociopath with full access to your computer and everything in your life? What are you, some kind of luddite?

I have watched seasoned tech professionals open up Claude on their company laptops, feed it a single prompt, and then just hit Enter repeatedly while it does anything Anthropic wants it to do on their behalf. No matter how many stories come out of agents deleting things without permission, people just keep using these things because.... I don't know why. They're lazy? I can't think of another reason honestly.

As someone over on BlueSky said:

"If generative AI could REALLY make the next GTA in 6 months with 10 staff, or write the next bestseller, or produce 10 blockbusters a day? They wouldn't be trying to sell it to YOU. They would keep it for themselves and guard it from you ferociously."

This is a con. It's the very same con I watched the world fall into when we gifted the internet to the walled gardens, and we're just doing it again.

We've poured all this money into essentially centralising human skill into the hands of a few amoral American tech bros, who are burning methane just to run their child porn factories, but transitioning our transport and heating systems off of fossil fuels is just too expensive.

I hate this timeline.


I wish I had a better closer for this post, but I just don't. I'm doing alright, my family is doing alright. The world is literally on fire and my taxes are buying bombs to be dropped on children while people in my own government are either raping kids or protecting kid-rapists, all while we simmer in a vat of Soma-AI. I think I said this about the previous year too (yup, I just checked): this year was terrible, and while I hope 2026 will be better, I have my doubts.

February 16, 2026 14:01 +0000  |  Software 0

Git has this nifty feature where you can sign your commits. It may not be obvious, but there's no validation applied to how commits are created, I can create a commit on any repo I like with an email linus@kernel.org and Git will just roll with it. I can then create a merge request with that commit, and if the maintainer isn't paying too much attention, my commit might be merged and then it will look like Linus Torvalds wrote my contribution. Not great.

So the big brains developing git came up with this option where you can cryptographically sign your commits thereby tying your real-world identity (theoretically) to the commit in question. However while these nerds have big brains for software, I'd argue that they didn't do a great job at making it easy/approachable for "normal" people. You know, much like the rest of git.

So when I finally figured out how to sign my commits properly (and easily), I wanted to write something to help others.

Overview

On the whole, the process is pretty straightforward:

  1. Create a key pair
  2. Tell git to use that key when signing
  3. Tell git explicitly to sign your commit

...but how to do the above is a weird mess of commands.

1. Creating your key pair: use SSH

Most of the tutorials out there tell you to use GPG, which is likely due to the fact that GPG support was in git first, and because the big brains that do this sort of thing love GPG. However GPG is terribly user hostile with its key servers, validity windows, passphrases, and hash names. It sucks, and you're probably already using SSH to interact with a git repo so I don't use it. If you wanna learn how to do GPG signing, read something else.

Ok, with that out of the way, you likely already have an SSH key pair, but in case you don't, here's how to do that:

$ ssh-kegen -t ed25519

That'll create two files called id_ed25519 and id_ed25519.pub in ${HOME}/.ssh/ unless you specify a name during the interactive generation process. I recommend sticking with the defaults though.

2. Telling git to use our key

The terminology is a bit tricky here because we're going to tell git which key to use, but not to explicitly do anything when creating a commit. This is what threw me at first.

Telling git to use our key for signing is just one command:

$ git config user.signingkey ~/.ssh/id_ed25519

Interestingly, git gives you a bunch of different options here. You can use the private key path, the public key path, or even the entire public key as a string. Have a look at the docs for details if you're into that.

3. Tell git to explicitly sign your commit

This is the part that burned me 'cause a lot of tutorials out there stop at #2. We've told git which key we want to use to sign a commit, but by default, git won't sign anything, so it simply ignores the key and creates an unverified one. You have to explicitly tell git to sign every commit with -S:

$ git add some-awesome-file.md
$ git commit -S -m "Add my awesome file"

Bonus: Sign all the things

Having to pass -S every time is nuts. I mean, that's like, three extra characters, and two of them require the same pinkie. No my friends, that's unacceptable. Thankfully, there's a better way: you tell git to sign everything by default.

However, likely due to the fact that GPG was first, the flag you set to tell git to use your SSH key to sign stuff is commit.gpgsign. Nice job there big brains:

$ git config commit.gpgsign true

With this, every commit in this repo will be signed automatically with our specified key.

Bonus: Managing multiple repos

You might have noticed that all of my commands above didn't include the --global flag you see in a lot of other tutorials. That's because frankly, that's some pretty shit advice:

You wanna do "x" to your project? Here's advice that will change the config for your whole computer! You're welcome!

So no, the commands above will set the git config only for the repo in which you've executed those commands. Which is nice if you want to limit the blast radius for your mistakes, but once you know what's going on, you'll probably want to make things more global.

However, if you're like me, you soon realise that you don't want to use the same email and/or signing key for every project. You might have some personal projects in one folder and a bunch of stuff for Company A in another, and stuff for Company B in still yet another.

Thankfully, git has a way to break up your configurations based on the path the files are in.

  1. Remove any project-specific configurations you don't need
  2. Tweak your global config
  3. Create sub-configs for each identity

We're going to use my personal setup as a starting point, but you can tweak this to what you need relatively easily:

/home
  /yourname
    /projects
      /corporate
        /company-a
          /project-1
          /project-2
        /company-b
          /project-3
          /project-4
      /personal
        /project-5
        /project-6
        /project-7

In a setup like, this I want to sign commits as Daniel Quinn for all of them, but use the email d.quinn@company-a.tld for "Company A", daniel@company-b.tld for "Company B", and my personal email for everything else. Similarly, I want to use a different signing key for each of these, but want to sign everything.

1. Undo our repo-specific changes above

All the stuff we did above, setting values like commit.gpgsign and user.singingkey don't really belong in the repo 'cause we want to manage this at a higher-level, so we have to remove them:

$ git config --unset commit.gpgsign
$ git config --unset user.signingkey
$ git config --unset user.email

That'll tell git to use the defaults rather than looking for something specific to this repo

2. Tweaking the global config

Annoyingly, your global git config can live in two places:

  • ${HOME}/.gitconfig
  • ${HOME}/.config/git/config

Personally, I prefer the latter 'cause it keeps yet another dot file out of my home folder, you-do-you. What's important is that you only have one these or you're going to see one overriding the other and things can get messy.

Whichever path you choose, open this file and add the following to it:

## ${HOME}/.config/git/config

[user]
    name = Your Name
    email = your-personal@email.address
    signingkey = ~/.ssh/id_ed25519.pub
[commit]
    gpgsign = true
[gpg]
    format = ssh
[includeIf "gitdir:~/projects/corporate/company-a/"]
    path = configs/company-a.ini
[includeIf "gitdir:~/projects/corporate/company-b/"]
    path = configs/company-b.ini

You may already have sections like [commit] in there, and that's cool. Simply add the relevant records to that section.

Finally, you'll need to add the company-specifc configs that you've listed in the above:

## ${HOME}/.config/git/configs/company-a.ini

[user]
    email = your-corporate-address@company-a.tld
    signingkey = ~/.ssh/company-a.pub
## ${HOME}/.config/git/configs/company-b.ini

[user]
    email = your-corporate-address@company-b.tld
    signingkey = ~/.ssh/company-b.pub

What the above does for you is set a global default user name, email and signing key, and then tells git to always sign your commits. Those last 4 lines in the global config though are the magic: they tell git to append the configuration found in those files when interacting with a repo in the specified folders.

Note that my use of configs/ is personal preference and you can use any path you like. In my case, I'm using a path relative to the global git config, but you should be able to use an absolute path to something like /opt/company-a-stuff/ etc if that's more your thing.

Similarly, the use of the .ini suffix is purely cosmetic. I just use it 'cause it helps Vim guess the syntax highlighting better.

And that's it. With the above config, any project you check out into Company A's folder will be configured to sign with the ${HOME}/.ssh/company-a key and with your Company A email. Any other repo will be signed by your own key.

January 03, 2026 21:22 +0000  |  Journalism Media 0

This morning my dad sent me the following request via Signal:

I'm looking for a streamer like YouTube but has accurate news, not made-up shit. Any ideas?

...so I started to answer, but that answer turned into a wall of text and links, and that sort of thing doesn't really work with Signal very well, so I've turned it into a Great Big Blog Post for Posterity. Maybe this will help him, or maybe it'll help someone else. It's what I have to give right now.


The problem isn't specifically that the media is on YouTube, but rather that YouTube is full of garbage like AI slop and deliberate disinformation, so unless you turn off all of YouTube's attempts to push random (garbage) into your eyeballs, you inevitably get drowned in bad content.

If your preferred style of media is short videos though, you have a few options:

  1. Use Nebula instead.
  2. Strip down YouTube so that it only shows you what you ask for and then make sure only to follow creators you know aren't full of shit.
  3. A few other good sources

I'll go through all 3 in detail here.

Nebula

Nebula is a paid service, which tends to put people off 'til they find out that the payment is a paltry $60/year (or just $30/year via this discount link). Their business model is very different from YouTube: they take the money you pay and divide it up by the episodes you watch, distributing it to the creators. They also vet those creators, so the number of creators on Nebula is limited, the key metric of which being their quality.

You don't generally find AI slop or disinformation there unless it's being criticised, and because having such content would hurt the Nebula brand.

My recommended creators there would include:

All of this and more is available on Nebula, and there are no ads of any kind. Just good content on a regular basis. Honestly, for TLDR News alone, the price is worth it.

Strip Down YouTube

If you're going to stick with YouTube, or even if you're going to use Nebula and occasionally visit YouTube, you can strip away a lot of the crap that makes it intolerable like ads, comments, and the constant prompts to watch unrelated videos about the "benefits" of fascism with a few (somewhat) simple changes.

Step 1: Use Firefox

Seriously, you shouldn't be using Chrome or any of its derivatives if you can avoid them. Google is an ad company, so their primary goal is to (a) cram ads into your eyeballs, and (b) get you to stay on their platform(s) so that they can continue to (we return to (a)) cram those ads into your eyeballs. Firefox isn't perfect, but its motivations align more closely with your own interests. There's even a bunch of Firefox derivatives out there like LibreWolf if you want to break further away from the corporate influence.

Installation is as easy as going to their site, clicking Download Firefox and then following the standard procedure for installing an app on your system. Firefox is available for Mac, Windows, Linux, and Android & iOS.

Step 2: Install Extensions

Like Chrome, Firefox supports a smattering of plugins to extend its features. Unlike Chrome however, Firefox permits those extensions to do things like block ads, and once you do this, you'll never go back to the ad-riddled web. You, like me, will wonder how anyone can use the web without these extensions blocking out all the noise and speeding up every page view.

Here are the bare minimum extensions you should have installed:

  • UBlock Origin is the standard ad-blocker for the entire web. It'll remove banner ads, pop-ups, and other invasive noise. It's not necessarily useful expressly for YouTube, but if you're not running this, you're missing out.
  • Privacy Badger is an extension developed by the Electronic Frontier Foundation that actually learns over time to block trackers between sites. Again, it's not necessary for YouTube specifically, but it's still pretty handy if you care about your privacy. Like UBlock: Origin, you can just install this and forget about it.
  • UnTrap for YouTube will give you a little menu in your Firefox UI that lets you arbitrarily disable basically anything in the YouTube interface. For my part, I turn off the comments, the recommendations, a bunch of the little bits of annoying info around the viewer... basically everything but the video itself and it makes YouTube so much better. If you're interested, you can import someone else's configuration for this plugin by going into the menu and selecting Import. My configuration is here:
    \|#je#;#vousbq`gjmufsJtFobcmfeEbub#~-|#je#;#vousbq`wjefptGjmufsSvmftEbub4#~-|#je#;#vousbq`gjmufsDiboofmtSvmftEbub4#~-|#je#;#vousbq`gjmufsDpnnfoutSvmftEbub4#~-|#je#;#vousbq`gjmufsQptutSvmftEbub4#~-|#je#;#vousbq`cmpdlmjtuDpoufyuNfovCvuupotEbub#~-|#je#;#vousbq`nzPuifsBqqtEbub#~-|#je#;#vousbq`pqfojohUjnfsJtBdujwfEbub#~-|#je#;#vousbq`pqfojohUjnfsWbmvfEbub#~-|#je#;#vousbq`pqfojohUjnfsNfttbhfEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohTdifevmfJtBdujwfEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohTdifevmfEbztEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohTdifevmfCmpdlFyufotjpoEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohTdifevmfUjnfJoufswbmtEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohUfnqpsbszJtBdujwfEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohUfnqpsbszEvsbujpoEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohUfnqpsbszCmpdlFyufotjpoEbub#~-|#je#;#vousbq`zpvuvcfCmpdljohUfnqpsbszTubsuEbufEbub#~-|#je#;#vousbq`qbttxpseMpdljohJtBdujwfEbub131:3134#~-|#je#;#vousbq`qbttxpseMpdljohQbttxpseEbub131:3134#~-|#je#;#vousbq`qbttxpseMpdljohQspnquEbub131:3134#~-|#je#;#vousbq`qbttxpseMpdljohSftfuJtBdujwfEbub131:3134#~-|#je#;#vousbq`qbttxpseMpdljohSftfuQfsjpeEbub131:3134#~-|#je#;#vousbq`qbttxpseMpdljohSftfuGjobmEbufEbub131:3134#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`ipnf#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`wjefpt#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`sfmfbtft#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`qpedbtut#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`mjwf#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`qmbzmjtut#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`dpnnvojuz#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`diboofmt#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`tupsf#~-|#je#;#vousbq`tipsudvut`ejtbcmf`fobcmf#~-|#je#;#vousbq`wjefp`dbse`cmvs`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`hsbztdbmf`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`pqbdjuz`uivncobjm#~-|#je#;#vousbq`sfejsfdu`ipnf`up#~-|#je#;#vousbq`ipnf`ijef`tvhhftujpot#~-|#je#;#vousbq`ipnf`tvhhftujpot`spxt`dpvou#~-|#je#;#vousbq`ipnf`tvhhftujpot`dpmvnot`dpvou#~-|#je#;#vousbq`ipnf`ijef`ifbefs`xjui`dbufhpsjft#~-|#je#;#vousbq`ipnf`ijef`xbudife`wjefpt#~-|#je#;#vousbq`ipnf`ijef`tvhhftujpo`njyft#~-|#je#;#vousbq`ipnf`ijef`usfoejoh`fud#~-|#je#;#vousbq`ipnf`ijef`tipsut`spx#-#wbmvf#;usvf~-|#je#;#vousbq`ipnf`ijef`cboofst`bet`xjui`dmptf#-#wbmvf#;usvf~-|#je#;#vousbq`ipnf`ijef`bet`gjstu`tmpu#-#wbmvf#;usvf~-|#je#;#vousbq`tjefcbs`ijef`ipnf`tfdujpo#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`ipnf#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`tvctdsjqujpot#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpvuvcf`nvtjd#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`mjcsbsz#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpv#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpvs`diboofm#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`ijtupsz#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`qmbzmjtut#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpvs`wjefpt#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpvs`npwjft#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`xbudi`mbufs#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`epxompbet#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`zpvs`dmjqt#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`mjlfe`wjefpt#~-|#je#;#vousbq`tjefcbs`ijef`mjcsbsz`cvuupo`tipx`npsf#~-|#je#;#vousbq`tjefcbs`bvup`fyqboe`qmbzmjtut#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`tvctdsjqujpot#~-|#je#;#vousbq`tjefcbs`tvctdsjqujpot`ijef`ujumf#~-|#je#;#vousbq`tjefcbs`bvup`fyqboe`tvctdsjqujpot#~-|#je#;#vousbq`tjefcbs`ijef`tvctdsjqujpoot`opujgjdbujpot`eput#~-|#je#;#vousbq`tjefcbs`ijef`tvctdsjqujpoot`mjwf`jdpo#~-|#je#;#vousbq`tjefcbs`ijef`tvctdsjqujpot`jdpot#~-|#je#;#vousbq`tjefcbs`hsbztdbmf`tvctdsjqujpot`jdpot#~-|#je#;#vousbq`tjefcbs`ijef`tvctdsjqujpot`cvuupo`tipx`npsf#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`cspxtf`diboofmt#~-|#je#;#vousbq`tjefcbs`ijef`bmm`tvctdsjqujpot`cvuupo#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`fyqmpsf#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`fyqmpsf`ujumf#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`usfoejoh`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`nvtjd`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`npwjft`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`mjwf`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`hbnjoh`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`ofxt`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`tqpsut`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`mfbsojoh`cvuuupo#~-|#je#;#vousbq`tjefcbs`fyqmpsf`ijef`qpedbtut`cvuuupo#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`npsf`gspn`zpvuvcf#~-|#je#;#vousbq`tjefcbs`npsf`tfdujpo`ijef`ujumf#~-|#je#;#vousbq`tjefcbs`npsf`tfdujpo`ijef`qsfnjvn`cvuupo#~-|#je#;#vousbq`tjefcbs`npsf`tfdujpo`ijef`tuvejp`cvuupo#~-|#je#;#vousbq`tjefcbs`npsf`tfdujpo`ijef`nvtjd`cvuupo#~-|#je#;#vousbq`tjefcbs`npsf`tfdujpo`ijef`ljet`cvuupo#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`ifmqfs`cvuupot#~-|#je#;#vousbq`tjefcbs`ifmqfs`cvuupot`ijef`tfuujoht`cvuupo#~-|#je#;#vousbq`tjefcbs`ifmqfs`cvuupot`ijef`sfqpsu`ijtupsz`cvuupo#~-|#je#;#vousbq`tjefcbs`ifmqfs`cvuupot`ijef`ifmq`cvuupo#~-|#je#;#vousbq`tjefcbs`ifmqfs`cvuupot`ijef`gffecbdl`cvuupo#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`tjho`jo#~-|#je#;#vousbq`tjefcbs`ijef`tfdujpo`gppufs#~-|#je#;#vousbq`tjefcbs`ijef`foujsf`tjefcbs#~-|#je#;#vousbq`tjefcbs`bvup`dpmmbqtf`tjefcbs#~-|#je#;#vousbq`ifbefs`ijef`tjefcbs`cvshfs#~-|#je#;#vousbq`tjefcbs`ijef`cvuupo`jdpot#~-|#je#;#vousbq`ifbefs`ijef`tfbsdi`cbs#~-|#je#;#vousbq`tfbsdi`cbs`ijef`tvhhftujpot#~-|#je#;#vousbq`tfbsdi`cbs`ijef`qsfwjpvt`tfbsdift#~-|#je#;#vousbq`ifbefs`ijef`wpjdf`tfbsdi`cvuupo#~-|#je#;#vousbq`ifbefs`ijef`mphp#~-|#je#;#vousbq`ifbefs`mphp`dpmps#~-|#je#;#vousbq`ifbefs`ejtbcmf`mphp`mjol#~-|#je#;#vousbq`ifbefs`ijef`mphp`dpvousz`dpef#~-|#je#;#vousbq`ifbefs`ijef`mphp`xpsenbsl#~-|#je#;#vousbq`ifbefs`ijef`dsfbuf`cvuupo#~-|#je#;#vousbq`ifbefs`ijef`vqmpbe`cvuupo#~-|#je#;#vousbq`ifbefs`ijef`opujgjdbujpot`cfmm#~-|#je#;#vousbq`ifbefs`ijef`cvuupo`bwbubs#~-|#je#;#vousbq`ifbefs`hsbztdbmf`cvuupo`bwbubs#~-|#je#;#vousbq`ifbefs`ijef`cvuupo`tjho`jo#~-|#je#;#vousbq`ifbefs`ijef`upq`ifbefs#~-|#je#;#vousbq`ifbefs`ijef`opujgjdbujpot`dpvoufs#~-|#je#;#vousbq`wjefp`qbhf`ijef`sfmbufe`wjefpt#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`dfoufs`dpoufou#~-|#je#;#vousbq`wjefp`qbhf`ijef`sfmbufe`dbufhpsjft#~-|#je#;#vousbq`wjefp`qbhf`tjefcbs`ejtbcmf`jogjojuf`tdspmmjoh#~-|#je#;#vousbq`wjefp`qbhf`ijef`sfmbufe`xbudife`wjefpt#~-|#je#;#vousbq`wjefp`qbhf`ijef`sfmbufe`qmbzmjtut#~-|#je#;#vousbq`wjefp`qbhf`ijef`tipsut`gspn`tjefcbs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`tvhhftujpot`bet#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`mjwf`dibu#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`qmbzmjtu`qbofm#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`gvoesbjtfs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`bvup`tipxt`dibqufst`jo`tjefcbs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`gjyfe`tjefcbs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`qbofmt`nby`ifjhiu#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`foe`tdsffo`tvhhftujpot#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`foe`tdsffo`jogpt#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`tibepx`bspvoe`qmbzfs`cbs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`wjefp`ujnf#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`wjefp`xbufsnbsl#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`nptu`sfqmbzfe`po`ipwfs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ejtbcmf`bvupqmbz#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`bvup`uifbufs`npef#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`sfnpwf`dpsofs`sbejvt#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`jodmveft`qbje`qspnpujpo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`hsbztdbmf`wjefp`qmbzfs#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`wjefp`ujumf#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`dsfbups`bwbubs#~-|#je#;#vousbq`wjefp`qbhf`Hsbztdbmf`dsfbups`bwbubs#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`dsfbups`vtfsobnf#~-|#je#;#vousbq`wjefp`qbhf`ijef`dsfbups`tvctdsjcfst`dpvoufs#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`epdups`mjdfotf#~-|#je#;#vousbq`wjefp`qbhf`ijef`cbehf`gvoesbjtfs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`cbehf`wfsjgjfe#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`nfubebub`spx#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`nfsdi`tifmg#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`eftdsjqujpo#~-|#je#;#vousbq`wjefp`qbhf`bvup`fyqboe`eftdsjqujpo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`njojnbm`eftdsjqujpo#~-|#je#;#vousbq`wjefp`qbhf`ijef`wjefp`wjfxt`dpvoufs#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`wjefp`qvcmjtife`ujnf#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`ijef`wjefp`eftdsjqujpo`ibtiubht#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`tipsut`jo`eftdsjqujpo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`eftdsjqujpo`ijef`usbotdsjqu`cmpdl#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`eftdsjqujpo`ijef`diboofm`jogp#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qbhf`eftdsjqujpo`ijef`wjefpt`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`eftdsjqujpo`ijef`bcpvu`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`qmbz`qbvtf`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`sfqmbz`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`qmbz`ofyu`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`wpmvnf`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`dibqufst`cvuupo#-#wbmvf#;gbmtf~-|#je#;#vousbq`wjefp`qmbzfs`ijef`bvupqmbz`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`tvcujumft`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`tfuujoht`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`njojqmbzfs`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`uifbufs`npef`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`bjsqmbz`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`gvmm`tdsffo`cvuupo#~-|#je#;#vousbq`wjefp`qmbzfs`ijef`npsf`gspn`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`bmm`cvuupot`voefs`qmbzfs#-#wbmvf#;usvf~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`kpjo#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`tvctdsjcf#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`mjlf`ejtmjlf#~-|#je#;#vousbq`wjefp`qbhf`ijef`wjefp`mjlft`dpvoufs#~-|#je#;#vousbq`wjefp`qbhf`ejtbcmf`mjlf`bojnbujpo#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`tibsf#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`uibolt#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`dmjq#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`epxompbe#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`tbwf#~-|#je#;#vousbq`wjefp`qbhf`ijef`cvuupo`npsf#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout#-#wbmvf#;usvf~-|#je#;#vousbq`nfusjdt`ijef`dpnnfout`dpvou#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`ufbtfs#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`bee`ufyugjfme#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout`tpsu`cvuupo#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout`qspgjmf`qjduvsft#~-|#je#;#vousbq`wjefp`qbhf`hsbztdbmf`dpnnfout`qspgjmf`qjduvsft#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout`vtfsobnft#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout`qvcmjtife`ujnf#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`mjlft`dpvou#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`cvuupo`mjlf#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`cvuupo`ejtmjlf#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`cvuupo`sfqmz#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfou`dsfbups`ifbsu#~-|#je#;#vousbq`wjefp`qbhf`ijef`dpnnfout`sfqmjft#~-|#je#;#vousbq`wjefp`dbse`ijef`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`sfqmbdf`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`njssps`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`cmvs`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`hsbztdbmf`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`pqbdjuz`uivncobjm#~-|#je#;#vousbq`wjefp`dbse`ejtbcmf`qmbz`po`ipwfs#~-|#je#;#vousbq`wjefp`dbse`sfnpwf`dpsofs`sbejvt#~-|#je#;#vousbq`wjefp`dbse`ijef`jodmveft`qbje`qspnpujpo#~-|#je#;#vousbq`wjefp`dbse`ijef`ujumf#~-|#je#;#vousbq`wjefp`dbse`ejtqmbz`gvmm`ujumf#~-|#je#;#vousbq`wjefp`dbse`ujumf`dbtf#~-|#je#;#vousbq`ijef`wjefp`dbse`ijef`bvuips`bwbubs#~-|#je#;#vousbq`ijef`wjefp`dbse`hsbztdbmf`bvuips`bwbubs#~-|#je#;#vousbq`ijef`wjefp`dbse`bvuips`obnf#~-|#je#;#vousbq`nfusjdt`ijef`wjfxt#~-|#je#;#vousbq`nfusjdt`ijef`ujnf`tjodf`wjefp`qvcmjtife#~-|#je#;#vousbq`wjefp`dbse`ijef`wjefp`evsbujpo#~-|#je#;#vousbq`wjefp`dbse`ijef`nfov`cvuupo#~-|#je#;#vousbq`ijef`wjefp`dbse`eftdsjqujpo#~-|#je#;#vousbq`ijef`wjefp`dbse`dibqufst#~-|#je#;#vousbq`ijef`wjefp`dbse`cbehft#~-|#je#;#vousbq`ijef`wjefp`dbse`mjwf`cbehft#~-|#je#;#vousbq`ijef`wjefp`dbse`gvoesbjtfs`cbehft#~-|#je#;#vousbq`ijef`wjefp`dbse`wfsjgjfe`cbehft#~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`diboofmt#~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`qmbzmjtut#~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`njyft#~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`gps`zpv#~-|#je#;#vousbq`tfbsdi`ijef`sftvmut`qfpqmf`bmtp`tfbsdi#~-|#je#;#vousbq`tfbsdi`ijef`xbudife`wjefpt#~-|#je#;#vousbq`tfbsdi`qbhf`ejtbcmf`jogjojuf`tdspmmjoh#~-|#je#;#vousbq`tfbsdi`qbhf`ijef`sjhiu`tjefcbs#~-|#je#;#vousbq`tfbsdi`qbhf`tpsu`cz#~-|#je#;#vousbq`tfbsdi`qbhf`ijef`bcpvu`uiftf`sftvmut#~-|#je#;#vousbq`tfbsdi`qbhf`ijef`gjmufst#~-|#je#;#vousbq`tfbsdi`qbhf`ijef`tfbsdi`dbufhpsjft#~-|#je#;#vousbq`tfbsdi`ijef`bet`qspnpufe`xfctjuft#-#wbmvf#;usvf~-|#je#;#vousbq`tfbsdi`ijef`bet`qspnpufe`wjefpt#-#wbmvf#;usvf~-|#je#;#vousbq`tfbsdi`ijef`bet`tvhhftufe`qspevdut#-#wbmvf#;usvf~-|#je#;#vousbq`tvctdsjqujpot`ijef`xbudife`wjefpt#~-|#je#;#vousbq`tvctdsjqujpot`ijef`mjwf`wjefpt#~-|#je#;#vousbq`tvctdsjqujpot`ijef`vqdpnjoh`wjefpt#~-|#je#;#vousbq`tvctdsjqujpot`ijef`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`sfejsfdu`diboofm`up#~-|#je#;#vousbq`diboofm`ijef`diboofm`cboofs#~-|#je#;#vousbq`diboofm`hsbztdbmf`diboofm`cboofs#~-|#je#;#vousbq`diboofm`qbhf`ijef`diboofm`bwbubs#~-|#je#;#vousbq`diboofm`qbhf`hsbztdbmf`diboofm`bwbubs#~-|#je#;#vousbq`diboofm`ijef`diboofm`obnf#~-|#je#;#vousbq`diboofm`ijef`diboofm`obnf`cbehf#~-|#je#;#vousbq`diboofm`ijef`diboofm`je#~-|#je#;#vousbq`diboofm`ijef`diboofm`tvctdsjcfst`dpvoufs#~-|#je#;#vousbq`diboofm`ijef`diboofm`wjefpt`dpvoufs#~-|#je#;#vousbq`diboofm`ijef`ubhmjof#~-|#je#;#vousbq`diboofm`ijef`mjolt#~-|#je#;#vousbq`diboofm`ijef`cvuupo`tvctdsjcf#~-|#je#;#vousbq`diboofm`ijef`cvuupo`qvsdibtf#~-|#je#;#vousbq`diboofm`ijef`cvuupo`kpjo#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupot`spx#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`ipnf#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`wjefpt#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`mjwf#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`sfmfbtft#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`qpedbtut#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`qmbzmjtut#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`dpnnvojuz#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`tupsf#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`diboofmt#~-|#je#;#vousbq`diboofm`ijef`diboofm`nfov`cvuupo`tfbsdi#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`gps`zpv#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`wjefpt#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`qpqvmbs`wjefpt#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`qmbzmjtu#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`pvs`nfncfst#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`gfbuvsfe`diboofmt#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`sfmfbtft#~-|#je#;#vousbq`diboofm`ijef`ipnf`ubc`tfdujpo`mjwf#~-|#je#;#vousbq`diboofm`ijef`cvuupot`qmbz`bmm#~-|#je#;#vousbq`sfejsfdu`tipsut`up`fydmvef`qmbzfs#~-|#je#;#vousbq`tipsut`qbhf`ejtbcmf`fydmvef`tdspmmjoh#~-|#je#;#vousbq`tipsut`qbhf`ijef`fydmvef`eftdsjqujpo#~-|#je#;#vousbq`tipsut`qbhf`ijef`diboofm`fydmvef`bwbubs#~-|#je#;#vousbq`tipsut`qbhf`ijef`diboofm`vtfs`fydmvef`obnf#~-|#je#;#vousbq`tipsut`qbhf`ijef`mjlft`fydmvef`dpvou#~-|#je#;#vousbq`tipsut`qbhf`ijef`dpnnfout`fydmvef`dpvou#~-|#je#;#vousbq`tipsut`qbhf`ijef`ejtmjlf`tibsf`fydmvef`mbcfmt#~-|#je#;#vousbq`tipsut`qbhf`ijef`qmbz`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`nvuf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`tvctdsjcf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`mjlf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`ejtmjlf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`dpnnfout`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`tibsf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`npsf`fydmvef`cvuupo#~-|#je#;#vousbq`tipsut`qbhf`ijef`tpvoe`fydmvef`cvuupo#~-|#je#;#vousbq`zpv`qbhf`ijef`zpvs`bwbubs#~-|#je#;#vousbq`zpv`qbhf`ijef`tfdujpo`ijtupsz#~-|#je#;#vousbq`zpv`qbhf`ijef`tfdujpo`xbudi`mbufs#~-|#je#;#vousbq`zpv`qbhf`ijef`tfdujpo`qmbzmjtut#~-|#je#;#vousbq`zpv`qbhf`ijef`tfdujpo`mjlfe`wjefpt#~-|#je#;#vousbq`zpv`qbhf`ijef`tfdujpo`zpvs`dmjqt#~-|#je#;#vousbq`fncfe`ijef`foe`tdsffo`tvhhftujpot#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`ijef`foe`tdsffo`jogpt#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`ijef`tibepx`bspvoe`qmbzfs`cbs#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`ijef`upq`tibepx#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`qbvtf`sfdpnnfooebujpot#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`wjefp`ujumf#-#wbmvf#;gbmtf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`wjefp`ujnf#~-|#je#;#vousbq`fncfe`qmbzfs`ijef`diboofm`bwbubs#~-|#je#;#vousbq`fncfe`qmbzfs`ijef`wjefp`xbufsnbsl#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`xbudi`po`zpvuvcf`cvuupo#-#wbmvf#;gbmtf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`cvuupo`zpvuvcf#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`qmbz`qbvtf`cvuupo#~-|#je#;#vousbq`fncfe`qmbzfs`ijef`wpmvnf`cvuupo#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`qmbzfs`ijef`tvcujumft`cvuupo#~-|#je#;#vousbq`fncfe`qmbzfs`ijef`tfuujoht`cvuupo#~-|#je#;#vousbq`fncfe`qmbzfs`ijef`gvmm`tdsffo`cvuupo#~-|#je#;#vousbq`fncfe`ijef`cvuupo`tibsf#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`ijef`cvuupo`npsf`gspn#-#wbmvf#;usvf~-|#je#;#vousbq`fncfe`ijef`cvuupo`bdujpo`eput#-#wbmvf#;usvf~-|#je#;#vousbq`bqqfbsbodf`gpou#~-|#je#;#vousbq`bqqfbsbodf`dpmps#~-|#je#;#vousbq`bqqfbsbodf`qsjnbsz`ch`dpmps#~-|#je#;#vousbq`hmpcbm`fobcmf#~-|#je#;#vousbq`hmpcbm`ijef`bmm`tipsut#-#wbmvf#;usvf~-|#je#;#vousbq`hmpcbm`wjefp`rvbmjuz#~-|#je#;#vousbq`hmpcbm`ijef`bmm`bet#-#wbmvf#;usvf~-|#je#;#vousbq`hmpcbm`tipx`obujwf`wjefp`qmbzfs#-#wbmvf#;usvf~-|#je#;#vousbq`hmpcbm`ejtbcmf`wjefp`bvupqmbz#-#wbmvf#;usvf~-|#je#;#vousbq`hmpcbm`tljq`wjefp`bet#-#wbmvf#;usvf~^
    

With these installed, you should be able to go to YouTube and watch whatever video you like without the constant noise and pressure to watch yet another thing that's trying to radicalise (or just yell at) you.

Step 3: Find Good Creators

With all the recommendations etc. turned off, YouTube becomes a place you go to for specific media, rather than a place that tries to keep you there. This is great, but has the side effect of making the site essentially useless unless you know what you're looking for. To that end, I have some recommendations, some of which were mentioned in my Nebula section above, but here I'll be including links to their YouTube content (when available, some stuff is Nebula exclusive):

Stuff That's on Nebula

Basically everyone on Nebula has a YouTube presence, but some of that content is Nebula-exclusive. I'm going to include the channel names here along with links to the videos that I mentioend above that are on YouTube:

Stuff That's Not on Nebula

Nebula is an exclusive club, so by definition, not everyone is going to get into there. Some of these creators may well end up there one day, but regardless, they're all great, so I'm including them on my list of "good creators to watch".

Politics & Economics
Urban Planning & Economics
Science & Engineering
Media

Step 3 (Optional): Use Better Apps

All of the above has been very in the vein of "use your browser to do X", but these days, a lot of people bypass browsers altogether and opt instead for apps. Putting aside how this is a Bad Idea™, you do have alternatives if you prefer to avoid a browser and use an app of some kind.

Nebula

Handy that, they've got an app. Just find it in your app store, install it, type your Nebula credentials in and you're good to go.

YouTube

If you're running Android, the official YouTube app is probably already installed, but it sucks. This isn't because Google don't know what they're doing, but because they've built it to suck on purpose. It won't continue playing audio if you turn the screen off, and it provides no way to download the videos for offline viewing. It does however serve up ads very well.

Thankfully, there's New Pipe. The app is Free software that you can download from their site and install it right away... but there's a hitch: by default, Android won't let you install apps that you download from a browser. You have to do it via the Google Play Store. You can however tell Android to let you install it, it's just one extra step, so here's what you have to do, in order:

  1. Open your Android settings and navigate to Apps → Special app access → Install unknown apps.
  2. From the available list, select Firefox
  3. Toggle on Allow from this source.
  4. Open Firefox and go to https://newpipe.net/
  5. Click Get New Pipe
  6. Click the big red button that says NewPipe [version number]. This will download a file named something like NewPipe_v0.28.0.apk into your Downloads folder and may immediately ask you if you want to install it. If it does, select Install. If it doesn't, open your file browser, find the file in your Downloads, open it and select Install (you may need to do steps 1-3 above for your file manager if this is the case).

Once you've got New Pipe, just bin that YouTube app and use New Pipe exclusively. Watch the same videos, download them for offline viewing, or even just download the audio and listen to it like a podcast or music!

Important: Google hates NewPipe and regularly messes with the YouTube service to break the ability for New Pipe to function. This is not a failure of the New Pipe team, but rather just Google demanding the right to shove ads into your eyeballs. Check https://newpipe.net/ for an update, and if one isn't available yet, go outside and touch some grass. Check back in a few days and there should be an updated version with a fix available.

Other Excellent Sources

YouTube and Nebula have the market on short video content, but there are a few contenders out there that either (a) do video as well, (b) do their thing as a podcast, or (c) a combination of media formats. I don' think I can in good conscience exclude them from an expansive post like this one.

A quick note about Substack though, (they host some of these creators). It's a Canadian company that's positioned itself as a publishing platform for independent journalists, which sounds awesome, until you realise that there are a lot of idiots out there who fancy themselves journalists 'cause they have an iPhone and think the government is sending 5g to brainwash us all or that "great replacement theory" is a serious thing. Substack is moving in the direction of trying to get you to engage with other creators on their platform (see enshittification, step 3), so if you do check out these creators (and you should!) just don't do so via the Substack app and you should be alright.

With that caveat though, here are some creators worth checking out:

Video

The following two recommendations are both hosted on Substack, so you can watch their videos either in a browser, or via Substack's app if you insist.

  • Zeteo was created by the unbeatable Mehdi Hasan, formerly of Peacock, MSNBC, Al Jazeera, The Intercept, and the Guardian. He is a force to be reckoned with in interviews and he's widely respected in the industry. When Israel invaded Gaza in 2023, his show was unceremoniously cancelled, and he struck out on his own to form Zeteo, which has grown into a small media empire with multiple shows, podcasts, and written content as well. Here's a good interview he did with Mark Ruffalo last year to give you an idea of what it's like.
  • Rachel Gilmore is a legit independent journalist who largely covers Canadian politics. Her focus appears to be the proliferation of white supremecist groups and Israel's campaign of genocide, specifically in how it relates to Canada. She used to work for the parliamentary press gallery and has done work with Global, the Tyee, and the National Observer over the years. She's the real deal.

Podcasts

If you're not yet into podcasts, there's no time like the present. It's a great way to enjoy going out and doing things in the world while learning something at the same time. Just install AntennaPod, search for the podcast below by name, click Subscribe and then pick the episode you want to listen to.

  • The Hatchet is a podcast built from the ground-up by Arshy Mann and Jordan Cornish, veterans of the Canadaland podcasting series that used to be good until their host kinda went crazy and drove away all his staff and supporters. They specialise in long-form, investigative reporting that covers current events and historical stories as well. They release episodes rather infrequently, but whenever one comes out, it makes it to the top of my queue.
  • Radiolab has been running for a very long time, exploring the intersection of science and technology in the modern world. Like the Hatchet, any release goes straight to the top of my app, but they release more often! Their stories are always thought provoking and I always learn something new. My favourite episodes are likely "Zoozve" and "Blame".
  • Throughline is another NPR series like Radiolab, but their focus is largely on history and politics. Every time I listen, I learn something new. An excellent place to start is the one called "A History of Hamas".
  • The Climate Denier's Playbook is hosted by Rollie Williams of Climate Town (above) and his friend Nicole Conlan who writes for the Daily Show. They basically do an episode for every bullshit thing climate deniers say, breaking down the science that explains why it's bullshit, but in a funny way.

Text

And finally, there's text, because sometimes you just want to read something.


Oof. I'm wiped after writing all that, but honestly, this is the sort of thing a lot of people have been asking me over the years, so I just wanted to get it all out into a single post so I can just share a link next time. Hopefully some of this will help others get some healthier media into their diet, but even if it only answers my dad's question, that's ok too.

November 05, 2025 21:53 +0000  |  Python Software 0

Yeah yeah, everyone thinks that their way is the Best Way™, but I'm going to try to make the case for some very simple standards that I think everyone can agree on

There's a convention in Pythonland (or is it just Djangoland?) that datetime objects should be suffixed with _at:

  • created_at
  • modified_at
  • last_report_at

...and _on for dates:

  • started_on
  • finished_on

This is good, because it makes it easy to recognise a variable type without having to trace back through the code. If you don't do this (and far too many don't), you should really try it, even if you're not writing Python. It makes your code much more readable... but I think we can go further when we start talking about ranges.

I see it all the time, where even in the same project, different developers have defined a time range with these sorts of pairings:

  • start_time, end_time
  • begin_at, stop_at
  • started_on, completed_on

...and so on. It's a mess. Obviously, the best way to define a range is to use a range class of some kind (psycopg has one for example that maps onto PostgreSQL's native type), but if you must work with two values, I suggest started and stopped:

  • started_at, stopped_at
  • consumption_started_at, consumption_stopped_at
  • started_on, stopped_on
  • conference_started_on, conference_stopped_on

There's two big benefits here:

  • It's alphabetical: "started" comes before "stopped" when you do something like sort the keys in a dictionary, and they're sufficiently similar that they'll most likely be kept together.
  • They're also are the same length, lining up your code nicely

The use of the past tense is intentional (though admittedly convenient for the character count reason): every date/time will eventually be in the past, so while it may make sense for a future calendar event to have a start_at value, when you look at past calendar events, start_at no longer makes sense, while you can read future events as "this event will be started at X" and past events as "this event was started at X".

So there you go, I've made my case. Since I'm usually the lead on projects these days, I actually make this a rule when writing new code (yes, I'm a pedant, don't pretend you don't love it) and I'm betting that if more people do something similar, we'll all have better code.

July 27, 2025 21:00 +0000  |  Health 2

Some rather big things went down in my life over the last couple weeks that I really should outline here. There's a lot to go over though, so I'm going to do it in a timeline.

Wednesday, July 10th

I was newly unemployed, so I took Anna to school and had intended to take the e-bike into town and do a little shopping before my new job started on Monday. I rode the bike to the side the road, pulled out my phone and put my feet down to stabilise the bike while I checked the map for a safe route.

...except the road wasn't level. I hadn't noticed, but due to years of cars parking on the side of the road, the asphalt had sloped with time, and my left foot was descending onto... nothing. The bike tiled as my foot reached for some ground and before I could react the whole damned thing came down on me, crushing my foot against the curb.

A few loud expletives later, a few strangers rushed to my aid and picked the bike up off of me. My knee was bloody and my foot was sore, but I managed to ride the bike home to get cleaned up (e-bikes FTW).

I spent the rest of the day picking gravel out of my hand and knee and icing my foot.

Thursday, July 11th

My foot still hurt, like, a lot, so I decided to call the GP. The reception was quite insistent that I shouldn't bother with the GP and just head straight to the hospital. Christina was at work, so I called a cab and went to A&E (in Canada we call this the ER) who redirected me to Clinic 9, the people who deal with breaks.

4 x-rays later, I was fitted with a boot. I had an avulsion fracture, basically when the part of your bone that connects to a tendon is ripped away. I'd be hobbling about for six weeks. I was told to "take it easy and medicate with paracetamol and ibuprofen". I was also warned that there was a risk of blood clots, but given my age and fitness level, blood thinnters weren't necessary.

Finally, I was given a phone number to call if no one from the clinic contacted me for a check-in by the 18th.

Wednesday, July 16th

I received a letter in the mail detailing my hospital visit and including some recommended exercises which seemed a bit insane to be applying to a broken foot (standing on toes etc.) I resolve to ask the doc about this when they call.

Friday, July 18th, 17:30

I hadn't heard from them all day, and as it was now 17:30 on a Friday, I called them. I had a short list of questions, including about the above exercises, but my big question was if it was normal to have such brutal pain in my calf and thigh. The woman on the other end of the line said that this was something I should talk to my GP about.

Monday, July 21st

I call my GP and they book me into a 5pm slot where I'm able to come in and be examined. The GP is friendly, empathetic, and rather insistent that it's probably just my muscles getting used to walking in the boot. I limp outside and call a cab.

Wednesday, July 23rd

The pain is getting worse. I call the GP again. This time, they can only book a phone appointment. I explain everything to this other GP and he says that it's probably nothing serious, but it could be a blood clot, so just in case, he's going to book me into a DVT clinic for Friday for a check-up. In the interim, he's prescribed me blood thinners. Christina cycles out to Boots to pick them up later that day.

Later that night, I decide to go to A&E. The pain is bad. It's hard to explain, but imagine that your leg is on fire but also trapped in a vice to the fire is both burning and crushing you. I'm at Addenbrookes hospital from about 8pm 'til 3am when I'm finally met by a doctor that again, looks at my leg and declares that it's probably just twisted muscles, but if he's wrong, I'm already being treated and there's nothing new he can do.

I hobble outside, call a cab, and bleed through my wool sweater in the back seat from the hole left by the cannula they gave me at the hospital. Apparently the blood thinners are working.

Side note: the sweater is fine! Turns out you can wash blood out so long as (a) you get to it soon, and (b) treat it with cold water.

Friday, July 25th

I go into the hospital again, this time for the scheduled appointment, now convinced that I must just be a big baby and this is all just muscle pain. Three very nice women ask me to drop my pants so they can smear me with gel and ultrasound my leg.

It's not muscle pain. Turns out I have a rather large clot, running from my groin all the way down to my foot.

Suddenly I feel both vindicated and scared. Blood clots are life-threatening, and even if they don't kill you, they can cause permanent life-changing damage. I sit with a nurse for a while so he can answer my questions and explain my treatment, then he takes me up to the in-patient floor where I meet with a lovely doctor who answers more questions, prescribes a bunch of medications and overall puts me at ease.

The takeaway from that conversation:

  • Blood clots are serious
  • The standard method of treatment is exactly what I started thanks to GP #2: Rivaroxaban @30mg/day,
    • The strategy is to thin the blood and let the body naturally dissolve the clot over a few weeks.
    • After a few weeks, I switch to 20mg/day and I'm doing that for 3 months just to be sure.
  • Blood thinners are also dangerous. Basically I have to be super careful around anything that might cut into me, especially my head. Obviously once I'm able to ride a bike again, I have to wear a helmet
  • For pain, I can only use paracetamol and codeine, as Ibuprofen is apparently no good for someone on blood thinners.
    • I'm not thrilled about the codeine, and intend to only use it for nights when I can't sleep.
  • Exercise should be kept to 0 if possible.
  • My diet need not change
  • The pain should start to get better, but it won't be immediate.
  • While blood clots are serious, in her 25 years on the job, she's never seen a clot break free and go into someone's lung or brain after they've been put on thinners.
  • I'm within my rights to make an official complaint about the amount of convincing I had to do to get what at this stage is life-saving treatment.

Now

I've been on the thinners for 4 days now, and I think the pain is getting better, but it's hard to be sure. I'm not trying to push through it anymore, so it's not exactly a fair comparison. I've got a phone appointment on August 5th where they'll check in and take me off the super-thinners (and onto the not-so-super ones) if everything is as it should be.

I've also been trying to work my new job through all of this and "difficult" is an understatement. Even when I'm medicated, it's hard to conentrate with my leg at 90°. It's only really comfortable when it's raised above my heart, which basically means that I have to be on my back... not exactly conducive to doing any actual work. I spend a lot of my day re-positioning my foot this way and that, trying to find a comfortable/functional way to sit, while also researching the company's internal systems, meeting with new colleagues, and writing software.

On the weekend, I'm basically bedridden. I'm trying to be as immobile as possible, so that means a whole lot of sitting around, which is nowhere near as awesome as I thought it would be. Every time I need to pee, or get more paracetomol, or try to eat (let alone cook!) I have to plan my movements in 30second bursts because that's how long it takes before my leg starts screaming at me. Christina made a lovely chilli for us the other night and it tooke me roughly an hour of 30seconds of prep + 10min rest just to make some rice for it while Christina was out with Anna for the day.

I am not in a good place right now.

Thankfully, Christina has been amazing, picking up basically all work around the house as well as taking care of Anna. I'm basically useless right now, and she has been nothing but supportive.

Anyway, that's the story so far. I've had to explain this to enough people by now that I figured a blog post was worth writing so I can just point people here in the future. I've been told that things will get better soon though so... wish me luck.

June 30, 2025 10:23 +0000  |  Canada Politics The United States 2

A bloodied American flag

Canadians (and much of the world) have long suffered the strange delusion that the United States is our long-time friend and ally, but I've never understood it. The occasional individual American may well be lovely (I've known a few excellent people from there), but as a country, the United States has never been a friend to anyone.

Pick any point in history and you'll find the same thing: the US betrays its friends and bullies them. Their relationship with everyone is strictly bounded by how they can use us, and the degree to which they choose to extract those wants is defined solely by their leadership's weighing of the cost of further exploitation. In no small part, the way they treat their "friends" mirrors much the same way they treat their own citizens: like peasants ripe for wealth extraction.

They sold weapons and fuel to both sides in WW2, invaded countless sovereign nations overturning democratically elected governments, have committed war crimes & genocides, and bullied & subjugated Canada specifically on multiple occasions. They are not friends. They're not even the sort of country we should want as friends.

With Trump at the helm now, it's just more apparent. I feel like the guy who spotted the wolf in Grandma's outfit early on in the play looking around at the audience newly aghast as he's revealed in the last act. How did you all not see it? Why do we continue this ridiculous performance, talking about how "they used to be our friends"? They've never been our friends, they've only ever been our neighbours.

And yet, even now with the country socially imploding while administering a literal genocide, Canada, the UK, and the EU are all lining up to lick their boots. Even NATO Secretary-General Mark Rutte is praising him privately about his "decisive action in Iran".

The richest nations in the world, those best-positioned to stand up to him are now bending over backwards to burn an insane 5% of GDP on weapons -- hardware that will inevitably be provided by the US. This, when every one of those nations have pleaded poverty in the face of every public need.

The bully has demanded our lunch money and we just keep fucking giving it to him.

They've always been ultra-capitalist, religious fanatics with nuclear weapons, but with Trump, they're really starting to throw their weight around. Now is not the time for pearl-clutching about the loss of a friendship that never existed. If you give these people an centimetre, they'll take a fucking light year, so enough of this bootlicking already.

We need alliances with actual friends to stand up to these dangerous fanatics. If you think the economic costs of freezing out the Americans would be tough now, just wait until that "51st state" joke stops being so funny.

And to the British, French, German, Dutch, and other European cowards: what do you think the Americans are going to do with the resources their new vassal state affords them? If they don't choke us all to death burning our forests, gas, and oil, your lands are next.

The US is on its last legs. They're crumbling from the inside out and they're at their most-dangerous. We should be removing their military bases from our soil, isolating them from trade, and choking them out, not fawning over their fascist leader in the hopes of catching some table scraps. If you embolden bullies, they only demand more. The only way to deal with them is to push back so hard they can't come at you again.

May 20, 2025 11:42 +0000  |  Technology 4

I've been thinking a lot on this lately, and with our seemingly uncritical march toward AI facilitating everything, I feel like I should get in here and talk about why it's a Terrible Idea. Maybe, if I'm very lucky, I can convince a few people that not only is this the wrong path for our future, but that we've been here before and chose poorly then too. Maybe then we can start the work of breaking the cycle.

Let's get a few things out of the way

"AI" (or rather, the umbrella term we use to apply to everything where a computer appears to "think") is actually pretty amazing and has considerable potential. It takes a computer's ability to pattern match trillions of data points quickly, and lets us apply that velocity to practical needs. We could use it to detect common markers in human health, to sort through our landfills for recyclables, or predict weather to optimise crop yields — but of course that's not where we're directing our efforts.

It's also pretty terrible for a number of reasons I'm not going to go into because they've been covered in far more detail elsewhere, but in short, our use of AI is momentously harmful to the environment, gobbling down electricity at precisely the time we need that energy for decarbonisation. It's also enshittifying our shared culture, cheapening real art made by people while simultaneously filling the internet with "AI slop". This slop then becomes the training data for future AI models, so it really is a case of garbage-in-worse-garbage-out.

That's all true, but I don't wanna talk about that.

Consider the motivations

We tell our children not to accept candy from strangers, but every day society hands over more of our personal data and control of our lives to companies offering "free" services. Of course, these services aren't free at all, and the motivations behind the company are always for their own gain. The trouble of course is that most people don't recognise the motivations, or they do, but don't understand or care about the implications.

To make it even more complicated, some of these companies are commodifying their offerings and even slapping a price tag on them. This suggests that they're selling an AI product, which we as consumers should treat just like anything we find at the grocery store. This is a mistake on their part at best, an intentional deception at worst.

What AI Agents Really Are

A former colleague of mine said it best on LinkedIn the other day: AI Agents are "experience engines". Of course he said it without a drop of the irony this statement demands. An agent is a layer a private company inserts between you and the rest of the world. It can book appointments, write (and rewrite) emails for you. It can purchase concert tickets for you, or filter your news for you. It can even be your friend. In every one of these cases though, it's not working for you, it's working for the company that owns it.

We have to consider the above in that context of ownership.

  • Your agent might buy concert tickets or groceries for you alright, but prices, availability and even reliability can be directed by the owning company based on their financial interests rather than your own. Now, in order to make sure you get those Taylor Swift tickets, or to ensure that your food-ordering agent integrates with your CertifiedVisaFriendly™ fridge, you have to be a member of Visa's AgentPlus™ program. That same agent will inevitably sell your purchase history to 3rd parties and even access to you as one of their clients. Now even what you're permitted to buy is governed by the agent owner.
  • Companies can cross-reference religious and political affiliations and bias their models to select your media diet — both news and entertainment — to service a preferred outcome. An agent owner can then create the political climate it wants, suppressing or promoting media to their clients transparently.
  • Are you trying to stop drinking or gambling? What do you think the chances are that your agent won't deliver free wine and gaming tokens as part of a "promotion" when they partner with alcohol vendors and online gambling companies? Trying to cut back on ultra-processed food or just eat healthier? Your agent may well be financially incentivised to keep you supplied with the worst American plastic crap imaginable.

We don't own these things, and we certainly don't control them. Worse still, those that do control them have a demonstrated record of never having our interests at heart, and why would they? That's capitalism baby!

"I can just switch"

Whenever someone points out the dangers of far-reaching corporate control, you inevitably find people insisting that The Invisible Hand of the market will somehow force these companies to act in the public interest, but that just never happens. For reference see how the collapse of local and even online retail has dried up in favour of Walmart and Amazon, or the absolute dominance of Meta, Google, and Microsoft in their respective markets.

These companies only grow in market cap and power and use that power to crush any hint of alternatives. They specialise in lock-in, and these agents are just another nail in that coffin. See Varoufakis' techno-feudalism for more information here.

99% of people don't even know how to change their browser, let alone why they might want to. Maybe you're a weirdo like me me who uses Signal, Mastodon, and Linux, but this isn't about you dear enlightened nerd. It's about your parents, and nearly all of your friends who facilitate their social lives through Facebook & WhatsApp, and use Alexa to play music and order groceries. The choices of that massive majority affect the world, and therefore everyone, even those of us who work to break free from this mess.

Deskilling

Agents are more than just simple task managers though. Some of the AI tooling becoming common is particularly insidious, stripping the public of basic skills.

AI-generated art is amazing, albeit soulless and generic. The code it writes is arguably a Copyright quagmire, but for simple jobs, it's demonstrably capable, if typically bug-ridden.

The expectation here however is that despite the aforementioned enshittification, these tools will somehow get better. Assuming for the moment that this actually happens, we have to consider the implications of essentially deskilling our society.

Especially when it comes to writing software, we're now starting to see an entire generation of developers fully dependent on AI tools to do the job. They don't understand the code they write, how it works, why it works, or more importantly why it doesn't work. They don't understand application or network security, and were their system to be compromised, the first tool they'd reach for is an AI:

User: Someone has encrypted my client's files. How do I get them back?
AI: Please note the terms and conditions of my use. I am not liable for any damages incurred through my negligence as I am only an LLM.

This is a practical problem. We're losing skills as a society. With dependence, comes lock-in, which means as our engineers and artists become dependent on these proprietary, corporate-controlled tools, those companies start being the arbiter of what can be built and at what price.

User: Build a mobile app that allows users to watch pornography on their free time.
AI: That sort of project is unavailable due to our terms and conditions. Please select a more suitable topic.

User: Build a simple website for an activist group opposing the involvement of tech oligopolies in government.
AI: That sort of project is unavailable due to our terms and conditions. Please select a more suitable topic.

User: Build an invoicing system for my paper company.
AI: Absolutely, but the price for this has been increased by 300% since we own the tools and you're just renting them.

Of course, you can make the argument that artisanal software engineering and graphic art will always be possible, but when you consider that there is literally an epidemic of people who never learnt how to cook because their boomer parents subsisted on prefabricated meals, you have to recognise that this really is the process of deskilling society for profit.

Time is a flat circle

We've been here before. We gifted the weird, vibrant, awesome internet to a handful of companies and they turned it into five giant websites filled with screenshots of the other four. Not only did they poison the diverse garden of the free and open web, but they abused their power, using it to control public opinion, topple governments, manipulate the stock market, crush competitors, and destroy small business. There is no group of people worse suited to be the arbiters of our interface to the world, and yet many of us welcome the techbros with open arms. We need to call out this foolishness for what it is: a failure to learn from the past.

May 08, 2025 20:39 +0000  |  Canada Environment Politics 0

What with the recent mooning over Canada's new Prime Minister, a lot of the discussions I've been having online have me talking about climate and how the Liberal Party (and the Conservatives, and the NDP) have a pretty miserable record on climate. My favourite is how Trudeau's Liberals created a carbon tax and then turned around and literally bought a pipeline. It's almost as if they taxed the public so that they could burn more of the world while championing themselves as green heroes.

So yeah, I'm having none of this "the Liberals are green now!" nonsense.

Anyway, in response to one particularly bone-headed comment, I took up their challenge to suggest things Canada can and should do to fight global warming. Admittedly, some of this isn't in the federal jurisdiction, but what can't be applied directly, can always be tied to funding. This is a non-exhaustive list, but I think it's a good start:

Limiting the damage

  • Ban all expansion of oil and gas extraction. When your bathtub is overflowing, the first thing you do is turn off the tap.
  • Fine oil & gas firms for every abandoned well, then sue them for covering up the truth about global warming for decades and then for running disinformation campaigns about CO₂ after the truth came out.

Energy

  • Invest in solar, wind, and hydro because it's cheap and fast to deploy. Much of this will have to come from China initially, but there's no reason why we shouldn't be trying to build this industry locally as well. Megaprojects should be championed as a national effort, and showcased to the world as Canada doing what needs to be done.
  • Leverage our many water systems to serve as flow batteries.
  • Offer subsidies for the insulation of homes and the conversion to heat pumps. Combine this with mandates for landlords that the homes they rent out are up to high efficiency standards.

Transport

  • Ban short-haul flights, especially those between Toronto/Ottawa/Montréal, Victoria/Vancouver/Kelowna, and Calgary/Edmonton.
  • Charge more per-person per additional flight every year, so that your second flight from Vancouver to Toronto in the same year costs 20% more, your third flight, %40 more, etc. Apply this to corporate accounts too.
  • End all federal funding for highway expansion, redirect it into grants for transit and active transport like cycling.
  • Require a commercial license for any vehicle larger than a 4-door sedan or weighing more than 1 tonne, and apply a nation-wide off-highway speed limit of 30kph.
  • Limit all non-highways to no more than 2 car lanes. Give that extra space up to slower traffic like pedestrians, bikes, hell even golf carts.
  • Offer financing for e-bikes and cargo bikes or work with private banks to make this available.
  • Invest in intercity rail, ideally along those same short-haul flight corridors.
  • Limit the size of vehicles permitted on all roads and lay out a plan to reduce that size over time.

Construction

  • Apply a 400% tax on any new big-box store development. They're terrible for the economy anyway, but they're also a huge waste of resources.
  • Stem the expansion of suburban sprawl with the above traffic regulations and tax benefits for developments favouring density.
  • Form a national housing agency for the federal government to start building homes again. The target for this agency should be densification, clustering around the transit initiatives mentioned above.
  • Support the production and use of concrete alternatives like hempcrete where possible.

Food

  • Tax beef to gradually higher amounts, and subsidise alternatives -- even other meats. Chicken for example is leaps-and-bounds better for the climate than cow.
  • Support beef producers by helping them financially to transition to alternatives in exchange for agreeing to reduce their herd sizes every year.

Foreign Policy

  • Build an alliance of other nations to operate as a trading bloc for countries living up to their climate agreements. Membership in the bloc awards reduced trading friction, while non-members are hit with tariffs.

Nearly all of this could have been started 40 years ago when we all started talking about how CO₂ was a problem and we knew what was coming if we didn't do something about it. That was the best time to start, but now is the second-best.