Después de más de un año esperando desde que puse mi dinero en aquel famoso Kickstarter, por fin ha llegado el paquete. Tengo un Pebble negro en mi muñeca. Tras unas horas jugando con él, estoy maravillado con la pantalla de tinta electrónica (e-paper). Se ve perfectamente a plena luz del sol y promete aguantar una semana sin cargar.
Pero seamos sinceros: la gracia de tener un "reloj inteligente" no es ver las notificaciones del teléfono, sino poder meterle mano al código. Las esferas (watchfaces) que vienen por defecto son aburridas, así que este fin de semana he desempolvado mis conocimientos de C para hacerme la mía propia.
El SDK de Pebble: Un viaje al pasado de la memoria limitada
Programar para Pebble es como volver a los años 90. No tienes gigabytes de RAM ni un recolector de basura (garbage collector) mágico que te salve de tus errores. Tienes una cantidad ínfima de memoria (unos pocos kilobytes para tu aplicación) y tienes que programar en C puro usando su SDK nativo.
El paradigma está basado en eventos. Defines una ventana (Window), le pegas capas de texto (TextLayer) o capas gráficas (InverterLayer), y te suscribes a un servicio del sistema (como el tick_timer_service) para que el sistema operativo del reloj despierte tu código cada vez que cambia el minuto.
#include "pebble_os.h"
#include "pebble_app.h"
#include "pebble_fonts.h"
// Variables globales para la ventana y la capa de texto
Window window;
TextLayer text_layer;
// Función que se ejecuta cada minuto
void handle_minute_tick(AppContextRef ctx, PebbleTickEvent *t) {
static char time_text[] = "00:00";
// Formateamos la hora actual
string_format_time(time_text, sizeof(time_text), "%H:%M", t->tick_time);
// Actualizamos el texto en pantalla
text_layer_set_text(&text_layer, time_text);
}
// Función principal de inicialización
void handle_init(AppContextRef ctx) {
window_init(&window, "Mi Watchface");
window_stack_push(&window, true /* animado */);
// Inicializamos la capa de texto en el centro de la pantalla
text_layer_init(&text_layer, GRect(0, 50, 144, 168));
text_layer_set_text_alignment(&text_layer, GTextAlignmentCenter);
text_layer_set_font(&text_layer, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD));
layer_add_child(&window.layer, &text_layer.layer);
}
Es como cuando nos peleábamos con los punteros en la universidad, pero ahora el error no es un "Segmentation Fault" en la terminal, sino que el reloj se reinicia con una pantalla triste.
Reflexión: El futuro de la muñeca
El Pebble es el dispositivo más "hacker" que he visto en mucho tiempo, pero dudo de su futuro comercial a largo plazo. Hay rumores fuertes de que gigantes como Apple y Google están preparando sus propios relojes.
Me temo que el consumidor medio preferirá pantallas OLED a todo color, animaciones fluidas y aplicaciones pesadas, aunque eso signifique tener que cargar el reloj cada noche (una aberración para un reloj, en mi humilde opinión). Por ahora, disfrutaré de mi pequeño dispositivo de tinta electrónica mientras compilo mis propias herramientas en C.