Blog

Hack Day round-up and winners

Mat, Kris and Michael

Last Friday our development team (globaldev) broke away from project work and held our very first Hack Day. A frantic seven hours of coding ended in a series of presentations and well-deserved awards.

In the photo are the day’s winners: Mat (left, Founders’ Trophy, chosen by Ross and Steve) for his project to enable searching by drawing on a map, Michael (right, Innovation Award, decided by Barry) for his machine-learning project to find scammers and Kris (centre, People’s Vote) for her (and Grant’s) desktop notifications system via Socket IO.

Below are project summaries written by each team. There were some hugely impressive efforts in such a short period of time and we hope to see some of these projects end up integrated back into the main system.

Khalid:

My project aggregates all the featured members across a network. It displays a random selection of 100 members every x seconds, where the refresh period can be controlled by the user. The main concept here is to present the viewer with a constant feed of potential members without them having to interact much with the site. They can filter the members shown by gender, age and region.

Visualisations of today’s members

Ian and Matt:

Visualisations of today's members

We produced two visualisations from live WLD member data. The first shows a count of the selected action over the last 5 seconds. The other is a clickable/drilldown visualisation of various data for members that have joined the platform today.

Hudson CI (Continuous Integration)

Brian and Tayo:

Hudson CI

The aim of our project was to get a Jenkins CI server set up in the cloud to continuously build and test our code base. Because that codebase is very large, we started by cloning a different, and very small codebase instead (a model of the enigma machine in CFCs) which conveniently had accompanying MXUnit tests that we knew ran very quickly. We installed Jenkins on our cloud server and set it up to pull from GitHub, installed MXUnit on the same box, added an ANT buildfile to the repo, and then stood back in amazement as Jenkins checked out the code base, executed the build file, ran the unit tests and generated test output.

Using the extensive range of plugins we got GitHub, email and Campfire integration up and running, and once we were feeling brave enough we got a partial set of the WLD platform’s MXUnit tests running towards the end of the afternoon.

Text classification from moderation history

Michael:

Text classification from moderation history

Could we create a system to automatically recognise the sorts of private messages that our Moderation team would recognise as likely to be scams, or otherwise disallowed? To find out, we trained a basic Bayesian classifier on over a quarter-million examples of messages – both good ones and bad ones – that had previously been subjected to the wise judgment of our Moderators.

Despite the rushed timetable and lack of opportunity to pursue any refinements, in this first attempt we achieved a 70% success rate in identifying bad messages that our moderators also identified as bad messages. The presentation was capped by a member of the company’s Moderation team entering sample messages into a live demo of the system.

Project estimates vs actual times

Sam and Jen:

Our team decided to crunch months worth of timesheet data in order to create the start of a historical project benchmarking process, entitled “Chaos Theory: The Predictability of Random Events aka Project Management”. This new process highlighted trends regarding project estimates vs. actual times that would enable the PM team to identify any persistent problem areas of projects that we can look to improve, plus provide guidance on what percentage particular phases take, on average, which will help with future project estimation accuracy.

Activity heatmap visualisation with Google Maps

Joel:

Activity heatmap visualisation with Google Maps

For Hack Day I worked on visualising user activity with a HTML5/canvas heat map integrated into Google maps to show regions of high member activity The source data was from a 24 hour period of unique user logins along with their location defined in their profile. The application allowed for zooming in to postcode level to view more specific data within major cities as well as the ability to view activity at a snapshotted timeframe. Currently the application allows for displaying of activity from the UK, Australia and the USA.

Voice and SMS notifications with Twilio

Jon:

Voice and SMS notifications with Twilio

So, my project was to use Twilio’s voice and SMS APIs to send notifications to your mobile phone when you get a private message. The SMS notifications have obvious applications in any sort of reminder within the system, or maybe for sending out promotions, etc. The voice one was more a technology demo as having your message read to you over the phone is a bit of a gimmick, but could well also be of use for reminders. Some A/B testing would be in order there methinks.

Automated testing

Kevin R, Kanthan, Adeel, Dush and David:

Automated testing

The QA team, Kevin and Dush undertook a project on automated testing to increase efficiency and reduce costs, the aim was to ensure that before our software went live that we regression tested critical areas for added assurance.

We are constantly making updates to the system so we need continuous regression testing and that’s just not possible using a manual approach without significantly impacting the budget. Kevin’s involvement was integral simply because testers are not developers and some of these tests take coding and technical expertise. Hack day was also used to improve QA’s technical ability as we gained exposure to the fundamentals of scripting which will prove nothing but useful as we push on and provide the system with greater coverage using the automated approach.

Would Like to Meet

Tom and Kevin P:

Would Like To Meet

The aim of our hack was to extend the appeal of the Encounters system by helping members who have matched to arrange a meet or date in real life. For this we give a member the option of ‘near me’, ‘near them’, or ‘meet me half way’ (which finds venues geographically located half way between the two members). Venues are found via the Factual API, with the member asked to pick three which are then formed into a custom private message as suggestions. We were pretty proud of this for a day’s work, and as an added bonus for the business: In order for members to use this service they would have to have a photo (for Encounters), and their postcode set (to find the venues).

Mat:

Draw on a map to search

My aim for Hack Day was to create a way to search for dating site members by drawing on a map. As I was working on my own, I did a little bit of research ahead of time in to what algorithm I was going to use and settled on one that worked by breaking up the drawn shape in to tiles on a grid. I liked this approach as it was super fast, capable of searching through thousands of members, and with the grid size set appropriately would obscure individual members exact location and protect their privacy.

I initially started implementing the core search algorithm in Haskell, but hit a roadblock when I found Hackage (Haskell’s equivalent of RubyGems.org) was down. A mad scramble to re-write in Ruby so I’d have something to demo, and a quick front end in JavaScript using the Google Maps API and I was done.

Real-time prototyping tool for HTML/CSS

Gavin:

Real-time prototyping tool for HTML/CSS

It’s a real-time prototyping tool for previewing CSS and HTML. It lets you target individual elements in your design and manipulate their properties on the fly to see how your design will cope with those changes. This is really useful for previewing different types of content with different styles. When I get chance to develop it further hopefully we can use it our own workflow.

Tracking errors against deployments

Jim:

After seeing a graph in a slide on scaling GitHub I thought that tracking exceptions against deployments should be something we should all know about. I’d also been looking at playing with Etsy’s StatsD, so I built a gem that extends our existing Airbrake exception handling and posts the details via UDP to a StatsD server for graphing and aggregation. It’s a really simple addition, so hopefully we can get it up into production for some of our apps really soon.

Deployment dashboard

Kamil:

Deployment dashboard

My project is a single resource containing information about all WLD applications. First incarnation enables OPS to monitor deployed code with ease while my aim in future versions is to provide a single deployment point as well. Click and Deploy will make deployments easy – display outstanding requests, update requests status and automate notifications for all applications in one, easily accessible place. The biggest challenge arose from the variety of applications being part of the platform — different ways of managing deployments (webistrano, capistrano, puppet), vast amount of managed hdosts and keeping security in mind. But once there, dashboard will allow both developers and members of operations team to easily determine what revision of code is deployed giving us more control over the platform.

Messenger

Jason:

Messenger

Essentially “Messenger” is a chat based application that uses the existing messaging service within the WLD platform. Conversations appear with the member’s photo and last message and clicking them reveals an SMS/iMessage style interface. Users can send and receive messages, search messages.

Future features could include adding favourites, winks and gifts (sending and receiving) as well as a “cross-reg” check which would allow the app to tell the user what other sites they have accounts with and swipe between them. Also integrated but not demonstrated was Boxcar notifications for Push support from the app to iOS.

Global Warning

Pete, Keith and Andy G:

Global Warning

Our idea was to create an interactive 3D globe displaying an assortment of member data, plotted across the continents. From messages sent between members to the number of members online now, all sorts of interesting data could be presented through an interactive, highly engaging, location based view. The 3D globe was built using WebGL and THREE.js, the JavaScript 3D engine. User actions were streamed to the browser using HTML5 EventSource and Cramp, an asynchronous event-driven Ruby framework.

Time off: holiday booking system for the team

Barry and Tim:

With the aim of replacing our paper-based holiday booking system with something befitting a web dev team, we sought to produce a web app to help us move into the twenty-first century. We built most of a Rails 3 app that implements Google Apps authentication via OmniAuth, Twitter Bootstrap for layout, Active Admin for administration and an ICS file exporter. It mostly worked but was greeted with widespread apathy by an ungrateful team who will now have to submit their holiday requests by post three months in advance…

Real-time notifications in the desktop app using Socket IO

Kris and Grant:

Real-time notifications in the desktop app using Socket IO

Implementing real-time notifications into the platform using sockets. Our aim was to increase user engagement with the WLD platform and stimulate interaction between members. We used Node.js, Socket.io, prototypejs and HTML/CSS.

Spread the love