Created a remote ClickShare experience

Barco, New Experiences Division
Milpitas, CA

Created a prototype Windows desktop application in 2016 for a cloud-based virtual collaboration project, code named OneRoom, which provided the same user experience to remote users that ClickShare provided in meeting rooms. We needed a desktop app because a custom C++ encoder/decoder for screen sharing with ClickShare had to be bundled with our solution. We originally used CEF and the MSI installer to package everything as a desktop app but this approach had several limitations which made rapid-prototyping beyond the basics difficult. So, I researched several alternatives including NW.js, the Qt WebEngine, Brackets and Electron. After evaluating the pro and cons of all of these (sometimes by creating small prototypes), Electron was the clear winner for our needs with NW.js a close second. Electron allowed us to create the multi-window ClickShare look and feel with frameless windows, taskbar icons and window-to-window communications. We could also leverage the entire node.js ecosystem embedded in Electron to do things like write logs and communicate with other apps. I was able to port the JavaScript web app from CEF to Electron with little effort and extend it to create the look and feel of ClickShare. The rapid prototyping supported by the Electron platform allowed us to experiment with new UX/UI ideas and test them out much faster than the ClickShare team could do them, such as implementing this UX workflow in a couple of weeks instead of in a couple of months:

ClickShare UX workflow 1

The decision was then made to turn it into a real product. To pull this off, I created an easy-to-configure, production quality build system designed to build Windows, Mac and Linux versions of the app. I chose node.js and glup (a node.js make tool) to manage builds which could be run as a Jenkins job for continuous cloud integration. I replaced the MSI installer with NSIS because we needed more control over the installation, added code signing to make the app tamper proof and added C++ targets to build a multi-threaded native node.js module, I wrote, to support a new feature. The overall application structure ended up looking like this:

OneRoom Electronic all structure

Finally, NSIS had to be extended to communicate with the Electron app (over named pipes) to enforce single running instances plus auto-terminate and restart the Electron app when updated. But, once Microsoft Teams was released, the OneRoom project was cancelled. It would have been too difficult to compete against Teams.