I’ve been a full-stack developer for over fifteen years and I love teaching people new things.

  • . (02 February 2015). A common problem with an even more common solution.

  • . (27 January 2015). For many server-side projects that are designed to work with outside resources at the command line level, curl is a tool that I often have to use. This is especially true when I am writing programs in C that are designed to be used specifically with internet resources. In this…</li>

  • . (27 January 2015). In this tutorial, we’ll develop a script that will get all the IP addresses blocked by fail2ban on the ssh chain and then add them to an ipset that will be automatically blocked by iptables. Talk about power traffic management!

  • . (24 January 2015). These days I’m doing all my development work on a Chromebook. Since the majority of my projects involve Apache’s CouchDB, I need a local instance up and running. In this tutorial, I’ll walk you through how to install CouchDB from a Ubuntu command line and enable CORS manually (by editing…</li>

  • . (23 December 2014). When we want to access our database from within our code, we can generally put calls to our database right there within our application. In the world of Single Page Applications (SPA), though, to access a database like this would be absurd; since we store the credentials within our code,…</li>

  • . (30 August 2014). A few clients were experiencing problems in the media uploader on their sites. When trying to upload something in the Media Uploader, they were getting errors like:

  • . (22 May 2014). As I’m designing a CMS-like system in AngularJS, one of the things I find myself needing to do is create simple HTML pages stuffed full of content. What I don’t want to do is create a new partial view and add it to my route for every page that I…</li>

  • . (13 May 2014). Here’s a copy of my automatic nightly backup script, which cycles through a list of clients, dumps their MySQL DB, ZIPs their WP files, and pushes the backups out to s3 while maintaining a daily.zip backup on our local system.

  • . (01 May 2014). Setting up your AngularJS development environment needs to include SEO best practices. For JS-rendered applications, take a look at this solid solution using PhantomJS.

  • . (29 April 2014). If you’re trying to install a package via npm and you’re getting an Error that says “no compatible version found,” then chances are you need to update your NodeJS package.

  • . (04 April 2014). If you’re using ng-include and your partials aren’t showing up, you probably forgot that the location of your partial needs to be encapsulated in both double quotes and single quotes. Instead of this:

  • . (31 March 2014). Warning: you’re about to install node.js and an http server in less than twenty seconds.

  • . (30 March 2014). We use s3cmd to communicate with our backup servers and some of our development environments. Setting it up couldn’t be easier.

  • . (30 March 2014). Let’s talk about backups.

  • . (19 March 2014). If you want to give your web hosting clients SFTP access to specific directories (probably their sites, right?) while keeping them chrooted (jailed) into their home directory, then read on.

  • . (25 January 2014). A good server admin will be scrubbing her logs constantly. Whether you do this automatically or by hand, there is one thing that is a sure sign of malicious behavior: the ol’ “they forgot to delete that file” trick.

  • . (15 January 2014). To piggy-back off of the third preventive control in increasing security against bad bots and spam, you can quickly block traffic with an iptables entry that utilizes ipset.**

  • . (09 January 2014). Periodically, log files should be scrubbed for bad bots and malicious IPs. Let’s do that.

  • . (09 January 2014). If you’ve ever rebuilt a server that you have connected to in the past, chances are you’ve received an error when trying to ssh back into it for the first time since the rebuild. If you’re getting a screen that says “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”, the workaround is…</li>

  • . (20 December 2013). In Part I of this WP Engine Hotfix, I discussed some of the theory behind WP Engine’s visitor calculations and how end-users of WP Engine could benefit from taking charge of their traffic themselves. In this next part, I’ll discuss ways to log your visitor traffic, scrub that traffic for…</li>

  • . (01 December 2013). A few developers were asking why their localhost instances of WordPress were asking for FTP credentials when trying to install new plugins and themes. If you’re getting the dreaded “Please enter your FTP credentials” page and you’re running XAMPP for your local WP development environment, do not follow the popular…</li>

  • . (30 November 2013). One of the problems with moving your site from one domain to another is that the images in all your posts are still served from the old setup. In order to fix this, you need to run a simple MySQL command that will search through all your posts and replace…</li>

  • . (29 November 2013). I’ve been working on some optimization problems this week and one of the things I wanted to share with you is the difference between Lawsonry with optimization plugins and Lawsonry without optimization plugins. This is a good site to benchmark text-heavy sites, as results for sites that intensively serve images will no doubt…</li>

  • . (05 November 2013). Here’s a quick tip if you’re on Nginx with multiple WordPress installations in a sub-folder of your main WordPress and you want pretty permalinks to work correctly.

  • . (28 October 2013). I’ve been trying to configure a subdomain on a WPMU install that runs on Nginx that is not part of the WPMU network and have ran into nothing but problems. In this post, I discuss some of the problems I ran into while trying to setup non-WordPress sub-domains alongside a…</li>

  • . (28 June 2013). Easy Author Image gives you the option do you exactly that — easily add an author image to your profile page. Once you install this plugin, you’ll have a new option in the Your Profile tab (under Users) called Profile Picture, complete with a media uploader box that allows you…</li>

  • . (24 June 2013). In this tutorial we’re taking the custom author image function we created and turning it into a custom About the Author box in WordPress. If you haven’t already done so, go through the custom author image tutorial and follow the steps involved in creating our custom author image function.

  • . (24 June 2013). Do you want to keep articles up and running but omit them from queries? Here’s a quick way to exclude categories from every loop on your site.

  • . (24 June 2013). Over on the Hacks forum at WordPress.org, user Manwoll was looking for a way to add drag-and-drop functionality to a contact form in WordPress. Not a fan of commercial contact form products myself, I sought out a method of doing this that would most accomodate a theme developer who is…</li>

  • . (24 June 2013). p>When I worked for an online newspaper, we put a customized header image at the top of every category page sort of like how NYTimes does it for their blog pages. These days, it’s a lot more attractive to use custom CSS styles for each category. In this tutorial, we’ll…</li>

  • . (24 June 2013). I don’t like using Gravatar — or any third-party service for that matter — for my author profile pictures. For me, having control over where the images come from and how they are displayed is important, so I wrote a custom function and came up with a simple system for…</li>

  • . (24 June 2013). Are you looking for a way to use the author’s image as the default post image if no post thumbnail is set? Here’s a quick and easy function that will do just that.