Hack Essex 2017

For the past 2 days, I’ve been taking part in HackEssex. Our team had trouble coming up with an idea at first, but we settled on a real-time question application.

The event itself was extremely well run. The organisers were extremely friendly and made sure that we were well taken care of. The teams worked on a broad range of different projects, from hardware projects to web applications. On Saturday, after the welcoming talk, we split into groups (with a maximum size of 4) to come up with and implement a project of our choosing in 24 hours. We worked till half 11, left for the evening and then met up the following morning to polish our implementation.

The Team

The team I was in consisted of four computer science students – Dan, Chloe, Iulia and myself. We had trouble coming up with ideas at first and brainstormed a few on a portable whiteboard that Dan had brought to the event. We whittled the ideas that we had come up with to two or three and then finally settled on one that we thought would work given the short time span and skillset of the team.

The Idea

The idea that we came up with was a system for submitting questions to a presenter during a talk or a lab. The participants are able to vote up questions that they would like answered and downvote questions that they feel are less important. They can also answer questions submitted by other users, these answers can also be voted on.

The UI for quest for question rooms.

Our Solution

Our solution was implemented using Django. The questions are displayed in a list using a ListView. New questions and answers are submitted via web pages that contain forms.

We wanted to allow people to use the site without having to refresh it when changes occurred. We used WebSockets to update each client’s view when the questions are saved on the server. When an update is received, the client checks if the ID matches one of the questions currently being displayed, if it does then the client updates the information displayed. Django does not natively support WebSockets, an officially supported library named channels changes how Django works and makes it possible to use WebSockets without the need to do too much to the Django project.

The Problems

Our implementation had a few issues: we didn’t get registration working, so we created some demo accounts for people to use. It would have been nice to allow users to sign up using their Google or Github accounts rather than needing to have pre-created accounts.

Our client-side code for dynamic updates was a little more basic than planned and only worked with questions that were already displayed – it did not have the capability to create new questions or answers. This was mostly due to time constraints. The server-side code is in place to allow this, and the events get sent to the client, but clients do not process it.

Oh, the site is available at on hammer. Thanks to Dan (and the free domain token provided by MLH) it should also be available on http://questforquestions.net when the DNS records propagate.