I had only one concern with regards to this the tutorial.
When I first started to read it, I read around the code (saving it for later, because of its apparent size), and my first thought was that the content I had read was rather weak (and slightly disappointing, for it is a topic I have wanted to learn more about for some time), jumping from the basics to further exercises with little in-between. Then, I noticed the abundance of comments that appeared in the code listing, and began to wonder, and started to read the code, finding there the meat of your tutorial.
I applaude the commenting and explanations there, but would suggest that perhaps either a quick mention of what functionality is used within the code, or simply that each section of the code contains comments regarding the functions used there, so others do not dismiss it for the same reason.
My thanks for your time in preparing this tutorial.