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