• Set Up a Quick & Dirty FTP Server on DigitalOcean

    A project of mine recently needed a simple FTP server that can give multiple different users access to the contents of specific directories (and only those directories). My technical requirements were stupid simple, the data I'd be dealing with wasn't sensitive, and I wanted to avoid paying for an expensive...Read It
  • Bullets, Cannonballs, and Web Components

    In his book Great by Choice, Jim Collins describes how launching new initiatives is best done by first firing bullets, then cannonballs. That is, performing small, inexpensive experiments helps companies "calibrate their line of sight," increasing the chance of success when the more substantial cannonballs are finally launched. It's hard...Read It
  • Deploying WordPress to WP Engine with GitHub Actions and Composer

    It's difficult to overstate the value of GitHub Actions in automating tasks we previously had to perform manually -- deploying WordPress sites included. Recently, I was tasked with setting up a WordPress repository to automatically deploy to a WP Engine environment whenever a commit is made to a particular branch....Read It
  • When DOM Updates Appear to Be Asynchronous

    Imagine we have some JavaScript on a page that updates an element's contents and immediately logs those contents out: After loading the page, you'd correctly expect that "updated text" will be displayed on the screen. And when it's exposed via that console.log(), you'll see the same value there too. The...Read It
  • Why I Like Tailwind CSS

    I've used Tailwind CSS for a few projects over the last several months, and it's been steadily growing on me -- to the point of it becoming my go-to tool for styling new projects. At the same time, I'm seeing a lot of people ask what all the hype is...Read It
  • Don't Feel Bad About Using XMLHttpRequest

    A while back, I began contributing to a small JavaScript library responsible for sending a POST request with some data to an endpoint. At the time, it used axios to make that request, and I wanted to simplify things by shedding a dependency. The obvious alternative was fetch -- modern,...Read It
  • When It Makes Sense to Use a Utility Function Instead of a Polyfill

    Modern iterations of JavaScript have introduced some nice methods that make writing code a lot more legible, performant, and fun to write. Take, for example, the find() method on the Array prototype, which allows you to elegantly retrieve the first item in an array that meets some condition. Features like...Read It

2 of 5