
Five reasons why I write
In 2022, I made a goal of writing at least twelve long-form articles on my blog each year. But why bother? In this article, I will explain the reasons why I write.
Hi, I'm rubenwardy! Welcome to my blog, where I write about my projects and various tech-related topics.
Here are some of my favourite posts:
In 2022, I made a goal of writing at least twelve long-form articles on my blog each year. But why bother? In this article, I will explain the reasons why I write.
I recently switched to using Eleventy to generate my blog. As part of this process, I needed to implement word counts for each of my posts. I made my own plugin for this as I was unable to find an existing one that met my requirements - they either used regex to parse HTML or included non-text like scripts and code snippets in the count.
Read more Better word counts and reading time in Eleventy (11ty)
I recently switched to using Eleventy to generate my blog. Because Eleventy is very easy to extend, I was able to add more features to my blog - including backlinks.
After nine years of using Jekyll, I’ve switched to using Eleventy (11ty) and redesigned my blog whilst I was at it. I was finding that Jekyll was too limiting and wanted something more capable. In this article, I will talk about why I switched, how I did it, and my thoughts about Eleventy as a new user.
The collapse of Twitter last year got me thinking about closed platforms and reducing the hold that privately owned platforms have over the Internet.
I’ve been blogging for nine years now on my personal website. I like owning my own domain as it allows me to retain control and stay independent of particular services. Private platforms have a tendency to be bought out and/or ruined by commercial interests, especially now with tech growth slowing down and investors getting uneasy.
I’m making a device to water my basil plants. Whilst working on this, I encountered an issue where running the pumps whilst connected to WiFi would crash the microcontroller. After investigation, I found the cause was poor grounding and Electromagnetic Interference (EMI).
Read more Ghosts live in the ground: debugging an electronic circuit
Ten years ago today, I uploaded the first version of Capture The Flag. Capture The Flag is a multiplayer game where two teams of players battle to claim the other team’s flag whilst defending their own. Capture The Flag is played in a destructible voxel environment, allowing players to build defences and place traps.
Capture The Flag started life as a persistent kingdoms game but quickly pivoted to a match-based team game. It was developed iteratively, taking into account player feedback. I hosted a server for the game for many years and a community formed around it. In 2021, I handed over the reins to CTF to very capable hands; it remains Minetest’s most popular server to this day.
This article covers the history of CTF, the lessons I learned, and the changes I made along the way.
One of the reasons I learned how to program was to make games. Games are a unique form of creative medium, combining art, interactive storytelling, and vibrant worlds. But as a software engineer, it’s easy to lose sight of my goals and get trapped by the technical details. It’s common for software engineers in game dev to roll their own engine, which I believe reduces productivity and is ultimately a distraction to making a game.
Note that I’m not just referring to making reusable or generic game engines; for this article, I consider using low-level technology like OpenGL, SFML, or SDL to make games to include the act of rolling your own game engine, even if the focus is specific. It’s more manageable, but you still end up reinventing the wheel and having to solve many of the same problems.
There are plenty of other articles about whether or not to make your own game engine. This article is personal to me; it’s an exploration of my journey in game dev, a discussion of what motivates me, and a promise for the future.
Read more Make games not engines: why I'll be using Godot engine
In 2020, the Minetest Discord community ran a mod-making competition with “combat” as the theme. Participants had one week to create a mod with all the code written within the time, but pre-existing art was allowed. I made a Real-Time Strategy (RTS) minigame called Conquer; it received first place.
In this article, I will discuss some of the interesting challenges that Conquer needed to solve. I believe that Conquer is a great example to learn from as it demonstrates best practices for Minetest modding; it is well-structured and unit-tested.
Read more Conquer: a deep-dive into my Minetest mod jam entry
I love making apps. I like making stuff and it’s even better when I can interact with the stuff I make. App development feels especially real as I can hold and touch what I made. So why don’t I have many Android hobby projects? This article is a reflection on the projects I’ve worked on, the problems I have, and what I want to try in the future.
Bing has now unbanned my blog. My site is still penalised/low in the results, but at least it's appearing now. See the bottom of this article for their response.
My domain was shadow banned by Bing and DuckDuckGo last year, and I don’t know why. Since then, my root domain (rubenwardy.com) has been unbanned but my blog remains banned. The event also negatively impacted the search placement of my root domain; another site that reuploaded some of my content is appearing as the first result when searching for it.
My eventual goal with electronics is to create autonomous robots and drones; I’d like to make a quadcopter with my own flight controller that can take off, land, and follow a target. This will be quite an ambitious project, and I’m nowhere near capable enough for that yet.
Previously, I created a simple plant monitor that reported stats to an online dashboard. This allowed me to learn soldering, stripboards, and 3d printing. To work on future projects, I need to be able to produce ever more complicated circuits and mechanical designs.
After watching some Lock Picking Lawyer on YouTube, I was inspired to think about different locking mechanisms. A locking box would be a good experiment with mechanical design, and if combined with IoT, would be good for electronics too.
In this article, I will cover how I created my lock box - from the problems I had, the iterations I made, and the final design I settled on. It’s a bit of a random project, I didn’t have set goals in mind. I started by exploring different locking mechanisms, and then moved to focusing on the electronics and getting it working.
Articles are a great way to expand your knowledge as a programmer, by learning from the experiences of others. A good article is also interesting to read. Here is a collection of articles I recommend reading.
When implementing controller support in a game, it’s desirable for gamepads to just work without a lot of user configuration. Platform APIs are pretty useless for this, the solution is an API like SDL_GameController that allows you to target a large number of gamepads without much effort.
Each operating system has its own API for gamepad input. Windows has XInput, and Linux has the joystick and evdev APIs. When a gamepad button is pressed, applications will receive a button id. This is a number, there’s no OS way to know which button id corresponds with which button. The ids for a button are not the same on different gamepads and platforms, making it super hard to support more than a couple of devices.
if (SDL_JoystickGetButton(joystick, 8)) {
std::cerr << "no idea what button 8 is" << std::endl;
}
One thing platforms do give you is the name, model, and manufacturer of the game controller. If you test with a large number of gamepads, you can create a database from gamepad name to layout. Luckily, SDL_GameController has already done this for you. Instead of a random number, you can use a named button that will work no matter the gamepad and platform:
if (SDL_GameControllerGetButton(controller, SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_X)) {
std::cerr << "X was pressed!" << std::endl;
}
Last month, ContentDB received a large spike in traffic. ContentDB is the website I created that allows you to install mods/games/texture packs from within Minetest’s main menu. On Saturday 5th, Bobicraft, a Spanish-language Youtube channel with 5M subscribers, posted a video about Minetest. At the time of writing, it has reached 1.3 million views and is now the most-watched Minetest video.
In this article, I will show the data about this increase in traffic. As the tools that I use to monitor ContentDB are ephemeral, this will keep the data around for future reference.
Read more Large spike in Minetest traffic caused by YouTube video
A few months ago, my Steam Deck arrived. So, obviously, one of the first things I did was play Minetest. Whilst Minetest isn’t available on Steam yet, it is available on Flatpak and so can be installed from desktop mode.
Minetest plays very well on the Steam Deck, it performs great and Steam Input makes setting up controls easy. The Deck is an open console, so there’s full support for modding and you can cross-play with other platforms.
In this article, I will explain how to set up Minetest on the deck, and review the controls, performance, and experience. I’ve already written my thoughts about the Deck in another article, and recommend checking that out.
Using a fingerprint to unlock your computer or elevate privileges (sudo) is a nice convenience, saving time during daily use of a computer. This article will show you how to set up fingerprint authentication on Ubuntu KDE. You’ll still need to enter your password to login, but once logged in you will be able to use a fingerprint to unlock or use sudo.
This guide is based on a Thinkpad X1 running Kubuntu 22.04, but it should work for most laptops with supported fingerprint sensors. You can check whether your fingerprint sensor is supported by searching for “Linux fingerprint” and your computer’s make/model. The Arch wiki is especially useful for this sort of thing, even if you don’t use Arch.
It goes without saying that this comes without warranty; backup your data, and have a LiveUSB ready. There are some pointers on recovering from mistakes at the bottom of this page. Luckily, I never needed to use a LiveUSB, I could easily recover from a virtual console.
Read more Setting up fingerprint auth on Kubuntu (Thinkpad X1)
In 2016, I created an app to install mods for Minetest’s Android port. It was my first Android app; it taught me a great deal about Android development and also helped me get my first programming job.
Minetest is an open-source game engine with millions of downloads and thousands of weekly players. The project has a very active modding community, with many games available to play. Before I created the app, users had to manually install content by unzipping their files into a directory; this was a poor user experience, especially on Android, so I created the app to make this easier.
Minetest now has ContentDB, a platform I created to browse and install mods and games within Minetest. Because of this, the app is now obsolete and is no longer available for download. That doesn’t mean this app is fully gone - the lessons I learned live on in ContentDB.
Steam Deck is a new portable gaming console from Valve. The Deck is a very open platform as it’s a full Linux PC, making it very easy to use third-party games and stores. All Decks can act as a devkit machine, and come with devkit tools preinstalled. There was a Steam Deck Devkit edition, but that was a preproduction version of the hardware to allow game developers to test their games.
This article will show you how to upload and run your games on the Steam Deck from your development computer, using a VSCode task or a script you can use in any editor. Whilst you could develop on the Deck directly, it would require setting up a new dev environment. Being able to develop on your computer and test on the Deck allows you to reuse your current dev environment.
Read more Devkit CLI: Upload your game to Steam Deck from your dev computer
My Steam Deck arrived two months ago, and I’ve been having a blast ever since. I’m not much of a gamer; RimWorld and Skyrim are the only two games I’ve spent more than 100 hours in. I find it hard to play a game without wanting to do game dev instead. But with the Deck, I’ve been playing the games that have been on my play list for a while.
This article contains my thoughts about the Steam Deck. It’s not meant to be a review applicable to everyone; I’m not your average user nor do I claim to be. I recommend reading a wide range of reviews before buying something expensive.