Category: Development

Qt & The Next Billions

December 26th, 2011

Después de Febrero 11, muchas cosas cambiaron en Nokia, a Symbian le pusieron fecha de vencimiento, a MeeGo lo mandaron al freezer, el único que recibió un fuerte respaldo fue Qt, pero viendo la magnitud del descalabro, era difícil creer en esa promesa, paso el tiempo y hay que admitirlo, Nokia esta cumpliendo con lo que prometio, desde Febrero 11 a la fecha se han liberado Qt 4.7.3, Qt 4.7.4 y Qt 4.8, el trabajo en Qt 5 sigue viento en popa, ademas a mediados de junio, Nokia anuncio que Qt pasaría a ser parte fundamental de su estrategia para el Next Billion y mas importante aun, en Octubre se completo el proceso por el cual Qt pasa a ser administrado bajo un modelo de Open Governance.

El futuro de Qt parece asegurado, ademas de Nokia muchas otras plataformas contemplan la posibilidad de utilizarlo de forma oficial o existe el potencial de que terceros lo porten y le den soporte, el siguiente es un listado de alguna de ellas.

Nokia

Ademas de poder ser usado en Symbian y MeeGo, Nokia a anunciado que Qt sera el entorno de desarrollo que potenciara su estrategia para el Next Billion, cuando Marco Argenti hizo el anuncio en Nokia Connections 2011 no dio muchos detalles, lo que hizo que durante un tiempo se especulara con la idea de Qt corriendo sobre S40, ya que hasta ese momento S40 era la plataforma que Nokia estaba posicionando para ser usada por el Next Billion, paso el tiempo, llegaron los DevDays y por suerte con ellos, algo de información llego a la superficie, según Kenny Mathers (Head of Developer Relations en ese momento) la plataforma elegida para la estrategia Next Billion de Nokia no va a ser S40, esto sumado a que Symbian y MeeGo yo no juegan este partido, hace que nuevamente se vuelva a especular con Meltemi, ahora bien ¿que es Meltemi?, una ¿versión lite de MeeGo? o ¿una evolución de Maemo/MeeGo?, quizás para mitad del año que viene, con la release de Qt5 podamos saber mas, mientras tanto no queda otra que esperar, pero con la seguridad de que Nokia esta cocinando algo en Ulm.

Canonical

La relación entre Canonical y Qt comenzó hace tiempo y sigue profundizándose, el solo hecho de que Unity 2D haga uso extensivo de Qt y QML es una muestra del compromiso de Canonical con Qt, si a esto le sumamos las intenciones de Canonical de llevar la experiencia Ubuntu, a smartphones, tablets y smart TVs, la idea de un nuevo “ecosistema” con Qt como uno de sus pilares, comienza a tomar forma y merece la pena ser seguida de cerca.

Research in Motion

QNX el OS que compro RIM para usar en su próxima generación de smartphones y tablets, incluye a Qt entre sus paquetes desde hace tiempo, muchas soluciones se venden haciendo uso del tandem QNX/Qt, por suerte esto no ha cambiado con la compra de RIM y para dejarlo claro, George Staikos (Vice Presidente de RIM) manifestó el apoyo por parte de RIM a Qt en una de las keynotes de los ultimos DevDays, anuncio que Qt seria soportado en BBX y para que quede el mensaje claro, mostró varias demos desarrolladas en Qt corriendo en su PlayBook.

Hewlett Packard

Qt siempre formo parte de webOS, es cierto que es una versión algo vieja (4.6 y 4.7.1) la que se encuentra disponible entre sus paquetes, esto ha permitido que miembros de la comunidad porten apps y el framework por su lado, todo esto se pone mas interesante luego del anuncio de la apertura del código de webOS por parte de HP, donde Qt puede tomar impulso para todos aquellos interesados en desarrollar aplicaciones que corran de forma nativa en webOS.

Samsung/Intel/Linux Foundation/Nomovok

Este es el grupo de los unidos por el espanto, por un lado Samsung una empresa amante del control total que ve que con Android no puede crear una cárcel 100% invulnerable, Intel que ve que el mercado mobile se esta comiendo su reino, prueba una vez mas crear un OS para sus chips de bajo consumo de energía que están siempre por llegar, quizás esta sea la ultima oportunidad de Intel para lograr algo el éxito, antes de tener que renovar su licencia con ARM y empezar a fabricar chips con tecnología ajena, perdiendo no solo el control sobre la tecnología, sino el de su propio futuro, la Linux Foundation, ese sello de goma organizador de conferencias y vendedor de remeras, no pincha ni corta en las decisiones pero todos quieren tener su visto bueno como para darle un toque mas Open Source a sus proyectos, y por ultimo Nomovok que en la época en la cual MeeGo aun vivía, aposto fuerte por el y ahora esta tratando de recuperar toda la inversión hecha, la cual en su mayoría se desarrollo usando Qt, la idea de Nomovok es vender su UI que corre arriba de los que debería de ser Tizen a fabricantes chinos de tables económicas para ayudarlos a diferenciarse, para ello se ha comprometido a portar Qt a Tizen y darle mantenimiento.

El futuro de Qt en Tizen, esta complicado mas que nada por razones políticas, Samsung tiene a EFL con el que sueña sustituir a Qt, a Intel puede que le interese mantener a Qt después de todo el trabajo y progreso que realizaron en MeeGo, pero con tal de seguir teniendo a Samsung de socio no va a decir nada y aceptara lo que Samsung decida, lo que piense la Linux Foundation no le importa a nadie y lo que haga Nomovok va a terminar siendo irrelevante sin el apoyo de Samsung e Intel, prueba de esto es la conferencia sobre Tizen que Nomovok organizo hace algunas semana en China, en donde ni Intel, ni Samsung se hicieron presentes, ni mucho menos patrocinaron, cosa que si hizo Qt, que participo como Silver Sponsor, esto no quiere decir que Samsung e Intel prohíban o restrinjan el uso de Qt en Tizen, pero sin el apoyo de ellos, Qt va a estar relegado a los hobbystas, a soluciones muy especificas y a lo que pueda hacer la comunidad.

KDE

Esto parece una obviedad, pero no podía dejar de mencionar el soporte y apoyo que el proyecto KDE le da a Qt, para muchos, KDE es sinónimo de Qt y viceversa, lo cual puede ser una arma de doble filo, mas cuando la persona que interpreta esto ignora que KDE es una plataforma y Qt es un entorno de desarrollo, sino hagan la prueba de preguntarle a cualquier usuario de Linux que piensan de Qt y casi con seguridad terminara respondiendo con temas relacionados a KDE.

KDE siguiendo la evolución de Qt, ya esta preparando el salto a Qt5, lo que debería capitalizarse en una mejora en la performance general del sistema, pero que se notara mas en la parte de gráficos. algo que en KDE se usa y se abusa mucho.

Mer Project

Este proyecto del que hace un tiempo hable aquí en el blog, es la continuación de MeeGo por otros medios, luego de que todos los que lo soportaran le soltaran la mano, el proyecto avance a paso lento pero firme, con entregas regulares y sumando apoyo de otros proyectos Open Souce, como por ejemplo la gente de Plasma Active, que de a poco se esta convirtiendo en una de las UIs preferidas de quienes trabajan y experimentan con Mer.

Raspberry Pi

El proyecto cuyo objetivo es crear una GNU/Linux box basada en ARM por menos de U$S25 sigue avanzando, lo que ha llamado la atención de mucha gente, tanto que personas dentro de ICS y Nokia, están trabajando en una versión ultra optimizada de Qt5 para esta plataforma, ademas se creo un programa por el cual Nokia esta entregando a 400 miembros de la comunidad placas para que puedan usarlas en sus proyectos.

Haiku

Haiku aparece en esta lista en una especie de fetichismo de mi parte, es cierto que su comunidad tanto de desarrolladores como de usuarios es muy pequeña, pero el port de Qt en Haiku ha permitido que muchas aplicaciones KDE corran en el, haciendo que Haiku se torne un poquito mas interesante y permitiendo que podamos aplicar nuestros conocimientos en un proyecto en donde cualquier aporte, por mas mínimo que sea puede lograr un gran impacto.

Los Otros

Aquí entran los ports de Qt para iOS, Android y Windows 8, estos ports cuentan con distintos grados de madurez y soporte, por un lado tenemos a Digia que esta trabajando en el port oficial de Qt para Windows 8, también tenemos al proyecto Necessitas cuyo progreso es impresionante, cuenta con una integración muy buena con Qt Creator y también con un port de Smart Installer (llamado Ministro) para el manejo de dependencias, muchas apps creadas con Qt están ya disponibles en el Android Market, por ultimo están los ports para iOS, el primero, UIKit, es mas un experimento que otra cosa, esta limitado a aplicaciones de una sola ventana y no tiene soporte multitouch, luego esta Qt4iOS, este port es comercial, tiene soporte completo para Qt Widget, QML, OpenGl, Qt Mobility y Qt3D, ademas ya hay al menos una aplicación desarrollada con el, que paso el proceso de verificación de la Apple App Store y ya esta en venta.

Conclusiones

Ademas de los entornos clásicos como Windows, Mac OS X y Linux, existen muchos proyectos en donde Qt puede ser usado, en algunos con mayor o menor soporte, algunos mas maduros, otro que recién empiezan, es lo bueno de Qt y de su promesa Code Less, Create More, Deploy Everywhere.

Community, Development, Opinion , , , , , , , , , , , , , , , , , , No response

Qt DevDays 2011 Videos

December 19th, 2011

Ya se encuentran disponibles algunos de los videos de las presentaciones técnicas presentadas durante los Qt DevDays 2011, el numero es reducido aun, pero calculo que con el pasar de los días se irán agregando mas.

De las presentaciones disponibles, estas son algunas de las mas interesantes según mi criterio, el resto de videos los pueden encontrar aquí.

Community, Development , No response

[Actualizado] Qt Developer Guides

November 29th, 2011

Hace unos días en el blog oficial de Qt anunciaron el lanzamiento de las nuevas Qt Developer Guides, no quería escribir sobre estas guiás sin antes darles una mirada en profundidad, las guiás son muy completas, están dividas en varios capítulos en donde se abordan diferentes conceptos y funcionalidades, los cuales son aplicados en el desarrollo de una aplicación de ejemplo a lo largo de toda la guiá.

Las dos primeras guiás liberadas se centran en el desarrollo usando Qt Quick y JavaScript, tanto para Symbian (aunque todo lo explicado puede ser aplicado en MeeGo) como para Desktop, con estas guiás pueden aprender sobre el uso de Qt Quick Components, Animations, Transitions, States, persistencia de datos usando Offline Storage, creación de controles personalizados y mucho mas.

Si recién están empezando a trabajar con Qt y con Qt Quick, les recomiendo que lean y hagan los ejercicios que vienen en estas guiás, son una forma rápida de experimentar todo el proceso de desarrollo de una aplicación y van a aprender fácilmente, conceptos, buenas practicas y la forma de aplicarlos en sus propios desarrollos.

Programming with Qt Quick for Symbian^3 Devices

Pueden descargar esta guiá en los siguientes formatos:

Si se topan con algún error o tienen sugerencias, pueden dejarlas aquí

Qt Quick Application Developer Guide for Desktop

Pueden descargar esta guiá en los siguientes formatos:

Si tiene ideas, sugerencias o encuentran algún bug pueden reportarlo aquí

Espero estas guiás les sean útiles y manténganse atentos que pronto se vienen muchas mas.

Programming with Qt Quick for Symbian^3 Devices

Actualización – 13/12/2011

La guiá Programming with Qt Quick for Symbian^3 Devices ha sido actualizada hoy, ha pasado a llamarse Programming with Qt Quick for Symbian and MeeGo Harmattan Devices y se le ha agregado todo un nuevo capitulo con consejos y buenas practicas para portar aplicaciones Symbian a MeeGo.

Actualización – 12/01/2012

La gente de Zona Qt ha traducido al español la guiá Programming with Qt Quick for Symbian and MeeGo Harmattan Devices, pueden acceder a ella desde aquí.

Development , , , , 1 response

[Actualizado] Integrando Mapas con QML

November 14th, 2011

El objetivo de este post es mostrarles de forma practica, un par de opciones para que puedan integrar mapas en sus aplicaciones Qt, tanto en Symbian como en MeeGo, la primera opción hace uso de la Location API incluida en QtMobility, la segunda opción permite integrar servicios como Google Maps, Bing Map o Nokia Maps (ex Ovi Maps) haciendo uso de QtWebKit.

Usted esta aquí

Las opciones que describo en este post permiten ubicar en el mapa un punto especifico, este punto lo podemos obtener de diversas maneras, desde una DB, ingresando los datos manualmente u obteniendo las coordenadas desde el GPS del dispositivo, para hacer esto ultimo solo debemos primero, agregar a nuestro proyecto la dependencia a la Location API de QtMobility

import QtMobility.location 1.2

Luego vamos a declarar unas propiedades en las cuales almacenaremos la longitud y la latitud que obtendremos usando el elemento PositionSource, para luego mostrarlos usando un elemento Text.

property double mapLat
property double mapLong
mapLat: positionSource.position.coordinate.latitude
mapLong: positionSource.position.coordinate.longitude

PositionSource {
    id: positionSource
    active: true
    updateInterval: 1000
}

Text {
    color:"#fff"
    text: "Latitud: " + mapLat + "<br/>" + "Longitud: " + mapLong
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.verticalCenter: parent.verticalCenter
}

QML & Maps - Get Position Demo

Simulando el GPS

Si no cuentan con un dispositivo para probar, pueden simular el uso del GPS usando la opciones de Location que vienen incluidas en Qt Simulator.

QML & Maps - Qt Simulator

QtMobility Location API

Esta opción hace uso de algunos de los elementos QML que nos provee la Location API, en este ejemplo usaremos un elemento Coordinate, para almacenar la latitud y la longitud que obtenemos del PositionSource, luego crearemos un elemento Map, el cual a su vez contiene una MapImage, tanto la propiedad center del Map, como la propiedad coordinate del MapImage van a usar los datos de la Coordinate previamente declarada.

property double mapLat
property double mapLong
mapLat: positionSource.position.coordinate.latitude
mapLong: positionSource.position.coordinate.longitude

PositionSource {
    id: positionSource
    active: true
    updateInterval: 1000
}

Coordinate { 
    id: defaultMapCenter
    latitude: mapLat
    longitude: mapLong
}

Map {
    id: map
    anchors.fill: parent
    plugin : Plugin {name : "nokia"}
    size.width: parent.width
    size.height: parent.height
    zoomLevel: 16
    center: defaultMapCenter

    MapImage {
        id : pin
        coordinate: defaultMapCenter
        source:"images/pin.png"
    }
}

QML & Maps - Qt Mobility Sample

QtWebKit y Nokia Maps

Esta opción quizás no se integra de forma 100% nativa de la misma manera que podemos hacer usando la Location API, pero tiene la ventaja de que podemos usar a nuestro proveedor preferido y ademas nos permite reutilizar código que hayamos creado con anterioridad, este ejemplo hace uso de la API de Nokia Maps y para comenzar crearemos una pagina web con el siguiente código (ver abajo) y la incluiremos en nuestro proyecto, el código en si no tiene mucha magia, al principio hay una referencia a la librería de Nokia Maps, luego inicializamos el mapa, configuramos los elementos que vamos a utilizar en el, el nivel de zoom, una posición por default y finalmente crearemos la función setLocation que sera la encargada de ubicar el pin y centrar el mapa usando las coordenadas obtenidas por el PositionSource

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Ovi Maps</title>
<script src="http://api.maps.ovi.com/jsl.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    var map;
    function initialize() {
        map = new ovi.mapsapi.map.Display(document.getElementById("map"), {
        components: [
            new ovi.mapsapi.map.component.ZoomBar(),
            new ovi.mapsapi.map.component.Overview(),
            new ovi.mapsapi.map.component.TypeSelector()],
            'zoomLevel':16,
            'center':[-34.603000, -58.380000]
        });
        
        ovi.mapsapi.util.ApplicationContext.set("defaultLanguage", "es-ES")
        map.addComponent(new ovi.mapsapi.map.component.panning.Drag());
        map.addComponent(new ovi.mapsapi.map.component.panning.Kinetic());
    }

    function setLocation(lat, lon) {
        pin = new ovi.mapsapi.map.Marker([lat, lon], { icon: "images/pin.png" }),
        map.objects.add(pin);
        map.setCenter(new ovi.mapsapi.geo.Coordinate(lat,lon));
    }
</script>
</head>
<body onload="initialize()">
    <div id="map"></div>
</body>
</html>

Del lado del QML, lo primero que haremos sera importar a QtWebKit como dependencia.

import QtWebKit 1.0

Luego crearemos una WebView que va a cargar la pagina web anteriormente creada.

Solo resta esperar que se dispare el evento onLoadFinished que ejecutara la función updatePosition que usando el metodo evaluateJavaScript le pasara a la función setLocation que se encuentra en la pagina web, los parámetros que necesita para centrar y ubicar el pin en el mapa.

property double mapLat
property double mapLong
mapLat: positionSource.position.coordinate.latitude
mapLong: positionSource.position.coordinate.longitude

PositionSource {
    id: positionSource
    active: true
    updateInterval: 1000
}

function updatePosition(mapLat, mapLong){
    mapView.evaluateJavaScript("setLocation("+mapLat+","+mapLong+");");
}

WebView {
    id: mapView
    url: "map.html"
    preferredWidth: parent.width
    preferredHeight: parent.height
    scale: 1
    onLoadFinished: {
        updatePosition(mapLat, mapLong);
    }
}

QML & Maps - QtWebKit + Nokia Maps Sample

Algunas consideraciones

Todos los ejemplos descriptos anteriormente son básicos, no intenten usarlos directamente en aplicaciones reales sin antes crear cierta lógica para manejar los fallos y demoras que acompañan siempre a las aplicaciones que dependen del uso del GPS.

¿Cual opción usar?

Mas allá de las ventajas antes descriptas, como por ejemplo, la flexibilidad de proveedores, la reutilización de código o la integración de forma nativa, hay un punto muy importante que deben tener en cuenta a la hora de decidir que camino seguir, este punto es la performance, mi experiencia me ha demostrado que la Location API no tiene un buen rendimiento cuando es usada en Symbian si lo comparamos con MeeGo, el obtener los datos del GPS puede demorar bastante, desde mínimo 5 segundos hasta 30 segundos o mas, en cambio en MeeGo este proceso es casi instantáneo, esto en parte se puede subsanar en Symbian usando un BusyIndicator y pidiendo paciencia al usuario, esta lentitud también se ve reflejada a la hora de cargar el Map, el cual puede tardar entre 5 y 10 segundos en completar su tarea en Symbian, todo lo contrario en MeeGo, en el cual la carga es casi inmediata usando WiFi y demorando no mas de 2 segundos si usamos 3G, es por ello que la opción QtWebKit + Nokia Maps puede llegar a ser útil en algunos casos, ya que su performance no es deslumbrante pero si un poco mejor que la que proporciona la Location API en Symbian, ademas de que es mas consistente y regular en los tiempos de carga del mapa, lo que ayuda a que su rendimiento sea mas predecible.

El porque de esta diferencia de performance de la Location API entre Symbian y MeeGo no he podido dilucidarlo aun, puede ser la diferencia de velocidad entre los dispositivos (N8/C7 680Mhz vs. N9/N950 1Gz ) o una falta de optimización en la versión para Symbian, por mientras pueden usar alguna de las opciones antes detalladas según el caso de uso que quieran resolver.

Actualización – 15/11/2011

Hoy luego de algunas pruebas usando Qt Mobility 1.2.1, versión que esta incluida en el nuevo Qt SDK 1.1.4, pude comprobar que la performance de la versión para Symbian de la Location API ha mejorado bastante, no esta al nivel de la versión para MeeGo aun, pero entra en el terreno de lo usable.

Development , , , , , , No response

N9 Apps

October 29th, 2011

N9 Apps, es un directorio de aplicaciones para dispositivos Nokia N9/950, el sitio esta muy bien diseñado, es claro, simple y fácil de usar, del lado del usuario final hay opciones para listar las aplicaciones por fecha de alta o reputación, es posible dejar comentarios en las apps y calificarlas, también se encuentra disponible una sección para dejar ideas o pedidos de apps para desarrollar, por su parte, los desarrolladores cuentan con su propio espacio, en el cual podrán subir sus apps, la cuales podrán describir de forma detallada y enlazarlas a su perfil tanto sea personal como el de su empresa.

El proyecto recién comienza y la cantidad de apps es mínima, estimo que su intención no es competir Nokia Store, sino mas bien crear una comunidad en torno a las apps, orientada quizás a un publico mas calificado que el común que visita Nokia Store, ademas de ser un buen lugar para difundir aquellas apps, que por alguna razón no puedan o no quieran ser publicadas en Nokia Store.

Solo el tiempo dirá, si N9 Apps, como Apps for MeeGo (que aun esta en gestación), logran crear una comunidad a su alrededor para hacerlos proyecto perdurables.

N9 Apps – Homepage

N9 Apps – App View

Community, Development , , , , No response