This past weekend, I decided to take a trip down memory lane and take a look at the evolution of this blog’s design over the years (with a little help from the Wayback Machine). While I’ve really enjoyed the challenge of making an obsessively backwards compatible blog these last few...
As I prepare to take my terrifying leap into hackademia, I’ve been freelancing a lot more lately—both as a way to freshen up some of my more rusty skills (Directing leaves little room for slinging code or technical writing), and as a way to offset some of the lost income...
A while back, I wrote about a Jekyll plugin I created that cross-compiles all of my blog posts in plaintext (you can see it for yourself, just click the txt link at the bottom of this or any other post). It was a fun experiment, and allowed me to not...
Eight years ago, I published an open source implementation of the command pattern for Laravel called Eloquent Interactions.
As mentioned in last week’s Sunday Reboot, I’ve recovered a few of my old posts from the Wayback Machine—all from my time at the now shut-down Fixate.io (via their blog, Sweetcode). These are all freelance topics, so the style of writing is a bit different than normal (for me, at...
As mentioned in last week’s Sunday Reboot, I’ve recovered a few of my old posts from the Wayback Machine—all from my time at the now shut-down Fixate.io (via their blog, Sweetcode). These are all freelance topics, so the style of writing is a bit different than normal (for me, at...
As mentioned in this week’s Sunday Reboot, I’ve recovered a few of my old posts from the Wayback Machine—all from my time at the now shut-down Fixate.io (via their blog, Sweetcode). These are all freelance topics, so the style of writing is a bit different than normal (for me, at...
As mentioned in this week’s Sunday Reboot, I’ve recovered a few of my old posts from the Wayback Machine—all from my time at the now shut-down Fixate.io (via their blog, Sweetcode). These are all freelance topics, so the style of writing is a bit different than normal (for me, at...
As mentioned in this week’s Sunday Reboot, I’ve recovered a few of my old posts from the Wayback Machine—all from my time at the now shut-down Fixate.io (via their blog, Sweetcode). This is the first of those posts, which I believe was originally written for VictorOps but ultimately scrapped for...
About 13 years ago, I published a post on my blog titled How to Compile Envy MUD (while my archive page has it listed as the first post, it’s actually just the oldest one I’ve retained after years of prior publishing). While the process of compiling Envy MUD (or EnvyMUD)...
I did it.
Well, I said I’d figure it out, and I did.
You ever have an interesting problem drop in your lap that you just can’t let go of?
Alright, so I’ve re-kicked off this #100DaysToOffload challenge, and despite the fact that it’s only been like 2 days, I’ve remembered just how tedious counting the posts can be. I mean, I’ve gotta open my last post, copy the challenge footer, paste it in the new post, increment the counter…...
I’m a little obsessive about backwards compatibility on the web, and one thing that can be particularly sticky are image formats. While I know that GIF is the most widely supported format across both space and time, I wanted to better understand what is actually available across the wide-spectrum of...
In this blog post series, we’re diving into Mayhem’s top common weaknesses enumeration (CWE) finds. A Common Weakness Enumeration, or CWE for short, is a list of software and hardware patterns that can lead to vulnerabilities and other weaknesses. One such CWE that is both fairly common and possibly unexpected is the reachable...
I hate interviewing.
This site doesn’t have a favicon, and it likely never will.
I’m not ashamed to admit that I don’t usually contribute to open source as a way of giving back to the community for everything it has given me. Don’t get me wrong, it’s a great side effect, but the reason that I do it is because it makes me feel...
Heroku’s been taking it on the chin lately for their response to what looks to be a pretty-damn-serious security incident—and for good reason, because their communication about the whole event has been abysmal.
I love Laravel.
Let’s face it: the internet is broken. It feels like so much of the web is composed of clickbait, ads, popups, and a toxic amount of JavaScript that you need a modern computer just to get any value out of it. Remember when low-power computers were created for people who...
A postmortem is the analysis of an event after it occurs. When an issue is encountered in a production environment, a postmortem is an important process that lets us reflect on and learn from our mistakes so we can improve our process and prevent them from happening again in the...
This webbed site now supports dark mode!
I’m a huge fan of shortcuts.
Nobody ever said it’s easy to write clean code. Successful software development isn’t just about making software work; it’s about making sure it will continue to work. While hardly an exciting objective, code maintainability is one of the most important elements of any application.
A few years ago, I checked off an item on my Open Source Bucket List when I pitched—and ultimately contributed—a brand new feature to HashiCorp’s Vagrant: command aliases. While aliases have been a core Vagrant feature for some time, there hasn’t been a lot of coverage about what they are,...
I’ve never been a particularly confrontational person. In the workplace, I would much rather maintain good relationships with my coworkers than engage in endless debates over something that ultimately doesn’t benefit the product or the team.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live — John Woods
Raise your hand if you’ve ever read a README file. Now, keep that hand raised if you’ve ever written a README file. I’m going to take a shot in the dark and assume that your hand is still raised; at least, it’s raised in spirit, since you probably refuse to...
As developers, we like to think of source code as a recipe. All the steps are written out, so understanding code is as simple as reading those steps. But that’s not the way it really works, is it? Programming is an art form, and programmers each have their own unique...
A couple years ago, I was working on a monolithic Ruby on Rails codebase that was fast approaching unmaintainability. In a month-long sprint of desperation, we hit the books and decided to come up with a plan. The solution to our problem arrived in the form of ActiveInteraction, a Ruby...
Let’s get this out of the way first: Magento is by far the single-most inefficient framework I have ever had the displeasure of working with. While I’ve made a similar statement about Craft CMS in the past, after a week working with Magento 2 I happily rescind my earlier Craft...
When it comes to running a multi-user dungeon, having to enforce rules is the worst. It’s a game, and most people are there to have fun, but from time to time every game encounters cheaters, trolls, and rule breakers. While banning these toxic users can seem like the easiest solution,...
I am not a fan of Craft CMS. Despite its relative popularity, it leaves a lot to be desired by way of resource management, requiring at least 2GB of available memory in order to function efficiently. While there are a lot of reasons for this inefficiency, one of the biggest...
Many development agencies refuse to inherit already built projects, and earlier this year, I found out why. The most dreaded part of any developer’s job is dealing with “legacy code.” While legacy code is a near inevitability in most tech companies, understanding and maintaining it is time consuming and costly....
Last week, I had an interesting chat with a peer about the difficulty of finding a balance between using established standards and building proprietary solutions within development projects. Personally, I’m an advocate for utilizing established third-party solutions whenever possible as a way to reduce new developer onboarding time and increase...
As a developer, I’m a huge fan of continuous integration. For the uninitiated, continuous integration is a software engineering practice in which code changes are tested as soon as they are committed. This enables early problem detection. It also provides immediate feedback on code quality, allowing for issues to be...
You know the contributions calendar grid on GitHub profiles? The one with all the pretty green squares? What if you could write a message within that box? That’s exactly what a friend of mine asked me a few months ago. At first, it seemed like a silly question, because even...
An uncomfortable majority of companies that offer high storage limits for specific file types have a major problem: MIME type validation isn’t good enough. If you’ve ever had to implement file validation for user uploads, you’ve probably relied heavily on MIME type validation to ensure that the files you are...
I’m a huge fan of SequelPro, a Mac OSX application that provides an incredibly easy to use GUI for managing MySQL databases. Unfortunately for me, I’ve spent the past year working on a project with a Postgres database, so my easy-as-you-please SequelPro days are pretty much over. Thankfully, after about...
CloudFlare. Laravel. Heroku. Despite being the keywordiest article title I’ve ever written, I really did have to solve this exact problem recently, and it took me longer than I’m proud to admit. Let’s face it: SSL is a pain in the ass. At least it is when it comes to...
As a freelance developer, I am occasionally asked to audit projects that have had the majority of development outsourced. While outsourcing isn’t an intrinsically bad thing, managing an outsourced product requires you to walk a very fine line between “bootstrapped” and “cheap.” The Code No two codebases are the same,...
Full stack deployments are a relatively new concept to me. At first, I was confused as to why you would redeploy the entire stack every time, rather than just the code. It seems silly, right? My brain was stuck a little in the past, as if you were rebuilding a...
Automated Continuous Integration (CI), at a high level, is a development process in which changes submitted to a central version control repository by developers are automatically built and run through a test suite. As builds and tests succeed or fail, the development team is then aware of the state of...
What exactly makes a “good” API? That is a question a lot of developers ask when designing their first API. While there are hundreds of resources online, all with differing opinions about what defines “good,” the majority of them share some similar themes. Logical endpoint naming conventions, clear error messaging,...
When starting a project, working as an individual developer provides a level of development freedom that can get quickly complicated when it is time to grow the team. Once you expand to multiple developers, it is critical to maintain a well-documented and structured development environment. In a poorly architected environment,...
Vagrant is an amazing tool for local development, especially in the case of distributed teams. It allows for complete parity between every team member’s development environment without forcing anyone to follow a complicated list of environment setup steps. Vagrant’s plugin support is also excellent, as it provides for further automating...
Running CodeIgniter controllers in the command line is a surprisingly easy thing to do, but for the novice, it can seem a bit confusing at first. If you want to skip the tutorial, here is how you run any CodeIgniter controller in the command line (run the following from the...
A Binary Search Tree is an ordered binary tree that has the following rules: The left subtree always contains nodes that have a value less than the current node. The right subtree always contains nodes that have a value greater than the current node. Each subtree must also be binary...
Continuing on my job interview study session binge, the next two data structures I have built using PHP are the traditional queue and stack. In computer science, stacks and queues typically go hand in hand, however they are opposite implementations of each other. A queue is a first-in-first-out data structure....
When interviewing with tech companies, there are a LOT of questions involving anagrams. While there are many different approaches to solving these questions, here is a simple one-line function that can determine whether or not two strings are anagrams in PHP. This approach utilizes the built-in PHP function, count_chars(). When...
For the past few weeks, I have been going through the process of applying and interviewing with some amazing companies, the most exciting of which has been Facebook. Interviewing with Facebook has been an incredible experience which has challenged my knowledge of software development and computer science in so many...
I’m a big fan of Git. It is a super easy-to-use version control and source code management system. Before I came to Git, though, I used Mercurial, and there were two commands that I missed. Through a lot of Googling, I came across two Git aliases that have changed everything...
Note: This post assumes that you already have Tor installed and configured on your server. If not, visit the Tor Project Homepage for instructions on how to set it up. I love writing web crawlers and data aggregators in PHP. They say knowledge is power, and I find it exciting...
For the past year, I have been an adamant CodeIgniter developer. The one thing that I have found lacking, however, is CodeIgniter’s model class. I am a big fan of the simplicity of CakePHP’s ORM structure, and wrote this model class to (slightly) mimic it. Some of the functionality in...
I have always been fascinated with MUDs, also known as Multi-User Dungeons. They are the World of Warcraft before there was a world to craft war in. It’s an interesting mesh between computers and Dungeons and Dragons. Imagination is an important factor, and from my experience, they are a great...