Generating ERD for Django Applications

Generating an ERD (Entity Relationship Diagram) can be helpful to understand what your database looks like, and is also really easy to generate if you’re running a Python/Django Application.

Step 1: Install django-extensions and graphviz

 pip install django-extensions && pip install graphviz

Step 2: Add django_extensions to


Step 3 Create the .dot output and convert to .png

Run graph_models from the environment you may normally use:

python graph_models -a >

From your mac, change the format to png using graphviz

brew install graphviz
dot -Tpng -o output.png

Django Extensions graph_models docs
Django Extensions Commands Unavailable?
Opening .dot files on mac

WordPress Plugins You Should Be Using in 2017

5 minute read

The WordPress ecosystem has matured quite a bit since the last time I spent much time with it around 2011-2012. The paid themes and premium plugins specifically are light years ahead of where we were 5 years ago. A light weight website is easy to set up with WordPress, cheap to host, and you really have a lot more control over it than what you get with a Squarespace or Wix site.

Here’s my go-to plugin protocol for any generic WordPress install that you actually care about:

1. Akismet Anti-Spam

The obligatory spam blocker for WordPress. Created by Automattic, the same company behind WordPress, Akismet is offered at a “Pay whatever you want” rate. This could be anywhere from zero dollars up to more than zero dollars. It’s up to you.

2. Child Theme Configurator

If you’re planning on doing any sort of theme editing on top of a custom theme that you’ve chosen, save yourself a lot of time and headache by installing Child Theme Configurator and creating a child theme before you just go start hacking away at your chosen theme.

Creating a child theme will allow you to keep updating the parent theme, [hopefully] without loosing any of the changes that you made. With the vibrancy of the WordPress ecosystem that’s alive now adays, and assuming you’ve chosen a theme that is actively being worked on count on theme updates being released on a fairly regular basis – at least once a month.

If you edit a theme and you haven’t created a child theme, installing updates to the theme will stomp all over your changes and it won’t be fun.

3. Free & Simple Contact Form Plugin – Pirateforms

There are a lot of free plugins to create forms, I like Pirateforms mostly because it’s compatible with my theme choice. It uses wordpress shortcodes so you can drop a form in on any page you want.

The thing I do like about Pirateforms is that the content of the forms is stored in the WordPress Admin for easy processing, in addition to sending the form content via email.

4. Jetpack by

The ubiquitous Kitchen Sink of the WordPress world – Constantly being pushed to upgrade by Automattic is not my favorite part about this plugin.

Jetpack lets you write your posts in markdown which is reason enough on its own to use. Note: _markdown support is not spectacular even when using Jetpack, but at least it’s there_ to some extent

Other features that are included for better or worse are Portfolios & Testimonials (which many themes will leverage), showing Related posts, adding sharing buttons to posts, generating sitemaps, and improved loading of images by scaling them down to size where it can.

5. Simple 301 Redirects

“Cool URIs Don’t Change”, but your thinking & information architecture sure will. It’s worth pointing out that while 301 redirects are in most cases the best way to redirect, this type of redirect is permanent, so don’t go throwing them around willy-nilly. You’ll also be pulling your hair out if you create one of these and try and update it quickly, because most web browsers will cache the Permanent Redirect and simply deliver you to where the new page was set up at – ignoring any changes you may have made after establishing the Permanent Redirect.

If you want even more control over URI management, check out Permalink Manager Lite which has a lot more features that you may or may not be interested in.

6. Updraft Plus

This is by far the most impressive plug in I’ve found for wordpress. Automatically schedule backups of your content, database, plugins, themes and send it to whatever cloud storage service is your favorite, such as Drop Box or Google Drive, Amazon S3, FTP, or even to Microsoft 👀

The paid version of Updraft plus gives you even more control over backup schedules and they have some impressive services that they offer at the paid tier to allow you to manage multiple WordPress installs – upgrading and backing them up from a single control panel. If you need to manage several WordPress installs this seems like a great way to go (although I can’t say I’m using this feature – the free version is enough for my purposes).


How is a passphrase better than a password?

3 minute read

Security at the expense of usability comes at the expense of security.1

This week, Facebook CEO Mark Zuckerberg had his Twitter and Pinterest accounts hacked. The conventional wisdom is that this stems from a 2012 LinkedIn breach where approximately 6.5 million passwords were stolen2.

Although in this case, a weak password wasn’t necessarily the cause of the incident, it illustrates that the current state of application security is extremely vulnerable.

There are promising advances being made by companies such as Yubikey. However, there is a really easy way to improve your own password security: Use a unique passphrase for each one of your accounts instead.

What is a passphrase?

A passphrase is a sequence of words, including punctuation or special characters as necessary. You could use this sentence as your passphrase. However, you’re better off crafting your own unique passphrases that you will remember easily.

How is a passphrase better?

Password Entropy3 is a measurement of how hard it is to guess your password. If your password consists of one common word, a symbol, and a number, you’re on the order of 14 bits of entropy. Let’s say you’re much smarter than that (which you are) and you’ve decided to use some common sub5titutonS, a special character, and a number… You’ve got yourself up to ~28 bits of entropy.

Your 28 bits of entropy will take 228 attempts to crack. That means 268,435,456 attempts, at most. Assuming 1000 tries per second, I’ll crack your password in a little more than 3 days.

This is where our human brains fail us, because we’re not very good exponential thinkers. What happens if we add some more words?

Simply selecting 4 common words, such as “correct horse battery staple” gets us to 44 bits of entropy, which will take approximately 557 years to crack.

A passphrase can be even longer than 4 common words: “the swallow flies from the barn at half past midnight”. We would now need to brute-force a combination of 10 common words, making this passphrase on the order of 110 bits of entropy. Given 1000 tries per second it will take 9.5 trillion x 4.3 billion years to crack.

That’s probably overkill.

The xkcd Passphrase Generator

Most of the geeks in the audience will recognize I’ve merely explained some of the math behind xkcd#9364.

I googled around for the best way to generate such a passphrase, and although there are several such generators around, my favorite is by OptionFactory. Use the xkcd correct horse battery staple password generator.

I use the OptionFactory tool to get inspiration and usually change tenses of words or make other adjustments to their recommendations in order to make the phrase more mnemonic.

Happy trails! And change your passwords.



1 AviD’s Rule of Usability

2 More on the 2012 LinkedIn Hack. If you are still using your LinkedIn password from 2012 on other sites, there is a serious chance that you could be exposed and should change your password… to a passphrase… with due haste.

3 Entropy as a measurement of password strength. If you really want to geek out you can dive much deeper into the [Information Theory of Entropy](

4 This excellent stack exchange post takes a deep dive into the math behind entropy, specifically related to xkcd#936