Setting up dev/prod environments with Lovable and Supabase
G'day:This is one of those "we really should have done this from the start" situations that catches up with you eventually.We've been building an e-commerce admin application using Lovable (an AI...
View ArticleLovable and its seemingly self-defeating pricing and business model
G'day:Sigh. I watched a video about Lovable the other day, which in and of itself was entirely adequate, and provided some interesting information in that way that one paragraph of text could also...
View ArticleTypeScript: any, unknown, never
G'day:I've been using any and unknown in TypeScript for a while now - enough to know that ESLint hates one and tolerates the other, and that sometimes you need to do x as unknown as y to make the...
View ArticleSetting up a Python learning environment: Docker, pytest, and ruff
G'day:I'm learning Python. Not because I particularly want to, but because my 14-year-old son Zachary has IT homework and I should probably be able to help him with it. I've been a web developer for...
View ArticleViolating Blogger's community guidelines. Apparently.
G'day:Earlier this evening I published TypeScript decorators: not actually decorators. And about 5min after it went live, it vanished. Weird. Looking in the back-end of Blogger, I see this warning:This...
View ArticleTypeScript decorators: not actually decorators
G'day:I've been working through TypeScript classes, and when I got to decorators I hit the @ syntax and thought "hang on, what the heck is all this doing inside the class being decorated? The class...
View ArticleTypeScript mixins: poor person's composition, but with generics
G'day:I've been working through TypeScript classes, and today I hit mixins. For those unfamiliar, mixins are a pattern for composing behavior from multiple sources - think Ruby's modules or PHP's...
View ArticleTypeScript constructor overloading: when one implementation has to handle...
G'day:I've been working through TypeScript classes, and today I hit constructor overloading. Coming from PHP where you can't overload constructors at all (you get one constructor, that's it), the...
View ArticleTypeScript late static binding: parameters that aren't actually parameters
G'day:I've been working through classes in TypeScript as part of my learning project, and today I hit static methods. Coming from PHP, one of the first questions that popped into my head was "how does...
View ArticleJavaScript Symbols: when learning one thing teaches you fifteen others
G'day:This is one of those "I thought I was learning one thing but ended up discovering fifteen other weird JavaScript behaviors" situations that seems to happen every time I try to understand a...
View ArticleTypeScript namespaces: when the docs say one thing and ESLint says another
G'day:This is one of those "the documentation says one thing, the tooling says another, what the hell am I actually supposed to do?" situations that seems to crop up constantly in modern JavaScript...
View ArticleSetting up a TypeScript learning environment: Docker, TDD, and the inevitable...
G'day:This is another one of those "I really should learn this properly" situations that's been nagging at me for a while now.My approach to web development has gotten a bit stale. I'm still very much...
View ArticleSymfony Scheduler: Handling task failures properly
G'day:Right, so a couple of weeks ago we built a complete database-driven scheduled task system for Symfony. We got dynamic configuration through a web interface, timezone handling, working days...
View ArticleSetting up local HTTPS with mkcert for Docker development
G'day:I'd been putting off setting up proper HTTPS for local development because I figured it'd be a right pain in the arse. Turns out it's dead straightforward when you use mkcert instead of messing...
View ArticleSending emails from Symfony applications
G'day:I needed to add email functionality to a Symfony app - specifically, sending templated emails when the application receives webhooks from external systems. Simple enough requirement, but I had...
View ArticleSymfony Scheduler. All the bugs in that initial implementation...
G'day:Right, so yesterday's article covered building a database-driven scheduled task system that actually works with Symfony's scheduler. We got dynamic configuration, timezone handling, working days...
View ArticleBuilding a database-driven scheduled task system in Symfony (or How I learned...
G'day:In previous roles, I've always had scheduled tasks sorted one way or another. In CFML it's dead easy with <cfschedule>, or the sysops team just chuck things in cron and Bob's yer uncle. But...
View ArticleSymfony forms
G'day:The next thing on my "things I ought to know about already" todo list is Symfony forms. I'm aware they exist as a thing as I've seen some code using them, but don't know much beyound them being a...
View ArticleQuick look at event-driven programming in Symfony
G'day:First up: this is not a very comprehensive look at this functionality. I just wanted to dip into it to see how it could work, and contextualise the docs.I had a look at Symfony's messaging system...
View ArticleShared/distributed locks in PHP with Symfony locking
G'day:This is another one of these issues that got into my mind at some point, and I never had a chance to look into it until now.Previously I was working on a CFML app, which had code that could not...
View Article