742 - Cuatro herramientas imprescindibles para programar
Automatiza tu workflow en Linux Usa dime (IA) y vampus (SemVer) con fish y just para generar commits, Dockerfiles y versionar. Máxima productividad CLI
Antes de nada, quiero dejar claro que estas son mis herramientas favoritas y que cada programador tiene sus propias preferencias. Porque luego vienen las suspicacias. También tienes que tener en cuenta que dos de las cuatro herramientas son de desarrollo propio, y como ya sabes, el ojo del amo engorda el caballo. Pero, sea como fuere, son las que utilizo con mas frecuencia sobre todo en estas últimas semanas, que estoy trabajando en un mismo proyecto, y las actualizaciones son diarias. La cuestión es que, como he contado en mas de una ocasión, donde disfruto es programando. Sin embargo, una vez terminado una actualización, hay que ponerla en marcha, y esto, quieras que no lleva tiempo, y es tiempo que yo no quiero invertir, así que siempre ando buscando soluciones, para que ese tiempo sea el mínimo posible, y si puede estar completamente automatizado, mejor que mejor.

Cuatro herramientas imprescindibles para programar
Cuatro herramientas y un bonus track
Como te decía en la introducción, te traigo las cuatro herramientas auxiliares que utilizo día a día, una vez que he terminado una nueva versión, o he realizado algunos cambios en el código y quiero desplegar o poner en funcionamiento. Se trata de dos herramientas de terceros y dos herramientas de desarrollo propio, todas ellas en la línea de lo que he venido contando en los últimos episodios, es decir, herramientas que me permiten optimizar mi flujo de trabajo, y que me permiten centrarme en lo que realmente me gusta, que es programar. Así que vamos allá.
Just
La primera de las herramientas es Just. Se trata de una herramienta que te permite definir recetas, en un único archivo .justfile, con todo tipo de acciones adaptadas a tus necesidades. Básicamente, unifica y estandariza los comandos del proyecto, soportando la carga de variables desde archivos .env.
En ocasiones tienes proyectos similares, pero no idénticos. Por ejemplo, proyectos que están implementados en diferentes lenguajes de programación. La forma de construir estos proyectos cambia. Sin embargo, con Just, puedes utilizar los mismos comandos para las distintas recetas, pero con un contenido distinto. Por ejemplo, puedes utilizar el comando just build para construir el proyecto, pero en un caso puede ser una aplicación en Python, y en otro una aplicación en Go. Just se encarga de ejecutar los comandos adecuados para cada proyecto.
Desde luego, que la principal ventaja, es la de simplificar la ejecución de comandos.
A continuación te dejo un ejemplo de un archivo justfile que utilizo en uno de mis proyectos:
user := "atareao"
name := `basename ${PWD}`
version := `git tag -l | tail -n1`
list:
@just --list
dev:
cd frontend && pnpm i && pnpm run build && rm -rf ../backend/static && mkdir ../backend/static && cp -r ./dist/* ../backend/static
cd backend && RUST_LOG=debug cargo run
frontend: @pnpm run dev
backend: RUST_LOG=debug cargo run build: @docker build \ –tag={{user}}/{{name}}:{{version}} \ –tag={{user}}/{{name}}:latest . push: @docker image push –all-tags {{user}}/{{name}}
revert: echo ${PWD} @sqlx migrate revert –target-version 0
Fish
Decirte que Fish es el complemento perfecto a la hora de programar, es como no decir mucho. Pero lo cierto es que ahorro gran parte del trabajo con sencillos alias o abreviaciones que me permiten ejecutar comandos complejos con una simple palabra. Sobre todo en lo que se refiere a las acciones con git y docker.
Por ejemplo, algunas de las abreviaciones que utilizo son:
# docker
abbr --add compose docker compose $argv
abbr --add dcu docker compose up -d --force-recreate
abbr --add dcl docker compose logs -d
abbr --add dcd docker compose down
abbr --add dc docker compose $argv
# git
abbr --add gpus git push
abbr --add gadd git add
abbr --add gpul git pull
abbr --add gsta git status
# skim
abbr --add skg 'sk --ansi -i -c \'grep -rI --color=always --line-number "{}" .\''
abbr --add skr 'sk --ansi -i -c \'rg --color=always --line-number "{}"\''
Además otra de las utilidades que he comenzado a explotar al máximo es la búsqueda en el historial de comandos con Ctrl+R, que me permite recuperar comandos complejos que he utilizado en el pasado sin tener que volver a escribirlos. Y no tan complejos, por supuesto.
Hasta hace unas pocas semanas, estaba utilizando atuin, pero ya había leído que la última versión de Fish había mejorado mucho en este sentido, y la verdad es que estoy encantado. Una maravilla sin la necesidad de instalar nada adicional.
dime
dime es una herramienta de desarrollo propio que me permite interactuar con ChatGPT desde la terminal. Con dime, puedo enviar preguntas o solicitudes directamente a ChatGPT y recibir respuestas en la misma terminal. Esto es especialmente útil cuando estoy programando y necesito ayuda rápida o sugerencias sin tener que cambiar de ventana o aplicación.
Y claro, te estarás preguntando, que tiene que ver esto con el desarrollo. Pues simplemente se trata de gandulería. No quiero escribir el mensaje de acompañamiento para un commit, o no quiero buscar la forma correcta de escribir una función en un lenguaje que no domino. Pues simplemente escribo la pregunta en dime, y obtengo la respuesta al instante.
Así de nuevo, tengo una función en Fish para utilizar dime y que me genere los mensajes de commit sin que me tenga que calentar la cabeza lo mas mínimo,
function gcom -d "git commit with chatgpt"
git commit -am "$(dime -i "Eres un fantástico desarrollador, especializado en gestionar proyectos con control de versiones" -q "genera un mensaje conciso para un `git commit` que resuma los cambios producidos en ```$(git -P diff)```. Solo me tienes que dar el mensaje, ni la descripción, ni una explicación. Únicamente un mensaje en español, que comience con un gitmoji y sin comillas")"
end
vampus
La última de las herramientas que quiero compartir contigo es vampus. Otra herramienta de desarrollo propio. Una herramienta muy sencilla cuyo único objetivo es el de encargarse de actualizar la versión de una aplicación en el archivo Cargo.toml, en el caso de aplicaciones desarrolladas en Rust, 0 en el archivo package.json, en el caso de aplicaciones desarrolladas en JavaScript o TypeScript, etc.
Si, soy consciente de que existen herramientas que hacen esto mismo, pero la verdad es que no he encontrado ninguna que se adapte a mis necesidades, así que he decidido crear la mía propia. En general, las que he encontrado hacen mas de lo que necesito. No necesito que interaccione con git ni nada por el estilo. Simplemente necesito que actualice la versión en el archivo correspondiente o archivos, y ya está.
Bonus: Niri
Auqnue he dicho cuatro herramientas, voy a añadir una quinta que no es de programación pero que hoy por hoy me resulta completamente imprescindible. Se trata ni mas ni menos que de Niri. Un tiling window manager que me está viniendo fantástico a la hora de organizar mi espacio de trabajo. Sobre todo cuando estoy programando, y necesito tener varias ventanas abiertas al mismo tiempo, como el editor de código, la terminal, el navegador web, etc.
Me permite maximizar o restaurar la ventana donde estoy escribiendo código con un simple atajo de teclado, y esto me permite centrarme en lo que realmente importa, que es programar. Y cuando necesito ver como se comporta la depuración, realizo la operación contraria.
Más información,