I wrote it a long time ago when the canvas tag had just appeared and I was curious how it worked.
You can try it here. (Warning: flashing colours ahead.)
Disclaimer: the code reflects by no means the standard of code I write today. Unless you think it's great, in which case it definitely does.
Bugs or contributions