Short version: The hackathon was a great experience, especially as someone who usually works alone. I got to write tests for other people to work on, use a language I'm still learning and experience a new way of databasing. The way people worked together, even across teams, to solve problems and how other products outside of challenges were thought up and developed showed the strength of the tech community. Winning a Raspberry Pi on top of it all just made it even better - I'll be back next time!
On the 27th October 100 programmers from around the country (and even from abroad) descended on the emerging tech capital of the UK, Manchester, for a gruelling contest of coding skill, team work and caffeine tolerance. Hosted by the amazing folk at Manchester Museum of Science and Industry, still my first memories of the city as a child, the premise was simple: form teams of 1-4 developers, designers or "other" and take on a development challenge set by one of the event's sponsors.
I began on a team with my friend Ben, and whilst we'd had a few ideas regarding the challenges we could take on we took the chance offered to us by Shaf to get introduced to two other developers, Jack and Tom from the BBC. The main event organiser, the ever present Gemma gave an intro, following which the challenges, and their related prizes, got introduced by the sponsor companies. Then at 5pm development kicked off, with our team appropriately having no idea what we'd be working on for the next 24 hours.
After some time discussing our options we decided that we'd target the challenge which we had the most innovative idea for. The team at Intechnica had set a challenge based on Google's recent development of a search easter egg to identify any actor's Bacon number. Provided with data from IMDb the challenge was to achieve a similar function, only faster. Unfortunately IMDb don't exactly provide their data in the friendliest of formats; rather than some useful JSON or even a vaguely useable CSV file they provide a list with various data items about the contents incoherently spaced around them, along with a readme containing references to Acorn and Amiga systems. As we joked about other items of film related data we could analyse we happened on our eventual product, a system to calculate the largest birthday party possible on a film set, by looking at the actors featuring in each film and finding those with the same or similar birthdays.
For some reason we then named our team Monkey Diver and the product Bacon Diver. Our challenge had begun.
It was my first experience working so closely with a team; with such a short time to work we'd need to develop our own components simultaneously and build them together into the final product. Over the last year I've learned the technique of Test Driven Development, something missed out from my original programming education but something I've been working into my projects since my my initial introduction to it. TDD proved extremely useful in this context, as it allowed me to write the end processing system which would analyse our database to extract the birthday information without having that data available, and just a basic idea of how it would be structured.
At the same time Ben was working on our next information problem, finding all the actors' birthdays. Using his hobby, and favourite, language of Python he was able to write a screen scraper, rapidly collecting the data from websites which provided it. He also decided to use the NoSQL database MongoDB for the first time, as it seemed most appropriate for the data extraction we'd be performing later. Tom was researching other data sources to link actors with films and Jack was using his existing knowledge of Amazon's web services to set up web and database servers to process and serve our data.
During the early parts of the evening the MOSI team served an excellent meal of hot pot - certainly an ideal chance to introduce some southerners to it! - and necessary fuel to keep the programming going. After the meal our next "milestone" became the prospect of bacon butties at 8am, and we were into the long night.
Describing the rest of the night isn't a task I'd envy, and if you want to see a room full of programmers experience a roller coaster of caffeine, failing tests, creative features, broken compilers and blearly pair programming I'd suggest you wait until the videos from the live stream are released. Some went and slept at home, others in a draughty back room and others avoided anything less than sitting bolt upright, hands on keyboard. I got a chance for respite when in the early hours I questioned why my commits weren't appearing on the live feed and was told that the hook in use didn't work on Windows; with some pointers from Sean and some digging on Stack Overflow I found a decent solution that nearly worked.
As the dawn broke I felt that a mid-day lapse would be incoming if I didn't manage some shut-eye, so retreated to one of the side rooms. Having a choice between one of snoring and one rather cold I opted for quiet, though coupled with the shut down of the body's heat regulation that results from a long night it meant rather more shivering than sleep to start with. Eventually I'd managed around 40 minutes of dozing and decided it was time to return to the challenge.
Bacon safely (if slightly late) on board and developers arriving back from their visits home to sleep the pace stepped up and we had the vestiges of an application in front of us. We spent a stressful few hours facing our actor and film datasets not matching (highlighted when Brad Pitt failed to appear in Fight club, and it says something about my mental state that I kept searching for that film). Eventually discovering a linking set relating actors and films through the characters they played we were back on track, but time was now looming for all the teams.
Skipping forward to the end and unfortunately we hadn't managed to finish our application; we could return an actor's birthday on demand and calculate a final result from a made up sample but the middle hadn't happened because of issues with accessing the database. As the final whistle blew a fair few harsh words were said about our database of choice, but as the dust cleared I realised we'd put forward a very good effort - developers from quite different backgrounds introduced to each other just 24 hours earlier, using 4 different languages, three operating systems, cloud based servers and NoSQL databases to produce an answer to a frankly ridiculous question.
Following a well deserved break the closing awards ceremony celebrated the many achievements of the programmers in attendance; all the presented items were impressive but the star of the show were the team who's attempt at a digital Rube Goldberg machine (passing a string through as many languages using as many protocols as possible) managed to involve a QR code printer, an electronic music pad and a live tracking app just for show. We were very happy that despite the project's failure to run the team that set the challenge decided that our efforts and interesting take on the task merrited winning their prize, and we walked away with a Raspberry Pi each.
Thanks a lot to the organisers and see you next year!