Tux snow

¿Qué ha pasado con la actualización a Lollipop?

Esta semana se ha publicado la noticia de la cancelación del programa beta para los Aquaris E5 FHD y E6. Como es lógico la noticia ha sentado mal a muchos usuarios que han visto como una actualización que estaba a punto de llegar ha desaparecido de un día para otro. Las cosas no son blancas o negras y en el artículo encontraréis un análisis de lo que ha pasado para llegar a esta situación. El firmware de la versión beta se publicará a corto plazo y cualquier usuario podrá probarlo o tomarlo como base para una ROM cocinada. Otro de los afectados ha sido el Aquaris E10. De este modelo no ha llegado a salir una versión estable en el programa de beta por lo que se desconoce si se llegará a publicar algún firmware de Lollipop.

Nota: Antes de continuar leyendo quiero comentar que soy MVP en el foro de bq. No trabajo en bq pero si tengo una relación más directa. Si piensas que soy una parte interesada y que no soy imparcial puedes cerrar la página y continuar con otras cosas.

Introducción

Android es uno de los sistemas operativos que podemos encontrar en teléfonos o tabletas junto a iOS o Windows Phone. Es un sistema operativo de código abierto, lo que quiere decir es que el código fuente está disponible para que cualquier usuario lo pueda modificar. Para que funcione hace falta también un conjunto de drivers que comuniquen el sistema operativo con los diferentes elementos del terminal como son la pantalla, la memoria o el módulo de comunicaciones. El encargado de crear los drivers es el fabricante del SoC ya que dispone de la documentación y los recursos para implementarlos.

El flujo de desarrollo de una versión de Android sería, de forma resumida, el siguiente:

  • Google publica una nueva versión de Android con el código fuente.

  • El fabricante del SOC publica el código fuente asociado a esa versión de Android.

  • Los fabricantes de los terminales utilizan el código que proporciona el fabricante del SoC para generar la ROM.

Si Google publica el código fuente y el fabricante del SoC también lo hace, ¿dónde está el problema en migrar un terminal de una versión de Android a una superior? ¿Por qué bq ha cancelado la actualización a Lollipop de sus terminales de la gama E cuando lo había prometido? La respuesta para ambas preguntas está en un elemento que ha quedado oculto y está en la parte privativa de Android.

El kernel de Android tiene una licencia GPL. A efectos de desarrollo quiere decir que cualquier modificación que haga un fabricante tiene que publicarla de forma obligatoria con el código fuente. Hay una excepción a esta regla en forma de blob binario. Un blob binario es un driver ya compilado que se puede usar en un kernel concreto. Es una forma de introducir código privativo en el kernel de GNU/Linux sin invalidar la licencia GPL. Ese archivo es una caja negra y el único que puede crearlo es el fabricante del SoC. La razón de que el fabricante del SoC proporcione un blob en lugar del código fuente es simple y está relacionada con la propiedad intelectual. El driver trabaja a bajo nivel para comunicarse con los elementos que conforman el SoC. Un tercero que tuviera acceso a ese código fuente podría conocer el funcionamiento interno del SoC y copiar algunas de sus características. Lógicamente no es un proceso trivial pero si es un punto de inicio para que trabajen.

Supongamos que desarrollamos una ROM con el código que ha publicado el fabricante del SoC. Durante el desarrollo se detecta que el teléfono no entra en el modo de ahorro de energía o que la cámara funciona mal. Después de depurar el software se encuentra que el fallo está en la parte del driver. En este punto el fabricante del terminal reporta el bug y espera a que el fabricante del SoC lo arregle. ¿Qué pasa si el fabricante del SoC no corrige el bug? En ese caso estaríamos en un callejón sin salida.

Algo similar ha ocurrido hasta hace poco en las distribuciones de GNU/Linux. En las tarjetas gráficas de AMD (ATI) y NVIDIA se pueden encontrar dos tipos de drivers. Uno era el driver del fabricante y tenía el mejor rendimiento posible. El otro driver era el libre y estaba desarrollado con la información que liberaba el fabricante. El funcionamiento era bueno pero no llegaba a sacar todo el rendimiento posible. Sólo cuando el fabricante ha publicado la documentación necesaria el rendimiento del driver libre ha mejorado de forma importante. Aplicando el mismo ejemplo se podría hacer un driver libre de los elementos del SoC que evitara los problemas que están apareciendo. El inconveniente es que para lograrlo hace falta documentación y tener recursos. Para desarrollar un driver es necesario conocer el funcionamiento interno del SoC de forma completa.

¿Qué podemos hacer en este punto?

Cuando se llega a este punto no hay una solución sencilla. El desarrollo de la ROM no puede continuar ya que tendrá fallos conocidos que no se puedan arreglar. El SoC que lleva un terminal no es único para ese fabricante sino que lo usan diferentes fabricantes. ¿El problema afectaría a todos los fabricantes que usen el mismo SoC? ¿Es posible que un fabricante tenga el driver y otro no?

En principio el problema afecta a todos los fabricantes que utilicen el mismo SoC. Hay un detalle importante que me gustaría comentar y es que la relación no es la misma con un fabricante que te compra pocas unidades de un SoC que con otro fabricante que compra muchas unidades. En este último caso hay una posición de fuerza frente al fabricante del SoC y se pueden conseguir los drivers necesarios para que todo funcione. Esa es una razón para que pueda existir algún terminal que lleve el mismo SoC y tenga Lollipop de serie. La cosa cambia si no tienes una posición de fuerza e intentas actualizar un terminal que ha salido con Kit Kat a Lollipop. El fabricante del SoC proporciona los recursos para la versión que sale de fábrica (Kit Kat) y si le interesa los recursos para pasar a una versión más reciente como es Lollipop.

Logo Mediatek

Este problema con los drivers no afecta únicamente a los fabricantes sino que afecta a los cocineros. Es relativamente sencillo encontrar ROMs con versiones modernas de Android que funciona todo excepto algún módulo hardware concreto. Si existe algún terminal con el mismo hardware y que tenga los drivers es posible coger esos drivers y pasarlos a una ROM cocinada (dejando aparte temas de propiedad intelectual). Lo que no se podría es implementar el módulo que falla sin la ayuda del fabricante del SoC.

En muchas ocasiones los cocineros consiguen portar una versión de Android más reciente que la que ha publicado un fabricante. ¿Cómo es posible que un grupo de cocineros con pocos recursos pueda conseguirlo y un fabricante no? Al final llegamos a un problema de propiedad intelectual. En las ROMs cocinadas se “permite” coger los drivers de los terminales que los tienen. Si una empresa hace lo mismo digamos que no se le ocurrirá pensar en hacerlo de nuevo por las sanciones que recibiría.

El caso de bq

Después de esta introducción nos centramos en el caso de bq. De forma resumida la situación es la siguiente:

  • Google publica el código fuente de Lollipop a finales de 2014.

  • Mediatek libera el código fuente del SoC que usan los Aquaris E5 FHD, E6 y E10 en verano de 2015.

  • El programa de beta empieza a finales de noviembre de 2015.

  • Se van publicando varias betas de los Aquaris E5 FHD y E6. Los betatesters las prueban y reportan los errores que encuentran.

  • Esta semana se publica el comunicado diciendo que se cancela la beta.

Lógicamente el comunicado es un jarro de agua fría tanto para los usuarios que esperaban Lollipop como para los equipos que estaban trabajando en la actualización. El cabreo es importante y aparecen noticias relacionadas en diferentes páginas Web a lo largo de la semana. La presencia de un SoC de Mediatek en los terminales afectados se ha vuelto un problema. Probablemente no habría pasado lo mismo si el SoC fuera de Qualcomm ya que este fabricante ofrece más facilidades a la hora de actualizar. Estas facilidades implican un incremento de coste que se habría aplicado a los terminales que compraban los usuarios.

Logo bq

En este punto el usuario afectado tiene varias opciones:

  • Seguir con Android Kit Kat.

  • Vender el teléfono y pasar a otra marca.

  • Comprar un terminal de la gama M con el descuento de 50 € que da bq.

El firmware que estaba en el programa de beta de Lollipop se va a publicar. Los usuarios y los cocineros lo podrán usar en sus terminales teniendo en cuenta que habrá algunas cosas que no funcionarán de forma correcta. Cuando se publique el firmware lo comentaré en InnerZaurus indicando los fallos que tiene así como la forma de instalarlo.

Conclusiones

No se puede discutir que lo que ha pasado con la actualización es un error que tendrá consecuencias para bq. Una de las primeras medidas que han tomado es anunciar que todos los teléfonos nuevos pasarán a usar Qualcomm. De las tabletas no se han pronunciado de momento. Los SoC que usan son principalmente de Mediatek y hay algunas tabletas que usan un SoC de Intel. Veremos en un futuro si Qualcomm pasa también a las tabletas. A los afectados les quedan las opciones que he comentado antes y reclamar ante los organismos competentes si entienden que es un problema exclusivo de bq. Está claro que bq anunció la actualización a Lollipop de esos terminales y tiene parte de la culpa pero también hay que tener en cuenta que sin la ayuda de Mediatek poco se puede hacer.

Imágenes

Referencias

Pebble Classic evoluciona al firmware del Pebble Time

Con el lanzamiento de los nuevos modelos de Pebble parecía que el modelo Classic había quedado un poco abandonado. Aparte de las nuevas características en el hardware, los modelos nuevos incluyen un cambio en la filosofía de funcionamiento. Los botones laterales pasaban de cambiar las esferas del reloj a mostrar el pasado, el presente y el futuro. Al pulsar el botón inferior se muestran los siguientes eventos del calendario. El botón superior muestra los eventos que ya han pasado y el botón central muestra las opciones del reloj que se pueden usar en el presente. Los menús también cambian permitiendo instalar aplicaciones desde el propio reloj, antes había que instalarlas desde el teléfono, así como nuevas funciones que mejoran el comportamiento global del reloj. El Pebble Classic no ha muerto, sólo estaba evolucionando…

Leer más

Pantalla inicial de Hook

Análisis del juego de puzles Hook

Hook es un juego de puzles para Android con un funcionamiento muy sencillo. En cada nivel tenemos una serie de barras que podemos quitar pulsando sobre un círculo que hay en uno de sus extremos. Al principio las barras son independientes y se pueden quitar de cualquier forma pero a medida que pasan los niveles empiezan a enlazarse entre si haciendo necesario quitarlas siguiendo cierto orden. Si cometemos un error y quitamos una barra que está bloqueada por otra el juego reinicia el nivel. Hook es un juego de pago que está en torno a 1 € y contiene 50 niveles. Este número es un poco reducido ya que es un juego de puzles que engancha y no paras de jugar hasta que te lo pasas. De momento el autor no ha sacado nuevos niveles.

Hook incluye una banda sonora relajante acorde al estilo del juego. No se persigue resolver el nivel en un tiempo concreto sino resolver cada nivel pensando con calma los movimientos. Los primeros niveles son sencillos pero a medida que evoluciona el juego se van complicando poco a poco. Podéis ver el estilo del juego en el vídeo de Youtube que hay en el artículo o probando el juego durante 10 minutos. Las compras en Google Play tienen un tiempo de prueba de 15 minutos. Si no ha pasado ese tiempo es posible obtener un rembolso de la mayoría de las aplicaciones y que nos devuelvan el dinero.

La pantalla inicial del juego es al mismo tiempo el primero de los niveles. Para superarlo pulsamos sobre el círculo que hay en uno de los extremos de la barra. Al hacerlo la barra se recogerá.

Pantalla inicial de Hook

Como he comentado al principio, si las barras son independientes se pueden quitar en cualquier orden.

Nivel con barras independientesNivel con barras independientes
Si numeramos los círculos del 1 al 4 siguiendo el orden de izquierda a derecha podemos ver las primeras limitaciones. El círculo 1 no se puede pulsar el primero ya que su barra asociada está bloqueada por las barras de los círculos 3 y 4. Por su parte la barra del círculo 3 está bloqueada también por la barra del círculo 2. El orden correcto para superar el nivel sería 2, 3, 4 y 1.

Nivel con barras dependientesNivel con barras dependientes
Un círculo puede activar varias barras al mismo tiempo como se ve en el siguiente nivel.

Nivel con barras de activacion simultaneasNivel con barras de activación simultaneas
Una misma barra puede bloquear a varias barras al mismo tiempo. La forma de resolver el puzle es la misma que en los casos anteriores pero hay que fijarse un poco más en el orden de las pulsaciones.

Nivel avanzadoNivel avanzado

A las combinaciones de barras que hemos visto se añaden círculos que controlan varias barras o puntos de unión entre barras que dependiendo de la configuración que tengan activan unas barras u otras. Hook es un juego que obliga a pensar para resolver los niveles. A diferencia de otros juegos similares no requiere usar combinaciones complejas para superar el nivel. Sólo hay que pulsar en un orden concreto los círculos que están conectados a cada  una de las barras. Para evitar que se puedan resolver los niveles por fuerza bruta, el nivel se reinicia cada vez que cometemos un error obligando a pensar mejor los movimientos antes de pulsar sobre la pantalla.

Pantalla inicial de Todoist

Todoist se actualiza a Material Design

En Android podemos encontrar una gran variedad de gestores de tareas que nos permiten organizar todas las cosas que tenemos que hacer a lo largo del día. Se pueden encontrar gestores de tareas que se ejecutan sobre los servicios de Google. En este caso la integración con el calendario es buena pero carecen de funcionalidad al estar limitados por la propia aplicación de tareas del calendario de Google. Si queremos superar esta limitación se hace necesario trabajar con gestores de tareas que no estén integrados en los servicios de Google. Dentro de las aplicaciones de Android destacan Wunderlist (comprada por Microsoft recientemente) y Todoist.

De Todoist ya he hablado en alguna ocasión en InnerZaurus. Tiene un interfaz limpio y es cómodo de usar al poder definir muchos de los parámetros de una tarea sin usar el ratón. Todoist tiene varios clientes que se ejecutan en el navegador Web, en dispositivos móviles o en aplicaciones del PC como Thunderbird. Para conseguir esta variedad de plataformas y no morir en el intento han usado HTML5 para la mayor parte de los clientes aunque existen aplicaciones nativas que se adaptan a las características del dispositivo.Las capturas se han tomado en una tableta para que se vea la adaptación de la aplicación al tamaño de la pantalla.

La pantalla está formada por dos bloques. En el más pequeño se muestran varios filtros relacionados con la fechas de las tareas, el listado de proyectos y el listado de etiquetas. Un detalle que quiero comentar es que Todoist tiene una versión gratuita y una de pago. Lógicamente la versión de pago por suscripción tiene más funciones aunque se puede usar la versión gratuita para la mayoría de los casos sin problemas. El coste es de 29 $ al año y se puede probar la versión de suscripción durante un par de semanas. Con las opciones básicas se pueden ver las tareas que cumplen determinadas condiciones. Al usar los filtros se pueden definir condiciones más completas. Por ejemplo, ver todas las tareas que tienen una etiqueta concreta, vencen en dos semanas y están asignadas a un usuario concreto.

Pantalla inicial de Todoist

La bandeja de entrada es una especie de cajón desastre en el que se dejan todas las tareas que no se han organizado. Una vez se han clasificado (no es obligatorio) pasarán a mostrarse en el proyecto correspondiente.

Bandeja de entradaBandeja de entrada

Las tareas se pueden crear de forma rápida pulsando en el selector de texto que hay en la parte inferior de la pantalla. Es suficiente con escribir la descripción de la tarea y la fecha de finalización si la tiene.

Creación de una tarea rápidaCreación de una tarea rápida

Si pulsamos en el botón flotante se abrirá una pantalla en la que también se pueden definir las tareas. La diferencia con la forma anterior está en los detalles que se definen de la tarea.Creación de una tarea con detallesCreación de una tarea con detalles

Algunos campos como la fecha incluyen un apartado propio en la ayuda del programa. En Todoist no es necesario saber el día del mes que cae el próximo lunes. Simplemente lo escribimos y la aplicación lo calculará por nosotros. Esta función se aplica también a las tareas que tienen una fecha de repetición.

Formatos admitidos para la fechaFormatos admitidos para la fecha

Una vez hemos añadido las tareas a la aplicación el siguiente paso es ver esa información. Las vistas básicas permiten mostrar las tareas que finalizan en el día actual o durante los próximos 7 días. Éste sería el funcionamiento básico pero aún quedan las funciones más útiles: las etiquetas y los filtros. Una etiqueta permite agrupar las tareas que comparten un rasgo común. En mi caso tengo dos proyectos Web en los que participo (InnerZaurus, InnerDroid). Dentro de cada proyecto defino las tareas relacionadas con el mantenimiento de las páginas o con la redacción de los artículos. Si en las tareas que están relacionadas con los artículos añado la etiqueta @artículos podré ver de forma rápida todas las tareas que tienen la etiqueta con independencia del proyecto en el que se encuentren. Los datos de Todoist se sincronizan con su servidor y permite que una etiqueta o filtro que esté definido en el ordenador pase automáticamente al teléfono o la tableta.

 

Próximos 7 díasPróximos 7 días

Otra de las funciones que tiene la suscripción permite ver diferentes estadísticas de las tareas realizadas. Se puede ver el progreso de las tareas en una vista semanal o acumulada por proyectos. Supongamos que tenemos un proyecto dividido en varios subproyectos. Mediante esta vista es posible ver el porcentaje de las tareas realizadas que pertenecen a cada proyecto o el día se la semana en la que se han finalizado más tareas.

EstadísticasEstadísticas 

Normalmente el tiempo que tenemos para realizar las tareas es limitado mientras que el número de tareas crece rápidamente. Ante este escenario hay que priorizar las tareas de forma que las tareas importantes se realicen siempre y las tareas prescindibles se realicen si hay tiempo. Con Todoist las tareas se pueden definir como tareas normales o como tareas anidades permitiendo dividir una tarea grande en tareas más pequeñas y manejables. Las tareas se agrupan en proyectos aunque hay que recordar que la separación no es absoluta. Si hay tareas que son comunes a varios proyectos se puede definir una etiqueta y después trabajar con la etiqueta como si fuera un tipo de proyecto.

En la versión comercial se pueden ver las tareas en un calendario de red. Si añadimos este calendario a Google Calendar o a cualquier aplicación que pueda trabajar con calendarios en formato ICAL será posible ver de forma gráfica las fechas en las que finalizan las tareas. Si bien es útil esta función, aún tiene algunas carencias que irán arreglando en las próximas versiones. Por ejemplo, al ver las tareas por calendario se pierde la información de la prioridad o del proyecto al que pertenecen. Con algunos trucos se puede recuperar la información pero ya nos obliga a cambiar un poco la forma de trabajar.

Carpeta con los archivos del proyecto

Creación de una esfera funcional para el Pebble

En el último artículo vimos los pasos que hay que seguir para preparar el entorno de programación del reloj Pebble en Ubuntu. Es importante realizar ese artículo antes de empezar con este artículo ya que se usan algunas herramientas del SDK. Al final del artículo tendréis en el reloj una esfera básica pero completamente funcional. La esfera está formada por una única pantalla en la que se muestra la hora del reloj. En las siguientes entregas añadiremos nuevas funcionas para que sea útil y práctica. He subido el código fuente del proyecto a mi página de GitHub. Cada paso del artículo tiene un commit diferente por lo que podréis pasar de uno a otro con facilidad.

Como he comentado partimos de que el SDK de Pebble está correctamente instalado y podemos hacer una captura de pantalla del reloj desde la línea de comandos. Hay dos formas de seguir el artículo. La primera consiste en ir paso a paso con el programa básico mientras que la segunda consiste en descargar el código que está publicado en Git y trabajar de forma local. La carpeta del proyecto incluye todos los archivos necesarios para compilar la esfera e instalarla en el reloj Pebble. Podéis añadir las sugerencias o los bugs en la página del proyecto o en los comentarios del artículo.

Nota:En el artículo uso como base el tutorial de la Web de Pebble.

Creación del esqueleto de la aplicación

Cualquier proyecto de Pebble necesita un esqueleto sobre el que se irán montando todos los elementos que forman la esfera o la aplicación. Este esqueleto se puede crear usando las funciones que da el SDK de Pebble. Abrimos una consola y creamos la carpeta de trabajo con el comando:

mkdir ~/Proyectos

Entramos en la carpeta que contendrá el proyecto:

cd ~/Proyectos

Para crear el esqueleto ejecutamos:

pebble new-project NombreEsfera

Dentro de la carpeta hay varios archivos de configuración y dos carpetas que contienen el código fuente en C y los recursos de la aplicación.

Carpeta con los archivos del proyecto

El archivo appinfo.json con tiene información de la aplicación como el editor o el tipo de aplicación que es. Abrimos el archivo con un editor de texto y sustituimos la línea que contiene la palabra “whatchafe”: false por “watchface”: true

Guardamos el archivo y entramos en la carpeta src. Editamos el archivo para hacer algunos cambios. Pegamos el esqueleto en el archivo. En la primera línea hay que incluir el archivo pebble.h (el editor de la página elimina el código).

static void init() {   }   static void deinit() {   }   int main(void) {      init();      app_event_loop();      deinit(); }
Cualquier aplicación del reloj Pebble tiene que tener un esqueleto parecido. El método main() es el punto de inicio del programa y en él se gestionan los elementos de la aplicación y se ejecuta el bucle de eventos. De momento dejaremos el funcionamiento que tiene por defecto el método app_event_loop() y nos centraremos en los dos otros métodos. El método init() se encarga de iniciarlizar los elementos que intervienen en la aplicación como son las pantallas de la aplicación, los campos de texto o los gráficos. Por su parte deinit() hace una función similar pero liberando los recursos que se han definido en init(). Es importante que nada más hemos inicializado un recurso escribamos también su liberación en el método correspondiente.

Haremos tres iteraciones en la esfera:

  • Crear una pantalla en blanco e instalarla en el Pebble.

  • Crear un campo de texto y añadirlo a la pantalla.

  • Actualizar el campo de texto para que muestre la hora.

Crear una pantalla en blanco e instalarla en el Pebble

Definimos la estructura que formará la pantalla

// Pantallas que forman la esfera static Window *s_main_window;

Usaremos dos métodos para inicializar los recursos de la pantalla y posteriormente liberarlos. Dentro de estos métodos definiremos más adelante un campo de texto que mostrará la hora del sistema.

/**  * @fn static void main_window_load(Window *window)  * @brief Inicialización de la pantalla principal  */ static void main_window_load(Window *window) { } /**  * @fn static void main_window_unload(Window *window)  * @brief Liberación de la pantalla principal  */ static void main_window_unload(Window *window) { }

En el método init() inicializaremos la pantalla, asociaremos los métodos de reserva y liberación de los recursos y añadiremos la pantalla como pantalla principal de la esfera.

/** * @fn static void init()  * @brief Inicialización de los recursos de la esfera  */  static void init() {      // Creación de las pantallas     	s_main_window = window_create(); 	 	// Asociación de los handlers que gestionan la pantalla      window_set_window_handlers(s_main_window, (WindowHandlers) {  	    .load = main_window_load, 		.unload = main_window_unload }); 	 	// Mostramos la pantalla en el reloj      window_stack_push(s_main_window, true);  	}

Recordad que al mismo tiempo que hay que liberar los recursos que hemos usado en el método deinit()

/**   * @fn static void deinit()   * @brief Liberación de los recursos de la esfera   */  static void deinit() {       // Liberación de los recursos que usa la pantalla de la esfera      window_destroy(s_main_window);  }

Guardamos el archivo y volvemos a la consola. Para compilar el proyecto simplemente tenemos que ejecutar el comando pebble build en la carpeta que contiene el proyecto.

Compilación del proyectoCompilación del proyecto

Si no hay ningún error el siguiente paso es instalarlo en el Pebble.

pebble install --phone 192.168.1.100

A los pocos segundos aparecerá la esfera en el reloj. Podemos hacer una captura de pantalla con:

pebble screenshot --phone 192.168.1.100

Esfera inicialEsfera inicial

Puede parecer poca cosa tener una pantalla en blanco en el Pebble. Ésto es cierto pero también hay que tener en cuenta que es una esfera muy básica que apenas contiene una pantalla. Veremos a continuación la forma de añadir un campo de texto para mostrar la hora.

Crear un campo de texto y añadirlo a la pantalla

El primer paso es definir la estructura que hará la función de un campo de texto.

static TextLayer *s_time_layer;

En el apartado anterior hemos definido las características de la pantalla en el método init() junto con dos métodos auxiliares que reservan y liberan los recursos de la pantalla. Modificamos el método main_window_load (..) para añadir el campo de texto.

/**  * @fn static void main_window_load(Window *window)  * @brief Inicialización de la pantalla principal  */ static void main_window_load(Window *window) {      	// Creación del campo de texto. Definimos con un rectángulo las  	// coordenadas del campo de texto     s_time_layer = text_layer_create(GRect(0, 55, 144, 50));     text_layer_set_background_color(s_time_layer, GColorClear);     text_layer_set_text_color(s_time_layer, GColorBlack);     text_layer_set_text(s_time_layer, "00:00"); 	     // Formato     text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD));     text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter);       // Insertamos el campo de texto en la pantalla principal     layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer)); }

De la misma forma escribimos el código equivalente para liberar el campo de texto cuando se cierre la esfera.

/**  * @fn static void main_window_unload(Window *window)  * @brief Liberación de la pantalla principal  */ static void main_window_unload(Window *window) {      // Liberamos los recursos del campo de texto     text_layer_destroy(s_time_layer); }

Guardamos los cambios, compilamos el proyecto y lo instalamos en el Pebble. No es necesario eliminar la esfera anterior para poner la nueva versión.

Esfera con un campo de textoEsfera con un campo de texto

El texto es estático. Como un reloj que no muestra la hora es algo inutil tendremos que añadir un nuevo método que se encargue de actualizar el campo de texto con la hora del sistema.

Actualizar el campo de texto para que muestre la hora

En el funcionamiento normal de una aplicación de Pebble se ejecutan en segundo plano una serie de eventos que ofrecen diferentes funcionalidades. Por ejemplo, hay un evento que nos avisa con una frecuencia constante y es el que usaremos para actualizar la hora. Es posible “escuchar” el evento con diferentes filtros para las horas, los minutos o los segundos. No hay en principio una limitación en su uso pero hay que tener en cuenta el consumo de la esfera. Si ejecutamos código cada segundo el consumo será superior a ejecutar ese mismo código cada minuto.

El método update_time() se encargará de actualizar el campo de texto que mostrará la hora.

/**  * @fn static void update_time()  * @brief Actualiza la hora que se muestra en el campo de texto  */  static void update_time() {                  // Leemos la hora del sistema         time_t temp = time(NULL);          struct tm *tick_time = localtime(&temp); 		         // Creamos un buffer para guardar la hora         static char buffer[] = "00:00"; 		         // Actualizamos el buffer con la hora actual         if(clock_is_24h_style() == true) {         // 24 h                 strftime(buffer, sizeof("00:00"), "%H:%M", tick_time);         } else {                 // 12 h                 strftime(buffer, sizeof("00:00"), "%I:%M", tick_time);         } 		         // Actualizamos el campo de texto         text_layer_set_text(s_time_layer, buffer); }

El método update_time() no se ejecuta de forma continúa porque gastaría en poco tiempo la batería del Pebble (aparte de no tener mucho sentido). Para configurar la frecuencia con la que se ejecuta el método usaremos el método tick_handler (). Su funcionamiento es simple: seleccionamos la frecuencia de ejecución del código y el runtime de Pebble lo ejecutará por nosotros.

/**  * @fn static void tick_handler(struct tm *tick_time, TimeUnits units_changed)  * @brief   */  static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {          // Actualizamos el campo de texto de la hora         update_time(); }

Por último modificamos el método init() para configurar la base de tiempos del reloj para que nos notifique cada minuto y se actualice la hora.

       // Servicio TickTimerService (cambios cada minuto)         tick_timer_service_subscribe(MINUTE_UNIT, tick_handler); 		         // Mostramos la pantalla en el reloj         window_stack_push(s_main_window, true);                  // Actualizamos la hora en la primera ejecución         update_time();

Compilamos el proyecto y lo instalamos en el Pebble. En esta ocasión el campo de texto mostrará la hora.

Esfera con la horaEsfera con la hora

Conclusiones

Este artículo ha quedado un poco denso pero no es complicado de seguir. El primer paso para crear una esfera es usar los comandos del SDK para crear el esqueleto del proyecto. Después sólo hay que crear la pantalla principal y los elementos que ésta contiene como los campos de texto. Si hacéis la esfera de forma progresiva es sencillo de entender. Hay que tener un poco de base de programación en C pero no son necesarios conocimientos avanzados.

Recordad que el código fuente está disponible en GitHub y cada apartado del artículo está en un commit diferente. Podéis ver el código fuente de forma general y los cambios introducidos entre los diferentes commits. Cualquier duda o sugerencia que tengáis la podéis preguntar en los comentarios o en la página de GitHub.

Selección del idioma del instalador

Hard Reset en el Aquaris E5 4G (LTE)

En algunas ocasiones pueden aparecer problemas en el teléfono que impidan su correcto funcionamiento. Por ejemplo, instalamos una aplicación que usa permisos de root y modifica algún archivo crítico del sistema. En esos casos no sirve la opción de restaurar la configuración de fábrica debido a que se han modificado partes de Android. La opción de restaurar la configuración de fábrica sólo elimina los datos del usuario. En este escenario las opciones son reinstalar Android o mandar el terminal al servicio técnico para que lo repare. En la mayoría de los casos es suficiente con hacer el Hard Reset (la reinstalación de Android) para recuperar el funcionamiento del teléfono.

El proceso varía dependiendo del SOC que use el terminal. Los teléfonos que usan Mediatek se actualizan con la herramienta SPFlash Tool mientas que Qualcomm utiliza el modo Fastboot. En este artículo veremos la forma de hacer el Hard Reset para Qualcomm con un Aquaris E5 4G. Para los que tengáis Mediatek tendréis que esperar un par de días a que actualice el artículo que hay en esta página. SPFlash Tool se ha actualizado desde la fecha en la que escribí el artículo y la apariencia cambia un poco. 

Créditos

Los pasos los he realizado con un Aquaris E5 4G y Windows 8.1 (x64). Algunas de las pantallas pueden ser diferentes dependiendo de la versión de Windows que tengáis. Recordad que el Hard Reset es un proceso destructivo y se perderán todos los datos que tenga el teléfono. De la misma forma, cualquier modificación que tenga el sistema se revertirá al reinstalar Android. Vale la pena perder media hora en guardar una copia de los datos que intentar recuperarlos después del Hard Reset. Descargamos los archivos que necesitaremos:

Después de descargar los dos archivos podremos empezar el proceso de actualización. Es importante que el teléfono esté cargado al 100% antes de empezar.

Instalación del driver

El primer paso es descomprimir el archivo del driver de Qualcomm. No importa la carpeta en la que dejemos el archivo. Ejecutamos el archivo BQ_ Handset_USB_Driver. exe. El otro archivo que hay en la carpeta se usa para la configuración de ADB. No es necesario hacer ninguna operación sobre el archivo.

 

Asistente de instalación del driver

 

 La ruta de instalación puede variar dependiendo de la versión de Windows que tenga instalada el ordenador.

Ruta de instalación del driver

 

Es posible que en la instalación aparezca una pantalla indicando que la instalación del driver ha fallado. El problema afecta a la depuración de aplicaciones de Android en el teléfono (se puede arreglar) pero no influye en la reinstalación de Android.

El siguiente paso es descomprimir el firmware que hemos descargado en C. Los archivos tienen que estar dentro de la carpeta fastbootdownload.

Carpeta que contiene el firmware

Instalación del firmware

Esta parte de la instalación varía respectoa la que aparece en el foro de bq. Si bien se puede hacer de la forma que aparece en el foro, hay una forma más sencilla y que da menos problemas. Para continuar apagamos el teléfono manteniendo pulsado el botón de encendido y seleccionando Apagar. Si el teléfono estuviera bloqueado se puede conseguir lo mismo pulsando durante 20 segundos el botón de encendido. Dejamos el teléfono conectado al ordenador con el cable USB.

Hay que pulsar los botones de encendido y bajar volumen hasta que aparezcan las letras de bq. Si lo hemos hecho bien aparecerá en la parte inferior de la pantalla el texto Fast boot mode con letras en color rojo. Recordad que estos pasos se aplican al Aquaris E5 4G. Los terminales que usen SOCs de Mediatek se programan de otra forma. 

La parte de Android ya ha acabado. Abrimos el Administrador de dispositivos de Windows. Se verá un dispositivo dentro de la categoría ADB Interface cuando se conecte el teléfono en modo Fastboot.

Administrador de dispositivos de Windows

 

Instalación del firmware

Dejamos el teléfono sobre la mesa y no lo tocamos durante todo el proceso. Entramos en la carpeta que hemos descomprimido el firmware y hacemos doble click sobre el archivo 8916_ fastboot_ all_ images. bat para empezar la instalación.

Instalación del firmware desde la consola de Windows

Sabremos que el Hard Reset ha finalizado cuando el teléfono se reinicie de forma automática. Suele durar un par de minutos todo el proceso. 

Conclusiones

En algunas ocasiones la única opción que nos queda para resucitar un teléfono es hacer un Hard Reset. Durante el proceso se eliminan todos los datos del sistema. Se puede dar el caso que el teléfono siga fallando después de reinstalar Android. En este caso será necesario mandarlo al servicio técnico para que lo reparen. La primera vez que se enciende el teléfono se ejecuta el asistente de Google. En uno de los pasos se da la opción de recuperar un backup de los datos. Aunque suele ser buena idea para recuperar la información que teníamos antes de hacer el Hard Reset, también puede instalar de nuevo las aplicaciones problemáticas y que hacían que el teléfono no funcionase bien. Lo más seguro es tener permisos de root en el teléfono y hacer un backup con Titanium Backup. El backup será local al teléfono y se podrán seleccionar las aplicaciones que se restauran de forma sencilla y rápida.

Para cualquier duda no dudéis en preguntar en los comentarios. 

Programa de beta abierta para la Curie 2 QC (Wifi / 3G)

bq ha abierto esta mañana el programa de beta para la tableta Curie 2 QC en sus dos versiones (Wifi y 3G). Esta beta lleva Android Kit Kat y sigue la misma filosofía equivalente que existía con la Edison 2 QC. Para participar hay que tener un DNI español, uno de los modelos de la tableta y cumplir las condiciones generales que aparecen. Al participar en la beta el usuario se compromete a no comentar nada de la beta fuera del foro privado asociado ni a distribuir el archivo del firmware. La instalación del firmware se hace por Hard Reset, por esta razón se perderán todos los datos que tenga la tableta. Un detalle importante es que se aconseja no rootear la tableta con Kit Kat. La razón es simple: es más sencillo replicar un fallo si el sistema del usuario es el mismo que están probando en bq. Los enlaces son:

Recordad que las plazas son limitadas. Cuando se llene el cupo de usuarios las inscripciones continuarán pero los usuarios que se apunten en ese momento pasaran a estar en la reserva.

Primera sincronización y actualización

Instalación de esferas y aplicaciones en el reloj Pebble

En el primer artículo vimos un resumen de las funciones que tiene el reloj Pebble así como algunas de sus características. Aparte del funcionamiento básico, Pebble permite la instalación de temas (llamados Esferas) y aplicaciones. La memoria está un poco limitada y sólo podremos instalar 8 elementos, es decir, la suma de las esferas y las aplicaciones puede ser como mucho 8. Los elementos que no usemos se tienen que eliminar del reloj pero se quedan almacenados en la aplicación del teléfono de forma que podemos instalarlos de nuevo manteniendo la configuración que tenían originalmente. Recientemente se ha liberado una versión nueva del firmware que permite usar Android Wear. De esta forma es posible contestar mensajes desde el reloj utilizando respuestas predefinidas o abrir en el teléfono la aplicación que ha generado una notificación.

Android Wear también permite el control del teléfono usando comandos de voz. En la versión inicial del Pebble no se puede usar esta función ya que no tiene micrófono. Esta función parece que si que estará disponible en el nuevo modelo que pusieron a la venta ayer y que se llama Pebble Time. El reloj se puede comprar en Kickstarter y las entregas se realizarán a partir de Mayo.

Aunque Pebble puede funcionar de forma autónoma sin un teléfono que lo controle es cierto que pierde parte de sus funciones interesantes. Por esta razón el primer paso que realizamos al encender el teléfono es sincronizarlo con el teléfono usando la aplicación gratuita Pebble. Si ha salido alguna actualización del firmware podremos instalarla en este punto.

Nota: Las capturas en blanco y negro corresponden a la pantalla del Pebble.

Primera sincronización y actualización

Instalación de una esfera

Las esferas y las aplicaciones se instalan desde la tienda que viene en la aplicación de Pebble. La mayoría de los temas y las aplicaciones son gratuitas. Abrimos la aplicación de Pebble y seleccionamos la opción Obtener Esferas. La esfera elegida es City Lights. De fondo se muestra una ciudad con bloques de edificios. En el cielo de la ciudad aparece la previsión del tiempo y el nivel de batería del reloj está determinada por el número de luces que se ven en los edificios. A medida que baja la carga se irán apagando las luces.

Primer inicio de la esferaPrimer inicio de la esfera

Tanto las esferas como las aplicaciones pueden estar traducidas a varios idiomas. La esfera City Lights está traducida al castellano. Para configurarla accedemos al aparado Mi Pebble, seleccionamos la esfera y pulsamos en el botón Ajustes. Un detalle importante es que tenemos que tener activada la conexión a Internet para configurar una esfera.

Configuración de la esfera City LightsConfiguración de la esfera City Lights

Aplicamos la configuración pulsando en el botón Submit y los cambios se enviarán al reloj.

Configuración aplicada a la esferaConfiguración aplicada a la esfera

La esfera con los colores invertidos se muestra a continuación.

Esfera con los colores invertidosEsfera con los colores invertidos

La forma de instalar las otras esferas de la tienda es idéntica al ejemplo que hemos visto. Dependiendo de la esfera es posible que no tenga opciones de configuración o que sólo se encuentre en inglés.

Instalación de una aplicación

La forma de instalar una aplicación es similar a la que hemos seguido. En el menú de Pebble seleccionamos Obtener aplicaciones. En este ejemplo instalaremos una brújula en el reloj.

Aplicación de brújula CompassAplicación de brújula Compass

Después de instalar la aplicación la podemos lanzar desde el menú que tiene el reloj Pebble y que se muestra al pulsar el botón central. Para usar la aplicación Compass es necesario que el cargador esté desenchufado del reloj.

Interferencia del cargadorInterferencia del cargador

El siguiente paso es calibrar la brújula. Hay que mover el reloj de forma que la pelota pase por todas las posiciones posibles.

Calibración de la brújulaCalibración de la brújula

Una vez está calibrada la brújula aparecerá la pantalla principal.

Compass en ejecuciónCompass en ejecución

Conclusiones

A lo largo del artículo hemos visto la forma de instalar esferas y aplicaciones en el reloj Pebble. Las esferas pueden representar diferentes tipos de relojes, desde los más clásicos en formato analógica hasta relojes binarios o relacionados con temáticas concretas. En el caso de las aplicaciones el rango es más amplio y se pueden encontrar aplicaciones que pueden trabajar de forma independiente como es el caso de Compass o aplicaciones que se comunican con una aplicación concreta en el teléfono. En este último caso tenemos la aplicación de Endomondo que proporciona información adicional al ejercicio que estamos realizando.

Quedan pendientes algunos temas que pueden ser interesantes como el control de la música desde el reloj o la visualización de las notificaciones. Aparte de usar esferas o aplicaciones que han hecho otros usuarios también es posible programarlas tanto de forma online en el servidor de Pebble como de forma offline en un equipo con GNU/Linux. Los lenguajes de programación son varios destacando C o Javascript.

Principal

El reloj inteligente Pebble

Pebble es uno de los tantos relojes inteligentes (smartwatch) que podemos encontrar en el mercado. Si lo comparamos frente a los modelos que ofrecen otras marcas puede parecer que sale perdiendo, pero si analizamos las características que tiene podemos ver que es un rival a tener en cuenta. Una de las primeras diferencias es que es un reloj multiplataforma, es decir, puede funcionar de forma nativa con iOS y Android. En estos momentos no soporte Android Wear en la versión estable del firmware aunque ya se puede usar en la versión beta. La pantalla de Pebble es de tinta electrónica y el reloj se controla usando los botones físicos que lleva en los laterales. Estas dos características hacen que el consumo de la batería se reduzca llegando a tener una duración que oscila entre los 4 / 5 días. Entre sus funciones destaca la posibilidad de personalizar la apariencia del reloj, la gestión remota de las aplicaciones del teléfono y la posibilidad de usar aplicaciones enfocadas al ejercicio entre otras funciones.

 

Introducción

Pebble comparte la misma tecnología que usan los libros electrónicos. Se puede ver la pantalla a plena luz del sol y puede iluminar la pantalla si estamos a oscuras. Cuando usamos un libro electrónico se puede observar un pequeño retardo desde que pulsamos un botón hasta que se actualiza la vista. La respuesta de la pantalla no es rápida en un libro electrónico y se aprecia este efecto. En el uso normal del reloj no se aprecian los retardos y el comportamiento es similar al que veríamos en una pantalla tradicional. Por ejemplo, si mostramos un reloj analógico la manecilla de los segundos se dibuja sin retardos apreciables.

Los botones que tienen el reloj son cuatro y sus funciones son similares a los cursores de un teclado de ordenador. Se usan dos para subir o bajar entre las opciones del reloj, uno para aceptar la seleccion actual y otro para volver a una pantalla anterior. Dentro del menú del reloj es posible realizar algunos ajustes básicos pero para sacarle partido será necesario utilizar un teléfono con iOS o Android.

Aplicación de Android

El primer paso para usar el Pebble es instalar en el teléfono o la tableta la aplicación de Android. La comunicación se realiza usando Bluetooth v4.0 por lo que el consumo se reduce aún más. Durante el asistente de inicio se configuran algunos detalles del reloj Pebble como son el idioma o se instalas las actualizaciones del firmware. Nos aparece el aviso de actualización en la pantalla, seguimos las instrucciones y ya está el reloj actualizado. Al finalizar el asistente nos aparecerá una pantalla parecida a la mostrada a continuación.

Principal

La primera opción permite configurar los temas (llamados esferas en la aplicación) y gestionar las aplicaciones que están instaladas. En la parte superior de la pantalla se puede ver la esfera que se está mostrando en el reloj en estos momentos y la posibilidad de realizar ajustes extras. Esta función está disponible en la mayoría de las esferas y permite configurar la presencia de elementos como la hora, la manecilla de los segundos o definir la localización en la que estamos. El reloj usará la localización para obtener la previsión meteorológica y mostrarla en pantalla. En la parte inferior aparecen las esferas o aplicaciones que hemos eliminado.

Ajustes del relojAjustes del reloj

Tanto las aplicaciones como las esferas se encuentran en una tienda propia que es accesible desde la aplicación. Para instalar una esfera pulsamos sobre ella y después en el botón de instalación que aparece en la ficha de la esfera. Esperamos un par de segundos y ya está disponible en el reloj.

EsferasEsferas

De la misma forma tenemos un apartado para las aplicaciones. Se pueden encontrar aplicaciones generales, orientados a la salud y juegos.

AplicacionesAplicaciones

Ya hemos visto por encima el uso de las esferas y las aplicaciones. La última función que conviene comentar está relacionada con las notificaciones. Por ejemplo, nos llega un mensaje al teléfono o entra una llamada. A los pocos segundos aparecerá un aviso en el reloj indicando el evento. Si recibimos una llamada es necesario coger el teléfono pero si el evento es un mensaje podemos leerlo en la pantalla.

Conclusiones

En este artículo hemos visto una pequeña introducción del reloj Pebble. A las funciones básicas de un reloj tradicional se le unen la personalización que permite, el uso de aplicaciones propias y la posibilidad de leer las notificaciones que llegan al teléfono. En el próximo artículo veremos de forma detallada la forma de instalar las esferas y las aplicaciones.

01 Portada

Análisis de God of Light

God of Light es un juego de puzles tranquilo y con una banda sonora que acompaña a los niveles. El universo del juego está iluminado por varios árboles que crean la luz. De repente los árboles empiezan a perder la luz uno a uno hasta que sólo queda una pequeña luz en uno de los árboles. Esa luz es Shiny, un pequeño sol que tendrá que restaurar las fuentes de vida que componen cada árbol para poder recuperar la luz y vencer a la oscuridad. La mecánica del juego es simple: pulsamos sobre Shiny y desplazamos por la pantalla el haz de luz que emite. Con la ayuda de espejos, prismas o lupas iremos completando los diferentes niveles hasta recuperar la luz del árbol. El juego tiene 125 niveles distribuidos en 5 árboles. De estos árboles sólo el primero está disponible en la versión gratuita. Para poder jugar en el resto de los árboles hay que pagar 1,49 € aproximadamente. Os invito a probar el juego y a disfrutar de su banda sonora con cascos. Si os atrapa el primer árbol tendréis cuatro más. Cada uno de ellos con nuevos elementos para los puzles que van desde agujeros negros, teletransportadores de luz o hielo.

God of Light es un juego que tiene logros que se sincronizan con las principales redes sociales. Por defecto usa Google+ pero también soporta Facebook y Twitter. Si bien sincroniza los logros con Google+ no hace lo mismo con los datos de las partidas. Por esta razón será necesario hacer un backup de los datos antes de eliminar el juego.

Portada

El juego se encuentra traducido a varios idiomas, incluido el español. No hay muchos textos en el juego pero se agradece que esté traducido para que pueda llegar a la mayor parte de los usuarios.

02 IdiomasIdiomas del juego

En la introducción hemos visto parte de la historia de God of Light. Shiny permanece dormido en la primera fuente de vida hasta que llegamos nosotros.

03 Inicio del juegoInicio del juego

Los primeros niveles forman parte de un tutorial. El primer paso es pulsar sobre Shiny para despertarlo y que emite un haz de luz.

04 Primer nivelPrimer nivel

Una vez lo hemos hecho empieza el nivel. En cada nivel hay un objetivo principal que es hacer que el haz de luz de Shiny llegue a la fuente de vida y otro secundario que es pasar por todas las piedras que encontramos en el nivel. Cuando empezamos un nivel todo está inmerso en la oscuridad y no conocemos ni los elementos que forman el nivel ni su posición. Por tanto, uno de los primeros pasos después de despertar a Shiny es desplazar el haz de luz para conocer parte de los elementos que tiene el nivel.

05 Primer nivel superadoPrimer nivel superado

En los primeros niveles lo más sencillo es buscar la posición de las piedras ya que muchos de los elementos del nivel están cercanos a ellas. Un detalle interesante del juego es que los niveles no tienen una única solución, es decir, podemos resolver el nivel de diferentes formas ajustando los espejos o los prismas que encontremos. Por ejemplo, en la siguiente imagen vemos la solución de uno de los niveles. El nivel está resuelto pero no se han usado todos los elementos. Observad el espejo que hay entre el espejo que hay en la esquina superior izquierda y la fuente de vida.

06 ElementosElementos del juego

Si vemos el inicio del nivel la cosa es un poco diferente. Inicialmente sólo podemos dirigir el haz de Shiny a un espejo y del espejo a una lupa. El resto de elementos no está accesible hasta que superemos ciertos obstáculos que podemos encontrar en forma de piedras o barreras.

07 ElementosElementos del juego al inicio de nivel

En los niveles más avanzados podemos encontrar nuevos elementos en los puzles que los complican un poco más. Como ejemplo tenemos los agujeros negros que tienen la habilidad de curvar la luz de Shiny permitiendo que el haz llegue a lugares que no podría llegar directamente.

08 AgujerosJugando con agujeros negros

Los niveles están rodeados de una oscuridad que sólo desaparece cuando el haz de luz de Shiny recorre la pantalla. En algunos niveles el haz de luz pasará por cristales que cambiarán su color y nos permitirán abrir barreras que sólo reaccionan ante un color determinado.

09 ColoridoNivel colorido

El nivel finaliza cuando iluminamos la fuente de vida y pulsamos sobre ella. Para calcular la puntuación se cuenta el número de piedras que ilumina el haz de Shiny. En este caso se ha resuelto el nivel de forma correcta pero sólo se han iluminado dos de las piedras. Algunos niveles del juego son complicados por la gran cantidad de elementos que encontramos. Si necesitamos ayuda podemos utilizar unas pequeñas luciérnagas que se recogen al iluminarlas y que muestran durante varios segundos la distribución de los haces de luz que permiten superar el nivel. Otra forma de conseguir luciérnagas es viendo algunos vídeos de publicidad.

10 Nivel superadoNivel superado

Los puzles se resuelven con elementos básicos como espejos o prismas y con elementos concretos de cada árbol. Si encontramos una barrera de piedra la podemos superar pasando por una lupa el haz, si tenemos una superficie helada la podemos usar para desviar el haz y llegar a otros puntos. En el juego encontramos de momento 125 niveles. Cada cierto tiempo se añaden nuevos niveles.

11 Abol inicialÁrbol inicial

12 Arbol petreoÁrbol pétreo

13 Arbol azulÁrbol azul

14 Arbol heladoÁrbol helado

15 Arbol espacialÁrbol espacial

Get it on Google Play

Conclusiones

God of Light es un juego de puzles que utiliza el haz de luz de Shiny (un pequeño sol) como hilo conductor para resolver los niveles. Los primeros puzles son sencillos pero la cosa se complica poco a poco hasta que tengamos que dedicar tiempo a resolver cada uno de los niveles. Para resolver los niveles contamos elementos típicos como espejos, prismas o lupas y otros no tan típicos como agujeros negros, teletransportadores o superficies de hielo. Los niveles no tienen una única solución sino que se puede llegar a iluminar la fuente de vida de diferentes formas. El único objetivo es iluminar todas las piedras y disfrutar del juego.

God of Light es un juego gratuito con compras dentro de la aplicación. Inicialmente se puede jugar el primer árbol que corresponde a 25 niveles. Si queremos continuar será necesario pagar, ya sea por un nivel suelto a 0,79 € o por todos los niveles con un precio de 1,49 €. Si lo probáis no os decepcionará.