Main Thread
Why another side-project
Asking myself why I decided to work on yet another side-project.
Launching another side-project
Coming to my decision to launch another side-project and key takeaways for working on side-projects.
A lookbehind at 2023 and lookahead for 2024
A look back at my goals from 2023 and an outline of my goals for 2024.
4 personal finance tips for Indie Hackers
A review of the personal finance decisions which increased my calm as an Indie Hacker running a successful SaaS.
A lookbehind at 2022 and lookahead for 2023
A look back at my goals from 2022 and an outline of my goals for 2023.
Spawning workers based on queue workload
The backstory for building a feature to spawn additional worker servers based on the job queue workload.
A lookbehind at 2021 and lookahead for 2022
A look back at my goals from 2021 and an outline of my goals for 2022.
Grinding to $1,000,000 in revenue over 6 years
A review of growing my SaaS product to $1,000,000 in revenue over 6 years, both from a business and personal perspective.
Building a PHPUnit to Pest Converter in a week
The motivation and execution around building a PHPUnit to Pest Convert in one week.
A lookbehind at 2020 and lookahead for 2021
A look back at my goals from 2020 and an outline of my goals for 2021.
Configuration precedence when testing Laravel
A deep dive into the precedence of the various configurations when testing Laravel applications.
Install PHPMyAdmin on macOS using Docker
Install PHPMyAdmin alongside your local macOS development environment running Apache, MySQL, and PHP using Docker.
Match a Docker container prompt to your own
Have your Docker container prompt match your local prompt and add a simple emoji so you know where you are.
Custom command to interact with Docker containers
Interact with Docker containers by name using one simple, custom command.
Installing Apache, MySQL, and PHP on macOS using Docker
A tutorial for installing Apache, MySQL, and PHP on macOS for local development using Docker.
Avoiding inheritance in Laravel
Developers often choose to use inheritance. However, in Laravel, this may prove to be a painful decision.
Shift Database Outage
Last week Shift had a database outage with a data loss of over 600 orders.
A review of 2019 and goals for 2020
A look back at my goals from 2019 and an outline of my goals for 2020.
Testing middleware behavior with controller assertions
Test your controller actions use the expected middleware with a simple assertion.
Streamlining Laravel
A proposal of the top changes I'd like to see which streamline Laravel and a the developer experience.
Updating Apache, PHP, and MySQL for macOS Catalina
Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Mojave to macOS Catalina.
Installing Apache, PHP, and MySQL on macOS Catalina
This is an update of a previous post to install Apache, PHP, and MySQL on Mac OS for macOS Catalina.
Crafting maintainable Laravel applications
10 tips for crafting maintainable Laravel applications which leverage features of the Laravel framework while remaining easy to upgrade.
Maintaining Laravel config files
A review of a recent change to Laravel Shift as it relates to a recommendation for crafting maintainable Laravel applications.
42 Git Questions Answered
Answers to 42 Git questions asked during a recent training I lead to guide a development team from git init to Git Master.
TDD, Outside-In, and YAGNI
An outline of developing a feature practicing TDD, Outside-In, and YAGNI to demonstrate the intricacies of these practices working together.
Why your team should not be upgrading old Laravel applications
Why upgrading your old Laravel applications is a waste of your resources with a pitch for Shift do it instead.
Testing the most important piece of your application
A guide for testing Stripe Checkout using Laravel Dusk to verify the most important piece of your application - accepting payments.
Testing makes me a confident developer
Tests provide confidence the code behaves as expected and confidence to refactor the code in the future.
Laravel - Some Shifty Bits
A review of underutilized Laravel features found by Shift analytics and shared at Laracon US 2019.
Lowering the time cost of testing existing Laravel applications
Ways to reduce the cost of setting up your existing Laravel application for testing.
A Shifty Email Bug
I woke up to 56 emails, 17 tweets, 9 Slack messages, and 4 telegrams. It was 7:07 AM.
Start testing your Laravel applications
An in-depth guide to using HTTP Tests to get started writing tests for your Laravel application.
Testing validation in Laravel by asserting a Form Request
An alternative approach to testing validation in Laravel which minimizes the number of tests required, while maximizing confidence.
Pricing is hard. Raising prices.
Some insight in how I price my products and services, and the reasoning behind a recent price increase for Shift.
Building Products - Building an audience
The second in a series on building products where I review steps done to grow a new audience for my upcoming product Optionality.
Jekyll to Jigsaw
Some notes on the process of converting the static site generator I use from Jekyll to Jigsaw.
2018 Lookbehind, Lookahead 2019
A look back at my 2018 dev goals and a lookahead at my dev goals for 2019.
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
Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Sierra to macOS Mojave.
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.
Lumen is dead. Long live Lumen.
Why I believe Lumen is dying and what the future holds for Lumen.
Accepting Adam's TDD Challenge
A response to Adam Wathan's challenge that isolated unit testing is incompatible with TDD.
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
Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X El Capitan to Mac OS X Sierra.
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.
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
Steps to configure PHP, Apache, and MySQL after upgrading from Mac OS X Yosemite to Mac OS X El Capitan.
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.
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.
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.
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.
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.
Facebook Places vs Foursquare
A rant on the recent competition between Facebook Places and Foursquare as it relates to intellectual property and the technical industry.
Root Cause Analysis
A rant that revisits the most important and unfortunately most forgotten component of problem solving - root cause analysis.
PocketBracket 2.0 Update with an iPad Giveaway
For this year's 2010 NCAA Men's Basketball Tournament I updated PocketBracket with a new UI and several user requested features. To build the buzz in the ever competitive app market, I'm running an iPad Giveaway.
An Active Choice: No Flash Support for iPhone, iPad
I constantly see headlines for articles that just whine about the lack of Flash support on the iPhone OS. This is my believe as to why Flash is not supported in the iPhone OS.
Routines of a good developer
A reflection on the routines I believe make me a good developer and look for in developers around me.
iPhone App: LastPlayed
A description of my recent iPhone App - LastPlayed. Including development notes, marketing strategy, future direction, and an invitation for your feedback. Complete with a shameless plug for you to download the app for free.
My Last IE6 Hack
Today I wrote my last IE6 hack, to overcome a common CSS bug, and I say good riddance to this nearly decade old browser.
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.
iPhone App: PocketBracket - March Madness
An article about the process of creating my first iPhone Application - PocketBracket: March Madness. I revisit everything from development to marketing, and the story doesn't end there.
JavaScript Tab Solution using Prototype
A JavaScript tab solution with a nice Scriptaculous Effect that uses semantic markup, CSS, and degrades gracefully.
JavaScript Accordion using Prototype
So there are several accordion solutions out there. But after reviewing a few, I created this hybrid using lean markup, simple CSS, and the Prototype and Scriptaculous libraries which degrades better than its predecessors.
The Fallout of Babel
A rant on what diversity, particularly in the development community, costs in respect to advancement.
JavaScript Cookie Object using Prototype
A Cookie class in JavaScript, using Prototype, allowing multiple data objects to be stored in a single Cookie. Class contains methods for data management and storage.
CSS Organizer and Minifier
A specification for developing a functional CSS Organization and Minification tool that can be used to manage CSS files.
"Hello World"
If you didn't guess from the title, this is my first article. What does it contain? A look back at the development of this site, of course. I outline the pieces of this site with general development tips.
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.