¿Cómo asegurar builds determinísticos, rápidos y seguros en Go?

La gestión de dependencias en Go ha evolucionado mucho en los últimos años. Antes de Go modules, las dependencias se descargaban directamente desde los sistemas de control de versiones (GitHub, Bitbucket, Mercurial, SVN). Esto traía problemas recurrentes: Con la llegada de GOPROXY, estos problemas se redujeron de forma significativa. Pero, ¿Qué es un GOPROXY? Un […]

¿Cómo funciona vars() en Python? Explicación y ejemplos prácticos

La función integrada vars() en Python devuelve el diccionario de atributos (__dict__) de un objeto. Es una herramienta útil para inspeccionar el estado interno de instancias, clases o contextos de ejecución. En este artículo, veremos ejemplos prácticos de uso, situaciones comunes y precauciones para evitar errores al usar vars(). Sintaxis de vars() vars([obj]) obj (opcional): […]

¿Cómo utilizar el operador Walrus?

En Python existen operadores poco conocidos pero extremadamente útiles. Uno de ellos es el operador Walrus (:=), introducido en Python 3.8 mediante el PEP 572. Este operador permite asignar un valor a una variable dentro de una expresión, lo que lo hace ideal para evitar código redundante y escribir aplicaciones más limpias y concisas. ¿Qué […]

Distribución de paquetes Python con build y twine

Uno de los procesos clave en el desarrollo de software es la distribución de binarios o paquetes. Este paso facilita el consumo de código, promueve la reutilización y es fundamental para compartir librerías internas, publicar en PyPI o versionar entregables. Con la rápida adopción de pyproject.toml como archivo de configuración estándar, Python ha modernizado su […]

¿Cómo crear aplicaciones Python portables con PEX?

Uno de los retos más persistentes en el ecosistema Python es crear aplicaciones Python portables, que aíslen correctamente el manejo de dependencias y garanticen una distribución más confiable. Aunque los contenedores han mejorado considerablemente la portabilidad, todavía enfrentan desafíos relacionados con el tamaño de imagen y los tiempos de construcción y despliegue. En este artículo […]

Patrón Singleton en Go: Implementación fácil con sync.Once

Implementar el patrón Singleton en Go es una técnica útil cuando necesitas garantizar que solo exista una única instancia de un objeto en toda tu aplicación. El lenguaje Go ha sido diseñado con una fuerte inclinación hacia la simplicidad y la concurrencia segura. Una de sus primitivas menos conocidas, pero sumamente útiles, es sync.Once. ¿Qué […]

Entendiendo los Namespaces en Python de manera práctica

A menudo escuchamos el término namespaces en contextos como el kernel de Linux o Kubernetes, donde se utilizan principalmente para aislar o agrupar recursos de manera lógica. Pero, alguna vez te has preguntado ¿qué significa un namespace en el contexto de Python? En este artículo quiero compartir lo que he aprendido sobre los namespaces en […]

Creando MCP tools dinámicamente con compile() y exec()

Recientemente he explorado un aspecto de Python que rara vez se utiliza en entornos convencionales: la generación dinámica de código utilizando compile() y exec(). Aunque estas funciones suelen estar asociadas a casos de uso avanzados —y a menudo evitadas por sus riesgos de seguridad—, en este proyecto fueron clave para lograr una solución práctica y […]

Python Type Hints: Qué son, para qué sirven y cómo usarlos

Recientemente he retomado el uso de Python para mis proyectos personales y profesionales. Una de las mejoras más relevantes del lenguaje en la última década ha sido la incorporación de type hints en Python, también conocidos como anotaciones de tipo. Esta característica transforma por completo la forma en que escribimos, entendemos y mantenemos el código. […]

Gestión de proyectos de Python con `uv`

La gestión de entornos y dependencias en Python ha sido históricamente un punto de fricción para muchos desarrolladores. A lo largo del tiempo han surgido herramientas como pip, virtualenv, pip-tools o Poetry, cada una con su propio enfoque para resolver estos retos. Sin embargo, muchas veces implican compromisos en rendimiento, simplicidad o compatibilidad. En este […]