I am a maker.

I make websites as a full-stack senior web application developer; I make podcasts/audio short stories; I make photographic scenes of miniatures; I make disc golf stats.

I am the creator of the tech-fantasy and fiction-crime podcasts series Dist1nc7ive Stories, and produce other audio short stories.

I'm a freelance full stack web geek, and I blog about it, including my favorite toys of late: automation with Playwright/Puppeteer, PHP Goutte, and I leave myself notes-to-self to remember.

I am a co-founder of StatMando, a disc golf side-project that helped revolutionize stats in disc golf.

I used to run, and currently have, HuckfaceDG and a few other, um, interesting side projects.


PHP framework experience includes Laravel, Yii, Symfony, WordPress, CodeIgniter, and custom PHP projects.
Have an old legacy PHP site that needs to be carefully updated? I have experience working with older codebases, updating both the code, and the systems they run on, carefully, while maintaining the important system. I've worked with Apache, Nginx, Internet Information Server, MySQL, PostgreSQL and MS-SQL.


Disc golf stats. In early 2021, a few of us were on twitter, bemoaning the lack of stats in disc golf. We decided to try to help. We met, we planned, we built. The result: StatMando.

Distinctive Stories Podcast

I'm the creator of the tech-fantasy and fiction-crime podcasts series Distinctive Stories.
Visit site

Rufus & Anna are villains in "Computronium"

Blog Posts

February 4, 2024

How to do an SQL Delete based on a Join

I'm mostly used to simple deletes using where clauses, but I know a DBA who prefers to use joins. To get more familiar, I've been doing simple stuff like that. The syntax between MS-SQL and MySQL is...


February 1, 2024

A Simple PHP Benchmarking function

I recently needed to find where some performance issues were and didn't have the time to download and figure out any real-life tools, but this basic system helped. I could just sprinkle...


January 31, 2024

MySQL - Find What Tables Have a Column Name

How to find out what tables in a MySQL database have a specific column, by name.


January 17, 2024

How to Generate a Laravel API Token using Artisan Tinker

Generate a basic Laravel users.api_token:


December 23, 2023

How to disable warning that MacOSX switched to zsh

To avoid this message: Add this to ~/.bashrc: From Stackoverflow


November 29, 2023

Fix Links in Devtools Console

So, I'm right now working on moving from a Wordpress-to-static S3 site to a Laravel Jigsaw-to-static S3 site. During this, I found that while my WP docker setup had my test lcl site...


June 18, 2023

Reminder about PHP TS vs NTS

From PHP Documentation: Thread Safety means that binary can work in a multithreaded webserver context, such as Apache 2 on Windows. Thread Safety works by creating a local storage copy in each...


May 7, 2023

Useful Git Snippets

Bring back a deleted file, after it's been committed and pushed: git checkout <deletion commit hash>~1 -- <filename> Pull without going thru all the SSL self-signed BS but...


March 17, 2023

Find, based on Time

GAME. CHANGER. newerBt is “birth time” where newerCt is “change time” which doesn’t find things being copied around. WOOHOO!!! (newermt!)...


December 8, 2022

Basic but Useful SSL Expiration Date checker

At an old job, every now and then we'd have a fire drill because, despite it being a large, capable organization, no one seems to track when an SSL cert expires. So, I created this little script to...


February 27, 2022

Update Internet Information Server (IIS) Fast CGI Timeout

When debugging on Windows using Internet Information Server, if I took too long to step through what I was debugging, it would time out and I'd have to start over. Talk about anxiety! Lol. This...


January 2, 2022

Quick and Dirty API endpoint testing using devtools console.

Sometimes I'd be on a client network, without access to tools like Postman. But, I'd want to test and endpoint to see what's what. So, a little hackery with the devtools console and I'm good:...