As we like to do every so often, a few weeks ago we held our hackathon. For the uninitiated, a hackathon is a chance for developers to take a break from their regular duties and work on something new, something unexpected, something experimental.
For this hackathon, most of our development team in LA went off-site, grouped around makeshift workspaces, and hacked on a bunch of different projects in small teams. Our Seattle team also formed ad-hoc groups to write some new code. This time around we chose to spend a Thursday and a Friday working on our projects, and then came together early the following week to share our results with each other. In all, there were 18 different projects that made it far enough to be presented. They ran the gamut from setting up an NFS/HDFS proxy to a keg bot that allows you to remotely pour yourself some beer. Below are a few projects that we worked on.
Yupeng and Eugene got curious and wanted to create a visualization of Hulu streams across the US. The result is Blinker, an internal website that plots points on a map corresponding to IP addresses beginning video streams.
To build this, they put up a CherryPy-based web service that listens for UDP unicasts containing rough geo-location data. A quick modification to our stream control service allowed it to send data for each request to the Blinker service. A web page embeds a Google Map, and uses WebSockets (and ws4py on the backend) to continually update data.
ShowGraph Hang and Feng decided to spend their hackathon looking at graphical representations of show similarity. They used our recommendation system's show similarity data to perform multidimensional scaling and clustering, resulting in a zoomable chart that plots shows in similarity clusters.
Parley Fed up with the complexity and cost of our current phone conferencing system, David, Sherin and Ilya came up with Parley – Hulu's phone conference room system. Using Django and the Twilio API, they built a service that lets Hulu employees create conference rooms with access codes. Callers can then call into an access number and participate in a phone conference. Meanwhile, the employee that created the room can see a log of room accesses and optionally invite people by typing in their phone number (or selecting them from the company contact list) and having the system call them up with an offer to join a phone conference in progress.
Cage One of our teams in Seattle works on software for connected devices – gaming consoles, set-top boxes, internet-connected televisions, and the like. Since these are often fairly closed platforms, debugging and testing can be a challenge, with some validation steps requiring a human to eyeball a screen and see if it's correctly displaying an application. To help humans with this task, Steve and Dallas built Cage – a system that uses an Android phone and a backend service to capture screenshots of an application at various stages of testing.
When a connected device application runs, it displays a QR code describing the device and the test being performed. The Android app uses the camera to capture the barcode, and then takes a picture of the application as it performs various tasks. These photos are then sent to a service which displays the photo that was taken alongside an "expected results" picture. This will allow us to run some validation tests unattended, and then have humans verify the outcomes in bulk.
DJ Bot Unsatisfied with a quiet environment, Scott decided to build a bot to let us all play DJ. Scott took Alain Gilbert's code for creating bots that talk to the turntable.fm API, tweaked it a bit and integrated it into our node.js-based bot framework. Since our bot sits in all the channels in our HipChat chatrooms, we can now issue control a "DJ session" by issuing commands like this:
!dj start starts playing
!dj stop stops playing
!dj skip skips the current song
!dj info shows the curent song info
!dj history shows playlist history
!dj search search for songs, artists, albums
!dj q list shows songs in your dj queue
!dj q clear removes all songs in your dj queue
!dj q add adds song as next in your dj queue, where is from search output
!dj q rm removes song at from your dj queue
!dj q mv moves a song index index in your queue
And the bot commands a turntable session appropriately. Just add a big speaker, and we're (collaboratively) grooving.