in Blog

Más, mejor y en bicicleta

Hace ya un par de meses desde que saqué la última release de BilBikes y desde entonces han pasado un montón de cosas. Si no sabéis de qué va esto de BilBikes, os dejo por aquí la historia para no extenderme demasiado.

Llevaba tiempo detrás de hacer una buena actualización del core y también añadir algunas funcionalidades que estaban en lista de espera, al igual que eliminar varias que eran poco útiles.

Recordando un poco la arquitectura de la aplicación, se dividía en dos partes, una API que servía de conexión con los datos que ofrecía el Ayuntamiento y otra parte visual que consultaba a la API y mostraba en reloj los datos.

Arquitectura de la aplicación

Uno de los cambios más importantes ha sido sustituir dicha API por otra. La API original estaba desarrollada en Node, alojada en GitLab y desplegada en Heroku. Al margen del código (Espagueti del bueno), estaba usando la versión free de Heroku que está muy bien para PoCs pero se queda un poco corto para aplicaciones algo más grandes. Cosas tan sencillas como métricas, no estaban disponibles de manera nativa en este plan, además, la aplicación si no tenía uso se ‘dormía’ lo que hacía que cada vez que recibía una consulta tardaba bastante en responder si no estaba ‘despierta’.

Antiguo Pipeline desde Gitlab

El cambio ha sido a una API en NetCore. Microsoft nunca ha sido santo de mi devoción pero hay que decir que con NetCore están haciendo las cosas bastante bien. Básicamente he rehecho la API en NetCore reorganizando mejor el código, eliminando lo que sobraba y lo he alojado en Azure usando un plan gratuito. Ahora la aplicación tiene un mejor rendimiento y además tengo métricas (básicas) de Azure de su uso. Despliego desde Visual Studio directamente y ‘a mano’, no es un despliegue automático como el que tenía con Heroku, pero tiempo al tiempo. El código lo tengo también en GitLab y por el momento es privado.

Aprovechando el desarrollo de esta nueva API, también he mejorado la calidad de los datos. No era algo obligatorio pero si necesitas usarlos para hacer algún tipo de cálculo, no cuesta nada servirlos bien.

Antes / Ahora

Dentro de la API he creado un modelo que estandarice los datos, de forma que si en un futuro devuelve más datos, tendrán el mismo formato y con el tipo correcto en cada caso.

Modelo de datos para una estación

En cuanto a la parte del reloj, he añadido una feature que tenía muchas ganas de añadir: ahora el listado de estaciones aparece por orden de cercanía. Parece una tontería, pero ahora algunas estaciones ya no llevan nombre, así que si no eres de la zona es posible que no sepas en qué estación te encuentras (en el testeo me he vuelto loco). Con este cambio, la estación en la que estés (o la más cercana) te aparecerá la primera de la lista y además podrás saber el estado del servicio en el resto de estaciones cercanas. Tras incluir esta nueva feature, he optado por eliminar la posibilidad de fijar estaciones en los ajustes de la aplicación y que te aparezcan en primer lugar. Creo que no tiene mucho sentido y realmente con el listado por cercanía (IMO) deja de ser necesaria. En caso que por alguna razón el reloj no consiga obtener su posición, la aplicación te devolverá el listado completo de estaciones sin un orden determinado.

Además de todos estos cambios en BilBikes, me he lanzado a montar DonostiBikes y MálagaBikes.

La razón es sencilla, son ciudades que tienen también sistemas públicos de bicicletas y los datos son abiertos para hacer aplicaciones con ellos. Realmente no me ha costado demasiado hacerlas ya que la aplicación del reloj es exactamente igual exceptuando los colores y los datos. En la parte de la API he añadido los orígenes de datos de San Sebastián (json) y Málaga (csv) que tras pasar por la API se devuelven en el mismo formato que los de BilBikes.

Datos devueltos por la API correspondientes a una estación de Málaga.

El viernes pasado mandé todo lo necesario para que Fitbit hiciera la review y este lunes pasado recibí el mail de que ya están disponibles para su descarga. Las aplicaciones están disponibles para los relojes Fitbit Ionic y Fitbit Versa que tengan instalado el Fitbit OS 3.0.

Imagen de la Store de Fitbit

Es bonito y complicado ver cómo un side-project que empezó hace más de 4 años va evolucionando y sigue vivo. Durante los próximos meses iré observando las métricas para ver el uso real que se le está dando e iremos viendo hacia donde nos lleva esto.

A parte de esto, en las próximas semanas publicaré algún post más sobre lo que me he ido encontrando para desarrollar el sistema de listado por cercanía y las diferentes peleas que he tenido con latitudes y longitudes. Creo que es algo interesante y veo útil compartirlo.

Si tenéis cualquier duda en cuanto al proyecto, el desarrollo, los datos o lo que sea dejadme un comentario y os responderé lo antes posible y si os gusta compartidlo para que le llegue a más gente.

¡Muchas gracias!

  1. Mola! Pena que los dispositivos Fitbit no sean tan populares como los de otras marcas para que la app tuviera más visibilidad. De cualquier manera, enhorabuena por el post!

    • ¡Muchas gracias Avelino! La verdad es que los dispositivos Fitbit son una minoría dentro del nicho que son los smartwatch.

Comments are closed.