
rubenwardy's blog
Hi, I'm rubenwardy! Welcome to my blog, where I write about my projects and various tech-related topics.
My favourite posts
Here are some of my favourite posts:
Posts


Anubis: Distrusting data centers and particular ASNs
My services receive AI scraper attacks primarily from data centers such as BytePlus. I started using Anubis to challenge requests to my service and protect it from going offline. My goal was for the system to be invisible to most users, and only challenge the most suspicious users. This article describes how to distrust particular network blocks in Anubis, such as data centers, for free - without using Anubis’ expensive add-on called Thoth.
Read more of "Anubis: Distrusting data centers and particular ASNs"

Using Ansible to configure a Linux VPS
Last year, I needed to move my services to a new Linux VPS. Previously, I used a mess of bash scripts to configure my server, with an aim of version-controlling the configuration. Whilst this was a good idea in theory, in practice this was incredibly complicated and brittle. I now use Ansible to provision my VPS and my Raspberry Pi.

An Ansible role to block abusive subnets using IPSet
My website was hit by a DDoS from an abusive scraper a few weeks ago. I wrote a Python script to help identify the subnets involved and then an Ansible role to block them using ipset. Here’s a quick blog post to share this.
Read more of "An Ansible role to block abusive subnets using IPSet"

Analysis of the Luanti ContentDB AI scrapper DDoS attack
From the 3rd to the 5th of April, ContentDB was hit by a Distributed Denial of Service (DDoS) attack, where it received over 5 million requests from 2,200 IP addresses. This blog post shares statistics on the attack and a reflection on how this can be prevented in the future.
Read more of "Analysis of the Luanti ContentDB AI scrapper DDoS attack"

Do I need a coat? - I've made a smartwatch app
I’ve finally polished up and released a smartwatch app I created two years ago. “Do I need a coat?” is a refreshingly minimalist wear app that tells you whether you need a coat, extra layers, or sunglasses based on the upcoming forecast.
Read more of "Do I need a coat? - I've made a smartwatch app"

OpenTTD and the Transport Tycoon re-release
Transport Tycoon Deluxe (TTD) has re-released on Steam and GOG after being abandonware for 25 years. Whilst it’s great that you can now legally buy the game, OpenTTD is no longer available for free on Steam. I can only see this as a cash grab by an investment holding company.

Would you like a cookie?
I’d like to talk about how cookie consent laws were damaging to consumer understanding of privacy. They demonised cookies - a simple way of storing information - when the real problem was the widespread, unregulated tracking and sharing of personal data. It focuses on a technology rather than a behaviour. I’d also like to talk about the GDPR and recent efforts to amend it.

My favourite articles of 2025
I read a lot of articles about programming and technology as a way of keeping up with the industry and expanding my knowledge. Here are some articles I read in 2025 that I recommend reading.

Eleventy (11ty) string-based translation with i18next
This article shows how you can make an Eleventy (11ty) website translatable on a string-by-string basis, supporting translation platforms such as Weblate.
A full working example is available at https://codeberg.org/rubenwardy/eleventy-i18n-example.
Read more of "Eleventy (11ty) string-based translation with i18next"

Plant watering system: my first PCB
Previously, I created a plant monitor that tracked soil moisture and sent notifications when the plant needed watering. But wouldn’t it be nice if it could water the plant instead of sending a notification? This new project does exactly that.
My plant watering system supports four plants, with a soil moisture sensor and a pump for each plant. The pumps draw water from a water tank, which contains a water level sensor. I’m using an ESP32 microcontroller for the brains, as it comes with Internet connectivity and low-power deep sleeping.

OpenTTD must-change settings that should be default already
OpenTTD is a game where you build a transportation empire with road vehicles, trains, boats, and planes. It’s an open-source remake of a game called Transport Tycoon by Chris Sawyer, released in 1994. I have been playing it for many years; I have no idea how many hours I’ve sunk into it.
There are a few setting changes that I consider essential. It’s bizarre to me that these aren’t the defaults - I guess OpenTTD is trying to keep close to the original 1994 game. I like to focus on passenger and mail services, and therefore consider these essential.
Read more of "OpenTTD must-change settings that should be default already"

Problems with the Online Safety Act: a letter to my MP
I’m writing to express my objections to the Online Safety Act and ask that you support repealing or amending the Act. The Online Safety Act is highly damaging to tech innovation in the UK, is unfair to small and hobby sites, and is a cybersecurity and privacy nightmare.
Read more of "Problems with the Online Safety Act: a letter to my MP"

Writing statistics for your Eleventy (11ty) blog
One of the reasons why I switched to Eleventy was to make it easier to do custom stuff, like creating a writing statistics page for my needs. This blog post is to share how I created that page and how you can create one for your blog.
Read more of "Writing statistics for your Eleventy (11ty) blog"

How can we own our identity on the Fediverse?
The Fediverse is a decentralised social media network. This includes Mastodon, which is where a majority of the users are, but it is not the only option. I have been using Mastodon for seven years. I made my home on Fosstodon, an instance focused on free and open source software.
Last month, it came to light that Fosstodon had a far-right moderator and some other instances defederated with Fosstodon over this. I don’t want to get into the specifics of this situation; whilst it is an important topic, it isn’t something I have any desire or qualification to discuss. I’ll leave this to other people. However, having to move instances did raise some thoughts about the federation model and owning your identity and data.
Read more of "How can we own our identity on the Fediverse?"

My favourite articles of 2024
I read a lot of articles about programming and technology as a way of keeping up with the industry and expanding my knowledge. Here are some articles I read in 2024 that I recommend reading.
2024 was a busy year for me so I didn’t read as much as in previous years. But still, here’s my top articles.

Ruben's Virtual World Project
Ruben’s Virtual World Project was a multiplayer top-down shooter with base-building elements that was in development for five years, from 2015 to 2020. It was a hybrid between a top-down shooter and a base-builder, allowing the player to switch between Hero and Architect modes at any time.
Whilst I started the project to learn about multiplayer networking at a low level - including latency mitigation, reliability, and prevention of cheating - it quickly turned into a project to make a game and game engine.

Bean There: An app to rate coffee shops
I made an app to rate coffee shops as an exercise to learn React Native. The app allows users to rate locations based on customisable categories. Whilst it was designed for coffee and coffee shops, it could be used to rate any kind of place. The ratings are stored locally on the device and not uploaded anywhere.
The original idea was to implement the same app in React Native, Jetpack Compose, and Flutter, but I’ve only made the React Native version so far. I’ve started the Jetpack Compose version and will hopefully have time to finish it at some point.

Why I use Firefox
Firefox has been my browser of choice ever since I was first recommended it twelve years ago. It has the extensions I like and it supports the open web.

Detox and React Native: UI testing Android permission flows
I’m currently learning React Native and Expo as an alternative to native app development. To do this, I’ve been working on an app so that I can get hands-on experience with React Native app development. This includes end-to-end UI testing, using Detox.
I was surprised that Detox doesn’t have an API to interact with permissions. The
device.launchApp function does have a permissions field, but this only works
on iOS and runs on app start-up - it doesn’t allow you to test the actual user
flow.
In this article, I will explain how you can do end-to-end testing with Android permissions, including simulating user interaction with the Android permission request modal.
Read more of "Detox and React Native: UI testing Android permission flows"


