Weeknotes 241
8th February, 2026
“My DNS problem”
-
My DNS problem took a step forward when I realised that I might be able to solve it, again perhaps temporarily, without having to actually setup a proper DNS server – which I seem to be constantly putting off. That fix is NextDNS.
NextDNS protects you from all kinds of security threats, blocks ads and trackers on websites and in apps and provides a safe and supervised Internet for kids — on all devices and on all networks.
I’ve been a NextDNS user on and off for a few years. I never really fully committed to it though despite being impressed by the whole idea and implementation.
The “fix” is that NextDNS has a feature called Rewrites which are basically DNS mappings from hostname to IPs.
Set or override the DNS response for any domain. Rewrites apply to subdomains as well, and local IP addresses are supported as answers.
This sounds like what a DNS server does. As previously covered, because of subnet routing, I can use local IPs when connected to my tailnet. So if I’m connected to Tailscale and using NextDNS, my services are resolving to their proper DNS names.
I added a rewrite like this:
*.custom.domain → 192.168.0.1This is working for me but it does raise the question of how to get everyone in the house using NextDNS and if that even matters? Getting the Virgin Media router to dish out NextDNS via DHCP seems like a non-starter.
-
Black Box Parsing – Encapsulation is good.
-
gem.coop update #4: cooldowns beta
This seems like an interesting technique. I’ve always been a reluctant updater of libraries/gems, not for fear of introducing security vulnerabilities, but that everything else might break. I think we forget that people write code (lol — not anymore) and we blindly accept their changes into our codebases like they are free of cost. They are not.
There has to be a compromise between updating all the time, and never updating though.
-
The power of the (literally) written word
What’s more, you can’t write as quickly as you type, so your brain has to actually comprehend what it’s hearing and process it, so that you can write down the essentials. In a sense, then, you’re encoding twice, first, in the effort it takes to internalize what you’re hearing and sum it up in a way that enables you to write it down quickly enough, and second, in the physical process of writing itself.
-
…the slow shift from software as a tool you operate to software as a channel that operates on you. Once a product learns it can talk back, it’s remarkably hard to keep it quiet.
-
An SSHFP (SSH FingerPrint, record type 44) record is a type of DNS resource record that is used to securely publish SSH host key fingerprints in the Domain Name System (DNS). The primary purpose of an SSHFP record is to provide a way for SSH clients to automatically and securely verify the authenticity of an SSH server’s public key, helping to protect against man-in-the-middle (MITM) attacks during SSH connections.
The algorithm knows me. Everything is DNS records at the moment.
-
pg_textsearchseems like it’s going to be a great addition to Postgres! -
Frozen String Literals: Past, Present, Future?
This has been sat in my “to read” pile since it was published, but I’m glad to have finally read it because now I have a much better idea of why we’ve been writing
# frozen_string_literal: trueat the top of our Ruby files. -
An Update on Heroku – What a sad state of affairs this is. Such a game changer with a massive lead squandered.
People have totally forgotten what a game-changer Heroku was and just how easy it made deploying Ruby on Rails applications. It had a big impact on the popularity of Rails itself. I still think the ease of deployment is unmatched.
(I really like Fly.io – despite having nothing deployed in production there – but I don’t think the experience is as good, nor is it ever likely to be as they position themselves differently to Heroku.)
And no, “Kamal and Hetzner” is not the same thing – although they are a good thing apparently. I ask you once again, who is looking after that VPS of yours?
-
Immediately cease trying to perform meaningful work via a chatbot
This cemented for me something I hadn’t fully understood. All the copying and pasting destroys any productivity. For anything that will code or does anything on the filesystem it’s best to just go straight to the terminal.
-
claude-receipts— “Bring receipts from your Claude Code sessions”We’re all probably gonna need this when we’re fully dependant on them.
-
I made my first from scratch 3D model!
A Gridfinity compatible battery holder for Canon LP-E5 batteries created using OpenSCAD.
It’s a battery holder for Canon camera batteries. I wrote it in OpenSCAD…
I was right about OpenSCAD getting very mathsy. It quickly gets too complicated for me to understand, thankfully LLMs are very helpful with this task too.
(Aside: I had ChatGPT walk me through Blender to create a render of the STL, upon which the interactive version above is based, and despite it taking ages and being painful, we did get there. I would’ve just noped out of Blender in the past. Have you seen the Blender interface?! 🤯)
-
As LLM’s become “just another tool in the toolbox”, which at the moment I believe they will. And if it is just matter of learning how to fit them into your workflow and operate them effectively, then why are we committing the changes they helped us make as them?
Are we showing our workings for fear of being found out?
-
The timezone bug that hid in plain sight for months
Yet again time and date maths is hard.
-
Both OpenAI’s Codex 5.3 and Anthropic’s Opus 4.3 were released this week, so I felt I should try them out despite not feeling like I have enough usage of either to really judge whether they are “better”. I am very much working on vibes with this stuff.
Claude has felt like it was way ahead and as such I mostly concentrated on it. Codex impressed me though. I spent some time with Codex 5.3 though on various projects and it felt less needy and needed less hand holding. I think.
It is still funny when I ask it to do something quite straightforward and it does it in the most convoluted way possible. For example, I asked it to format a document by word wrapping to 80 characters and it instantly starts writing a Python script to do so, instead of, you know, many of the sensible ways to achieve that task.