Saltar al contenido
Radio Logo
PodcastsTecnologíaAtareao con Linux

Atareao con Linux

atareao
Atareao con Linux
Último episodio

844 episodios

  • Atareao con Linux

    ATA 844 Podman, IPs reales y La Liga

    29/10/2026 | 24 min
    Hoy te cuento una historia que empieza bien y acaba dándote un susto. Llevo tiempo moviendo atareao.es a contenedores y ha ido por fases. En casa ya solo tengo Podman rootless, sin demonio y sin pedirle permiso a root para nada. En el servidor donde vive atareao.es, en cambio, seguía con Docker en modo root y con demonio. Dos filosofías distintas.
    Cuanto menos permisos tenga un contenedor, mejor. Si algo se escapa de uno montado como root, el destrozo puede ser de aúpa. Así que me pasé a rootless, aunque tuviera que repensar medio montaje.
    Y aquí llega lo que me da rabia. Hace un par de años atareao.es se caía, se disparaba el consumo de CPU y se venía abajo. Sin mirar un log, sin una gráfica, sin una prueba desde fuera, decidí que el problema era del proveedor y me lo llevé a otro. Ya con los datos delante descubrí que el culpable estaba dentro: Redis, que hoy es Valkey.
    En el servidor monto un Traefik delante y detrás WordPress, MariaDB, Valkey, Umami y OpenGist. Uso Umami por una razón concreta: no pone cookies, no recoge datos personales y no sigue al visitante entre sitios. Que no necesite banner de consentimiento ya es bastante.
    Pero había un agujero que no veía. Fue Víctor quien me lo puso delante: con Podman rootless la visita llega al contenedor, sí, pero con la IP de origen cambiada por el camino. Sin IP real, Umami no sabe ni de qué país viene quien te lee. Lo apañé poniendo Cloudflare delante y fiándome de su cabecera. Fantástico, hasta que un sábado por la tarde dejó de funcionar.
    Perdí un par de horas hasta que lo entendí: no era rootless, ni Traefik, ni nada de mi montaje. Era un bloqueo por rangos enteros de IP, de los que dejan media internet sin servicio. Así que me quité el apaño y puse un HAProxy en bare metal en el 443 para mandar todo a Traefik rootless en un puerto alto. Ni puertos privilegiados, ni setcap, ni iptables: la IP real de vuelta y las redes aisladas.
    Si te toca, esto es lo que puedes hacer. Guarda el dominio, el operador, la hora y el error. Mide con dig, con mtr y con OONI Probe, publica lo que sale y denuncia. Solo así se da la vuelta. Y quédate con una idea: casi nunca falla lo que crees, falla lo que no mides.
    Capítulos
    00:00 - De Docker a Podman: el planteamiento
    02:34 - Dos mundos: Podman rootless en casa y Docker root en el servidor
    04:34 - atareao.es se caía y culpé a Contabo sin medir
    05:23 - El culpable estaba dentro: Redis y Valkey
    06:59 - Traefik, WordPress y Umami: cómo monto la infraestructura
    09:35 - Víctor me abre los ojos: las IPs reales no llegan
    11:56 - Rootless y la IP de origen: el parche de Cloudflare
    14:08 - La Liga bloquea rangos de IP: qué puedes hacer
    16:19 - HAProxy al 443 y Traefik bajando al 8443
    19:13 - Sin setcap ni iptables: por qué Traefik sigue en contenedor
    22:13 - Cierre: casi nunca falla lo que crees, falla lo que no mides
    Más información y enlaces en las notas del episodio
    🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    ✈️ Telegram 👉 https://t.me/atareao_con_linux
    🦣 Mastodon 👉 https://mastodon.social/@atareao
    🐦 Twitter 👉 https://twitter.com/atareao
    🐙 GitHub 👉 https://github.com/atareao
  • Atareao con Linux

    ATA 843 ¿Cómo se le da memoria a una IA?

    26/10/2026 | 26 min
    Hoy te cuento cómo le he dado memoria a mi asistente. No es un tutorial, son las ideas que he ido montando por si te sirven. La IA no recuerda nada: le pasas toda la conversación una y otra vez y cada sesión nueva empieza de cero.
    Hace unos episodios te hablé del asistente que monté para el viaje al sur de Italia. Allí me topé con dos paredes: la pieza que hacía de centro se quedaba corta y la memoria, que en cuanto me descuidaba ya no sabía qué había hecho un momento antes. Un asistente que no recuerda nada es un buscador con modales. Así que lo monté todo: herramientas y varias memorias, en Docker con Rust y React.
    Y una memoria no es un cajón: si metes datos y no decides qué hacer con ellos, no vale para nada. De ahí salen las cinco capas. La primera es lo que dije, la conversación en bruto en SQLite. La segunda es lo que pasó: cada 2.000 tokens genero una ficha del contexto y la convierto con un RAG para buscarla de forma semántica. Guardo toda la conversación, pero busco en las fichas.
    La tercera es cómo soy: otro proceso extrae lo que puede de mí y construye un retrato, quién eres, qué te gusta, cómo quieres que te traten. Cosas como que a mí no me gusta el cilantro. La cuarta son los hechos sueltos con fecha. Y la quinta, la que más me ha gustado, el diario que se escribe solo. Siempre he fallado el primer día, así que ahora lo escribe el asistente.
    Cuando busco traigo los 20 recuerdos relacionados con lo que hablo y los pondero por fecha: lo reciente pesa más. Solo las fichas, el retrato y algún detalle van en el system prompt, y eso son 15.000 tokens por llamada. Hay unas 20 herramientas y 11 skills, y se activan las que tocan.
    Y te lo confieso: no hay botón de olvidar. El asistente recuerda lo que tiene dentro y no puedo hacer que se le olvide nada, solo ponderar por tiempo. La herramienta se llama Valet y está en GitHub con licencia MIT. Las estadísticas: nueve millones de tokens por un euro, 0,16 dólares en siete días, 1.355 llamadas y 563 mensajes guardados. Quédate con la idea: usar el modelo para las tareas sistemáticas de cada día, como el diario 😊
    Capítulos
    0:00 - Presentación: dar memoria a una IA y decidir qué hacer con ella
    2:15 - El asistente POC del viaje al sur de Italia
    4:10 - Un asistente sin memoria es un buscador con modales
    5:20 - Un paso más: contenedor Docker con Rust y React
    6:25 - Corto plazo y largo plazo: las distintas memorias
    9:40 - Lo que dije, lo que pasó y cuándo: conversación en bruto en SQLite y fichas con búsqueda semántica
    12:12 - Hechos sueltos, el retrato y los procesos en paralelo
    15:00 - El diario que se escribe solo
    17:05 - El proceso completo y el peso del tiempo en los recuerdos
    19:15 - Valet: en GitHub con licencia MIT, modelos y consumo de tokens
    22:45 - Los prompts de cada memoria: archivista, colapsador, consolidador, timeline y diario
    24:26 - Cierre y despedida: la red de Sospechosos Habituales y el grupo de Telegram
    Más información y enlaces en las notas del episodio
    🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    ✈️ Telegram 👉 https://t.me/atareao_con_linux
    🦣 Mastodon 👉 https://mastodon.social/@atareao
    🐦 Twitter 👉 https://twitter.com/atareao
    🐙 GitHub 👉 https://github.com/atareao
  • Atareao con Linux

    ATA 842 ffmpeg, afina el oído de tu IA

    22/10/2026 | 20 min
    Arrancamos la serie de los sentidos de la IA por el más básico. Después de darle a tu modelo de lenguaje una memoria para buscar entre tus 6.000 o 7.000 documentos, toca darle sentidos, y el primero es el oído. Hoy te hablo de FFmpeg, la pieza que hace que lo demás funcione.
    FFmpeg es la navaja suiza del audio y el vídeo: está dentro de YouTube, VLC, Blender o del vídeo que ves en el navegador. Lo instalas con un apt install o un pacman y tienes un taller multimedia en un solo binario. Convertir de MP3 a WAV o a FLAC sin pérdida te cuesta una línea.
    El meollo es que Whisper no traga cualquier audio. Se entrenó con 680.000 horas de audio limpio a 16 kHz y en mono, así que espera PCM de 16 bits, un solo canal y 16 kHz, sin compresión. Si le das un MP3 a 44,1 kHz en estéreo y con silencios largos te lo puede transcribir, pero se arriesga a alucinar y a rellenar los silencios. Casi nunca el problema es el modelo, es cómo le das la entrada.
    Con un alias que convierta a ese formato ya tienes medio camino. Luego están loudnorm para normalizar el volumen y el filtro que quita los silencios de más de un segundo, la causa número uno del texto inventado, y una trampa con silenceremove que te cuento con detalle. También hablamos de cortar y unir con -ss, -t y concat.
    Y no solo sirve para preparar el audio que entra, también para postprocesar el que sale del TTS. Un motor local como Piper o Kokoro devuelve una voz plana, sin dinámica, que suena a robot con resaca. Con un paso alto, un compresor y un loudnorm final pasas de sonar a radio AM a sonar a FM, todo dentro de la pipeline de micrófono a altavoz con los scripts en Python.
    Para cuando el audio llega muy sucio hay tres filtros que salvan la grabación: afftdn contra el ruido constante del ventilador, adeclick para chasquidos y pops, y un equalizer que sube la banda de presencia de la voz. Una grabación en una cafetería queda usable para Whisper. Limpiar siempre antes de normalizar, porque si amplificas primero también amplificas el ruido.
    Sin FFmpeg, Whisper falla, el texto a voz suena a lata y la pipeline de voz no existe. Hoy hemos puesto los cimientos, y ahora llegan Whisper, el texto a voz, la visión artificial y un extra sobre OCR 😊
    Capítulos
    0:00 - De la memoria de tu IA a los sentidos: la nueva serie
    1:33 - La serie de los sentidos y el audio sucio que llega a tu IA
    3:14 - FFmpeg, la navaja suiza del audio y el vídeo
    5:57 - Instalar FFmpeg y convertir formatos en una línea
    7:27 - El meollo: cómo espera Whisper el audio (16 kHz, mono, 16 bits)
    10:01 - El alias whisperize, loudnorm a -23 LUFS y quitar silencios
    11:19 - Cortar y unir audio: -ss, -t, concat y fundidos
    13:14 - Postprocesar la voz del TTS: de radio AM a FM
    15:25 - La pipeline completa de voz y los scripts en Python
    17:05 - Audio muy sucio: afftdn, adeclick y equalizer
    18:29 - Conclusiones, despedida y comunidad
    Más información y enlaces en las notas del episodio
    🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es
    ✈️ Telegram 👉 https://t.me/atareao_con_linux
    🦣 Mastodon 👉 https://mastodon.social/@atareao
    🐦 Twitter 👉 https://twitter.com/atareao
    🐙 GitHub 👉 https://github.com/atareao
  • Atareao con Linux

    ATA 841 GraphRAG, tus notas por fin responden (y sin inventarse nada)

    19/10/2026 | 22 min
    Te tengo que confesar una cosa. En el episodio anterior, haciendo pruebas, me ventilé toda la información del GraphRAG y me tocó reindexarlo entero. Casi 6.300 notas otra vez, con el Slimbook echando humo. Me ha costado lo suyo, pero ya está. Y ahora toca lo bueno, porque el grafo está montado y solo falta interrogarlo. Este es el cierre de la trilogía, donde el grafo deja de ser un mueble y por fin responde.
    Lo primero es por qué no basta con una sola técnica. El vector te dice qué se parece a tu pregunta, y el grafo te dice qué está conectado. Si buscas un servidor web seguro, el vector acierta de pleno con la nota de hardening. Pero la nota de Certbot no dice esas palabras, así que un RAG clásico la pierde. El grafo la rescata porque está conectada con Nginx y https. Ni grep ni ripgrep te habrían dado eso.
    También te doy las cifras reales del grafo, más de 20.000 nodos, unas 6.300 notas, 15.000 entidades y 46.000 trozos con embeddings. Y la arquitectura híbrida, en tres pasos, primero lo vectorial, después el re-ranking por peso y por último la expansión por grafo, que recupera vecinos a uno o dos saltos. Todo lo modula el parámetro alfa, por defecto en 0,7, donde el significado manda y la conexión complementa.
    Y lo probamos con comandos de verdad. Con graphrag search lanzas la búsqueda y ves cómo cambian los resultados al mover el alfa. Con la profundidad controlas los vecinos que recuperas, con 0 te quedas en lo vectorial y con 2 abres dos saltos de grafo. Te enseño a filtrar por peso mínimo, por metadatos y por tipo de elemento.
    Después viene lo que más me gusta, graphrag ask. No te devuelve notas sueltas, te devuelve una respuesta redactada con Ollama en local y con las fuentes citadas al pie. Le preguntas cómo configurar Traefik y te da los pasos apoyándose en tus notas. Y cuando no tiene información, no se la inventa. En el ejemplo con GIMP solo encontró una nota y te lo dice tal cual. Hablo también de las comunidades y del build incremental, que solo procesa lo que has tocado, ideal para un cron.
    Capítulos
    0:00 - Introducción: el cierre de la trilogía GraphRAG y el reindexado del grafo
    2:13 - Repaso de la trilogía: qué es un GraphRAG y para qué sirve
    4:14 - Vector frente a grafo: por qué necesitas las dos cosas
    6:53 - Las cifras del grafo: nodos, notas, entidades y comunidades
    7:52 - La arquitectura híbrida en tres pasos y el parámetro alfa
    9:17 - Primera búsqueda: cómo montar un proxy inverso y el efecto del alfa
    11:21 - Profundidad de vecinos, Ollama y cómo interpretar los resultados
    13:53 - Filtros: min-weight, metadatos y tipos de elemento
    14:52 - graphrag ask: preguntas con fuentes citadas (cómo configuro Traefik)
    16:54 - Comunidades: build incremental y automatización con cron
    17:42 - Ejemplo con GIMP: búsqueda, ask y la ventaja de no alucinar
    17:42 - Ejemplo con GIMP: búsqueda, ask y la ventaja de no alucinar
    20:28 - Flecos pendientes: integración MCP con Neovim, bot de Obsidian y despedida
    Más información y enlaces en las notas del episodio: https://atareao.es/podcast/841
    🌐 Todo en https://atareao.es · ✈️ Telegram https://t.me/atareao_con_linux · 🦣 Mastodon https://mastodon.social/@atareao · 🐦 Twitter https://twitter.com/atareao · 🐙 GitHub https://github.com/atareao
  • Atareao con Linux

    ATA 840 sqlite-utils, tu navaja suiza para SQLite

    15/10/2026 | 27 min
    Llevo varias semanas construyendo un grafo de conocimiento con GraphRAG sobre SQLite, y en ese día a día me he topado con sqlite-utils, una herramienta que se ha convertido en mi navaja suiza para trabajar con bases de datos SQLite sin complicarme la vida. Es de esas utilidades que no sabías que necesitabas hasta que la pruebas.
    Te preguntarás por qué SQLite y no PostgreSQL o cualquier solución más seria. La respuesta es sencilla, porque necesito algo que quepa en mi equipo, que sea portátil y que pueda llevarme en un USB sin montar un servidor. Todo tu conocimiento, en un solo archivo que abres donde quieras.
    El problema de siempre ha sido inspeccionar esas bases. Abrir DBeaver o tirar de Python solo para mirar qué hay dentro da una pereza enorme, y al final acabas dejándolo. sqlite-utils, creada por Simon Willison, resuelve justo eso, y te permite consultar, filtrar, transformar y exportar sin escribir una línea de SQL ni de Python.
    Para que te hagas una idea, aquí hay dos cosas en una sola herramienta, una utilidad de línea de comandos y una librería de Python que no pretende ser un ORM. Nació dentro del ecosistema de Datasette, y busca que crear una base desde cero y poblarla con datos sea rápido y sin fricción. En mi caso ha acabado sustituyendo a los comandos sueltos de sqlite3 que tenía repartidos por las notas.
    Otro terreno donde se nota la mano es la ingesta. Con insert metes un JSON que llega por la tubería, un CSV de los que exportas de cualquier sitio, o la respuesta de una API con un curl delante. Con upsert y bulk actualizas registros que ya existían o metes miles de filas de golpe, y todo eso se encadena con jq en una sola tubería.
    Luego está la parte de cambiar las cosas sin dolor, renombrar una columna, borrar la que sobra o cambiar un tipo de dato. En SQL puro eso es un baile de create table, copiar los datos y borrar la tabla vieja, con el riesgo de liarla a mitad de camino. Aquí es un transform, se ejecuta dentro de una transacción y el esquema queda reescrito como si lo hubieras diseñado así desde el principio.
    En este episodio te cuento cómo instalarla con uv, cómo explorar tablas y esquemas, cómo navegar los datos con rows, cómo filtrar de forma segura con parámetros con nombre y cómo montar consultas complejas con joins. Además verás el combo que más me ha enganchado, sqlite-utils encadenado con jq y con llm para pasar el contexto de tu base directamente a un modelo de lenguaje. Y de propina, los detalles de mantenimiento que marcan la diferencia, como WAL, Vacuum, Optimize y la búsqueda full-text.
    Si tienes una base SQLite por ahí y nunca te has atrevido a mirar dentro, este es tu episodio 👍
    Capítulos
    0:00 - Presentación: sqlite-utils, la navaja suiza de SQLite
    2:20 - Por qué SQLite: GraphRAG, portabilidad y contexto de la serie
    4:20 - El problema de DBeaver y qué resuelve sqlite-utils
    6:00 - Instalación con UV y primeros pasos
    8:30 - Explorar tablas, columnas y esquemas
    11:30 - Navegar los datos con rows
    14:00 - Filtrar con where, ordenar y evitar inyección SQL
    16:30 - Consultas complejas, joins y selects a medida
    18:30 - El combo killer: sqlite-utils + jq + LLM
    20:30 - Escribir y transformar: insertar, crear, exportar y renombrar
    23:00 - El módulo Python y los consejos: WAL, Vacuum, Optimize y FTS
    25:20 - Conclusiones y lo que viene en el 841
    Más información y enlaces en las notas del episodio: https://atareao.es/podcast/840
    🌐 Todo en https://atareao.es · ✈️ Telegram https://t.me/atareao_con_linux · 🦣 Mastodon https://mastodon.social/@atareao · 🐦 Twitter https://twitter.com/atareao · 🐙 GitHub https://github.com/atareao
Más podcasts de Tecnología
Acerca de Atareao con Linux
Disfruta conmigo de Linux y del Open Source. Aquí encontrarás como sacarle el máximo partido a tu entorno de escritorio Linux, hasta como montar un servidor web, un WordPress, un proxy inverso, una base de datos o cualquier otro servicio que puedas imaginar. Y todo ello, lo puedes montar en una Raspberry Pi, en un VPS, en tu propio ordenador o en cualquier servidor. Vamos, cualquier cosa que quieras hacer con Linux, seguro, seguro, que la encontrarás aquí.
Sitio web del podcast

Escucha Atareao con Linux, Emilcar Daily y muchos más podcasts de todo el mundo con la aplicación de radio.es

Descarga la app gratuita: radio.es

  • Añadir radios y podcasts a favoritos
  • Transmisión por Wi-Fi y Bluetooth
  • Carplay & Android Auto compatible
  • Muchas otras funciones de la app