6 October 2011

QML/HTML5 Application State Transfer

So over the past month I've been working on several modules to provide QtQuick/QML and HTML5 applications with the ability to transfer seamlessly from one device to another. The approach I've taken is to use HTML5's local storage facility, which QtQuick also provides, and simply copy the data-store for any given application from one device to another.



This video demonstrates using this technology to transfer the state of a video playing application from one device to another. My TV, powered by my media PC is running a QML application which plays a video from the internet (points if you recognize the content). When the video is paused, the application displays a 2D bar code, or, QR code, which when detected by the software running on another device causes the device to connect to the master (TV) device and clone the applications data-store which contains the applications state.

The QR codes are used to notify other devices of an applications' synchronization availability. In this case the QR code reads: "sync+ssh://tswindell@192.168.20.20/grande-video-example" this tells other devices that they can synchronize with the application by using SSH and connecting to 192.168.20.20 on my home Wi-Fi network using the username "tswindell". This setup is just a prototype of the intended framework. I'd like to implement the system using both QR codes and NFC (Near Field Communication) when available. I'll also be working on adding network connection settings, so a device from outside of the Wi-Fi network can setup direct ad-hoc connections for synchronization.

The idea for this project was inspired from some ideas I've been throwing around the back of my mind for the past several years and discussions I've had with, the unfortunately now departed, Gary Birkett (AKA. lcuk). And, Carsten Munk (AKA Stskeeps). This project was also sponsored by Imogen Software (Carsten Munk) who has been extremely helpful with this project and others, with which we are planning on developing a new context aware and activity oriented Grande computing platform built upon the newly reestablished Mer Project.

Below I've listed the projects that I've developed for this technology demonstration.

QML Launcher
http://gitorious.org/project-grande/qml-launcher

HTML5 Launcher
http://gitorious.org/project-grande/html5-launcher

Declarative Barcode Reader (using the open source zbar)
http://gitorious.org/project-grande/declarative-barcode-reader-plugin

QREncoder Declarative Plugin (using the open source qrencode)
http://gitorious.org/project-grande/qrencoder-declarative-plugin

Grande Sync Declarative Plugin (currently not pushed)
http://gitorious.org/project-grande/grandesync-declarative-plugin

1 comment:

vgrade said...

alterego,

look forward to testing on my collection

vgrade