It's that time again!
Black Pepper's bi-annual internal hackathon was hosted this year on the 6th June, giving the team of developers a chance to go head-to-head in software battle. Ranging from experimenting with new and exciting technologies, to shoring up on existing skillsets, learning and fun were to be had.
The competitors had spent the last few weeks working out exactly how they wanted to spend the afternoon of hacking. As noon (and more pizza than you can shake a stick at) came around, the participants piled in to the breakout area, excited by what mysteries the afternoon would hold.
Our master of ceremonies, Simon, enthusiastically welcomed us and laid out the plan for the afternoon. In short, this was to code on whatever project we wanted, using whatever technologies we wanted until close of play (or even later in to the night, if that's your thing). The following day, each team would demonstrate and try to justify whatever weird and wonderful thing they'd made, in a desperate attempt to win not only Amazon vouchers, but the acclaim and admiration that comes with any Black Pepper competition.
Rundown of ideas
To start, Simon went around the room, asking each individual what their idea entailed, and how they were planning on creating it. This was a chance for each hacker to advertise their creative genius before even writing any code! And wow, there were a lot of ideas:
Getting us started was Rhys. Fresh from qualifying as an AWS Certified Solutions Architect, he pitched his idea to integrate Amazon's image recognition services to Slack. This was with the goal of identifying and notifying users when rogue pictures of them are uploaded, allowing blushes to be spared company-wide.
Next up, Matt posed his plan for a Strava-integrated Blue Plaque route finder, allowing the cycling-addicts to choose scenic routes around local points of interest as they fly around town, nourishing their mind as well as their body.
Nick H had found some thermal probes around from a previous project, and as per his hardware-hobbies, decided to embark upon using a micro controller to fetch and store temperature readings, which could then be used in a larger overall system.
Giles had purchased a kit from Pimoroni to convert his Raspberry Pi to a roving rover, featuring a camera for remote control! Simon expectantly tagged 'to fetch beer' in to the plan, which was met with positive murmurs from the gathering.
Quickly following this, Ash piped up with his idea of a Slackbot to recommend local places for team lunches and beer. A great way to prevent arguments about where to go for food and drink! A stretch goal of stitching this together with Giles' hack could lead to us never needing to move to fetch food again...
Mark's idea was to utilise some machine learning and genetic programming concepts to provide a computer with the tools to implement its own solution to a suite of JUnit tests. By writing a complete suite of tests and a method signature, Autoimplement (the name of the project) should come up with a solution that works.
Simon suggested trying out the Ionic mobile app framework to create a copy of our current sign-in app, as a fun way to dive in to a technology he had limited experience with. Ryan joined in on this idea, trying out Flutter (another mobile application framework) to also recreate the sign-in app. This provided a great opportunity to directly compare these toolsets and show what each is capable of in a short period of time.
In a similar pattern of more mobile development, Ian suggested an SOS app to call out to nearby users when someone is in need of help. The plan here was to develop natively for Android, and use a handful of Google services in order to get geolocation data and notifications working.
Finally, Nik M came up with an idea to use React and SVG animations to create a simple game. This provided a chance to work closely with one of the most popular front-end frameworks outside of a project situation, and to make a game without using a dedicated games library.
Once we had eventually gone all the way around the room (10 projects?! Is this a record?) any stragglers jumped on a project (in my case, Autoimplement), and we settled down for the afternoon ahead.
Time to hack
Throughout the following hours, the Breakout room was filled to the brim with developers, junk food and high spirits, only occasionally punctuated with the occasional whoop of delight (but more often than not murmurs of confusion). Progress was undeniably being made by all parties, though everyone was focused and didn't give too much away about exactly how well their hacks were going. Well, save Giles and his robot, as it is a bit harder to hide your progress when it is driving around on the floor in front of you.
Whiteboards were slowly being filled, as the Autoimplement team, who had decided to try and automagically implement a calculator, enumerated the different valid mutations and crossover patterns to keep their RPN trees valid. Stronger together than alone, the two mobile framework experimenters Simon and Ryan collaborated as the hours passed (and pulled in Theo to provide a helping hand with the UX of their apps). The Slack-sketeers also joined forces, occasionally offering a helping hand when the going got a little tough.
As the evening wore on, more and more of the hackers downed tools and went home, either to continue from the comfort of their own sofa, or to rest and relax after the taxing but fun time they'd had at the office.
Mark and myself (Team Autoimplement!) left at around 7pm, and each headed back home before reconvening on Slack and working in to the small hours, teasing and tweaking at our system to try and get to a point where we would be able to demonstrate something in the morning. While almost all of the work was there, stitching it all together proved to be the hardest part, introducing a few quirks...
Eventually, with as many bugs squashed as possible, we could rest at ease, knowing that about 50% of the time, it worked 100% of the time.
The fruits of labour
Time to show off! The next morning, all hackers and anyone else interested in seeing what had been produced congregated in the breakout area, and with Simon's trusty timer, each team were given 3 minutes to go over the highlights of their applications.
Giles wasn't in, so had left a brief message and screencap on the Slack channel. This showed us the Roving Pi he'd managed to set up, along with a Flask app that livestreamed the Pi's video, and allowed a user to control it remotely!
Nick H had managed to get his microcontroller to automatically join the WiFi on boot, and send both of the two probes' temperature data to Firebase, before quickly showing off the difference in his 'body temperature' probe and room temperature probe.
Ian's 'Help me!' app was a complete success, and all of the different use cases were discussed, along with a full SOS demo.
The first of the Slackbots, Ash's food-finder was also a hit - preventing the arguments of tomorrow, today. With switches for Vegan/Veggie/GF food, and a star rating and review pulled down from Yelp, you knew exactly what you were getting in to!
Rhys' slackbot was also very popular, hooking in to the AWS image recognition services, the bot would listen out for any images and process them to calculate if your face was in the image. A nice complete solution, with a funny demonstration to go along with it... This in particular was looking good (even if the cringe-worthy photos were not).
Autoimplement was talked through, and eventually demo'ed... And it bombed out! Unfortunately, as per the team's worries, our autoimplement-ed calculator did not converge on a solution for adding, getting stuck at some incorrect solution. A run through outside of the presentation proved our fears correct, as it worked perfectly (sometimes) and was just dumb luck. This has since been fixed - go check it out on GitHub!
Matt had managed to get a lot done for his Blue Plaque finder, creating a REST service to retrieve the data, after finding out that one didn't already exist. This was then overlaid to a map, and we got a whistle-stop tour of some of the most interesting plaques in Leamington (my favourite was Malcom Sayer's plaque, inventor of the E-type Jaguar). This hack was one of my favourites, as it shows the local area in a new light, and was a polished solution.
Finally, the pair of welcome apps built in different mobile application frameworks was shown, each working beautifully and looking very smart. The only teething issue that was mentioned here was that the Flutter version was not able to integrate with the live Firebase data, so had to operate on an offline dump of the database.
Some examples of the entries to this hackathon. From top left, clockwise: Giles' Roving Robot, Matt's Blue Plaque Finder and Rhys' MyFaceFinder (image unfortunately not of Rhys).
Everyone involved can be truly proud of what they achieved. New frameworks experimented with, a wide range of hacks created, problems discovered and overcome, and a huge amount of learning and discovery, everyone walks away with something.
But as for the Amazon vouchers, and the crown... After the dust had settled, our top three were:
- Image recognition using AWS - Rhys (10 votes)
- Blue Plaque route finder - Matt (7 votes)
- Help me! SOS App - Ian (6 votes)
Rhys' combination of fancy AWS usage and embarrassing pictures seemed to win the crowd over, and the title of Black Pepper Hackathon Champion was bestowed alongside Amazon vouchers. Matt and Ian both also were awarded a well-deserved runners up prize each.
As always, thanks to our wonderful organisers for the opportunity to do something like this. The general consensus was that everyone was pleased with what they had achieved, and alongside some important and fun learning, we'd all had a good bit of fun as well.
Now I just need an idea for the next one...