Developer's guide by Dan Liew, with a few changes from me.