Part of being a software developer is having tons of small side projects, either at home or at work. Most of them die a lonely death, but some are an unexpected success. One such success was a small tool I built over the course of 3 evenings. It hooks into the gamification hype, and doesn’t actually do something spectaculair, but it was quite a hit with the colleagues.
Part of the daily grind is interacting with our subversion repository. As we follow strict guidelines for layout of the repo and commit messages, it turned out to be quite simple to build a small (.NET) library that you can feed information about subversion commits, e.g. author, files changed etc. In the library there are a bunch of simple classes (achievements) that listen to specific information. Once the right criteria are met, the achievement is unlocked for that user. Writing and building new achievements was made pretty trivial, just add a new class that implements a specific interface and you’re done. The library does autodiscovery of available achievements and does all the plumbing.
Now with that in place, I had a list of achievements (with semi-funny names) for each user. Of course there are a zillion ways of presenting those, but I decided to put them onto one of our permanently on slideshow tv-screens. The tv setup accepts image files with exactly full-hd resolution, so that limited the options a bit. (e.g. no html rendering). Being a WPF fanboy, I gave that a look, and it turns out you can render any WPF control to a bitmap, also scaled differently. So I hacked together a little WPF app that shows the achievements on half-full-hd resolution, when the results look ok I hit a button and the layout gets rendered to a bitmap which then gets put into rotation on the tv-display for a week.
As the achievements are a nice mix between fun one, ones that promote good practice and a few ‘oops!’ ones, colleagues like seeing the weekly overview a lot. Next up is full automation, but as this is a side-project I only work on in evenings that may take a bit more time.