Blog Posts

These are all the posts from newest to oldest. Simple enough.

On dev prod parity

Posted on Dec. 7, 2017

A piece of required reading for all developers is the Twelve-Factor App. Mastering this guide is a critical step towards understanding modern application development. All of it matters, but nothing compares to dev/prod parity. This is a post illustrating just how surprising differences between your environments can be. And how much trouble they can cause.

React, Redux and TypeScript: Typed Connect

Posted on March 9, 2017

React and Redux go well together. And thanks to a lot of hard work by the TypeScript team, it's become much easier to use the React/Redux ecosystem in a strongly-typed fashion. From discriminated unions to partial types you can practically type every part of your app. And yet typing connect from react-redux is still elusive. Read on to find out how.

Django Tip: Templates and Page Titles

Posted on April 18, 2014

The core Django philosophy is DRY: do not repeat yourself. This quick tip will save you time and headaches when writing Django templates with page titles.

Django Dynamic Admin Forms

Posted on Nov. 25, 2013

You've learned how to create dynamic forms and are using them all over the place. But when you try to use them in the admin create and change forms, things don't work quite right. Let's find out how to use dynamic forms in the Django admin.

Django Dynamic Forms

Posted on Nov. 24, 2013

Django's forms are powerful and simple to use. In most cases, you'll be declaring your fields explicitly. But sometimes you need dynamic forms, and overriding some class methods will let you do just that. This post will show you what to do.

Combining Storyboards and XIBs in Xcode

Posted on Nov. 12, 2013

You're zipping along prototyping your app using Interface Builder and storyboards. But now you want to reuse a scene all over the place. What do you do? Combine the power of storyboards and XIBs by mixing them!

Drupal 7 Read-Only Fields

Posted on Aug. 14, 2013

If you want to make node form fields read-only in Drupal 7, I'll show you an easy and safe technique to do so. Read on to find out about this method.

Drupal Custom Elements API Errors

Posted on July 29, 2013

The Drupal Form API is powerful, but very extensive and complicated. In another post we discussed how to add a custom element from scratch. Watch out for the errors and mistakes highlighted in this advanced-level post.

Custom Drupal Elements for Forms

Posted on July 9, 2013

One of the most cryptic tasks in Drupal is defining a custom form element. That is, defining your own element types to be used and resused in your forms. This post will walk you through the basics. And there's no better way than to learn by example.

A Smarter Django URL Tag

Posted on July 1, 2013

Django's built-in url tag is very useful. Repeating yourself goes against Django's philosophy, and the url tag helps you avoid that pitfall. But there's plenty of room for improvement. This post will show you how to make Django's url tag smarter and more useful. Note: this post applies to Django 1.5 and above. Earlier versions of Django use a deprecated syntax.

Advanced Drupal 7 Form Element Theming

Posted on Feb. 28, 2013

Ever wanted to give form elements a custom look? Theming entire forms is straightforward, if laborious. But theming individual textboxes, checkboxes and radio buttons is slightly more obscure. Keep reading to find out how to fully customize your form elements, from the input itself to the label.

Advanced Fabric Usage: Tasks Between Servers

Posted on Dec. 27, 2012

Fabric is an excellent tool you can use to deploy your sites and projects to servers. Though it's written in Python, you can use it to deploy just about anything. Typically, the Fabric execution model revolves around a remote server, and your own local machine. But what if you want to perform an operation between two servers? This post will show you one approach.

Getting the Last Element in a Bash Array

Posted on Nov. 22, 2012

A quick rundown of how to split up a Bash string into an array, then get the last element. Very useful to get the last part of a directory path, an SVN checkout, etc.

Fixing Site-Wide Caching in Django

Posted on Sept. 18, 2012

Caching in Django is elegant and simple, especially the site-wide cache for anonymous users. But if you use Google Analytics and other external cookies, it might not be working the way you intended. Read this tutorial to find out how to make your site as fast as it can be.

Custom Autocomplete Path on CCK Node Reference Fields

Posted on Sept. 3, 2012

In a recent post, I explained how to dynamically alter the AJAX behavior of an autocomplete field in Drupal. But what if you have the similar node reference field, and want to modify the result set? This post will show you how.

Optimizing Drupal Views the Right Way

Posted on July 23, 2012

The Views module is one of the most impressive features Drupal offers. With some clicks here and there, you can build a rich display of data in minutes. But to offer this kind of flexibility, Views makes some assumptions that can hamper your site's performance. In this post, you'll find out how to improve performance dramatically.

Changing Drupal's autocomplete path with JavaScript

Posted on July 18, 2012

Ever had an interface that needed an autocomplete field? Happens all the time - and Drupal makes that task trivial. But what if you need to change the autocomplete URL without reloading the page? Use these steps, and you'll find out how to do so with JavaScript.

Drupal 6 and Memcached on MAMP 2.0

Posted on June 3, 2012

Setting up Drupal 6 to use memcached is anything but trivial. There are plenty of instructions out there, but many of these are for MAMP 1.x, or involve MacPorts. This post will show you how to quickly set up memcached locally. Best of all, this guide will leave your system ready to install other PECL extensions quickly.

Making CCK fields read-only in Drupal 6

Posted on May 14, 2012

Once if a while, you want to make a CCK form field readonly in Drupal. Unfortunately, using form alter + disabled will not work. This post will show you what to do.