http://valerieaurora.org/hash.html