This code is free to use in any way... but you probably shouldn't cause it's just a learning tool.
Please feel free to point out problems, errors, or other gnarly bits - this whole project is simply a way for me to learn, so notes from passersby are more than welcome.