Articles

Longer write-ups on frameworks, tooling and the decisions behind them.

Filter these 16 posts

Everything in this section

  • Find Broken Images Free Website Audit Tool

    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.

  • Tech careers for students, with AI in the room

    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…

  • Two teachers standing in the rain entering car pickup numbers on cell phones

    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.

  • Blender and Mixamo Repeating Walk Cycle Animations

    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.

  • Tapo vs Kasa ONVIF Security Camera Comparison

    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.

  • Windows Dictation Voice Typing Network Fix

    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.

  • Git Destination Refspec Matches More Than One Error Fix

    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.

  • Deploying a Node.js Server with Dreamhost

    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!

  • Doctrine Arbitrary Table Joins on Unassociated Entities

    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.

  • Extending a parent Twig block with parent()

    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.

  • Conditional User State in Twig Views

    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.

  • Dynamic field names in Twig with attribute() and ~

    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.

  • Doctrine ORM MySQL Field Type Definitions

    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.

  • CollabPress: project management inside WordPress

    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…

  • Need multiple contact forms on your WordPress website?

    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.

  • Redirect a webpage with PHP

    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.