Brilliant.  Thank you.  So it sounds like Canny is unnecessary.   I 
wonder why Canny was created.

By the way, can I get that same functionality from Ruby and Ruby on Rails?