Please see the updated version of this article. On GitHub you can still find the original version.