Hackathon: play is good

All work and no play makes Jack a dull boy. I love a good movie reference, every now and then. I also like playing with the stuff that I do for work; as with most developers, the programming job grew out of discovering these things when I was younger, ultimately deciding I was good at it and trying to find work doing it.

Fast forward a decade and a half from those initial moments: I’m playing less and working more, when it comes to programming, but I still learn stuff. Sometimes it’s just a side effect of trying to build things, sometimes learning
something is the goal of reading a book or following a course, and sometimes just fiddling around with some technique or tool adds up to your knowledge. For the latter, hackathons are usually an ideal opportunity, so it’s no surprise that every now and then, at SIMgroep, we block a couple of days to have a bit more play and a bit less work.

Hackathon at SIMgroep

Our most recent hackhathon saw us divide up into a number of small teams and trying to build something, or at least a proof of concept of something, that we thought would be interesting, fun or useful. The ideas for the things we built came from our own interests or annoyances; they were techniques we wanted to work with, or simply matters we wanted to improve upon.

Service uptime checks

For instance, our ops team took the opportunity to try and create a better solution for measuring uptime and server statuses, based on our very specific websites and applications. Sure, there are loads of uptime status solutions, but none of those are tailor made for us and if you’d want to use them on a lot of services, they cost more to use (we have hundreds of websites and services for a lot of customers, so it adds up quickly). So it made sense to look for a custom built solution. The team were able to build something that enabled them to configure checks and filters, leading to alerts and logs, and it looked quite impressive in their final presentation.

Search crawler optimization

Another team worked on getting our search crawler (which is open source, by the way) to perform a little bit better. We have our own specialized search backend, which we fill with data using this crawler. We have a lot of data, however, in the form of PDF, Word and other types of documents. These documents, sometimes containing confidential data, usually come from document management systems and are imported into our own systems by specialized import processes. They are used as attachments for council meetings or as background for publicly disclosed information. As most of our customers are local governments, it makes sense that there’s a lot of documents, intended for either informing the public about goings on, or for our customers directly, who want to access these documents through the web or our mobile apps.

What the team did was figure out a way to split our search queues into a ‘fast and light’ one, and a ‘slow and heavy’ one, so the scanning of heavy data doesn’t influence the speed with which we can have the lighter data (new pages on the websites, for instance) show up in the search results. It was a nice little exercise, and in the end it’s just a development that could have been planned in a sprint (which actually happened after the hackathon), but as a learning moment, it was useful.

Please talk to me

Would you like to talk to your application? We’re used to talking to our phones, asking it to do stuff for us (at least I am; Siri is my personal slave), but can we build conversational functionality into our own applications? As it turns out, we can. One of the hackathon teams devised a way to reserve meeting spaces using HipChat as an interface and Wit.ai as a backend.

The end result, while not actually connected to our actual meeting system (for more on that, see below), was that people could talk to a chatbot inside HipChat (a chat service that is like Slack, but it’s not actually Slack), and ask for an available room to be reserved at a specific time. It even asks for how many people you want to meet with, creating the possibility to even invite them (although that wasn’t part of their demo, I could see it going that way). The interesting thing about Wit.ai is that you can teach it what information you need and define it through example phrases. For example, “I need to meet with four people tomorrow at 9AM” contains information about the number of people and the date and time, but not the length of the meeting. Would you have said “I need to meet for an hour with four people”, it would have known. Those variations can all be combined and defined, and Wit.ai will ask for any information it is missing.

Is this room available?

The team I was in took it upon itself to manage our meeting rooms a bit more user friendly than is currently the case. We have around six rooms, which can be booked by choosing them as locations in our calendar software. These calendars are hosted in an Office365-environment, which exposes a lot of its information and actions through an API. What we wanted to do is to fetch all the bookings from the rooms and display them on a screen (like a tablet) next to the entrance to each room. This screen could then also work as a quick tool to book the room. For this, we needed to figure out how the API works, what we can and can’t do with it (among the things it can’t do: supply us with the bookings for a particular room — exactly what we needed), and build an interface to manage the information. It was an interesting opportunity to learn how the Outlook Calendar API works, and to build a frontend in React. We’re fairly new in frontend javascript frameworks; we started using AngularJS in 2015 and now we’re slowly looking at what else is available; React has our particular interest and this small ‘meeting room app’ was an ideal opportunity to get our feet wet.

Play becomes work

In a previous hackathon, all the teams worked together to create a new product for customer service centers. That product is now actively being developed and already getting positive early feedback from customers. This shows that sometimes, play is good for work: it helps get the creative juices flowing, it’s a nice change of pace, and it might open up possibilities for
actual usable products to be built. I’m already looking forward to the next time we get to play.