Category
Software Development

WordleWise UI/UX updates
This is just a quick post to announce a couple of cool UI/UX improvements to WordleWise… Firstly, if you’re a user who doesn’t belong to a group, you’ll now see a dismissible “Compete with friends” promo banner just above the main page content, with links to the “Create group” and “Join group” actions: Secondly, if…

Land of Opus and Glory
Last month was a pretty exciting one in the world of AI. Google released the long-awaited Gemini 3 Pro and a new agentic software development tool called Antigravity on the 18th November, and just six days later Anthropic released Claude Opus 4.5, the most capable LLM I’ve ever seen. AI fanboy that I am, I…

Introducing Two Significant Upgrades to PRtoPDF
My GitHub pull request (PR) → PDF conversion tool PRtoPDF, first introduced in the article Convert your GitHub pull requests to PDFs, has just received two significant upgrades. Anonymisation config Firstly, PRtoPDF now supports granular configuration of anonymisation rules, to make compliance easier for users from a broader range of backgrounds and with a broader…

Convert your GitHub pull requests to PDFs
TL;DR – find my GitHub pull request → PDF converter here, with everything you need to get set up. The other day me and countless other software developers and digital professionals across the UK Civil Service were compelled to submit a detailed self-assessment at work, as part of the Government Digital and Data Profession Capability…

FantraXpert: A Fantasy Football Data Dashboard
Me and my friends have been competing in a draft fantasy football league since 2016. The platform we use, Fantrax, offers detailed scoring rules that reward players for completing all sorts of on-field actions, which is one of the reasons it’s so addictive. Despite my best efforts, I’ve never been particularly good at it. I’ve…

Listen to The Robots and Thou Shalt Prosper
If, like me, you are tired of listening to Alastair Campbell and Rory Stewart agree agreeably on The Rest is Politics, then I might have something for you… 🥁🥁🥁 It’s an 11-part podcast series on Web Development – planned, researched, scripted and read aloud for your entertainment by ROBOTS!!! Huh? Well, not robots robots; I’ll…

Streetscape Now Does More Things Than It Did Previously
I published an article announcing the release of my new road network visualisation app Streetscape 10 days ago, and since then I’ve made a number of significant improvements to it, which I’d like to bombard you with today. Firstly and perhaps least spectacularly, there’s a new Guidance page to teach users how to interpret images…

How Vibe Coding Led to a Crypto Mining Attack on My Web Server
I was surprised the other day to learn that my web server was under attack. I was remoted in to the DigitalOcean Droplet instance where my web server is hosted (I moved off of AWS a few months ago), when I noticed that system load was unusually high. Investigating further, I checked out CPU usage…

Behold! It’s the Road Network Visualisation Tool You’ve Been Waiting For
11 months have passed now since I last did you a post, and much has changed in that time. I’ve had a baby, for one thing. But onto more important matters: the other day, I released a new app! It’s called Streetscape, and you can find it here. What is it? Streetscape is my way…

Behind the Breakpoints: Exploring the Inner Workings of Debuggers
Using a debugger has been a core part of my workflow ever since I started life as a professional software developer three-and-a-half years ago. However, until very recently, I never really understood the internal mechanics of debugging, and this meant that when debugging the debugging process itself, I was often unable to reason about the…

The Great Migration
The other day I launched my very first AWS EC2 instance and migrated this website, and a couple of web apps, onto it. It was a long time coming – the annual cost of web hosting with Bluehost has increased from a discounted £51.72 in 2021 to £118.30 in 2023, while my Soccer Simulation app…

LexiDeck: Enhancing the Anki Experience with Automated Flashcard Creation
My memory is notoriously terrible, and I’ve devoted a lot of energy over the years to compensating for that fact. Way back in the day this meant getting to grips with a clunky application called SuperMemo, built around a fascinating spaced repetition algorithm that promised long-term knowledge retention. I later discovered the flashcard software Anki,…

How ChatGPT’s New “GPTs” Feature Can Help You Develop Software
OpenAI’s Dev Day took place on November 6th and it’s fair to say there was a lot of hype leading up to the event. Nowhere was this more palpable than the hive of optimism that is the subreddit r/Singularity, which I am slightly ashamed to admit that I follow avidly. Confident predictions of an AGI…

Learn Español with the GPT-3.5 API
I’ve been using ChatGPT on a daily basis ever since last December, but it was only the other day that I actually got round to having a play around with the OpenAI API for the first time. It was an interesting experience that culminated in the production of a useful little language-learning app, that I…

My First ChatGPT-Assisted App and the Future of Software Development
ChatGPT is an absolutely incredible tool and if you’re not already using it, you should be. You really should. It doesn’t matter who you are, or what you do for a living – it’s so versatile that it can turn its hand to pretty much anything you want it to do. Among many other things,…

Anagramageddon – Fight for Territory and Find Anagrams as You Battle Against the Clock!
I’ve created a new word game called Anagramageddon, played on a single computer by between two and four players. In a nutshell it involves users taking it in turns to (A) select a letter and (B) enter a word that can be formed from all of their letters. It’s a competitive game, and the time…

Using React to build a Wordle tracker
Even if nobody else in the world played Wordle but me, I’m sure I’d still enjoy it well enough. However, there’s little doubting that one of the major appeals of the game is how easy it is to compare your own performance against others. It’s why the most common WhatsApp message sent between myself and…
6 Talking Points from Pawnfork
The other day I published my latest app – a little desktop-based number whose aim it is to make memorising chess openings as easy as falling off a log (this is apparently a real idiom). It’s called Pawnfork, and you can download it here. Of course, it’s not every day that I fire out a…

Optimise Your Chess Opening Play With the Help of My New App
I have created a simple new desktop app for memorising chess openings, and called it Pawnfork. There’s not too much to say about the app from the perspective of a user that I don’t say in my introductory video, which you can find above, but of course there is plenty to say about the development…

Migrating a Spotify Listen-Logging App to AWS
Welcome back, dear reader. It’s been a bloody long time since I “done you a post”, which is a shame not so much in a literary sense as a financial one: Bluehost absolutely rinsed me a few months back with the cost of renewing my web hosting contract, and my subsequent inactivity is making that…

A Catan Love Story; or, As My Miller Father Used To Remind Us Regularly Over the Dinner Table: No Pain, No Grain
Old and wizened you must have grown since last I put fingertip to keyboard key, to persist my thoughts in the digital universe; like the great Dumbledore, siphoning off memories into his Pensieve. A quaint little article published all the way back in November 2021 was my last offering at the altar of Will May’s…

Soccer Simulation – Creating the Team Formation Graphics
Three months ago I released a web app called Soccer Simulation, which you can find here. The app, which in and of itself took around four months in the building, was really the culmination of a lifetime interest in football simulation, which you can read about here. During the development of the app, I had…

Fun and Games with SQLAlchemy
I’ve spent quite a bit of time over the past couple of days transforming the data access layer of one of my Flask applications from a purely psycopg2-based mess to an SQLAlchemy-based not-quite-such-a-mess, and I thought I’d share some thoughts on the process. Introduction As a former data analyst, my face has been permanently sootened…
Updates to Soccer Simulation
This is just a short post to point out a couple of recent updates to the Soccer Simulation app, inspired by recent suggestions by users. Add custom club names It is now possible to replace club names used in the simulation with your own, custom club names. This feature was requested by a couple of…
Heroku and the Irreplicable Problem of the Sleeping Dyno
I was befuddled to say the least, the first time I stumbled across the Sleeping Dyno. For rather than manifesting itself in reptilian form, as a terrible lizard in its dormancy, presumably mustering its energies for some cataclysmic rampage – a sight that would, of course, have provoked minimal befuddlement – the Sleeping Dyno is…

The Grand Unveiling of “Soccer Simulation”
Good morning ladies and gentlemen! This is my first post from my new home of Singapore, where I am currently holed up for a period of two weeks in a “quarantine hotel”, with * only * my wife Kate for company. We’ve been fully locked down for four days now, and overall it’s been surprisingly…

A History of One Man’s Inexplicable Obsession with Football Simulation
In preparation for the release of my latest project, a football league simulation built in Python and served as a web app via Flask and Heroku, I thought it would make for a purgative experience to step through the history of my interest in football simulation. For it truly is a long and jumbled…
Bargain Basement
Good day, and welcome to my first ever blog post on Will May’s Journey to Educate Himself in Software Development. Today I want to discuss my most recent personal project – an e-commerce website built on top of a custom-built PHP MVC framework, complete with both a customer-facing shopping experience and a staff-facing content management…