156 - Las divisas en Linux, en el escritorio o en un contenedor

156 - Las divisas en Linux, en el escritorio o en un contenedor

En este podcast te doy una solución para estar informado sobre el cambio de divisas en Linux, ya sea en el escritorio o para consumir vía REST API

1:25
-3:15

Como estamos ya en marzo toca la siguiente de las aplicaciones del proyecto de 12 meses 12 aplicaciones Open Source. Esta aplicación es sugerencia de un lector del podcast. Una idea que ya tiene algún tiempo, pero que aprovechando este festival de aplicaciones me he decidido a implementar. Sin embargo, como ya habrás observado, esto no solo va del escritorio, sino que he tocado todos los palos como te explicaré a lo largo del podcast. ¿Que es lo que hace esta aplicación?, tan sencillo como mantenerte informado del cambio de las divisas en Linux, ya sea en el escritorio o con un contenedor. Esto que parece bien sencillo, lo cierto es que he ido complicándolo hasta que se ha convertido en lo que es actualmente, y en lo que puede llegar a crecer gracias a tus sugerencias. Decirte que aunque no utilices el escritorio Linux, sino que utilices otro Sistema Operativo, pero sin embargo, te guste todo lo relativo a la tecnología docker, te recomiendo te quedes a escuchar el podcast, porque no solo de escritorio Linux va la aplicación, sino también de docker, bash y SQLite.

Las divisas en tu escritorio Linux o en un contenedor

Las divisas en Linux, en el escritorio o en un contenedor

Como te decía en la introducción la aplicación/aplicaciones lo que trata es de traerte las divisas en Linux, ya sea a tu escritorio o mediante contenedor, para consultar vía REST API, de forma que puedas tener el cambio de las monedas que selecciones. Inicialmente puedes elegir hasta 5.

¿Porque hablo de aplicación/aplicaciones? Cuando empecé con la aplicación solo pensé en traer el cambio y dejarlo guardado en tu equipo. Vamos en el equipo que instalaras la aplicación. Sin embargo, esto tiene varios problemas. El primero es que, no conozco la limitación que han puesto los desarrolladores a la API de la que tomo los datos, respecto al consumo de datos. No creo que todos los usuarios de Linux instalen esta aplicación en su escritorio, e inunden el servidor de llamadas. El segundo, es que no puedo conocer la evolución de esas divisas que he elegido.

Pero, como este tipo de cosas me molestan, pensé en buscarle una solución. Por otro lado, es una lástima solo conocer el cambio el día de hoy, y no poder ver una gráfica de la evolución de las divisas que elijas. Sin embargo, la API, solo ofrece el valor diario

Dos soluciones

Aquí se me planteaban dos soluciones.

Solución 1

La primera consistente en guardar los datos en tu equipo, de forma que cuando tu lo consultes puedas ver la evolución. Claro, esto implica tener un proceso corriendo en segundo plano, que todos los días guarde el cambio actual.

Pero ¿y si no enciendes el ordenador? Esto es algo de lo mas normal, y nada de extrañar. Es muy probable que el domingo, por decirte un día, lo dediques a tu familia, a pasear por el campo o hacer deporte.

Solución 2

Guardar yo la información en un servidor, y que la aplicación que tu instales en tu equipo consulte a ese servidor. De esta manera siempre se guarda los datos de divisas, a menos que un día esté caído, pero esto lo monitorizo, para en el caso de que caiga, levantar de nuevo el servicio. Pero no solo esto, sino que además mantengo un histórico de las divisas. De esta forma no solo podrás ver el cambio en el día en curso, sino que tendrás información de los últimos 30 días del cambio de divisas en Linux.

Y, como te puedes imaginar, esta segunda es la solución por la que he optado.

Dos contenedores

Sin embargo, he querido complicar un poco mas la cosa, y montar dos contenedores.

Contenedor 1

Se encarga de crear la base de datos en caso de que no exista y actualizarla todos los días desde la API de referencia. Aquí tienes guardado todo el histórico de divisas que puedes consultar siempre que quieras. La base de datos, por ahora es SQLite y tanto para crearla como para actualizarla, no utilizo mi amado Python, sino que me he decantado para hacerlo con Bash…

Aquí viene el tutorial sobre scripts en Bash… si bien, la parte del script en bash es sencilla. Por supuesto, te recomiendo leas el artículo que escribí a finales del año pasado sobre SQLite en Bash. Y para la actualización de la base de datos programación de tareas con cron.

Para iniciar este contenedor, simplemente tienes que ejecutar la siguiente instrucción,

docker run -d --name rates --network host -v $PWD/database:/app/database atareao/rates:latest
Contenedor 2

Se encarga de ofrecer los datos mediante una API. Simplemente se trata de consultar la API y verás no solo el cambio del día de hoy sino el del último mes. En principio, como digo, he dejado solo el último mes. Dependiendo del interés que la aplicación despierte se puede hacer de mas tiempo o ya veremos. Para este segundo contenedor, he utilizado, esta vez si, mi amado Python, con el framework Flask.

Si no conoces ninguna de estas tecnologías, te recomiendo el artículo sobre un servidor web sencillo para la Raspberry Pi con Flask

Este segundo contenedor lo he levantado con docker-compose y para utilizarlo con Traefik,

version: '3'

services:
  ratestapp:
    image: atareao/ratesapp:latest
    container_name: ratesapp
    restart: unless-stopped
    networks:
      - proxy
    ports:
      - 5000:5000
    volumes:
      - ./database:/app/database
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ratesapp.entrypoints=http"
      - "traefik.http.routers.ratesapp.rule=Host(`ratesapp.servicio.duckdns.org`)"
      - "traefik.http.middlewares.ratesapp-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.ratesapp.middlewares=webdav-https-redirect"
      - "traefik.http.routers.ratesapp-secure.entrypoints=https"
      - "traefik.http.routers.ratesapp-secure.rule=Host(`ratesapp.servicio.duckdns.org`)"
      - "traefik.http.routers.ratesapp-secure.tls=true"
      - "traefik.http.routers.ratesapp-secure.tls.certresolver=myresolver"

networks:
  proxy:
    external: true

¿Porque dos contenedores?

Es posible que te preguntes que porque me he decantado por dos contenedores. Lo cierto es que podía haberlo hecho en un solo. Pero esta forma tengo la ventaja de que puedo trabajar en cualquiera de los dos de forma completamente independiente. Así, por ejemplo, si quiero, puedo cambiar la API que me ofrece los datos sin preocuparme de que no se sigan guardando datos. De la misma manera, también podría cambiar o modificar el proceso de captura de datos o actualizarlo, y la API seguiría funcionando sin ningún problema.

Currency Indicator

Todo esto lleva a Currency Indicator, la aplicación que puedes instalar en tu equipo, dado que el resto queda en el servidor. Desde luego, también puedes montar tu estos dos contenedores, y servir tu los datos. Como vengo contándote a lo largo de todo el podcast, Currency Indicator te muestra la información del cambio entre la moneda que tu elijas como principal, y otras cinco monedas de tu elección, te muestra las divisas en Linux.

¿Porque he elegido 5? No lo se, me ha parecido un número adecuado, como podían haber sido 3 o 6. Desde luego estoy abierto a sugerencias. Esto lo tendrás siempre disponible en el área de indicadores. Bueno, siempre que quieras claro.

Luego por otro lado, como también te he adelantado, puedes ver la evolución de las cinco monedas elegidas en el último mes. Actualmente no verás todo el mes, porque el contenedor que se encarga de registrar los datos lo levanté hace 5 días, pero, con el paso del tiempo, verás la evolución de todo el mes.

Esto de ver solo el último mes es algo que he elegido yo, pero como el resto de opciones, se podría cambiar si se considera, dado que los datos estarán guardados en el servidor. Aunque actualmente solo se ofrecen los últimos 30 días, y eso es lo que se descarga en tu aplicación.

Cambio de divisas e nLinux

Por otro lado, lo que si que no he hecho, pero, añadiré en los próximos días, es un conversor de divisas. Simplemente para que elijas la moneda de partida y puedas ver el valor en la moneda que elijas…

Instalación

Como te puedes imaginar, esta aplicación no está disponible en los repositorios oficiales de Ubuntu. Está recién salida del horno, todavía está caliente. Sin embargo, la instalación es sencilla, dado que lo he subido al repositorio para que la puedas instalar fácilmente. Simplemente, abre un terminal y ejecuta las siguientes instrucciones,

sudo add-apt-repository ppa:atareao/atareao
sudo apt update
sudo apt install currency-indicator

Uso y funcionamiento

Una vez instalado, simplemente inicia Currency Indicator y entra en la configuración para seleccionar aquellas monedas de las que quieras conocer el cambio.

Inmediatamente verás el cambio en el día de hoy. Si quieres ver la evolución en la última semanas, selecciona esa opción del menú. Como digo, en los próximos días añadiré el conversor de moneda, para que lo tengas siempre a golpe de ratón.


Si te ha gustado el podcas te agradecería una valoración en iVoox y/o en Apple Podcast.

Imagen de portada de Mitchell Luo en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *