Main Thread

Posts relating to Software Engineering.

Building Products - Starting from Square 0

The first in a series of posts on building products from the ground up.

Updating Apache, PHP, and MySQL for macOS Mojave

So you upgraded from Mac OS X Sierra to macOS Mojave, huh?

Installing Apache, PHP, and MySQL on macOS Mojave

This is an update of a previous post to install Apache, PHP, and MySQL on Mac OS for macOS Mojave.

10 practices for readable code

A set of 10 practices for writing code with a focus on improving readability and reducing complexity.

Laravel by the Numbers

A unique analysis of data from Laravel Shift on over 8,000 Laravel apps.

2018 Dev Goals

A little backstory on the 5 development goals I set to achieve in 2018.

Fake it by stubbing the mock, dummy

Why differences in test objects are often inconsequential and how abstraction can improve developer happiness.

Writing Clean Code (Part 2)

Three more practices to write clean code and help improve code readability.

SMS admin in 8 lines of code

In an effort to provide on the go support for Laravel Shift, I created an SMS based admin using Nexmo and Laravel.

References from "Writing Clean Code"

Additional references from my recent post "Writing Clean Code" containing motivation and practices for writing clean code.

Writing Clean Code

Three simple practices to help write clean code and improve the readability of a codebase.

You changed the code, you didn't refactor the code.

A closer look at the important difference between changing code and refactoring code.

Starting an online workshop for Git

The backstory for my plan to host an online workshop on Git.

An edge case for cache busting

Most high performance web sites optimize for the sad path. In this article, we address a way to optimize for the happy path too.

Compensation tips

Advice on compensation, seeking raises, and determining when to change jobs shared from my own experiences.

Accepting Adam's TDD Challenge

A response to Adam Wathan's challenge that isolated unit testing is incompatible with TDD.

Lumen is dead. Long live Lumen.

Why I believe Lumen is dying and what the future holds for Lumen.

Pivoting from Laravel Shift

Why I chose to pivot from a recent, successful product to a new product.

Shift Developer Platform

Announcing a platform for developers to build custom Shifts.

Practicing YAGNI - Show me the code

A write-up of the code samples given during my "Practicing YAGNI" talk at ZendCon 2016.

Updating Apache, PHP, and MySQL to Mac OS X Sierra

So you upgraded from Mac OS X El Capitan to Mac OS X Sierra, huh?

Installing Apache, PHP, and MySQL on Mac OS X Sierra

This is an update for Mac OS X Sierra of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

Update PHP on Mac OS X

How to upgrade or install a different version of PHP on Mac OS X.

Laravel Shift - 1,000 applications upgraded

A retrospective on creating Laravel Shift as it reaches its milestone of 1,000 Laravel applications upgraded.

The Proximity Rule?

A recent coding style I call the "Proximity Rule". Might be called something else, but I still like the code.

Practicing YAGNI

A summary of my talk at Laracon US 2016 on "Practicing YAGNI".

From Mentoring to Pair Programming to Coaching

Going beyond mentoring or pair programming with personal development coaching in PHP, JavaScript, Objective-C, TDD, Git, and more.

Shift: Laravel Automated Upgrade Tool

Introducing Shift - a Laravel framework automated upgrade tool.

Updating Apache, PHP, and MySQL to Mac OS X El Capitan

So you upgraded from Mac OS X Yosemite to Mac OS X El Capitan, huh?

Installing Apache, PHP, and MySQL on Mac OS X El Capitan

This is an update for Mac OS X El Capitan of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

100 days practicing TDD

A retro after practicing test driven development for 100 days.

Two Weeks of Extreme Programming

Some initial thoughts after two weeks on a new team practicing extreme programming.

Removing Comments

A closer look at the practice of removing comments from code.

Migrating from Octopress to Jekyll

Back to the basics with just Jekyll.

Are you a Boy Scout?

A look at how the simple practice of "boyscouting" can improve your code.

Configuring Apache Virtual Hosts on Mac OS X

Tutorial for configuring Apache Virtual Hosts on Mac OS X.

Installing Apache, PHP, and MySQL on Mac OS X Yosemite

This is an update for Mac OS X Yosemite of a previous post on installing Apache, PHP, and MySQL for Mac OS X.

The Reading List

A list of books culled over the years on the journey to improve my craft as a software engineer.

The Debugging Golden Rule

Developers need to remember the Debugging Golden Rule.

A rockstar developer can't save you

A rockstar developer can't save you. Why? Because the developer gap.

Letting a successful app fail

Making the difficult decision to let PocketBracket, a successful app, fail.

Launching my first Kickstarter project

The story behind launching my first project on Kickstarter.

gh - Open GitHub from the Command Line

A shell script to open GitHub from the command line.

Recruiter Methods

A closer look at the methods employed by recruiters.

Convert uniqid() to a timestamp

A proof on how you can convert uniqid() to a Unix timestamp in PHP.

Journey to become an iOS Developer

A rant on my journey to become a real iOS developer.

Fixing PHP Errors

A guide to interpreting and fixing PHP errors.

Common debugging for PHP and MySQL

This post provides a basic checklist for common database debugging when developing with examples in PHP and MySQL.

Updated: WordPress Multitenacy

An update to my solution for a multitenant WordPress install. With improvements in maintainability and extensibility.

PHP Namespaces: Avoid use

A look at how use breaks PHP namespaces and why you should avoid using use.

Why I leave a job

A reflection on the core criteria of a good job after deciding to leave The New York Times.

Forward-Compatible Code

While updating some legacy code to be backward-compatible I found that forward-compatibility was equally important.

Benchmark: Octopress vs. WordPress

A follow-up post reviewing the benchmarks performed during my recent migration from WordPress to Octopress.

Migrating from WordPress to Octopress

A post on my recent migration from WordPress to Octopress as a return to simple blogging and a site with greasy, fast speed.

A Response to “Micro-Optimizations in PHP”

A response to a post on PHP Micro-Optimizations floating around the PHP community recently.

Why [certain language] developers are better developers

An evaluation of the argument 'Why [certain language] developers are better developers' and why it might be valid.

Tough Mudder Kentucky

A review of our second Tough Mudder. This course in Kentucky. As well as a quick look at why I am a Tough Mudder.

Be a Better PHP Developer: Coding Standards

The next installment of a series on how to be a better PHP developer, and better developer in general. This post covers PHP coding standards.

Install PEAR and PECL on Mac OS X

This post outlines how to install PEAR and PECL on Mac OS X.

Installing Apache, PHP, and MySQL on Mac OS X

This post outlines installing Apache, PHP, and MySQL on Mac OS X. In addition, I cover configuring Virtual Hosts and installing PHPMyAdmin.

Updating SVN for Mac OS X

This post outlines updating SVN for Mac OS X. I updated after realizing new apps used SVN 1.7 while Mac OS X Mountain Lion used SVN 1.6.

In Code: Fashion vs. Style

While talking about technologies and trends, I heard an interesting analogy - the difference between fashion & style as it relates to code.

WordPress Multitenancy

WordPress Multitenancy - a simple solution to a complex problem. This post covers creating a multitenant architecture for WordPress. Aimed at improving scalability and maintainability.

Be a Better PHP Developer: The Basics

After reviewing thousands of lines of code over the last few years, I compiled a list of simple tips to help you be a better PHP developer.

Developer vs. Engineer

After interviewing with some top tech companies, I realized the difference between a developer and an engineer.

Migrating WordPress to Amazon EC2

After my shared hosting plan expired, I migrated to Amazon EC2. My WordPress site now runs on a micro instance. Free for the next year.

Louisville PHP User Group

For years I searched for a PHP User Group in Louisville. No more. I'm starting the Louisville PHP User Group and leading our first meeting.

Another year of PocketBracket: A March Madness App

A look back on 4 years of developing, managing, and marketing PocketBracket - a March Madness app for iOS, Android, and Windows Phone devices.

Installing and Configuring AWStats on Amazon EC2

Step by step instructions for installing and configuring AWStats on Amazon EC2, as well as a script that automatically configures and updates sites for AWStats.

Generate user password for CakePHP Auth

A script that hashes password for existing user records when using CakePHP Auth.

Netflix Feature Request: Multiple Account Profiles

After recently sharing my Netflix account with my parents, I noticed a missing feature I believe is common in shared systems: User Profiles. This post is a letter to Netflix requesting this feature.

Installing, Configuring, and Deploying I/O Docs

This post covers installing, configuring, and deploying (Heroku) I/O Docs - a live interactive documentation system for RESTful web APIs developed with node.js and redis.

Unexpected behavior with drop-down option order using minYear, maxYear in CakePHP

A rant after encountering unexpected sort order when using minYear and maxYear attributes to control options in an drop down. The solution involved an undocumented, and in my opinion unnecessary, attribute.

Tough Mudder Indiana

An article about our first Tough Mudder - the Tough Mudder Indiana at Badlands Off Road Park in late November 2011.

Installing node.js, npm, and redis on Mac OS X

After scouring the web for days, this post aims to provide concise, central instructions for installing node.js, npm, and redis on Mac OS X.

Tough Mudder Challenge

In two weeks I, as part of team #tigerblood, will accept the Tough Mudder Challenge - a 21 obstacle, 12 miles challenge course.

Review of PHPMyAdmin 3.4

PHPMyAdmin 3.4 came with many UI changes. After a few months of using PHPMyAdmin 3.4, I'm weighing the pros and cons.

CakePHP Auth Component loginRedirect Behavior

I came across some interesting behavior with CakePHP's Auth Component. The solution didn't align with the documentation or my understanding of the Auth Component's login redirect. This post covers the problem and my solution.

My Talk at WordCamp Louisville: Configuring WordPress for Multiple Environments

A follow up post from my talk on Configuring WordCamp for Multiple Environments at WordCamp Louisville 2011.

Install siege on Mac OS X

I've taken an interested in performance lately and heard about siege. The blog articled I found to install siege failed on the first step. So I decided to write my own in hopes it would help any non sysadmin developer that wanted to install siege on Mac OS X Lion. Although this should work with Leopard and Snow Leopard.

My Talk at WordCamp Chicago: Configuring WordPress for Multiple Environments

A follow up post about my talk on Configuring WordPress for Multiple Environments at WordCamp Chicago. It includes a link to the original blog post, slides, code samples, and a note about the proposed Unconference Talk.

Guidance Text using CakePHP’s Form Helper

A quick post on outputting the proper markup for guidance text using CakePHP's Form Helper.

WordPress Database Connection Error After Migration

Sharing my *moment* with WordPress and its dreaded "Error establishing a database connection" after updating the database.

Conditional Validation in CakePHP

I needed to perform conditional data validation in CakePHP for a project recently. This is a review of the internal options to do so and my own approach.

CakePHP not inheriting custom app_controller and app_model

My CakePHP project fell down a rabbit hole earlier after creating a custom app_controller and app_model from something that should have been a no-brainer. Hopefully this helps someone else.

A Week with Apple TV and Netflix

Some thoughts after a week with the new Apple TV and signing up for Netflix.


The process by which energy transfers between electrical devices and us.

Routines of a good developer

A reflection on the routines I believe make me a good developer and look for in developers around me.

Installing a trampoline on 18′ Hobie Cat

As I didn't find a good DIY guide after a few Google searches, I wrote this post after installing a new trampoline on my 18' Hobie Cat.

Why ColdFusion is Dead

An explanation on why I never adopted ColdFusion. Including a deeper look at several features, or lack thereof, that drive me nuts and some suggestions on how things could turn around.