Many of history’s most important software projects were designed around a specific problem that needed solving or a specific process that can be improved on. The application and problem domain for project Janus however is not so well defined. More like an experiment or research project, Project Janus was built around a technology goal and a question: what level of synchronization and coordination can be achieved between an arbitrary number of mobile devices? In the Janus app, users can join a “session” where the camera or flash of all phones can by be controlled by a trigger on one or many of the individual phones and we work to achieve a high level of timing resolution and accuracy.
We thought about some of the potential applications for collaborative and synchronized picture taking. If several people at a party can take a picture at precisely the same time from different angles, then maybe we could reconstruct a more comprehensive view of the moment. By utilizing image stitching or collage-making tools, we figured the resulting imagery might be much more than the sum of the parts. Or, in a nod to The Matrix, what if a group for friends could put together a quick bullet-time effect in the park for free using just their iPhones? At least this was exciting to think about. With Janus’ mobile device synchronization model in place, we hope to discover and facilitate the development of new applications and APIs that leverage this capability.
The roots of Project Janus lie in company conversations held over company lunches in the Three Byte conference where we discussed ideas for an in-house project to work on. Over time, some consensus regarding the character of this project began to emerge – we wanted this in-house project to be:
- Small – something that could be iterated on and demonstrated in a period of weeks.
- Challenging – it’s not fun otherwise.
- A learning experience (for us) – as a software developer, stepping outside of my comfort zone and learning radically new technologies is one of the most challenging parts of my job. Learning a new programming language, not unlike learning a spoken language, is a disorienting experience but is essential to the software development profession and one of the most fulfilling parts in the long run. The team at Three Byte saw this in-house project as an opportunity to expand the scope of our skills and to try strange and new technologies.
Among other ideas, we considered a developer facing tool for visualizing log data or facilitating code review, a CMS designed specifically for museums, a public transportation route optimizer, and an app to communicate and visualize data to a user about his or her daily commute. The idea that was finally agreed upon is an iPhone synchronization app for giving one iPhone control over many. Credit for this idea goes to Olaaf who pitched it to the office on a quiet afternoon in September.
Working at a small custom software development company means that most of my time is spent writing and fixing software that belongs to and benefits our clients. Having the time and energy to work on a fun and low-pressure in-house project is an amazing luxury made possible by a meticulously planned development process.
At the heart of the Janus project is the Janus synchronization model: web-sockets via SignalR, plus an ongoing monitoring of network latency to enable device specific latency compensation. Synchronization is tested by pointing all of Three Byte’s iPhones (connected to the internet in various ways) at a high resolution stop watch and comparing the resultant Janus app images – results are getting better and look promising. Captured photos are uploaded to a Three Byte server where a collage maker process takes all the uploaded images and builds a collage.
Our first Janus collage:
The work I did on the iPhone app part of the project meant abandoning years of acquired fluency for development in Visual Studio and the .NET stack and having to learn iOS development with Objective-C and XCode. Programming in this environment felt like waking up in the wild west – none of my keyboard shortcuts worked anymore, instincts that used to quickly reorder or refactor my code now teleport me to a different document entirely and I’m too busy learning a new type system to be able to worry about unit testing. The process has gotten better, but I look forward to getting back to C#.
In a little more than one week of work, our team has built a prototype version of the app and made great strides in solving the synchronization problem. After spending an hour field testing the app in Madison Square Park we have a new list of features to implement, network connections to profile and bugs to tackle. Project Janus is being put on hold for now, but expect to see great things in the future!