Mi aplicación ya comienza a hacer algo

Estoy muy contento, bueno, tampoco es como para echar cohetes, pero mi profesión a veces te da pequeños placeres, como es la reconfortante sensación de haber hecho algo que funciona. He conseguido crear una aplicación Android muy, muy simple que toma posiciones cada 10 segundos, siempre que nos hayamos desplazado por lo menos un metro, y las envía a una base de datos en un servidor remoto mediante una llamada a un script de php. La posición, rumbo, velocidad y hora GMT se almacenan en una tabla del servidor y luego, mediante Google Maps lo muestro en un navegador de internet. 
He hecho una prueba de obtención de datos con el teléfono viniendo de Vigo hasta casa y he sacado alguna conclusión: para que no se pierdan muestras cuando llamen por teléfono hay que retocar algo en la aplicación de Android. En la imagen, se ven marcadas las dos llamadas que recibí durante el trayecto.
Por otro lado, para un recorrido en coche, 10 segundos y 1 metro de frecuencia/distancia mínima de muestreo pueden ser válidas, pero en un barco en navegación en una regata creo que con un muestreo cada minuto aumentando este a 5 segundos cuando se esté en las inmediaciones de las balizas del recorrido. Habrá que diseñar un algoritmo para calcular dicha frecuencia de muestreo en función de la distancia a la baliza, el rumbo y la velocidad.
Es muy probable que pasen otra vez un par de meses antes de que vuelva a tocar esto, pero bueno, peor es una pedrada en un ojo ¿no?

Retomando proyectos pasados

Hay veces en las que por una extraña conjunción de motivos, a esto ahora los pedantes le llaman sinergias, uno retoma viejos proyectos olvidados. El “sector portera” de los lectores de este blog querrán saber acerca de los motivos, pero no les voy a decir gran cosa acerca de eso; símplemente, a veces suceden cosas que por alguna extraña razón te resucitan la motivación para hacer algunas otras, y esto combinado con unas terceras, como por ejemplo la participación en una regata el pasado sábado hacen el resto. El “sector portera” del blog no creo que se entere de nada ya que tampoco pretendía contarles nada.

Allá por los meses de Febrero-Marzo, comencé mi enésimo proyecto inacabado: una Aplicación de seguimiento de regatas de Club. Ya entonces avisé de que la probabilidad de no acabarlo era del 99% pero ahora, que es invierno de nuevo y puedo dedicarle tiempo al blog del barco también lo tengo para ella.

Una cosa que acabo de resolver mientras escribía este artículo es el nombre que le voy a dar. Inicialmente, siguiendo las indicaciones de Faemino y Cansado respecto a los Rayos López  (min 3:00-5:00), había pensado en un nombre molón, con dos o tres palabras en inglés unidas o así y había pensado llamarla sailTracker, sailRaceTrack, pero he decidido no hacerlo y buscar un nombre bien hortera, osea, en lugar de poner un nombre hortera en inglés, lo pondré en castellano, y hortera con ganas: Regatón. Mola ¿eh? Me voy a cubrir de gloria, lo se, pero siempre podré decir si alguien la critica: “Tío, pero si se llama Regatón, ¿qué carallo esperabas?”. Me estoy desviando del tema.

He retomado el proyecto sí, pero he decidido modificar algunas de las premisas iniciales. Como en estas cosas funciono a base de arreones, por ahora, con conseguir almacenar los recorridos de las embarcaciones me conformo. Además he decidido que por simplicidad no voy a utilizar un webservice para recoger los datos en el servidor, sino que lo que voy a hacer una llamada http normal y corriente a un servidor con un script php en la que se le envíe un “chorizo” de números y letras con la información de la posición encriptada mediante algoritmo AES. Toda la parte del servidor la tengo lista, al menos la de recoger la información, ahora me falta añadirle información de control para garantizar que una posición pertenece efectivamente a una embarcación determinada. Supongo que tendré que creear un sistema de identificación del usuario de la aplicación de manera que al conectarse se genere un código secreto que se almacenará a ambos lados de la conexión (servidor y teléfono/tablet) y que será comprobado en cada envío de posición).

Las dos imágenes del artículo muestran lo que hay por ahora, aunque con el feo nombre original: el icono de la aplicación instalada, y la aplicación abierta, y que efectivamente, no es demasiado espectacular, pero es lo que hay, ya irá mejorando con el tiempo. Paciencia.

Aplicación de seguimiento de regatas

Hoy a la vuelta del trabajo tenía pensado pararme en el barco para terminar de tratar las maderas de la cubierta, pero dado que el tiempo era un asco, amenazaba a lluvia y por encima el asfalto de la carretera denotaba que no hacía mucho que había llovido decidí tirar para casa. Una pena, pues tenía pensado hacer una prueba con mi enemigo el Sikaflex 291. Ya la explicaré en algún otro post.

El caso es que buscando por internet acerca de aplicaciones de seguimiento de regatas me encontré con http://www.igtimi.com/ web de la aplicación Yachtbot que permite hacer seguimiento en tiempo real de la navegación de un barco a través de teléfonos móviles Android o de unos dispositivos que la propia marca vende.
La verdad es que la aplicación se parece bastante a lo que yo quiero hacer, aunque personalmente pienso que mi idea original es más completa. Hay una versión gratuita de la aplicación disponible para probar, pero es necesario registrarse. Yo ya lo he hecho, y si en algún momento finaliza el Fimbulvetr trataré de probarla.
A primera vista parece que no ofrece mucho más de lo que el propio Endomondo ofrece, pero esto no es del todo cierto. Con los planes de pago se pueden seguir todos los participantes de alguna regata, como se puede ver en las distintas demostraciones que hay en la mencionada web, aunque se echan de menos los cálculos de la línea de ventaja, distancias entre embarcaciones y entre embarcaciones y waypoints…
Si algún día me pongo de nuevo (la última vez que hice algo fue cuando escribí el último artículo acerca de la aplicación), seguro que Yachtbot me sirve de inspiración para algo.

Mejorando el mapa

La verdad es que no estaba excesivamente contento con el mapa en el que se incluyen las balizas y puertas de una regata. El barco del comité y la baliza de salida y llegada me parecían desproporcionadamente grandes, cosa que le sucede a los demás elementos, aunque en menor medida. Tengo pensado reducir todos esos tamaños, pero hoy, el poco tiempo que he tenido lo he dedicado a preparar una función sencillita que cargue en el mapa todos los elementos del recorrido. Por otro lado, es aspecto 3d del barco del comité y de la boya de salida, poco tienen que ver con los demás iconos, por lo que seguramente los cambie. Como se puede ver en la imagen, he incluido descripciones en las balizas que aparecen al parar el puntero del ratón sobre ellas.
Parece que la interfaz de visualización de la regata va cogiendo forma, aunque no acabo de encontrar la manera de indicar el recorrido de manera clara. Las líneas que mostraba en la imagen de ayer me parecen horrorosas a no ser que las suavice en las balizas y puertas (vértices curvados), cosa que estoy investigando: trazar una curva de centro en la baliza y radio x, con x aumentando para cada paso por la baliza…
A ver si esto evoluciona un poco más rápido este fin de semana, pues parece que viene un tiempo infernal y poco se podrá salir de casa, porque si no evoluciona un poco más rápido, lo acabaré dejando, me conozco muy bien en ese aspecto.

Aplicación seguimiento de Regatas: El recorrido

Mi superaplicación para el seguimiento de regatas costeras parece que va tomando forma. He conseguido pintar ya sobre Google Maps el recorrido identificando los diferentes tipos de balizas que se usan en los mismos, así como las balizas y puertas que los delimitan. También he trazado el recorrido, aunque no estoy muy satisfecho con eso pues se traza en línea recta, por lo que a veces esta pasa por encima de la tierra o zonas innavegables. Por eso tengo que hacer un pequeño replanteo en la base de datos para permitir puntos intermedios del recorrido que no tengan baliza asociada, y de esta manera eliminar esos trazos sobre la tierra. En la figura se puede ver un vértice en el recorrido sin imágen: ese sería uno de los puntos intermedios.
La verdad es que estoy bastante satisfecho con la apariencia de las balizas y puertas, pero no tanto con el recorrido, que supongo que no aparecerá en la versión final… no se, tengo que decidir qué hago. En cualquier caso, ahora voy a tratar de buscar el recorrido de la regata que represento en la imágen (2ª prueba de la I Regata Illas Atlánticas organizada por el Club Náutico San Vicente do Mar el pasado agosto de 2012).

Repaso de matemáticas

Hoy ha tocado repaso de matemáticas para la flamante aplicación de la que he hablado con anterioridad. Repasando lo que necesitaba para la aplicación que quizá algún día en esta década acabe, necesitaba calcular las distancias entre dos cualesquier, entre un punto y un segmento delimitado por dos puntos y el rumbo entre dos puntos dados.
El primer caso lo necesito para calcular las distancias entre una embarcación y una baliza o un cabo a definir en la ruta, el segundo caso lo necesito para realizar los cálculos de distancia a la meta en el último bordo. Las distancias entre dos puntos las he sacado mediante la Fórmula de Haversine, mientras que para la otra la cosa es más complicado y se escapa al propósito de este post, quizá más adelante me extienda un poco. 
He de decir que en las pruebas he usado las coordenadas que genera Google Earth (sacandolas del archivo kml que se puede exportar con las coordenadas pintadas en el mapa) y los resultados han sido desastrosos, no se por qué. Mientras, con el OpenCPN los resultados salían clavados. No tengo ni idea por qué de esta discrepancia, pero bueno, como con las coordenadas de OpenCPN me han salido las pruebas me doy por satisfecho por ahora, aún así tendré que investigar un poco más.

Si alguien quiere profundizar en el tema, le recomiendo las siguientes páginas:

Por cierto: Gracias a Nachete y a Nak por su inestimable colaboración.