Writing the Jobs plugin for Redmine is the first time I've got to use some Ruby features in anger-the ability to reopen classes and throw a bunch more code inside is incredibly powerful, and means Redmine's plugin system doesn't need to do a huge amount to let you do... pretty much anything.