Why I'm planning to replace Mail-in-a-Box with a homespun IMAP and SMTP cluster
A comparison of PlantUML, MermaidJS, GraphViz, and SVGBob for use in mdbook. TL;DR - MermaidJS wins!
In Rust, dealing with polymorphic values in return position can be tricky. Here's a quick primer on the difference between Impl Trait and Trait Objects in return position.
My erratic journey into taking control of my personal finances without any third parties
Being anti-surveillance is hard to reconcile wanting to start a side hustle, but I think it's possible to do both. Here's my justification for doing web analytics on this site.
In the small to medium software teams that I’ve been on, our development cycle is inefficient and error prone at a conceptual level
Gitlab Pages doesn't provide a fully automated way of obtaining and renewing SSL certificates from Lets Encrypt. I'll walk you through some specifics so that you can use this at home.
For small websites, CloudFront can provide protection from DDoS and increase the overall availability of one's web presence; however, on its own CloudFront does not provide effective means of protecting my wallet
In many cases, combining business logic and IO can result in difficult to understand and maintain code. I'll try to convince that in many cases, separating business logic and IO can result is easier to test and maintain code.
My last day at Recurse Center, mini batch 1 2018
I'll explain how to step through a Rust application using LLDB and illustrate some of the most basic commands. This post assumes MacOS throughout. Things are probably very different on Windows, but might be very similar on Linux and friends.
Day 3 at RC, and I'm focusing on porting a sample decoder program to Rust and trying to have fun doing other things too.
Seeks, Blocks, and overview Matroska layout
Live-blogging my way towards possibly decoding a few frames from VP9 video files while at Recurse Center
In Rust, returning references from functions can be hard to master because the developer encounters Rust's novel feature -- lifetimes. I'll demonstrate the problem and show strategies for handling The Borrow Checker.
Don't spend hours pushing one change at a time and waiting for your jobs to start in CI. I'll show you how to setup Gitlab Runner locally and cut your CI debug time by an order of magnitude.
For years, Github had a near monopoly on source code hosting; but Gitlab is offering real competition. Here's why I've made the switch.
A concentrated summary of quirks and undocumented config options for the de facto file explorer, NERDTree, in Vim
I've been using Vim and now Neovim for several years, but I've never felt like I was taking full advantage of even the basic feature set. Here's my attempt to learn and record some really useful features of (neo)Vim that I should have picked up ages ago.
Getting 100% test coverage in golang can be tricky when using the stdlib. Here's a list of ways to error several commonly used builtin funcs.
A good deployment pipeline can make your team much more productive and nimble. Here's my sage advice on the most crucial overlooked features of a deployment pipeline.
If you're using Testify, getting test coverage over your AWS Go SDK integration code can be really hard. I'll show my (somewhat unconventional) strategy to cover ALL the code paths in your application.
Knowing how to write and retrieve commit messages can make refactoring and debugging much easier. Here's my advice on using commit messages for maximum impact.
Istanbul is perhaps the best test coverage tool for NodeJS, but it's tough to figure out how to get started. This post explains how to get it setup.
Handlebars is a DSL builder in disguise tempting you to create an undebuggable mess.
It's painful to watch startup after startup brand themselves the 'email killer.' This post is the real story of how to kill email.
It's a great idea to use specific ssh-key key pairs per service (or per repository even). Even if your keys are compromised, they don't allow your attacker to access any other services. Unfortunately, these services often assume you'll use the default key pair (id_rsa).
A comparison of the top content delivery networks for web content in 2014 with my recommendations. I'll be focusing on the needs for encryption and static html content.
Many RSS validators and aggregators (including Planet Drupal) do NOT work over HTTPS. If you're using CloudFront to serve your site exclusively over HTTPS, I'll show you how to configure an additional behavior to switch specific URL patterns back to HTTP.
Google and other search engines penalize content plagiarized from other sources. However, if you're using S3 as an origin server for CloudFront, you may be in danger of the duplicate content penalty! This post explains two strategies to combat this problem.
I've just setup this blog using an S3 bucket as the origin server, CloudFront as my CDN, and SSL for under $10. Since there were so many articles to read along the way, I'm gathering up what worked for me all in one place.
I've put together a checklist of some DO's and DON'Ts that I've learned that help me review someone else's code or even my own code before forking over the big bucks to a translation company.
A how-to guide on creating a public-facing menu using hook_menu(). We'll also talk about why hook_menu is so bad, 2 techniques for nesting menu items, and how to put a menu item into the menu of your choosing.
At my day job, we've been using the Domain Access module with Drupal 6 for 5 years. Recently, we've decided it's time to rethink our approach to Drupal multisite. In this article, I'll share some of ideal use cases and pitfalls for the Domain module and some alternatives for you to consider.
I'm sharing lessons learned from my experience using Drupal 6 and i18n for translation. The long story short: Make translation easier by keeping things simple. Don't use the t() when you can keep translatable strings fully in the database, and don't break up individual strings into multiple t().
I've recently started experimenting with using drush core-quick-drupal to create drupal sites strictly for creating patches to share on drupal.org. I'll walk you through my several pitfalls on the road to making this command work on Ubuntu 12.04. Hopefully, with this advice in hand, you'll be able to spin up fresh drupal instances in no time!
Drush and PHP have several commands that let you 'play' with your code much faster than you can traditionally in the browser. I only recently noticed them, and I wanted to summarize how to use three separate but related techniques to write bug free code faster on the command line.
I'll walk you through how to setup your environment and Drupal settings.php file to keep your credentials out of your code. This makes your settings.php file easier to work with in Git across multiple environments by allowing you to have different credentials for work laptop than the server. You can also keep your settings.php file under source control and even try daring schemes like chmod 644 settings.php! Read on to learn more of this trickery.
BountyHunterWine.com offers a wide selection of wine for purchase online, but their user experience leaves something to be desired. Rather than bailing on their site, I decided to articulate the problems that I encountered and try to suggest constructive alternatives to the current implementations. This post is simply the contents of that letter.
In this third and final installment, I'll walk you through some basic Drupal theme hooks that you can use to create memorable template names and inject all the data just as you need it into that template.
In this follow up post, I cover how to go about writing your own SQL in Drupal instead of relying on Views. For philosophy of WHY to do this, check out the first post in the series. I'll cover the theming functions in a third part. I'm starting from the assumption that you're already comfortable with SQL.
I've been using Views in Drupal since I first started using Drupal (and so have you!). So what's wrong with Views? In a word, Debugging. Like many parts of the current Drupal 7 (and Drupal 6) ecosystem, Views works like a charm until something goes wrong. The heart of the problem is that Views does too much. Learn about the alternatives and why you should consider them when Views become unwieldy.
This post aims to make it a little easier to understand how to read and specify ranges of IP addresses using subnet masks.
I recently optimized page load time for the Spelling Word’s Well homepage as part of a redesign. Using the YSlow Add-on helped, but I still had a learning curve to face, and I also uncovered some other tricks. Here’s a summary of the most important steps I took.
A table that walks through the features of several Drupal modules for creating responsive images.
Simple tricks for deleting a drupal site from a Linux server.
A quick tutorial on setting up two versions of php (5.2 and 5.3) on the same HostGator shared hosting account
Guide to understanding and fixing many a common php error, and php tools that help.