Articles
Longer write-ups on frameworks, tooling and the decisions behind them.
Filter these 16 posts
Everything in this section

08/17/2025
Find broken images on your site with a free plugin
Migrations break image paths quietly - the page still loads and the picture is simply gone. Three ways to find every one of them: a WordPress plugin, a browser tool that works on any site, and the network tab.

08/17/2025
Tech careers for students, with AI in the room
So many young adults and high-schoolers seem to be disheartened with the rise of AI in tech. Those young minds who LOVE to write code are being dissuaded to even bother studying the art of software development and…

08/17/2025
Why is school car-line pickup still typed in by hand?
Here’s a practical application that can help schools with parent pickup and reduce unpleasant tasks and time burdening school staff.

05/27/2024
Blender and Mixamo: looping a walk cycle in two steps
A Mixamo walk cycle plays once and stops. Making it cyclic is two steps - and which one you need depends on whether you exported with In Place ticked.

05/27/2024
Tapo vs Kasa cameras: it came down to ONVIF
Both are TP-Link, both use much the same software, and only one will talk to anything but its own app. Two years on, that difference decided which line survived.

04/03/2024
Windows Dictation stuck on Initializing: the fix
Windows dictation hangs on "Initializing..." and stays there. A reboot clears it, and so does ending one background process. But there is a second cause with the same symptom, and ending the task does nothing for it.

11/07/2020
Git: dst refspec matches more than one
Git refuses the push because the name you gave matches both a branch and a tag. It will not guess. Here is how to see which refs collided, and three ways out depending on whether you still want both.

04/02/2020
Deploying a Node.js Server with Dreamhost
I’d like to shout out David Herron from TechSparx for writing a quick and easy to follow tutorial for deploying Node.js on a Dreamhost server! Super easy instructions and examples to follow, worked like a charm!

01/25/2016
Doctrine: joining entities with no association
In Symfony using Doctrine, if no association is available for two entities, you can still join them and treat them like they have a relationship. To do so, you have to use the “Join: WITH” method.

11/30/2015
Extending a parent Twig block with parent()
Define a block in a child template and it replaces the parent's version completely - which is rarely what you wanted for a block holding stylesheets or scripts. parent() puts the inherited content back.

04/28/2015
Show the logged-in user in a Twig template
The snippet everyone has saved uses app.user.username, which throws on every supported Symfony. Here is the version that works, which check to guard it with, and how to greet somebody by name rather than by email address.

04/14/2015
Dynamic field names in Twig with attribute() and ~
Dot notation cannot reach a property whose name you are building in the template. attribute() takes the name as a string, the tilde concatenates it, and `is defined` keeps the loop from throwing on a gap.

03/24/2015
Doctrine field type mappings: tinyint is a boolean
A MySQL tinyint is mapped to boolean regardless of its declared length, so a column holding 0 to 100 comes back as true. The full type table, and the two ways to get an integer back.

08/06/2014
CollabPress: project management inside WordPress
Some people are so enamored with these shiny new project management tools that load so nicely on our smart phones that they forget it should be a transparent part of the project and not a task and part of the process of…

03/16/2014
Need multiple contact forms on your WordPress website?
There are plenty of contact form plug-ins for WordPress. I’ve used a few that I thought would be good but turned out to be barely functional, clunky, and/or buggy.

03/15/2014
Redirect a webpage with PHP
Three lines, and three ways to get it wrong: output before the header, no exit after it, and a 301 the browser then caches forever. Which status you choose matters more than the code does.