richterm, capturando la terminal a todo color

Siempre estoy haciendo programitas de línea de comando y siempre quiero mostrar como se ve el resultado de algun comando. Si bien es texto que puedo copiar y pegar, muchas veces prefiero tomar capturas de pantalla de la terminal para mostrar como se ve el resultado, especialmente si tiene colores o algun formato especial.

Cuando estaba escribiendo este post necesitaba una captura, y encontré una manera de hacerlo:

x.com//1983986531972116685

El truco que propuse ahí es usar rich-codex pero, a decir verdad, la CLI de esta herramienta es un bastante complicada para este caso súper común: sólo quiero ejecutar un comando y quedarme con un SVG listo para incrustar en un post o en la documentación.

Así que me armé una mini herramienta más simple: richterm.

Leer más…

Easter-eggs en tu código con texto invisible

Según Wikipedia en español, un "easter egg" es ...

un mensaje o capacidad oculta contenido en películas, series de televisión, ..., programas informáticos o videojuegos. Entre los programadores, parece haber una motivación en dejar una marca personal, casi un toque artístico sobre un producto intelectual, el cual es por naturaleza estándar y funcional. Actualmente, los huevos de Pascua tratan de entretener, buscar nuevos trabajos potenciales, pagar tributo a los ejecutivos o divertir a los programadores.

No sé a quien le hizo creer eso de que un software es "estándar y funcional" al crédulo wikipedista, pero es verdad que la pulsión por poner huevos de pascua en el software es casi tan vieja como el software mismo.

Acá les traigo una técnica que yo descubrí hace varias décadas, en el jardín de infantes cuando dibujabamos con jugo de limón en una hoja en blanco para que más tarde, mágicamente, se revelara el garabato al calor del encendedor de la seño que seguramente había estado fumando en el rincón de las maderitas un rato antes.

Veamos entonces como escribir mensajes en texto (digital) invisible: jugo de limón en su versión unicode.

Leer más…

Ignorando cambios en git localmente

Es bien conocido que en un repositorio de git podemos usar un archivo .gitignore para omitir el seguimiento de archivos que no queremos que se suban (se "empujen") al repositorio remoto. Si un archivo coincide con el patrón de un .gitignore, entonces no se mostrará en un git status para añadir sus eventuales cambios a un commit.

Típicamente se usan para ignorar directorios donde se instalan dependencias (e.g. el virtualenv para proyectos Python generalmente instalado en .venv), archivos temporales generados por el intérprete o compilador, archivos específicos para IDEs, etc.

Son tan comunes que GitHub ofrece plantillas de gitignore curadas para distintos lenguajes de programación, y herramientas específicas para inicializar proyectos como uv init generan un .gitignore básico como parte del boilerplate.

Un .gitignore forma parte del proyecto (está commiteado) y es importante que esté en el repositorio para que todos los colaboradores tengan la misma configuración.

¿Pero qué pasa si queremos ignorar archivos solo localmente?

Leer más…

Un cheatsheet automático para tu CLI Typer

Typer es gran framework de CLIs del mismo autor que creó FastAPI. Permite crear interfaces de línea de comandos robustas e intuitivas basándose en anotaciones sobre los argumentos de funciones. Sin hacer mucho esfuerzo te ofrece autocompletado y ayuda en línea de comandos, que de paso se ve muy bonita al estar basada en rich.

También permite facilmente registrar grupos de comandos y subcomandos, lo que facilita la organización y mantenimiento de aplicaciones grandes. Pero, ¿qué pasa cuando tu aplicación crece, con múltiples subcomandos, grupos y opciones anidadas?

Para los usuarios (¡o incluso para vos mismo después de un tiempo!), puede ser un desafío recordar todos los comandos disponibles, sus funciones y cómo interactúan. La ayuda integrada y la documentación son clave, pero ¿no sería fantástico tener un "mapa" en vivo de tu aplicación, accesible directamente desde la terminal?

¡Acá es donde entra typer-cheatsheet-command!

Leer más…

Depedencias automáticas en scripts Python con autopep723

¿Alguna vez has deseado poder ejecutar un script de Python sin preocuparte por instalar sus dependencias primero?

Todos hemos estado ahí. Necesitas hackear un pequeño fragmento de código, tu LLM amigo te da un script de Python útil o encontraste uno en Stack Overflow (Dios te tenga en la gloria) o Gist. Pero si lo intentas ejecutar directamente:

ModuleNotFoundError: No module named 'your_experiment_dependency'

Entonces comienza la burocracia de verificar qué paquetes necesitas, con el agravante de que muchas veces el nombre con el que se instala no corresponde con el nombre que se importa), lidiar con conflictos de versiones y sobrecargar tu entorno.

Si todo el mundo coincide en que Python es un lenguaje pragmático y elegante que resulta ideal para scripts, ¿por qué esta parte tiene que ser complicada?

Leer más…