At Hulu, our way of working tends to be a bit unconventional. I am on the DevOps team. We are a small team with a big mission: solve traditional IT problems in non-traditional ways. When we heard that Hulu was exploring third-party vendors to purchase expensive conference room scheduling displays, we thought this would be a great opportunity to hack together a custom solution that would better fit our needs—and save us a ton of money.
So what are we trying to pull off?
- Resolve conflicts (like double-booked rooms) by providing up to date conference room schedules
- Completely automate the process of displaying the schedules outside each room
- Minimize change in process by integrating with our existing hosted Exchange service
- Accomplish all of this as cheaply as possible
Step 1 - Generate the Exchange Web Services web references
Visual Studio 2008 did the trick. Using the "Add Web Reference…" dialog and pointing it to our OWA URL (https://our.owa.url.com/EWS/Services.wsdl), we were able to generate a client library capable of communicating with Exchange.
Step 2 - Import the namespace and poll Exchange
Using the ExchangeServiceBinding object we are able to pull down a list of scheduled events for each conference room. We run this routine as part of a Windows Service, and run it in a loop every couple of minutes. To keep things simple, we just dump the data into a text file.
Step 3 - Create a generic ASP.NET website
Step 4 - Point the iPads at the website
If there is one thing that an iPad does well, it's loading a generic website. We thought we had users tricked by covering the home screen button, but they found they could stray off course with the address bar. We eventually purchased some $2 apps to put the whole thing in kiosk mode, hiding everything but the scheduling site. Since this is a simple web site, we get the great side effect of being able to use any web-enabled client to view the calendars.
"Gotchas" (Little Hiccups We Fixed Along the Way)
- The data was too honest — This project uncovered that some users' events weren't actually getting booked in Exchange. We eventually fixed these users' issues.
- People love to touch things — Our employees decided the iPads on the wall were a great opportunity to navigate to our Hulu App and watch TV while waiting for their meetings. Which is great for viewership numbers, but not so great for keeping the schedule up! We solved this by purchasing steel cases which covered up the Home button, and installed an app to hide the browser controls.
- iPads just look expensive — We have a strong culture of frugality at Hulu. Our solution (including the iPads) came in around 90% cheaper than the next cheapest commercially available solution. We tried a variety of tablets, but the iPad had the best screen, and by purchasing a first generation refurbished model they weren't much more expensive.
- Error handling — This was just a weekend project, not a full-out development effort. We have incrementally improved error handling. If the iPad loses its wireless connection, for example, the page will timeout and display a giant message to alert our helpdesk.
- Monitoring — We added basic heartbeat monitoring into the PollExchange service to make sure the service remained started, and was actually pulling valid data. We also started logging client IPs in memory, and exposed this into an ASHX status page to see the last pull from each iPad.
The coolest thing about this project is that it grew out of a weekend hack session, and has ended up being very valuable to the organization. It has given us a platform that can be extended to do all sorts of cool things — and we saved money doing it! The code is checked in to our source repository, so we're looking forward to tons more innovation.
Matt is a systems engineer on the devops team, where he takes IT to the lim.