Posts
Showing 1—30 of 131.

Making my TV glow with WLED
RGB LEDs can be added to pretty much anything. Some places, like your car or your vacuum, it's probably not more than a gimmick. But in others, like your computer or "battlestation", it can bring an otherwise mundane-looking setup to life. One day, for reasons I can't entirely remember, I…
Self-hosting Bluesky
Bluesky is quickly becoming the "hot new" social network, growing by almost 1.6 users every second. "Recent events" have lead to a fairly large Twitter exodus, and people looking elsewhere seem to all be moving to Bluesky. Mastodon exists, is still pretty active, and is what most people moved to…

Introducing the new starter kit for Wagtail CMS
Give Wagtail CMS a go with our brand new starter kit. See how you can launch a new website and start making it your own with Wagtail templates. Discover why people are calling Wagtail the best Python-powered CMS.
Contentless RSS Feeds
I'm a big fan of RSS. Being able to effortlessly subscribe to a website's content without needing to keep checking their website or social media feed helps me keep on top of what interesting people and companies are doing. According to TT-RSS, my feed aggregator of choice, I'm subscribed to…
Accessing Tailscale whilst using Mullvad
In the last few months, I've done a lot of travelling, having spoken at Djangcon Europe in Northern Spain Wagtail Space the The Netherlands and Django London just last week. When I travel anywhere, international or otherwise, I use a VPN. Regardless of the network I'm on, I know my…
X-Forwarded-For
Software development can be a bit of a roller-coaster. Certain portions are simple, and others are incredibly complex - and that's before you get to the subjective areas. IP address detection is one which sits squarely in the middle. To some, it just happens, and they don't need to care…

Running Tailscale on a 20 year-old laptop
On a quiet Thursday afternoon, I saw a message from Alex in the Self Hosted Show Discord, where he was challenged by some of his fellow Tailscalers:what is the oldest piece of hardware that tailscale can run on? Alex has this ungodly and terrible habit of nerd-sniping me into doing…
Intermediary CNAME rewriting with AdGuardHome
As part of some recent infrastructure changes, I migrated my home DNS to AdGuardHome, from Pi-Hole. Being a single, self-contained binary, it's far easier to install and manage (it's in the AUR too), and it's got a few nice modern features like DNS-over-HTTPS and DNS-over-TLS. Sure, the ad blocking features…
Turning my website into a browser search engine
My website has search functionality. You can visit the search page (or the homepage or the magnifying glass in the top right), enter a search query, and if I've written something about it (which is quite likely), the matching pages will come up for your reading pleasure. Under the hood,…
Exposing Docker's internal DNS with CoreDNS
Whilst Docker is a containerisation technology, it's not just about running applications - there's also networking. When you add a container to a docker network, it magically becomes discoverable by other containers on the same network with DNS. All containers use Docker's magical internal DNS server to achieve this. However,…

Recovering deleted Wagtail pages and Django models
Accidentally deleted a Wagtail page or Django model? Start here! Jake Howard will walk you through how he saved a swath of intranet data in a pinch.
Fixing the heater blower in a VW Polo
About 6 months ago, my car (a Mark 6 Volkswagen Polo GTI+ - not the one in the picture) developed a lovely fault: the blowers stopped working. Not completely, but enough to annoy me. Off worked, and full power worked, but nothing in between. Temperature control was unaffected, as was…
On Mondays, I update servers
Software updates are a critical part of using any kind of electronic device nowadays, particularly if it's internet connected, and even more so if it has any security functionality. If you have any kind of computer online, whether it be a phone, laptop or a server, you should really be…
Changing the user-agent of urllib
If you need to make HTTP requests in Python, you're probably using the fantastically simple and ergonomic requests library (or httpx in the async world). However, it's another dependency to manage and keep up-to-date. If you want to make HTTP requests without an additional dependency, or another library author has…
Going hardwired - Running a cable to improve my internet
I spend a lot of time at my desk, whether it's actually doing my job, sitting in meetings or doing something else interesting. As a result, I want fast internet. Additionally, my server is also sat on my desk, so faster internet benefits me and anyone else who uses the…
GUIDs - How I messed up my RSS feed
If you're reading this post through an RSS aggregator, or were directed here from one, you may have already seen the issue I'm about to describe, and already swore my name. If you didn't, I'd recommend subscribing, for completely unbiased reasons. This is a tale of RSS, and an easily…
Efficiently doing nothing in Linux
Computers exist for doing work, usually useful, often not. In rare instances, it's useful to make a program do nothing at all. My primary use case for this is Docker containers, where it's useful to have the container do nothing, so it can be exec-d into as part of another…
Just! Stop using Makefile
If you look at any software project, its codebase is rarely just the application itself. There's always a few other things in there: Tests (hopefully), linters, complicated setup scripts, incredibly complicated compile scripts. All of which take a lump of code and turn it into a full project. To make…
COUNTing is hard: A tale of types in SQL and Django
Using an ORM adds a handy layer between you and the database tables. Sure, you can write SQL, but most developers find it easier to think of a list of complex objects than they do a collection of rows. However, it's important to remember what's going on under the hood…