<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>anglepoised.com notes</title><description>Notes, thoughts, and comments.</description><link>https://anglepoised.com/</link><item><title>TIL: Wise Interest is switching to monthly</title><link>https://anglepoised.com/notes/wise-interest-monthly/</link><guid isPermaLink="true">https://anglepoised.com/notes/wise-interest-monthly/</guid><description>Few things mess with accountants more than quietly changing numbers.</description><pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://wise.com/gb/interest/&quot;&gt;Wise Interest&lt;/a&gt; is kind of a weird product. It does what it says, which is pay interest on available balances in Wise (as opposed to money set aside for savings).&lt;/p&gt;
&lt;p&gt;This is obviously quite welcome. Not many financial institutions pay interest on available balances and if they do it’s usually at a crap rate. As of today, Wise are offering 3.32% on GBP balances: not exactly top of table but definitely not awful. This is even more true for businesses, to which banks tend to offer measly rates on savings, let alone available balances.&lt;/p&gt;
&lt;p&gt;Extra money = good, but the way Wise handles this is kind of awkward. Interest gets added on a &lt;em&gt;daily&lt;/em&gt; basis but there is no actual transaction. The number just silently goes up. With no transaction entry and no other action, balances in Wise would gradually drift up from the balances shown in connected accounting software like FreeAgent (who &lt;a href=&quot;https://support.freeagent.com/hc/en-gb/articles/360016070920-Enable-a-Wise-bank-feed&quot;&gt;had this covered in their FAQ&lt;/a&gt;) and Xero (who last time I checked did &lt;em&gt;not&lt;/em&gt; cover this).&lt;/p&gt;
&lt;p&gt;This type of all-but-untraceable balance change is a very subtle form of torture for people who are required to care about how much money a business really has.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Screenshot of the Wise “How Interest works” page, showing three numbered steps: 1) Turn on Interest — money is invested in an interest-earning fund holding government-guaranteed assets, 2) Get gains daily — returns are added every working day and can be used right away, 3) Spend any time — money can continue to be sent and spent with no need to lock it away.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;100vw&quot; data-astro-image=&quot;full-width&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2432&quot; height=&quot;1402&quot; src=&quot;https://anglepoised.com/_astro/wise-interest-screenshot-2026-08-21.Dfu7RVRk_t6efW.webp&quot; srcset=&quot;https://anglepoised.com/_astro/wise-interest-screenshot-2026-08-21.Dfu7RVRk_V4j3r.webp 640w, https://anglepoised.com/_astro/wise-interest-screenshot-2026-08-21.Dfu7RVRk_ZiefHJ.webp 1280w&quot;&gt;&lt;/p&gt;
&lt;p&gt;This approach is even advertised as a feature and from a marketing perspective I guess “money every day” does sound better than “money every month”, but is really quite odd for something that looks and behaves like a standard current account. We ended up building some annoying additional process around our monthly reconciliation workflow to account for this.&lt;/p&gt;
&lt;p&gt;Anyway, getting to the actual learning: Wise are changing how Wise Interest works for the better:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wise Interest invests your money in a low-risk fund. Currently, the income your investment earns stays in the fund, so you don’t receive it as a payment. Instead, it’s reflected in your balance which updates each day.&lt;/p&gt;
&lt;p&gt;From 7 September, we’ll move your money to a version of the same fund that pays income at the beginning of each month.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://wise.com/help/articles/44G5MOrhvGJ2seA8c3OROE/learn-more-about-the-wise-interest-migration&quot;&gt;Wise’s FAQ&lt;/a&gt; is not entirely clear on this but if interest shows up as a transaction then presumably this would make its way into bank feeds and fix the accounting software reconciliation issue.&lt;/p&gt;
&lt;p&gt;So from October it should be possible to dump any process built around this while still getting some extra money. Hurrah.&lt;/p&gt;
&lt;p&gt;I would love to know what Wise’s thinking was around the original setup and what finally led them to change this: hopefully a victory for solid user research practices.&lt;/p&gt;
</content:encoded><category>til</category><category>ops</category></item><item><title>TIL: Viewing completed tasks in Todoist</title><link>https://anglepoised.com/notes/viewing-completed-tasks-in-todoist/</link><guid isPermaLink="true">https://anglepoised.com/notes/viewing-completed-tasks-in-todoist/</guid><description>Todoist has an experimental way to support done lists.</description><pubDate>Tue, 18 Aug 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone has their productivity hacks. I’m a big fan of Oliver Burkeman’s &lt;a href=&quot;https://www.oliverburkeman.com/donelist&quot;&gt;done list&lt;/a&gt; approach.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is why I’m such an enthusiastic proponent of keeping a “done list”, which starts empty, first thing in the morning, and which you then gradually fill with whatever you accomplish through the day. Each entry is a cheering reminder that you could, after all, have spent the day doing nothing constructive – yet look what you did instead! (If you’re in a serious psychological rut, just lower the bar for what gets to count as an accomplishment: nobody else need ever know that you added “brushed teeth” or “made coffee” to the list.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s probably fairer to say that this is a way of dealing with the perpetual overwhelm of modern life than a productivity hack. You say tomato.&lt;/p&gt;
&lt;p&gt;It honestly didn’t occur to me that there was any way of doing this besides literally writing down every completed task on a notepad. This worked, but it created the bad kind of friction (where I stress about missing “done” tasks, the terrible state of my handwriting, and having to carry a notepad around with me) rather than the good kind (where I take a moment to give gratitude to the universe for how well I’m getting through my admin).&lt;/p&gt;
&lt;p&gt;Today I found out that &lt;a href=&quot;https://www.todoist.com/&quot;&gt;Todoist&lt;/a&gt; (my todo app of choice for the last decade or so) has added &lt;a href=&quot;https://www.todoist.com/help/articles/view-completed-tasks-in-todoist-J19h2s#h_01K3169PXWZBGVR1P217ZYXSW1&quot;&gt;experimental support for viewing completed tasks in the Today view&lt;/a&gt;. This basically enables Oliver Burkeman mode, stopping tasks from vanishing into the done void when completed.&lt;/p&gt;
&lt;p&gt;It’s easy to set up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Switch on Todoist’s &lt;a href=&quot;https://www.todoist.com/help/articles/test-experimental-features-in-todoist-QGaW7R#h_01HAAJ8FKYAPTZ2TWF3K8JVMA5&quot;&gt;Experimental features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Go to &lt;em&gt;Today view&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Turn on &lt;em&gt;Completed tasks&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;Todoist’s Today view layout settings panel, with the “Completed tasks” toggle switched on.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;100vw&quot; data-astro-image=&quot;full-width&quot; data-astro-image-pos=&quot;center&quot; width=&quot;858&quot; height=&quot;1206&quot; src=&quot;https://anglepoised.com/_astro/todoist-today-view-settings.CgT5wKLw_Z2q8nUE.webp&quot; srcset=&quot;https://anglepoised.com/_astro/todoist-today-view-settings.CgT5wKLw_ZPUdd9.webp 640w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now completed tasks will hang around until (unsurprisingly) the end of the day.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Todoist’s Today view showing a completed task, “TIL: Viewing completed tasks in Todoist,” displayed with strikethrough alongside other tasks in the Anglepoised project.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;100vw&quot; data-astro-image=&quot;full-width&quot; data-astro-image-pos=&quot;center&quot; width=&quot;3248&quot; height=&quot;2122&quot; src=&quot;https://anglepoised.com/_astro/todoist-today-view-completed.C0lnH5Kh_Z1Rdgx0.webp&quot; srcset=&quot;https://anglepoised.com/_astro/todoist-today-view-completed.C0lnH5Kh_Z2qoh7N.webp 640w, https://anglepoised.com/_astro/todoist-today-view-completed.C0lnH5Kh_1TT7gQ.webp 1280w&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This setting syncs across (almost) all clients. For me this is Mac, iPad and iPhone but not Apple Watch.&lt;/li&gt;
&lt;li&gt;I set this up on my Mac, but had to force close and restart the iOS apps to get experimental settings working.&lt;/li&gt;
&lt;li&gt;Recurring tasks that are completed disappear. I don’t mind this myself, as I tend to use repeating tasks for tiny nudges.&lt;/li&gt;
&lt;li&gt;Only completed tasks that have a due date of &lt;em&gt;Today&lt;/em&gt; will appear as completed in the Today view, which does make sense but means that completed but undated tasks won’t appear. This is actually helpful: if you have a task you don’t want to appear, don’t date it. If you want a completed task to appear, date it before you hit complete (or if you’re like me: complete it, realise you forgot to add the date, then uncomplete it, add the date and complete it again).&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>til</category><category>tools</category></item><item><title>Plausible solutions</title><link>https://anglepoised.com/notes/plausible-solutions/</link><guid isPermaLink="true">https://anglepoised.com/notes/plausible-solutions/</guid><description>Plausible solutions often aren&apos;t the good ones.</description><pubDate>Thu, 04 Jun 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One type of problem I’ve run into with LLMs is what I call (in my head, mostly) a “plausible solution error”.&lt;/p&gt;
&lt;p&gt;I dive into solving a problem that I feel should be straightforward. My initial ask is quickly formed. I get some suggested pathways back, pick the best-sounding one and start down it. After a while, I realise I’ve fallen into a complexity rabbit hole and have to reverse out. So these are solutions that look plausible but turn out to be… not that.&lt;/p&gt;
&lt;p&gt;For example, a few months ago I tried to get Nix provisioning a Raspberry Pi with an adblocker. This felt like something that should be feasible and I’d been meaning to have a play with Nix for a while, so I decided to make this my first proper attempt at going hands-off with an LLM. It failed badly. I wasted most of a good weekend running repeated and extended OS compilations before eventually flaming out from the complexity. I should have taken a step back and considered whether using a Raspberry Pi as an adblocker made any sense in the first place. Spoiler: not really, no. In the end, I figured out that my router had a setting to enable AdGuard DNS. This was a fairly coarse solution, but I turned it on as a temporary measure while I thought through how to set up &lt;a href=&quot;https://anglepoised.com/notes/you-probably-dont-need-pihole/&quot;&gt;a more flexible system with NextDNS and Tailscale&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Yesterday, I ended up making a similar error while trying to get &lt;a href=&quot;https://anglepoised.com/notes/add-microsoft-teams-meetings-to-google-calendar/&quot;&gt;Microsoft Teams to play nicely with Google Workspace&lt;/a&gt;. I spent the best part of a day messing with email routing across two systems before accidentally killing email deliverability for a couple of hours. Oops.&lt;/p&gt;
&lt;p&gt;The fault is ultimately mine, I think. In the past I would have read around a subject and come up with a few alternatives before starting out: research, plan, then act. But the sense of power and speed from AI means I am much less likely to do that, and unwarranted confidence leads me to skip specifying guardrails like “keep the solution as simple as possible”. I challenge responses on a tactical level, but don’t really think to challenge on a strategic level, because I already feel committed to a path. Classic sunk cost fallacy.&lt;/p&gt;
&lt;p&gt;So really this is a note-to-self. Before you start: figure out the constraints, entertain a range of approaches and look closely at trade-offs between them. And keep trying to remember that for the most part, a model will answer the question that was asked, confidently and in detail, and will rarely ask if the original question was the right one.&lt;/p&gt;
</content:encoded><category>ai</category><category>tools</category></item><item><title>TIL: You can add Microsoft Teams meetings to Google Calendar events</title><link>https://anglepoised.com/notes/add-microsoft-teams-meetings-to-google-calendar/</link><guid isPermaLink="true">https://anglepoised.com/notes/add-microsoft-teams-meetings-to-google-calendar/</guid><description>How to offer Teams meetings without leaving Google Calendar.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I use Google Workspace for my businesses and have come to the conclusion that Google Meet is now good enough compared to standalone options. But many suppliers and clients use Microsoft 365 and there are quite a few who are blocked from joining calls on other systems. This is awkward. I like to meet people where they are anyway, so I wanted to figure out if there was a way of using Microsoft Teams within Google Calendar and not have it be a total faff.&lt;/p&gt;
&lt;p&gt;There is an official and relatively straightforward way to do this with the (paid) &lt;a href=&quot;https://www.microsoft.com/en-gb/microsoft-teams/essentials&quot;&gt;Microsoft Teams Essentials plan&lt;/a&gt; and the &lt;a href=&quot;https://workspace.google.com/marketplace/app/microsoft_teams_meeting/961264221134&quot;&gt;Microsoft Teams Meeting Google Workspace add-on&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With an active subscription and the add-on installed in Google Workspace, it’s possible to set Microsoft Teams as the video conferencing option in meetings created via Google Calendar. Invitations come from your usual address and the event appears alongside everything else, rather than hidden away in Teams.&lt;/p&gt;
&lt;p&gt;There’s now a &lt;a href=&quot;https://support.microsoft.com/en-us/teams/meetings/join-from-google&quot;&gt;solid guide from Microsoft&lt;/a&gt; on how to set this up, which saves me writing one. Hurrah. The only thing the guide doesn’t cover is &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/admin/setup/add-domain&quot;&gt;adding a custom domain to Microsoft 365&lt;/a&gt;, which is necessary to appear as &lt;code&gt;user@yourcompany.com&lt;/code&gt; in meetings, rather than &lt;code&gt;user@yourcompany.onmicrosoft.com&lt;/code&gt;. Only the very first step (verification, which I did via TXT record) is necessary. Going beyond this and changing MX records will send your email to Microsoft instead of Google, which you almost certainly don’t want.&lt;/p&gt;
&lt;p&gt;There are a few caveats to bear in mind.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It won’t work with a (free) personal Teams account because the add-on requires a Microsoft work account.&lt;/li&gt;
&lt;li&gt;Meetings you schedule with the Teams meeting add-on will only appear on your Google Calendar. This is what I wanted, but I can see it being a potential issue for those who spend a lot of time in Teams.&lt;/li&gt;
&lt;li&gt;It doesn’t seem possible to schedule a Teams meeting in this way with the macOS Calendar app: you have to use Google Calendar in a browser, which is a bit annoying if you’re in the habit of using the macOS app.&lt;/li&gt;
&lt;li&gt;Various features are not available: meeting and AI notes, passcode generation, and Copilot.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Also, you’ll probably end up spending more time using Teams. Sorry.&lt;/p&gt;
&lt;h2 id=&quot;how-i-got-here&quot;&gt;How I got here&lt;/h2&gt;
&lt;p&gt;Setting this up was oddly tortuous and I suspect that this is down to there not being good documentation from Microsoft in place when I started out.&lt;/p&gt;
&lt;p&gt;Before I started trying to solve this properly, I had a completely separate Google Workspace account and a separate Microsoft Teams Essentials for Business account. This had the benefit of being simple, but it sucked. Better than not being able to handle Teams calls properly but using an alternative domain for Teams was confusing for everyone.&lt;/p&gt;
&lt;p&gt;My first effort was trying to LLM my way into a solution. This went very wrong. I ended up going down a rabbit hole of fiddling with email routing rules across both systems and paying for a full M365 subscription for a month to see if I could get it working. What I got was essentially a &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftteams/connect-teams-essentials-to-email&quot;&gt;retread of this guide&lt;/a&gt;, but more confusing and with no real end state in mind. I would have backed out earlier if I’d been working from the guide rather than a stepped conversational approach and I eventually had to unwind everything anyway, after I killed email delivery for a few hours. Good times.&lt;/p&gt;
&lt;p&gt;It was only when I fell back to doing some serious messageboard hunting that I found the Google Workspace  add-on.&lt;/p&gt;
&lt;p&gt;Lesson: research first, plan second, act third.&lt;/p&gt;
</content:encoded><category>til</category><category>tools</category></item><item><title>TIL: Adblocking can stop Minecraft Achievements from working</title><link>https://anglepoised.com/notes/adblocking-minecraft-achievements/</link><guid isPermaLink="true">https://anglepoised.com/notes/adblocking-minecraft-achievements/</guid><description>How to fix a weird issue with Minecraft Bedrock Edition&apos;s achievements.</description><pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The other day, my son was complaining that &lt;a href=&quot;https://minecraft.wiki/w/Achievement&quot;&gt;Achievements&lt;/a&gt; in Minecraft (Bedrock Edition on the Switch) had stopped working. He’d complete a task he was sure would trigger an Achievement and &lt;em&gt;nothing would happen&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This – as any parent of a Minecraft-loving child will know – is not cool. So I did what any sane person would do and hoped it would magically fix itself.&lt;/p&gt;
&lt;p&gt;After a week or so of this not happening, I started investigating obvious potential causes: client updates, network lag, server outages, changes to parental controls. No joy. I also found the &lt;a href=&quot;https://help.minecraft.net/hc/en-us/articles/27778850781837&quot;&gt;Fix Achievements Not Displaying or Unlocking in Minecraft: Bedrock Edition FAQ&lt;/a&gt;, which was wildly unhelpful.&lt;/p&gt;
&lt;p&gt;Eventually, I started spelunking through the Minecraft issue tracker to look for pointers and found &lt;a href=&quot;https://bugs.mojang.com/browse/MCPE/issues/MCPE-115808&quot;&gt;MCPE-115808: Achievements and Statistics not updating&lt;/a&gt;, a five-year-old bug with many comments and linked issues, resolved as “Cannot Reproduce”.&lt;/p&gt;
&lt;p&gt;This didn’t give me a direct solve, but one comment about how turning off Android Private DNS fixed it gave me enough of a clue to help me get at the problem: Minecraft Bedrock Edition uses Microsoft telemetry servers for Achievements and if these endpoints are unreachable, Achievements won’t work.&lt;/p&gt;
&lt;p&gt;A while back I’d set up &lt;a href=&quot;https://nextdns.io/&quot;&gt;NextDNS&lt;/a&gt; with &lt;a href=&quot;https://github.com/hagezi/dns-blocklists#pro&quot;&gt;Hagezi’s Multi PRO blocklist&lt;/a&gt; and configured it as the DNS server on our home network. That blocklist &lt;a href=&quot;https://github.com/hagezi/dns-blocklists/blob/de2f0ae2754679125134ea83c9f14ed5f98a531c/share/microsoft.txt#L14-L19&quot;&gt;contains&lt;/a&gt; these rules:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# XBox Live Achievements&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Microsoft uses the following domains, which are also used for other telemetry data, to display and track earned Xbox Achievements.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v10.events.data.microsoft.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v20.events.data.microsoft.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# CNAME&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;win-global-asimov-leafs-events-data.trafficmanager.net&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The fix was straightforward. I added the domains to my NextDNS Allowlist:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v10.events.data.microsoft.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;v20.events.data.microsoft.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;win-global-asimov-leafs-events-data.trafficmanager.net&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As well as fixing Minecraft Achievements, this re-enabled a chunk of &lt;a href=&quot;https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/privacy/windows-endpoints-20h2-non-enterprise-editions&quot;&gt;Windows&lt;/a&gt; and &lt;a href=&quot;https://learn.microsoft.com/en-us/defender-endpoint/linux-support-connectivity&quot;&gt;Defender&lt;/a&gt; telemetry. My fix for this new problem is to avoid using Microsoft products as much as possible. YMMV.&lt;/p&gt;
&lt;p&gt;If you’re hitting the same problem and use a DNS blocker (NextDNS, Pi-hole, AdGuard Home etc.), check its query log for blocked &lt;code&gt;events.data.microsoft.com&lt;/code&gt; requests. Or temporarily switch the device’s DNS back to automatic and see if Achievements start unlocking.&lt;/p&gt;
&lt;p&gt;It would have been lovely if the Minecraft client had generated an error rather than silently failing, but hey, ultimately this was my footgun. I just didn’t expect that adblocking would break something pretty key. One person’s important bizness metrics are another’s frustrated child, I guess.&lt;/p&gt;
</content:encoded><category>til</category><category>gaming</category><category>minecraft</category></item><item><title>You probably don&apos;t need to run Pi-hole or AdGuard Home</title><link>https://anglepoised.com/notes/you-probably-dont-need-pihole/</link><guid isPermaLink="true">https://anglepoised.com/notes/you-probably-dont-need-pihole/</guid><description>Subscribing to NextDNS for adblocking with no flaky devices.</description><pubDate>Tue, 28 Apr 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In Matt Haughey’s recent &lt;a href=&quot;https://a.wholelottanothing.org/pro-level-travel-tips/&quot;&gt;Pro-level travel tips&lt;/a&gt; he mentioned the value of having a network-level adblocker like &lt;a href=&quot;https://pi-hole.net/&quot;&gt;Pi-hole&lt;/a&gt; with &lt;a href=&quot;https://tailscale.com/&quot;&gt;Tailscale&lt;/a&gt;. This reminded me that I’d planned to write in detail about &lt;a href=&quot;https://anglepoised.com/notes/tea-earl-grey-meaty/&quot;&gt;my failed attempt to set this up with Nix a while back&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This adblocker-plus-Tailscale setup is super helpful for solid adblocking at home and away, but while setting everything up I realised that it could be a little flaky. If the device that’s running the adblocker falls over while you’re in the same place, it’s annoying. If it falls over while you’re travelling and you haven’t set up a reliable home automation power-cycling system, it’s very annoying.&lt;/p&gt;
&lt;p&gt;Of course, this was after I’d spent a fair amount of time setting up Pi-hole on a decade-old Raspberry Pi to prove things out, done it again on a new Pi with &lt;a href=&quot;https://github.com/AdguardTeam/Adguardhome&quot;&gt;AdGuard Home&lt;/a&gt; (a more modern take on the Pi-hole idea), then fallen down the Nix-all-the-things &lt;a href=&quot;https://bsky.app/profile/did:plc:5e2mz3rsbfwtb7mk5mdvfhxl/post/3l5mguig3bz2g&quot;&gt;rat hole&lt;/a&gt; mentioned previously.&lt;/p&gt;
&lt;p&gt;In the end, I took a path that didn’t require me to look after a tiny box, which I think is probably a saner bet in 2026. Instead, I subscribed to &lt;a href=&quot;https://nextdns.io/&quot;&gt;NextDNS&lt;/a&gt;, which is essentially a highly configurable custom DNS service.&lt;/p&gt;
&lt;p&gt;It took 20 mins to configure (most of that was choosing which custom blocklist to use). I updated custom DNS on the family tailnet (which I already had running) to use NextDNS’s DNS servers and it was done.&lt;/p&gt;
&lt;p&gt;For good measure, I also ditched my old VPN and subscribed to Tailscale’s &lt;a href=&quot;https://tailscale.com/mullvad&quot;&gt;Mullvad exit node add-on&lt;/a&gt; so we could switch VPN on and choose an exit country from the Tailscale client.&lt;/p&gt;
&lt;p&gt;This approach has given me everything I need (besides a good use for the Raspberry Pi, of course). It’s worth noting that as well as there being an element of trust in using a third-party DNS provider, NextDNS allows 300,000 queries/month on the free tier and going beyond that means the service drops back to being a classic, non-blocking DNS server. I didn’t really want that, so I was happy to pay £17.90/year for Pro.&lt;/p&gt;
</content:encoded><category>tools</category><category>ops</category></item><item><title>Writing software may be cheaper but owning it is still expensive</title><link>https://anglepoised.com/notes/owning-software-is-still-expensive/</link><guid isPermaLink="true">https://anglepoised.com/notes/owning-software-is-still-expensive/</guid><description>Not everything needs to be yours.</description><pubDate>Thu, 19 Mar 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I work for a small consultancy. The other day I decided to switch our business CRM, pretty much on a whim. This is not a huge task for us: I like to say that we’re built like a steakhouse but we handle like a bistro&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;While I was working through this, I was thinking about the idea that &lt;a href=&quot;https://simonwillison.net/guides/agentic-engineering-patterns/code-is-cheap/&quot;&gt;writing code is cheap now&lt;/a&gt; and idly wondering about whether I should give up on the migration and just vibe-code our very own bespoke CRM.&lt;/p&gt;
&lt;p&gt;But then I thought: fuck no, why would I want to spend what would undoubtedly be significantly less time than before — but still a non-insignificant amount — rolling my own CRM, only to end up with something that would likely be average at best, when instead I could take advantage of &lt;a href=&quot;https://attio.com/&quot;&gt;Attio&lt;/a&gt;’s extensive experience in the domain of CRMs for the princely sum of £29/user/mo? With updates and new features arriving all the time and no need to think about what other features I don’t know about that I might want? Or, you know, uptime, or data protection?&lt;/p&gt;
&lt;p&gt;I also remembered that at one point we rolled our own CRM with Notion and it was… not good. It turns out we didn’t know much about how to make more than a simulacrum of a CRM. These are tools that look smooth and obvious from the outside but are surprisingly warty on the inside. It’s pretty easy to chuck a basic data model together but harder to put a UI on top that helps lead users to useful actions.&lt;/p&gt;
&lt;p&gt;Anyway. This post is not meant to be an ad for Attio. I’m really just pushing against the idea that &lt;a href=&quot;https://www.forbes.com/sites/donmuir/2026/02/04/300-billion-evaporated-the-saaspocalypse-has-begun/&quot;&gt;SaaS is basically dead now&lt;/a&gt; because soon everyone will be knitting all of their own software.&lt;/p&gt;
&lt;p&gt;I don’t particularly want to replace my personal and business stacks with software I’ve written, because then I’d have to look after it. It sounds a bit like having puppies. Lots and lots of puppies.&lt;/p&gt;
&lt;p&gt;How long would it take to make a dent in the average person’s world of software? Attempting to do this for my stack would only really be feasible by diving feet first into multi-agent workforces. I spend most of my days trying to politely coerce groups of people into taking useful action. I get the sense that multi-agent would feel like this, but for my entire life and with no opportunity to go for a drink with the entities I’m attempting to politely coerce and who are invariably trying to do the same to me.&lt;/p&gt;
&lt;p&gt;So, assuming we don’t end up with a couple of extra notches of implausibly magical AI capability in the near future, my bet is that the vast majority of humans and organisations - who would likely not have the time, capability or energy to do this even if they really wanted to&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; - will not be stampeding away from existing software models overnight.&lt;/p&gt;
&lt;p&gt;Will single-use and glue tools take a hit? Absolutely. Will there be more competition in areas where there’s &lt;a href=&quot;https://x.com/nicbstme/status/2023501562480644501?s=48&quot;&gt;not much of a moat&lt;/a&gt;? Of course: already happening. Is there a chance that we might be able to break free of the centralised SaaS model and into ubiquitous &lt;a href=&quot;https://www.inkandswitch.com/essay/local-first/&quot;&gt;local-first&lt;/a&gt; software? That would be lovely. But I don’t think this is the moment where software becomes completely fungible.&lt;/p&gt;
&lt;p&gt;On the other hand, I do want to spend more time getting to grips with new tools, use them to &lt;a href=&quot;https://www.nytimes.com/2026/02/18/opinion/ai-software.html&quot;&gt;make cool stuff&lt;/a&gt; and maybe sometimes do that with the safety off just to see what will happen. I’m no refusenik. I do have some empathy for those that are, but I came of age during the birth of cyberpunk so I am already hardwired (&lt;a href=&quot;https://en.wikipedia.org/wiki/Hardwired_(novel)&quot;&gt;hah&lt;/a&gt;) to believe that all technology is essentially brilliant and terrible at the same time.&lt;/p&gt;
&lt;p&gt;But if it’s for the sheer joy of creating things, then I’ll build something more fun, more useful (to me, to my business or our clients) and honestly just plain &lt;em&gt;weirder&lt;/em&gt; than most software I pay for. Or maybe I’ll just go and hang out with my kid and play Minecraft.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;…because &lt;a href=&quot;https://www.youtube.com/watch?v=uFNN5Qf2AR4&quot;&gt;Zapp Brannigan lives in my head rent free&lt;/a&gt;. But we’re actually more of a food truck right now. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=47423734&quot;&gt;This comment&lt;/a&gt; from a Hacker News thread on &lt;a href=&quot;https://news.ycombinator.com/item?id=47421442&quot;&gt;Have a fucking website&lt;/a&gt; pretty much boils down to “all you have to do if you want a small business website is get a VPS with an nginx image pre-installed then write some plaintext and deploy it”. Which is a particularly lovely example of not understanding the cost of puppies.&lt;/p&gt;
&lt;p&gt;“But… but… but AI can tell you how to do all of this!”&lt;/p&gt;
&lt;p&gt;Yes, AI can also tell you how to swim, or fly a helicopter&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Good luck, let me know how you get on. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;OK, I will admit that Claude or Codex can do a lot more of the making of the websites without much (or any) user intervention. They could probably do a passable job of flying a helicopter for you, too. The risk/reward is different but again, let me know how you get on. &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content:encoded><category>ai</category><category>tools</category><category>work</category></item><item><title>TIL: Fredkin&apos;s paradox</title><link>https://anglepoised.com/notes/fredkins-paradox/</link><guid isPermaLink="true">https://anglepoised.com/notes/fredkins-paradox/</guid><description>Choosing between similar options is hard.</description><pubDate>Tue, 17 Feb 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is so much good stuff in &lt;a href=&quot;https://thatbusinessofmeaning.substack.com/p/russell-davies-on-words-and-strategy&quot;&gt;this interview&lt;/a&gt; with Russell Davies, but the thing that really jumped out at me was the mention of &lt;a href=&quot;https://en.wikipedia.org/wiki/Fredkin%27s_paradox&quot;&gt;Fredkin’s Paradox&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tell me more—when you say &lt;em&gt;pattern recognition&lt;/em&gt;, what does that look like?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, when you’ve been doing this work long enough, you realize there are no new problems. You’ve seen the same challenges dozens of times. So someone comes to you and says, “Should we do A or B?” And you just say, “Do A.”&lt;/p&gt;
&lt;p&gt;And they ask, “How do you know?” And you say, “Because I’ve seen this before.” Sometimes, that makes you stop and reflect—why do I think A is better than B? That’s interesting to unpack. But most of the time, you’re just helping people resolve Fredkin’s Paradox.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fredkin’s Paradox?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It goes something like: If you’re choosing between two equally attractive options, it’s a very difficult decision—because they’re equally attractive. The paradox is that it doesn’t matter which you choose.&lt;/p&gt;
&lt;p&gt;Most branding, marketing, advertising, and communications decisions are like that. You’re rarely in a room with a brilliant idea and a terrible idea. You’re almost always deciding between a few pretty good ones.&lt;/p&gt;
&lt;p&gt;And yet, companies will spend six months agonizing over which to choose—when it really doesn’t matter. Having an old guy in the room who can say, “Just do that one,” saves everyone a lot of time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes, this. All the time. The original phrasing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The more equally attractive two alternatives seem, the harder it can be to choose between them—no matter that, to the same degree, the choice can only matter less.&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded><category>til</category><category>work</category></item><item><title>Tea, Earl Grey, Meaty</title><link>https://anglepoised.com/notes/tea-earl-grey-meaty/</link><guid isPermaLink="true">https://anglepoised.com/notes/tea-earl-grey-meaty/</guid><description>Falling down a Codex rabbithole.</description><pubDate>Fri, 30 Jan 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I feel like most of the AI-curious world has dived head-first into autonomous agent madness with &lt;del&gt;Clawdbot&lt;/del&gt; &lt;del&gt;Moltbot&lt;/del&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=ssYt09bCgUY&quot;&gt;OpenClaw&lt;/a&gt;. I have been doing something much less ambitious, spending my weekend attempting to wrestle Codex into setting up &lt;a href=&quot;https://github.com/AdguardTeam/AdGuardHome&quot;&gt;AdGuardHome&lt;/a&gt; on a Raspberry Pi 5 and using &lt;a href=&quot;https://nixos.org/&quot;&gt;Nix&lt;/a&gt; to make the reproducible builds.&lt;/p&gt;
&lt;p&gt;This was really an excuse to have a play with all of these things, although I still would have liked a modern equivalent of a &lt;a href=&quot;https://pi-hole.net/&quot;&gt;Pi-hole&lt;/a&gt; at the end of it. As it was, I ended up with nothing but learnings. This pretty much boils down to “if you find yourself waiting hours for Nix to compile things from scratch, maybe stop and have a think”.&lt;/p&gt;
&lt;p&gt;The first place I went wrong was that I didn’t really think about how to spend my &lt;a href=&quot;https://mcfunley.com/choose-boring-technology&quot;&gt;innovation tokens&lt;/a&gt;. I should have focussed on learning about Nix, or spent time finding the edges of working with Codex, or done the most basic thing to get AdGuardHome up and running. Not all three.&lt;/p&gt;
&lt;p&gt;The second place stems from doing something I would never do in client work: I yolo’d straight into it without doing any upfront research or planning, trusting that the agent would see me right. I think even a little bit of thought would have saved my weekend, but the prompt/feedback/prompt loop was just too tempting and I ended up swallowing just one more spider to catch a fly from earlier in the session.&lt;/p&gt;
&lt;p&gt;The contrast between what people are talking about in public and what I could achieve in private is pretty stark. Are people really so many miles ahead? Should I be… afraid? Maybe a little! I haven’t had a lot of time to play with AI on the code side. My excuse is that I’ve been too busy trying to wrangle humans. Frustrating, but  maybe job security in this AI timeline comes from both coordination skills and an ability to reason about systems rather than code.&lt;/p&gt;
&lt;p&gt;The other positive side is that this was so painful that I ended up rethinking the whole “put a DNS sinkhole on a box I look after” plan. Instead, my subconscious prodded me into simpler solutions and I ended up setting up NextDNS and using that as the DNS for my Tailnet. I have comprehensive adblocking on all the devices I care about, both in my house and when I’m out and about. It took me all of 15 minutes and I don’t have to babysit a Raspberry Pi. Yay, technology.&lt;/p&gt;
&lt;p&gt;Anyway, OpenClaw. It does feel somewhat closer to the TNG-era Star Trek computer, which is pretty much all I’ve wanted from an assistant: solid &lt;a href=&quot;https://xkcd.com/2570/&quot;&gt;natural language parsing&lt;/a&gt; and a set of defined (maybe very widely defined) actions that can be taken as a result. I’d settle for a version of Siri that did this, though.&lt;/p&gt;
</content:encoded><category>ai</category><category>tools</category></item><item><title>TIL: Google Workspace charges for suspended users</title><link>https://anglepoised.com/notes/google-workspace-charges-for-suspended-users/</link><guid isPermaLink="true">https://anglepoised.com/notes/google-workspace-charges-for-suspended-users/</guid><description>The right way to suspend Google Workspace users.</description><pubDate>Thu, 18 Dec 2025 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over the past few weeks I’ve been consolidating some shared Google Workspace accounts into one account and setting up (the excellent) &lt;a href=&quot;https://letsjelly.com/&quot;&gt;Jelly&lt;/a&gt; as our shared inbox tool.&lt;/p&gt;
&lt;p&gt;I’d assumed that &lt;a href=&quot;https://knowledge.workspace.google.com/admin/users/suspend-a-user-temporarily&quot;&gt;suspending the old accounts&lt;/a&gt; would stop the billing, but when the next bill came in I realised that this wasn’t how it worked. In Google Workspace land, suspended users are charged as standard users.&lt;/p&gt;
&lt;p&gt;I read the docs properly (as I obviously should have done from the outset) and realised that the suspended user state is intended as a &lt;em&gt;temporary&lt;/em&gt; measure. Presumably this is so an administrator can quickly cut a user out of the system without risking any data loss, with the expectation that a user could be restored later. Through this lens it does make sense that the user would still take up a license and be chargeable, but it’s not a great approach if you want to put an account on ice for a while and would prefer not to pay for the privilege. The other obvious option - archiving the data and deleting the user - takes a good while to do and is a bit risky if it turns out a restore is needed.&lt;/p&gt;
&lt;p&gt;It turns out there is a middle ground: Google Workspace has a concept of &lt;a href=&quot;https://knowledge.workspace.google.com/admin/users/archive-former-employee-accounts?hl=en&quot;&gt;Archived User accounts&lt;/a&gt;. Setting this up involves adding a new Archived User subscription plan to the account, alongside the normal plan. This allows users to (unsurprisingly, I know) be archived, rather than suspended or outright deleted. Archived users are moved onto the Archived User plan, which has &lt;a href=&quot;https://knowledge.workspace.google.com/admin/users/archive-former-employee-accounts&quot;&gt;a lower per-user cost than a standard account&lt;/a&gt;. The exact cost depends on the main plan level. After a retention period, the archived user could be deleted.&lt;/p&gt;
&lt;p&gt;I guess this feature is well known to serious Google Workspace administrators, but as a non-expert the standard user actions menu gave me no hint that archiving was an option.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Screenshot of Google Workspace admin’s “More options” dropdown for a user, showing menu items including Add to groups, Email user, Suspend user, Restore data, Delete user, and Change organisational unit.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;100vw&quot; data-astro-image=&quot;full-width&quot; data-astro-image-pos=&quot;center&quot; width=&quot;564&quot; height=&quot;786&quot; src=&quot;https://anglepoised.com/_astro/google-workspace-user-options.HrVoMfft_ssibU.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Good to know it’s possible, though.&lt;/p&gt;
</content:encoded><category>til</category><category>ops</category></item></channel></rss>