Blog

I share bite-sized insights, tips, and tutorials on DevOps, Software Engineering, Web Development, Linux, and more, out of my continuous learning journey

I hope that you find something that helps you on your own journey


  • My Personal Monorepo & Pipeline

    I monorepo'd (can we verb that?) my personal projects. Here is how I did it, and why, and how you could approach doing the same thing.

  • Deploying a Simple Rails App with Ansible

    Ruby on Rails is quickly becoming my framework of choice for my personal websites and projects. It's a pleasure to work with and has been easy to learn. But no framework is without its challenges. One of those challenges is of course deploying the app to a server. There are a lot of options for hosting and deploying a Rails app. But, I like to run my own servers which means I have to also take care of deploying to those servers. I'd prefer to be deploying images to AWS ECS but I don't need that kind of infrastructure for my personal website. It's just a blog it can suffer seconds of downtime when I deploy updates. So my approach these days is to use Ansible to handle the deploy steps.

  • How to Run Rails App Server with Systemd and Ansible

    Create a systemd service to run your rails app server.

  • Simplify Terraform By Generating Configurations

    Terraform is an awesome tool. To make it more awesome though we have wrapped it with some custom Ruby ERB templating to generate our terraform configurations from Yaml configurations.

  • Ugh 2020

    I am exhausted. Anxious. Stressed. This year has been a real test and I am done with being tested. The planet spun on and will make another revolution around the sun. For that I am grateful. But good fucking riddance to 2020.

  • Welcome, again, to my development blog

    Hello and thank you for checking out my not-a-blog blog. I mostly share tips and how-to's about web development, Sysadmin/DevOps, and other technical/development things

  • Doing that DevOps thing

    My first year at Blackbird has been good. My main goal in my first year was to migrate the monolithic system and infrastructure into something more scalable and reliable. Well this week was the week and we did it. We moved the last of the services over without any issue. I am grateful that I had the support I did and the team I did. I have learned an incredible amount from them. And ultimately, we killed it!

  • Profiling and Debugging a PHP app with Xdebug and Docker

    I have started using an IDE again (PHPStorm) so that I could debug some applications and do some basic app profiling. I want to use Xdebug to profile my PHP apps. I am using Docker Compose on Windows 10. I have made this very complicated for myself but here we go.

  • WP Transients must be used responsibly

    We ran into an interesting issue with WooCommerce at work. First, here is the subject of the support request we got from our hosting provider

  • Development on Windows

    It has been a few months since I got a new laptop with Windows 10. For the most part it has been pretty damn nice. The UI is pretty good, the native apps are not terrible, Cortana is actually useful. It's fine, until I want to do web development. There are all of these little things that get in the way, all of these little compromises. Beware, rant coming up..

  • Order Posts via "Weighted Pseudo Randomness"

    A request we are getting more often is to show a list of posts, to elevate some of those posts above others, and to show the posts in a random order. Imagine a post type called "Sponsors". Sponsors are tiered, like "Platinum", "Gold", "Silver", etc. We want the Platinum sponsors to appear before Gold, Gold before Silver, and so on. We don't want to favor one particular Platinum sponsor though, we want them to be randomized but ordered by the tier.

  • Regular Expression of the day

    (?!(([1,2,3,4,5,6,8,9,0])\2{9}))(?!((1234567890|0987654321)))(((\+?\d{1,2}[\s.-])?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4})|(\d{10,}))

  • Technical Documentation for a Web Development Project

    Working on a large web development project requires that you have clear direction and good technical documentation. The designer needs to understand the functional requirements and the data model in order to deliver a successful design. The themer need to understand the UI/UX spec in order to deliver accurate and functional markup. The developers need to understand the functional requirements and data model in order to build out the CMS backend. Creating these documents, as a team, will help guide the project to success.

  • TLS Peer Verification w/PHP 5.6 and WordPress SMTP Email plugin

    We ran into an issue after upgrading from PHP 5.5 to 5.6. We were no longer able to send email via the awesome WordPress SMTP Email plugin. Turns out that PHP 5.6 introduced some enhancements to its OpenSSL implementation. Stream wrappers now verify peer certificates and hostnames by default. This was causing the form submissions on our site to fail. Clearly there are some issues with our Postfix config and certs. While we sort out those issues, we were able to "solve" our immediate problem, and disabled peer verification in the plugin without editing core files. Thankfully the plugin developer included a filter that would allow us to modify the options array that is passed to PHPMailer.

  • Whitelist IPs in Nginx

    I want to whitelist my clients IP addresses (and my office IPs) to allow them to view a site, while the rest of the world will be redirected to another site, using Nginx. My Nginx server is behind a load balancer.

  • Capistrano tasks for Magento

    Custom tasks for Capistrano that I am using to help manage a Magento website.

  • Setting up Git HTTP Backend for local collaboration

    You want to share a topic branch with a colleague but do not want to push that branch upstream to Github/BitBucket/GitLab, etc. How do you do this? You could create a patch and email it. Or you could do it in the most crazy way possible and use Apache and allow your colleague to pull from your repo directly. This does take a bit more time to setup, but it would also be absolutely crazy dumb for everyone involved. Basically, let's setup a git server on your workstation!

  • Enable status for php-fpm

    Accessing the PHP-FPM Status screen is easy enough. First, enable pm.status in your php pool:

  • My Pantheon + Jenkins Process

    Here is a rough outline of my Pantheon + Jenkins process. I like my code in BitBucket. I also like Pantheon (check them out). The Pantheon workflow is all about being the source of truth for your code. This is fine, and actually I dig it because it promotes good practices. However, I, and my company, have many projects in BitBucket already, and am using Jenkins more and more for some Continuous Integration functions. We want to keep using BitBucket as our source of truth and our existing workflows, but also want to use Pantheon.