Visit gskinner.com/blog for more experiments and source code.