TL;DR: Give talented people free reins, they will amaze you.
Experimentation driven by genuine enthusiasm and playful exploration is the source of all innovation. Yet it is very difficult to find time for that in day-to-day work.
We solved this problem by organizing a hack-day where members of Alma Diverso developer team left the office for a day and worked on different projects.
The brief for the projects was simple: “create whatever you want”.
Structure of a hack day
We announced the date and the concept of hack day roughly a month before the event. Team members were trusted with finding out an interesting project for themselves and optionally teaming up with others. They were given only a small list of example projects to give an idea of what could be done, but otherwise there was no guidance.
We had a very simple structure for the day and tried to keep distractions to a minimum.
- 09.00 - welcome
- 09.02 - everyone pitches their project to others
- 09.15 - hacking begins
- 11.30 - quick lunch, pizza and coke
- 12.00 - more hacking
- 18.00 - demo session
- 19.30 - dinner
- 21.00 - sauna & beverages
TV-show recommendation algorithms with R
Our data-scientist-in-residence, Eric attempted to emulate Netflix’s recommendation algorithms where users are recommended new shows based on their history.
To do this, he took an anonymized data set from Telkku.com that contained users’ ratings for tv-shows on a scale of 1 to 5. After some normalization and preprocessing, the data was run through algorithms in R’s recommenderlab-package.
For the demo he compared the results produced by three strategies:
- totally random
- most popular tv-shows that the user hasn’t yet rated
- recommendations based on the user’s history and the tastes of his or her “neighbours” (users with similar ratings)
Perhaps a bit surprisingly, Eric found out that on average, the second approach worked “best” even though it doesn’t do much personalization. Indeed getting the recommender algorithms to work isn’t necessarily the most laborious part; the real challenge is in tuning the parameters of the algorithms so as to obtain good results. With further work it may well be possible to build a good personalized recommender.
In the picture above, the white areas represent tv-shows that are yet to be rated by users. The recommendation algorithms are used to find out whether any of those would interest the user (i.e. predict the missing ratings).
“FourSquare for phrases”
“Ever get frustrated in endless meetings? Ever get bored in seminars where speakers keep repeating same slogans and phrases over and over? Ever find yourself wondering if drowning yourself hurts less than participating in a conference? Worry no more, for now thy can say sayonara to boredom and frustration.”
Lauri set out to learn more about native iOS programming with a fun little app which allows you to “check-in” repeated phrases and become the sultan of each of them. The more meetings and seminars you take part in, the more “check-ins” you have a chance to earn.
Too bad the app isn’t quite ready yet but maybe on the next hack day we’ll hook up the prototype with a RESTful check-in API and start collecting data of recurring phrases around the world.
Social Media Wall
Together with the help of some Node.js and Angular.js magic, they created a social media feed aggregator webapp for our company communications department. This - “social media wall” - is to be used in our internal info displays at the office.
The app draws in content from whitelisted users and with additional criteria, such as specific hashtags, and finally displays the results in an aesthetically pleasing form.
One takeway - besides the point that Instagram & Twitter have nice APIs - is that while developing an app against public APIs, it might be a good idea to create a caching proxy server between the real API and your app to prevent hitting the rates limits of various APIs…
MySQL and replication can be painful. MariaDB and Galera Cluster setup with the “write on whatever node you wish”-strategy sounds many times better. Joakim spent the day setting up and testing this setup.
His experiences will later be put to use as we migrate our legacy MySQL databases to MariaDB and setup Galera Cluster for greater scalability and stability.
Continuous feedback lights / ping lights
Rami took some radio controlled electricity sockets, plugged in lights and proceeded to integrate those with Slack, our team chat so that everytime a Slack bot encountered a trigger (failed build, @mention, etc.), the light would be lit up.
This will be rolled out at our office as we go deeper into Continuous Delivery, and it will require more information about the state of our systems and builds.
Branded Flappy bird clone
They hacked it with Cocos2D, which means that it is playable from a ordinary web browser. You can try it out here.
Volume sensitive LED lamp
My own project was an Arduino based LED lamp that monitors its environment via a small microphone and increases and decreases the brightness of the LEDs based on the room noise level. I had Ville in my team and we shared responsibilites on researching how to do various things (metering volumes, filtering nonsensical values, fading the leds etc.). Both of us were quite new to Arduino so it was a nice surprise that we managed to finish a working product.
The original idea for the lamp was to be a gentle signal to tone down your voice in an open space office if the discussions got too loud. Now that the idea has become reality, the lamp actually ended up generating more noise as people wanted to see the reaction of the lamp by making loud noises near it. This very plainly demonstrates the importance of trying out ideas with quick prototypes. You just really can’t know how a product will perform or how people will behave until you try something out in the field.
In my opinion, hack days are one of the best ways to foster innovation and test one’s professional capabilities. The limited space of time forces you to prepare well, keep the project scope tight and work with minimum waste.
It’s amazing what can be done in such a short time. Take a look at the list of projects again. In 9 hours we created prototypes or Minimum Viable Products from apps, web services, physical products with embedded computing and even one game!
Genuine enthusiasm goes a long way.