in Blog, Desarrollo, Proyectos

Releaseando que es gerundio

A nada que hayáis leído un poco el blog, sabréis qué es BilBikes. De todas formas para los que no estáis al tanto, por aquí podéis leer la historia.

Hace ya algunos meses que no tenía claro qué hacer con el proyecto, al fin y al cabo esto nació como un side-project (allá por 2014) pero no le veía mucho más recorrido. Además, tras el DataBeers Euskadi me comentaron que se iba a cambiar la empresa adjudicataria y eso iba a conllevar un cambio de todo el sistema existente.

Fue pasando el tiempo y fui olvidando el proyecto, la aplicación ya no funcionaba y el siguiente paso lógico era quitarla del market de Fitbit. De hecho, llegó un momento en el que estuve valorando cambiar a otro smartwatch.

Actualmente la empresa adjudicataria es Nextbike, tienen una aplicación para iOS y Android para alquilar, dejar bicicletas y también te ofrece la información de el estado de las estaciones y bicicletas disponibles. Desde que han puesto las nuevas bicicletas en Bilbao, mucha gente se ha apuntado y se ha llegado a colapsar el sistema.

Han frenado las nuevas altas al sistema porque está colapsado

No hay bicicletas libres porque están todo el tiempo en uso y desde el Ayuntamiento de Bilbao se ha solicitado un mayor número de bicicletas a la empresa adjudicataria. Este estado de KAOS por ausencia de bicis y el gran uso que estaba teniendo el nuevo sistema me picó para actualizar mi aplicación de Fitbit y prepararla para consultar el nuevo sistema.

Hablando de código, diseñé la aplicación en dos partes, una API en node que está en GitLab y se despliega en Heroku después de completar una ‘merge-request‘ y la aplicación del reloj que llama a la API en node y pinta los datos en la pantalla.

¿Por qué lo hice así? En primer lugar, Fitbit tiene un Javascript tuneado por ellos, que no deja usar ciertas funciones, tuve bastantes problemas para trabajar con el XML que ofrecía el Ayuntamiento de Bilbao y opté por crearme una API que simplemente transformaba el XML en JSON y de esta forma era más fácil trabajar con él. Además llevaba tiempo con ganas de montar un pipeline automatizado y esta fue una buena excusa para hacerlo. En este caso opte por GitLab y Heroku. El código está en GitLab y cada vez que se mergea una ‘merge-request’ se despliega en ‘Heroku’ una nueva versión de la aplicación.

La API tiene un pipeline automatizado desde GitLab a Heroku

Adaptar la aplicación al nuevo sistema de Nextbike fue sencillo:

  • Cambiar el origen de datos en la API.
  • Modificar la aplicación de Fitbit mapeando en nuevo JSON con los campos nuevos ya que entre una empresa y otra no había respetado la estructura.
  • Crear la release y mandarla a review.

Los cambios de código fueron bastante rápidos, actualizar algunos paquetes npm, modificar el mapeo de los valores y en 1 hora más o menos ya tenia la aplicación funcionando en el emulador contra la API actualizada en Heroku. ¡Genial!

Preparé la nueva release (Bilbikes 1.0.1) y la envié a review, aprovechando el momento, envié la release con soporte al Fitbit Versa y actualice el SDK al 2.0 de Fitbit. Tras 24h recibí un mail explicándome que me habían rechazado la release y la razón era que no había incluido en la descripción de la aplicación capturas de ella funcionando en Fitbit Versa.

Preparé una nueva release (aunque realmente las imágenes no van en la release) la volví a mandar y esta vez en 3 días la revisaron y la aprobaron. La aplicación ya está disponible pero solo para los usuarios con SDK 2.0 de FitbitOS, se supone que en pocos días todos los dispositivos tendrán esa versión del SDK, si no la tienes aún no te aparecerá la actualización de Bilbikes.

En caso de que seas un impaciente como yo, puedes resetear tu reloj a ajustes de fábrica y forzar así la actualización de Fitbit OS al 2.2, por aquí te explican como hacerlo.

Si no tienes Fitbit OS 2.0 no podrás actualizarte a Bilbikes 2.0.2

Y este ha sido un resumen de lo que es sacar una nueva release de Bilbikes, es posible que lo próximo que haga sea añadir métricas de uso a la API para ver cuantos hits tiene pero eso ya será otra historia..

¡Saludos!