When it comes to observability, especially in an incident, more data is usually better. Without data, it's almost impossible to know what's going on. With insufficient data, you only get half the picture. More data isn't always better. The more data there is, the more you have to sift through. If you're going to have a lot of data, it had better be useful. Observability tools will generally…
Docker has a reputation when it comes to firewalling - it's pretty difficult to restrict ports. It's best practice to have a firewall on your servers, to restrict incoming traffic by port or IP address. This means that not just anyone can start a server on an arbitrary port and receive traffic externally - the firewall needs to let it in. However, because of the way Docker works, starting a…
It's been 3.5 years since I last did this , so it's clearly about that time - time I rewrote my website. If you're reading this post, it's on a brand new custom built platform to serve my website. Under the hood it's still Python and Django , but gone is Wagtail , or any CMS for that matter. It's a semi-static site! According to the git history, I started this rewrite over a… Continue Reading…
I was invited to an episode of Django Chat , to chat about Django Tasks, the Security Team and much more. I'm well aware that a podcast isn't really a "talk", but it's appropriate enough. Continue Reading…
A few times a year, everyone at Torchbox (my employer) gets together in person to hear updates about the company and its strategy from various members of the team (or " co-owners "). Those in the UK are expected to attend in person, for a day of socializing and confirming people do exist from the shoulders down. However, as a mostly remote company, with many people spread around the globe, we…
DNS is the cornerstone of any infrastructure. Us humans are terrible at remembering strings of numbers ( 162.55.181.67 ), but we're good at remembering words ( theorangeone.net ). When people own a domain, there are 2 components involved: the registrar and name servers. For the last 9 months , Gandi has served served as both for me, and as just the registrar for longer still. As a service, they've…
Software projects in git repositories (or Version Control Systems - yes there are others) tend to be made up of much more than just 1 file, or even 1 directory. To make functions and functionality easier to find, good software is split up, forming modules or isolated components which can be put together to form user journeys or processes. In some cases, these modules may become useful in their own…
Over 2025, I've come to realise quite how much I rely on the services running on my home server. Sure, I could still get on with most aspects of life, but so much revolves around my services being there and working. Over time, I only intend to grow that dependence , so I want to make sure everything is at its best. Much like 2024 , 2025 has been another long and tiring year … Continue Reading…
Christmas is quieting down in my household, marking the end of yet another crazy life-changing year. At the end of last year, I told myself I needed to slow down and get to a more sustainable place. Needless to say that hasn't happened at all. Instead, life has developed and progressed in unexpected ways. Last year , I started a traditional "year in review" style post, to go along with my…
Nearly 10 years ago, I used Proton Mail for my email. At the time, it was the new kid on the block, but promised unrivalled privacy and security - 2 things I care greatly about. Fast forward, and that all still holds true. If, for whatever reason, I was doing sketchy things, and needed a secure email, it's where I'd go. Proton CEO Andy Yen gave a great TED Talk on… Continue Reading…
I'm not a runner, not by any stretch of imagination. But yesterday, I (and several colleagues) ran a half marathon - the Oxford Half Marathon . 13.1 miles, or 20 kilometers in non-freedom units. I'm currently sat on my sofa, with aching legs, a sore throat, and on hell of a sense of achievement. It's a Half Marathon, rather than being a full Marathon I bailed from half way through … Continue…
As developers, we're tasked with writing code, with the intention of running it. In most cases, we want to run said code for as long as possible - either until completion or until something external restarts us. But in some cases, we want to run until another part of our program tells us not to. When defining background reusable tasks, you don't want them to run forever. If the task takes too…
As of today (well, technically yesterday), django.tasks is officially released upon the world! Mostly. Note that django.tasks and django-tasks are in fact different, albeit by a single character. Take care when reading. What happened? As of today, the first PR to implement DEP 14 ("Background workers") has been merged into the main branch of the Django code base, all 3094 lines of it. We missed…
I like to configure as much of I can on the things I host (of which there's a fair amount) using Infrastructure as code, especially if it's a critical service. I recently switched the DNS server in my house to AdguardHome from Pi-hole, partly to try something new, but also because of the simpler deployment and more powerful features. Naturally I wanted to see if I could manage AdguardHome…
I talk to a lot of people through some form of online platform - conventional social media, forums, chat etc. Given I work remotely, it's where a fair bit of conversation ends up. Since leaving Twitter , I now self-host both of the main social media platforms I use: Bluesky since late 2024 and Mastodon since late 2022. When I set them up, both were running on my home server, inside my house. This……
A talk about how I use Tailscale (well, technically Headscale ) and why. Tailscale's promise is making networking easier, which I hate. But sometimes it's necessary to achieve something cool (building Funnel myself), and something not recommended (Private Funnel). The talk wasn't recorded, but my slides are available . However, I'd recommend reading the related post , instead. Continue Reading…
Currently, my phone is a Samsung Galaxy S22 . I bought it in early 2023, just after the S23 was announced. Since phones don't change that much year-on-year, I didn't see the need to get the absolute latest, after my beloved Oneplus 7 Pro started showing its age and lost upstream Android support. Fast forward 2 years, and it's still doing fine , but it's not as snappy as it used to be. It's not……
I've been using Cloudflare for a while for my domains, since at least 2020. Unless you've been living under a rock since 2009, you've probably heard of Cloudflare. They're a rock-solid DNS provider, with an easy to use interface, high-quality terraform provider, and a number of other features. Quite frankly, with them, it's never DNS! I lie - it's always DNS With that said, since around 2023, I've…
Yep, that's it, it's finally happened: I'm done with Twitter. Since it's purchase by Elon Musk back in around October 2022, Twitter (I refuse to call it X ) has slowly (or in some cases not-so-slowly) been going downhill. Various changes to the algorithm to push various policies, multiple instability issues, AI for the sake of AI, and much more. Unless you've been living under a rock, you already…
My server(s) play a fairly important part in my life. Not only is it where a number of critical services I use are hosted, but it's also where my most important files are stored. For a long time, I've done what I can to preserve my data privacy. Running my own servers keeps me in control of my data, what's done with it, and who it's sold to (or not as the case may be). … Continue Reading…
2024 is nearly over, and for me it's been a crazy, life-changing year. At the start of the year, I told myself I wanted to make some big changes. Write more, get fitter, join more communities, catch up with long lost friends etc. So far, I've not really achieved many of them, but life has served me other experiences instead, and it's been an incredible time. I've seen quite a few people talking…
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 decided to set myself a new project: I want a backlit TV. Not the kind of backlight that LCD TVs have, but…
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 during the last great exodus, however because it's so federated, it's not quite as approachable for…
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. Continue Reading…
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 219 feeds (50 of which are YouTube channels ). My website also has an RSS feed , so people can easily see…
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 connection is secure (as secure as any connection can be), without being snooped on or at the mercy of whatever…
This talk was almost identical to the one I gave at Djangocon Europe 2024 . Django London isn't recorded, but the slides are linked. If you want to watch the talk, I recommend watching the Djangocon version. There's a lot more to a web application than just the request/response cycle. Running tasks in the background, whether on a trigger or schedule unlocks a lot of extra functionality,…
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 about how it works, because it does always work. But that's only because someone else has put in the time and…
I've had a website for a while now, but it's only in the last few years that it's had comments. At the bottom of every post or project (and my guestbook ), is a comments section. There, you can let me know what you think. Want to show your appreciation? Want to suggest an improvement? Want to tell me I'm completely wrong and there's something better (it happens)? Comments are a great way to do……
Wagtail and Django are both pretty fast web frameworks, both for developers and end users. But, there's plenty you can do to make it even better. In this talk, I'll cover ways to squeeze all the performance you can out of your Wagtail site, many of which are true for any Django application. I forgot to turn the blue-light filter off on my laptop for this, which is why the slides look… Continue…
There's a lot more to a web application than just the request/response cycle. Running tasks in the background, whether on a trigger or schedule unlocks a lot of extra functionality, performance and reliability. Whilst Django is a web framework, it doesn't have a good first-party story for background workers right now. When most people think of background workers, they lean immediately to Celery,…
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 Tailscale rs: Alex has this ungodly and terrible habit of nerd-sniping me into doing crazy things. It happened with the JB Notes site , and it's happened again here. I'm definitely one for side projects , and playing around with weird technologies outside of…
If you're reading this, you read it from a server hosted by Hetzner - congratulations! My website is quite important to me. I want it to be reliable, stable, and yet still be something I can tinker with easily if I want to. Almost 2 years ago, I rewrote it to use Wagtail, and it's been running on a single VPS in London ever since. However, for a few reasons, I want to move… Continue Reading…
My server boots off a pair of SSDs, tied together in a ZFS mirror. Proxmox supports ZFS boot (thanks to its Ubuntu kernel), and lets you configure it through the installer. When I installed my server, this is what I wanted, as it meant the OS and data disks for the contained LXCs and VMs were all nicely backed up and versioned. However, one afternoon I logged in to my server and noticed the……
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 are great, but I use it mostly for overriding DNS. If I'm at home, and so is my server,…
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, the search is powered by PostgreSQL's full-text-search , connected through Wagtail's search backends . Sure,…
In case you didn't know, I have a blog - you're reading it now. It's not like what most people think of when they think "blog". It's guides, tales and random thoughts about the things I do, play around with or find interesting. The same can be said for the repositories on my GitHub account - it's either tools I've built to solve a problem, things I'm playing around with, or I guess stuff to……
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, whilst Docker networks are accessible to the host (unless you set…
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. Continue Reading…
And now, for something completely different ... 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 AirCon, so in the lovely August heatwaves we get in Britain, I was……
Self-hosting is a big hobby for me (and a big source of content for my website). Not only is it a great source of entertainment and fun, but I find it incredibly interesting, vaguely relevant to my job, and a good way to regain a little privacy. Over the last year, not much as changed, but that's given me the time to spend with my servers, better understand how I use them, what I… Continue…
I, like a growing number of people, enjoy dark mode. Not only do I find it clearer and easier to read, but it's also easier on the eyes, looks nicer and saves a little battery in the process. If a service supports it, it almost always ends up in dark mode (unless their dark mode is disgusting) - and for sites which don't support it, there's always DarkReader . Google Maps has a complex… Continue…
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 keeping it up to date at a sensible rate. As is a surprise to no one reading this, I have quite a few electronic……
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 made that decision for you, urllib is the standard library tool for you. urllib is…