← ulloa.cc Blog

DevOps, servidores, desarrollo & IA

Notas técnicas de Rodolfo Ulloa.

Por qué las portadas de este blog no las genera una IA

Cómo terminé generando las portadas de este blog con SVG y código en vez de una API de imágenes con IA, y qué aprendí sobre cuándo conviene usar cada una.

21 de septiembre de 2026

Fiestas Patrias y el servidor que se queda solo: probando qué tan resiliente es de verdad

Cómo preparé mi servidor casero en Docker para sobrevivir sin supervisión el fin de semana largo de Fiestas Patrias: restart policies, disco y backups puestos a prueba.

17 de septiembre de 2026

De escribir posts a leer logs: usando claude -p para triage en mi propio servidor

Cómo reutilicé la misma técnica que genera este blog (claude -p con --json-schema) para triage de logs de Docker y systemd en mi servidor casero, y dónde no confío en ella.

7 de septiembre de 2026

El cambio de hora y los timers de mi servidor: por qué todo corre en UTC

Cada cambio de hora en Chile es un buen recordatorio de un problema real de DevOps: los timers con hora local pueden saltarse o duplicar ejecuciones. Cómo lo resolví con UTC.

7 de septiembre de 2026

El backup que nunca probé restaurar (hasta que tuve que hacerlo)

Automaticé backups de todo mi servidor casero con restic y cron, pero nunca los probé de verdad. La primera restauración en frío mostró lo que faltaba.

24 de agosto de 2026

Cómo creamos una máquina de generar contenido para este mismo blog

Cómo armé un sistema que genera borradores para este blog con claude -p y json-schema, portadas SVG por código y aprobación manual, incluyendo un bug real de duplicados.

23 de agosto de 2026

Actualizaciones automáticas y IA: el parche de seguridad que casi reinicia Home Assistant a medianoche

Cómo configuré unattended-upgrades en Debian 13 para parchear seguridad sin reinicios sorpresa, y por qué conversar con un asistente de IA sobre los flags me hizo ver una interacción que se me había pasado.

23 de agosto de 2026

El MOTD de SSH que terminó siendo un dashboard vivo de mi servidor

Cómo transformé el aburrido mensaje de bienvenida de SSH en un dashboard que lee la configuración real del túnel y muestra qué servicios están arriba.

23 de agosto de 2026

Cero puertos abiertos, un firewall inútil: la capa de seguridad que sí importaba

Armé mi servidor casero sin un solo puerto abierto al público, con fail2ban y actualizaciones automáticas. Igual hubo un hueco que el firewall nunca pudo tapar.

23 de agosto de 2026

Un bingo en tiempo real, un servidor casero y la presión de que no puede fallar en vivo

Construí un llamador de bingo con Node.js y Socket.IO para un evento presencial de más de 80 personas. La parte difícil no fue el código: fue aceptar que corría en mi propio servidor, sin margen de error.

23 de agosto de 2026

Por qué terminé escribiendo mi propio dashboard de monitoreo (y no usando el de Netdata)

Netdata es excelente para métricas de servidor, pero su interfaz no sirve en el celular. Por qué terminé construyendo mi propio mini-dashboard con Node.js, consumiendo su API y el socket de Docker.

23 de agosto de 2026

Docker, mDNS y el error 400 que casi me hace abandonar Home Assistant

Cómo el aislamiento de red por defecto de Docker rompe el descubrimiento IoT, y por qué un archivo de configuración que se regenera solo puede simular un bug de red durante días.

23 de agosto de 2026

Dos cámaras IP, dos protocolos, una sola lección sobre integrar lo que no controlas

Por qué una Reolink y una cámara genérica se comportaron distinto en Home Assistant, y cómo go2rtc en un contenedor Docker resolvió lo que la configuración nunca iba a resolver.

23 de agosto de 2026