Qt Developer Days 2014 Slides: A Solid Back End for a Solid Qt Mobile Application

My second presentation at Qt Developer Days 2014 in San Francisco was about how to build a scalable and reliable server side application with Qt Cloud Services using PaaS (Platform as a Service).

Abstract

Nowadays many mobile applications are relying more and more on server-side applications. Setting up servers and deploying a server-side application can be hard and time-consuming, but it has not to be.

Qt Cloud Services contains three different services that can be utilised to implement a robust and scalable server-side solution easily. Managed Application Runtime (MAR) is used to deploy and run applications on the cloud, Enginio Data Stroage (EDS) can be used to store data and Managed WebSocket (MWS) service makes it possible to send and receive WebSocket messages. By combining these three services it is possible to build and deploy a server-side solution without configuring any server machine.

In this presentation an example Qt mobile application demonstrates how to implement a real-time Twitter stream provided by a server-side application that is running on MAR. The server-side application stores tweets to EDS and sync new tweets to the client via WebSocket protocol.

This presentation covers:
– overview of MAR, EDS and MWS services
– basics how to create MAR, EDS and MWS instances
– example how to implement a server-side application that stores data to EDS and provides an API.
– example how to deploy the application to MAR
– example how to connect to the server-side application from Qt client application
– example how to send data to the client application with MWS.

Advertisements

Qt Developer Days 2014 Slides: Give a push to your Qt application with WebSockets and Qt Cloud Services

I was at Qt Developer Days 2014 in Berlin and San Francisco this year. I gave there couple of presentations about Qt Cloud Services. The first one was about WebSockets and how you can utilise them very easily with Qt Cloud Services and Qt.

Abstract

WebSockets is an advanced technology that makes it possible to establish an interactive communication session between an online client application and a server. With WebSockets you can send messages to a server and receive event-driven responses without having to poll the server for a reply.

Qt 5.3 introduced new Qt WebSockets module that features full support for WebSocket protocol (RFC-6455). To benefit WebSocket technology with Qt, a server-side implementation is needed to control the message flow. Qt Cloud Services offer two different ways to achieve this goal:
– Managed WebSocket (MWS)
– Managed Application Runtime (MAR)

MWS is a fully managed WebSocket service that will automatically scale with users and supports build-in access control and policies.

MAR is a managed application platform-as-a-service that provides all the tools needed for server-side development.

This presentation covers:
– Overview of WebSockets and common use cases
– Overview of MWS and MAR services
– Basics how to create MWS and MAR instances
– Examples how to benefit MWS in order to send and receive WebSocket messages in a Qt client application
– Examples how to deploy a Qt WebSocket server to MAR and use it in a client application

Using Backbone.js models and collections with Qt and QML

Backbone QML TodoI have been a big fan of Backbone.js a long time. Together with Marionette.js it offers a solid toolkit to front-end web developers.

Lately I have worked with Qt and QML. With QML you can create nice user interfaces very easily, but what I have missed is that easy integration to backend applications. So I thought what if I try to use models and collections of backbone.js. I was quite a skeptical first, because backbone.js depends on jQuery with uses window and document objects that are not working in Qt. However I decided to try it.

Instead of jQuery, I grabbed Zepto.js that offers the same API as jQuery. I tuned the library slightly to get rid of errors related to window and document objects. There were not many of them.

Then I took underscore.js that backbone.js uses and finally backbone.js itself. I made slight changes to get them initialise correctly, but nothing big changes there.

After that I only needed to implement a simple application where I could test that everything is working. The result was much better than I expected. You can use directly Backbone’s collections and models with your Qt application and even listen events in your QML file, they just work.

https://github.com/nevalla/qml-backbone-todo

Define backbone models and collections
// app.js
var baseUrl = "https://api.engin.io/v1";
var Todo = Backbone.Model.extend({

});

var TodosCollection = Backbone.Collection.extend({
model: Todo,
url: baseUrl+”/objects/todos”,

parse: function(response) {
return response.results;
}
});

2. Use models and collections in QML file

//main.qml
function completeItem(index) {
var todo = App.todos.at(index)
todo.save({completed: true}, {
success: function(model) {
todoModel.setProperty(index, "itemProcessing", false);
},
error: function(){ console.log("error")}
} )
todoModel.set(index, todo);
}

3. Listen collection events in QML file

//main.qml
ListModel {
id: todoModel
}
Component.onCompleted: {
App.todos.on("add", function(todo) { todoModel.append(todo) });
App.getTodos();
}

So the first impact was very positive. I haven’t tested all functions of Backbone.js yet, so there may be some errors. However I don’t believe there are any fundamental errors that prevent using Backbone.js.