RealVNC was founded by the original inventors of Virtual Network Computing (‘VNC’) in 2002 and since then has developed and extended the technology such that it is now used by millions of people around the world. In recognition of its success, RealVNC has won both the MacRobert Award and the Queen’s Award for Enterprise.
For my part, I worked in the Mobile team developing solutions for remote control of smartphones, particularly from car head units; the key use case would be users plugging their phones into the car and hence interacting conveniently with the phone via the head unit.
Demo Automotive Viewer
In the Mobile Team we regularly demonstrated our technology at a number of trade shows and other events, and for most of my time at RealVNC I worked in a sub-team focused on developing these demos (we also provided bespoke customisations of our software for customers and helped them to get past any technical issues during their evaluations).
Mobile World Congress was the biggest event of the year for us, so we were planning many months in advance. The demo from the previous year (2013) had been created by a sequence of ad-hoc modifications of our ‘sample viewer’ code which, while necessary at the time, left us with significant maintenance issues, making it costly to add new features to the demo and update it to keep up with our SDKs. On the other hand the latest sample viewer structurally wasn’t a good fit to the needs of our demo.
Seeing that further ad-hoc changes would not deliver the set of features or the reliability we wanted to demonstrate, I set out a design for new demo-focused infrastructure that could be maintained and extended cheaply long term, and convinced the team to take this approach.
Part of this design was a new ‘Demo Viewer’, a fork of the existing sample viewer but completely restructured, which you can see in the video above. It included features such as:
- Support for connecting to multiple devices simultaneously
- Playing videos from a device on the rear screens
- Avoiding driver distraction (blocking the screen when speeds increase above a threshold)
- Multi-touch support for relevant devices
- A new Qt5-based UI, with UI code completely separated from the application code
- Support for H.264 framebuffer streaming (or a triple buffering scheme for devices that couldn’t do H.264)
- Detecting if a thread had frozen and automatically re-booting the demo
- A command line interface for developer usage
The process required considered long-term planning and an increased focus on modularity and abstraction to handle the inherent complexity. However much of the viewer was based on already existing code and this saved us a lot of time; I much prefer to avoid rewriting when the existing code can be refactored.
This is particularly hard because we were supporting multiple kinds of devices: iOS, RealVNC on Android and MirrorLink on Android. Each kind of device has its own way of establishing a connection, of listing apps, of sending audio, etc. This was handled by creating abstractions for each of the important parts, so most of the code doesn’t need to know which kind of device it’s handling.
Most of the work on the viewer was completed in a couple of months. The team reported the demo was very stable during the event; hopefully the demo has stood the test of time and continued to be useful to the team in future events.
The iOS Server was a solution to provide remote control of an iOS device. This was my first project at RealVNC, started during my two internships (Summer and Winter 2011) and continued throughout my time at RealVNC, later becoming part of the official product alongside the Android server. I had no experience with iOS or Objective-C but after a few weeks I built up a strong understanding of them.
iOS is a difficult platform for remote control due to the increased restrictions for applications compared to other platforms (such as Android). However even in this context I was able to produce a production-quality server (along with sample applications, tests and appropriate documentation) that would comply with the relevant requirements.
This server was demonstrated at trade shows, along with complex iOS-specific viewer-side infrastructure that I had also created.
Hosted Services (Concierge)
Alongside the use case of connecting smartphones to car head units, another use case is controlling a car head unit remotely; the driver can allow a customer care agent to connect to the head unit as part of resolving an issue.
The idea was to set up a system that would allow large numbers of cars and a smaller number of viewers (used by customer care agents) to connect to each other via a cloud service. I was assigned to lead a project to develop a prototype system.
Fortunately we already had some suitable infrastructure for the cloud service, which was very helpful but still left us with the daunting task of integrating two codebases that had forked from each other many years ago. I also had to pull in some older code (that hadn’t been used for years) and renovate it to resolve the stability issues.
Alongside this we had to develop another viewer application, so I started off from the Demo Viewer codebase and modified the code as necessary. I also undertook a lot of refactoring so that the Hosted Viewer and Demo Viewer could in future share code (once the Demo Viewer had been merged into the same Git repository).
Ultimately, after some high-paced development I put together a well-functioning demo, but I shortly afterwards left RealVNC to work at Undo Ltd so I didn’t get to see the demo in action.