He estado pensando en algunas mejoras con respecto al uso de NATS para montar un sistema de pipelines basado en las ideas de la entrada anterior PubSub con NATS y Bash.
PubSub con NATS y Bash (II)
- post
- Xavi Aznar
Photo by Mabel Amber
He estado pensando en algunas mejoras con respecto al uso de NATS para montar un sistema de pipelines basado en las ideas de la entrada anterior PubSub con NATS y Bash.
Bash es increiblemente permisivo, por lo que se ha convertido en mi lenguaje de prototipado por defecto. Combinado con SQLite y Jq, me faltaba una última pieza para completar los diseños: un sistema pubsub. Ahora he encontrado una manera sencilla de integrar NATS (corriendo en Docker) con Bash.
Hace un tiempo encontré el repositorio yaacov/argparse-sh, del autor del artículo argparse.sh: Simple Yet Powerful Bash argument parsing.
Como indica en el post, argparse-sh
es una forma sencilla y potente de gestionar parámetros en Bash.
La idea en la que se basa, creando un array asociativo (un dictionary
en Python), me recordó a Cobra, en Go.
Pese a ser una library pequeña, permite definir parámetros obligatorios y opcionales, un mensaje de ayuda para cada parámetro, diferentes tipos de parámetros…
La “única pega” es que, debido a que usa arrays asociativos, require Bash 4 o superior.
Así que me puse manos a la obra para hacer un backport y hacerlo compatible con Bash 3 (la que hay por defecto en los Mac).
Cloud Workstations nos permite tener la misma máquina a todos los miembros del equipo, independientemente de si usamos un Mac o un equipo con Windows. Partiendo de una imagen de contenedor, podemos desplegar una máquina virtual y usar Code OSS (la versión open source de Visual Studio Code) con las mismas extensiones pre-instaladas, la misma configuración, etc…
Quiero presentar el script a mis compañeros antes de subirlo a Github, así que en la entrada de hoy me voy a centrar en explicar cómo he simplificado el número de parámetros requeridos para gestionar (crear/arrancar/detener/eliminar) una workstation sin tener que recordar (o conocer) el nombre del clúster, de la configuración usada, etc…
Este artículo es la segunda parte de Unmarshal JSON en Bash (Parte I).
Al final de la primera parte vimos cómo el MVP (minimum viable product) no producía el resultado esperado para keys en el documento JSON cuyo valor es un array o un object.
En esta segunda parte, vamos a resolver este problema.
Unmarshal es uno de esos verbos ingleses que es difícil de traducir al castellano, al menos para mí. Según Google, sería algo así como “desmantelar”.
Aplicado a la programación, “to unmarshal” está relacionado con la idea de que, partiendo de un contenido ordenado, en JSON, desperdigamos su contenido en variables que podemos utilizar en nuestra aplicación.
Go, por ejemplo, proporciona la función Unmarshal, sin embargo en Bash, no he encontrado nada parecido.
Ha pasado muuuucho tiempo desde la última publicación; lo cierto es que todo se ha debido a que, principalmente, he pasado a usar otro portátil como mi dispositivo desde el que “hago cosas”, y por pereza, no había clonado el repositorio de este blog.
Pero hoy he decidido acabar con esta situación… y lo primero que me he encontrado al reconstruir el blog ha sido el error:
.Site.GoogleAnalytics was deprecated in Hugo v0.120.0 and will be removed in Hugo 0.133.0. Use .Site.Config.Services.GoogleAnalytics.ID instead.
Durante estos pasados días de vacaciones por Navidad han confluido varias casualidades que me han hecho probar, por primera vez, Neovim.
Neovim es un refactor de Vim, en el que se han dejado las partes que más le gustan a la comunidad y se han añadido capacidades que lo convierten en un editor moderno, como la extensibilidad a través de plugins.
Hace un tiempo escribí una artículo sobre el patrón de functional options: Patrón de ‘functional options’.
En este entrada reviso alguno de los errores que cometí al redactarla.
En la entrada anterior mencionaba cómo usar una plantilla para homogeneizar los commits.
Además de la plantilla, usar Conventional Commits permite dotar de un formato standard a los commits. La buena gente de Charm ofrece como parte del tutorial para aprender a usar Gum un script con el que redactar conventional commits.
En esta entrada, ofrezco una versión ampliada que incluye la descripción para cambios que rompen la retrocompatibilidad.