Monthly Meanderings: September 2026 Developer Chris Smith published a September 2026 monthly recap describing his use of LLMs to "vibe" a complete music player from a single short prompt, alongside a debugging post on Centauri, his reverse proxy, where default settings in the Lego library combined with systemd-resolved behavior caused failures. Smith also rewrote his site's data architecture to pull shortcode data from remote sources with background caching, and added form-submission mutations to his feed builder after scrapers ignoring nofollow and noindex tags hit every URL combination, with one scraper later generating 100 requests per second from multiple IPs and taking the site down. Smith said he plans to write rate limiting and ASN blocking code next. Where has the year gone? How is it October already? Although I’m actually writing this in September, so it isn’t. But the point still stands, I think. Man, I’m getting good at these intros. They just flow right off the page, right? … Right? A couple of new posts appeared in September. Lego, ACME DNS-01, and negatively-cached surprises https://chameth.com/lego-acme-dns-01-surprises/ is a rather snappily titled post about debugging an issue a friend had with Centauri https://github.com/csmith/centauri , my reverse proxy. Turns out a combination of default settings in the Lego library and the perfectly reasonable behaviour of systemd-resolved makes for a bad time. Maybe that should have had a spoiler warning. Then in the expanding scope of coding agents https://chameth.com/the-expanding-scope-of-coding-agents/ I talk a bit about how my use of LLMs for coding has evolved, and how I “vibed” a perfect-for-me music player with a single, short prompt. It’s a spiritual successor to an app can be a ready meal https://chameth.com/an-app-can-be-a-ready-meal/ from last year. Now the microwave is even easier to operate. Or operates on bigger ready meals? It’s a good job I didn’t try to keep the same analogy in the post. Under the hood, I’ve been slowly working on changing how data on my website is handled. Previously, if I wanted to display something like board game stats, then chameth.com had to have a complete copy of all my board game data so it could query whatever information was needed. As I added more and more bits and pieces, this felt heavier and heavier, and in some cases was straight-up duplicating data and logic that I had elsewhere. I’m instead moving to a model where the shortcodes pull data from a remote source and cache it for an appropriate amount of time. It’s then refreshed in the background for as long as it’s “live”. So the monthly recap embeds you’ll see below refresh until a few days into October to pick up any straggling data, and are then frozen. It doesn’t really make any difference to what you see on the page, but the architecture pleases me, and I got to delete a whole bunch of code. Finally, I had to tweak the feed builder https://chameth.com/feeds/posts/build/ I mentioned last month. Some scrapers managed to stumble into it, then ignored all the nofollow and noindex tags, and decided to try and scrape every possible combination of posts. That is a lot of combinations. Some of the scrapers are lovely things that pretend to be Chrome and use a different residential proxy per connection, so you can’t simply block IPs or user agents. I’ve changed the builder so that each mutation is a form submission, which seems to have helped a bit, but there are still some hitting all the URLs they discovered before the change. I drafted this post a few days before publishing it, and originally wrote “the scrapers didn’t actually put any noticeable load on the website, but they did manage to screw up my analytics ” Guess what Literally as I went to publish this post my monitoring went off because the site stopped responding after one scraper did 100 requests per second from a bunch of different IPs. Guess I’m writing rate limiting and ASN blocking code tomorrow. Oh look, one of those new cached shortcode things I was talking about When last month’s post went live, chameth.com had a database of every track I’d listened to since I started logging them. Now instead there’s a dedicated service for that, and it just passes the specific information over. In this case, my most played albums this month: | | | | Album | Artist | Unique tracks played | Total tracks played | |---|---|---|---|---|---|---| | 1 | | | The Strange Case of… | Halestorm | 7 | 23 | | 2 | | | From Zero | Linkin Park | 7 | 22 | | 3 | | | Good Girl Gone Bad: Reloaded | Rihanna | 6 | 22 | | 4 | | | KPop Demon Hunters Soundtrack from the Netflix Film | KPop Demon Hunters Cast | 5 | 21 | | 5 | | | Love, Drugs & Misery | Eva Under Fire | 10 | 21 | | 6 | | | Hands | Little Boots | 7 | 20 | | 7 | | | THE WAY | Dorothy | 6 | 20 | | 8 | | | Fallen | Evanescence | 7 | 19 | | 9 | | | Villainous | Eva Under Fire | 7 | 19 | | 10 | | | American Dream | DIAMANTE | 7 | 18 | As I said last month, this is probably going to be pretty same-y. There are some small movements, but it’s still mostly just “albums I love” combined with “albums I like that have songs with a suitable BPM for running” in some order. I watched a bit of TV this month, catching up on the most recent seasons of Rick and Morty https://www.themoviedb.org/tv/60625-rick-and-morty . It’s nice having something relatively short to watch when you’re at a bit of a loose end, or don’t want to have to remember what contrived plot arc is going on in a longer-form series. I was also pleasantly surprised to discover that SNL UK https://www.themoviedb.org/tv/288670-saturday-night-live-uk is back. It’s — as you’d expect — more of the same standard SNL formula, with some hits and some misses, but Weekend Update remains consistently hilarious. Most of the rest of my entertainment time has been spent in World of Warcraft, in one form or another. I picked up beta access to WoW: Forever https://worldofwarcraft.blizzard.com/en-gb/forever , which is basically a semi-modernised version of classic WoW but without following the same expansions as the original. Just… classic… forever. I initially didn’t think I’d like it, given how opposed classic players seem to be to everything nice, but so far it seems like they’ve done a good job balancing it. It feels a lot more like an RPG than modern WoW, where everything feels like a thin veneer over getting gear or various currencies. It’s still early though, so I’m not sure how much “sticking power” it’ll have with me. In normal WoW, I’ve been playing both my Shaman and Monk healers. I’m leaning back towards Monk now. It’s still undertuned despite several buffs, but I don’t think that actually matters at the level I’m playing at. After playing around with some of the talents, I’m happier with it than I was, and I still find it a lot more fun to play than the Shaman, even if it doesn’t quite perform as well. Level 90 Female Night Elf Mistweaver Monk 323 average item level | Midnight Leatherworking | | 100/100 | | Midnight Skinning | | 100/100 | | Midnight Cooking | | 100/100 | | Midnight Fishing | | 110/300 | | Altar of Fangs | +10 | 18:53 | 334 | | Den of Nalorakk | +12 | 27:40 | 370 | | Kings' Rest | +12 | 32:35 | 365 | | Murder Row | +12 | 24:02 | 376 | | Ruby Life Pools | +12 | 21:31 | 374 | | Temple of Sethraliss | +10 | 23:12 | 330 | | The Blinding Vale | +10 | 23:56 | 328 | | Voidscar Arena | +12 | 29:38 | 365 | | Total M+ rating | | | 2842 | |---|---|---|---| Female Dwarf Restoration Shaman 320 average item level | Midnight Blacksmithing | | 100/100 | | Midnight Inscription | | 92/100 | | Midnight Fishing | | 35/300 | | Altar of Fangs | +12 | 27:28 | 368 | | Den of Nalorakk | +12 | 28:10 | 369 | | Kings' Rest | +14 | 26:20 | 403 | | Murder Row | +12 | 25:04 | 375 | | Ruby Life Pools | +12 | 25:19 | 369 | | Temple of Sethraliss | +12 | 24:13 | 374 | | The Blinding Vale | +12 | 20:23 | 377 | | Voidscar Arena | +12 | 23:27 | 373 | | Total M+ rating | | | 3008 | |---|---|---|---| This has been a fun month for my running activities I ran my first timed 5k at the start of the month, finishing in 41:22. My aim was for a pace of around 8 minutes per km, and the actual course was 5.2km, so I was pretty much spot on. It’s not a very fast pace, but given I only started running at the end of June I’m pretty happy with it. I’m now working my way up towards 10k, then I’m going to spend a little while just building volume and hopefully some speed. Now that I can comfortably run 5km, albeit rather slowly, I’ve started going to my local parkrun each week. Naturally I’ve created a webpage https://chameth.com/parkrun/ that tracks my stats and results. In hindsight I could have started going much earlier, and done some of my walk-run training there, but I didn’t want to be around that many people when I was still finding my feet. I feel like I’m getting a bit better at pacing myself, but I’m also conscious that I don’t really know what my “all-out” speed is and how long I can maintain it for. I don’t think I want to do a time trial while I’m working towards a 10k, so for now I’ll just stick with slowly but surely pushing my PBs down: 14 activities 8h 0m total time 59.8km total distance 6.5km longest distance I managed to entirely avoid getting on my bike this month. A few planned rides fell through, and the rest of the time the weather was miserable, or my legs were still raising complaints about previous runs, or I was doing this pesky thing called “work”, or I just didn’t feel like it. Hopefully I can squeeze a decent ride in at some point before the weather turns even more, but that list of excuses looks nigh insurmountable. An interesting presentation from Dan McKinley https://mcfunley.com/ , who I remember from the boring technology club https://boringtechnology.club/ . He seems to be single-handedly propping up the entire .club TLD. Anyway, it’s an interesting look at how some LLM tooling works, and contrasts starkly with how half-assed a lot of support bots seem to be. Bryan Cantrill talks about the recent hysteria concerning the risk of LLMs wiping out humanity. Bryan always seems to have very sensible takes, and presents them very well, and this one is no exception. A post from my friend Simon about redoing his website. I particularly like the screenshots of the previous versions at the end. I’ve been meaning to do a “History of this site” post for a while, and seeing this has moved it up my priority list. I find hardware projects like these more and more appealing as the software world gets more and more LLMy. They’re physical, and whimsical, and you can’t just recreate it by typing some words into a prompt. Now if you’ll excuse me, I have a sudden urge to solder something…