23°

~/blog

Escritos

Redes, bajo nivel y sistemas, explicados a fondo. Nada se republica sin probarlo primero.

Portada: Un agente que lee mis propios posts y verifica que las cifras no se inventenArtículoUn agente que lee mis propios posts y verifica que las cifras no se inventenGoogle publicó la versión 2.14 de su kit de agentes el 4 de noviembre de 2026 y entre otras cosas sacó de experimental las sandboxes de ejecución local. Escribí un agente que lee un post técnico del blog, extrae cada cifra que aparece en el texto y abre el JSON crudo del experimento para comprobar que esa cifra existe. Sobre el post que publiqué ayer, detectó 46 números, verificó los 9 que venían de las mediciones, marcó 1 que no estaba en el JSON por un campo que dejé sin registrar, y clasificó los otros 36 como contexto o configuración. Tardó un minuto y dieciséis segundos. Una regex trivial clasifica mal: dice que verifica 45 cifras porque 50 == 50 por azar.#Agentes#SDK#VerificaciónPortada: Cola2 en 16 GB: cabe con offload, acierta 56 % en ARC-Easy, pero el banco del paper no correArtículoCola2 en 16 GB: cabe con offload, acierta 56 % en ARC-Easy, pero el banco del paper no correByteDance Seed publicó Cola2 el 6 de noviembre de 2026, un modelo de lenguaje con latentes continuos y un transformer de difusión en vez del autoregresivo. Lo bajé a la RTX 4070 Ti SUPER, lo levanté con el ejemplo oficial y lo medí en cincuenta preguntas de ARC-Easy. Entra en 14,5 GB con el transformer de difusión offloaded a la CPU, acierta 56 % contra el 22 % de la línea base trivial que siempre elige la primera opción, y tarda diez segundos y medio por pregunta. El banco entero del paper, con su scorer oficial, hace OOM con cualquier config que probé.#Modelos#GPU#BenchmarksPortada: Mage-VL-Cowork en 16 GB: cabe, responde en 2,5 s, pero no quiere clicarArtículoMage-VL-Cowork en 16 GB: cabe, responde en 2,5 s, pero no quiere clicarMicrosoft publicó Mage-VL-Cowork, un agente de computador de 4 000 millones de parámetros que en el papel saca 66 % en OSWorld. Lo bajé a la RTX 4070 Ti SUPER, lo levanté con la imagen oficial de SGLang y lo medí: carga en noventa a ciento veinte segundos, ocupa 13 985 MB de VRAM, responde en 2,47 s. Y en treinta prompts que le pidieron que clicara un botón, clicó cero veces: siempre contestó pedir otra captura.#Agentes#Modelos#GPUPortada: La red eléctrica pega un tirón cada minuto: ya se sabe por qué, y lo simuléNoticiaLa red eléctrica pega un tirón cada minuto: ya se sabe por qué, y lo simuléLa frecuencia de la red eléctrica cae un instante exactamente cada 60 segundos, en redes de varios continentes, y fue un misterio durante años. Un estudio del Forschungszentrum Jülich, la Universidad de Colonia y el KIT, publicado en Nature Energy en octubre de 2026, encontró al principal responsable: grandes baterías de respaldo que revisan su estado de carga al inicio de cada minuto, todas a la vez (los autores no descartan que otros equipos sincronizados por reloj también contribuyan). En Irlanda la señal se cuadruplicó entre 2016 y 2021. Aquí: qué se informó, cómo funciona el efecto y una simulación propia con 2.000 baterías que muestra cuánto baja el pico si cada una se revisa en un segundo al azar.#Energía#Red eléctrica#BateríasPortada: «SMS de la muerte»: un mensaje invisible puede dejar tu Android sin llamadas, incluso de emergenciaNoticia«SMS de la muerte»: un mensaje invisible puede dejar tu Android sin llamadas, incluso de emergenciaEl 29 de octubre de 2026 se informó una falla, llamada «SMS de la muerte» (CVE-2026-58882), que Google clasifica como crítica: un mensaje de texto especial, que no aparece en la bandeja ni muestra quién lo envía, puede dejar sin servicio de llamadas a teléfonos Android 12 a 17, cortar llamadas en curso incluso de emergencia y, con varios mensajes, dejar el teléfono reiniciándose cada minuto y medio. Google la corrigió en el parche de octubre para Android 14 a 17; la 12 y la 13 quedarían sin arreglo. Aquí: a quién afecta, cómo revisar tu nivel de parche (lo probé en un teléfono real) y qué hacer si el tuyo ya no recibe actualizaciones.#Android#Seguridad#SMSPortada: Unlimited-OCR 2 en 16 GB: lee tan bien como Chandra 2 de Datalab, pero en mi tarjeta no es ilimitadoArtículoUnlimited-OCR 2 en 16 GB: lee tan bien como Chandra 2 de Datalab, pero en mi tarjeta no es ilimitadoProbé Unlimited-OCR 2 de Baidu, publicado el 27 de octubre, contra Chandra 2 y Marker de Datalab, DeepSeek-OCR y Tesseract en una RTX 4070 Ti SUPER. En 20 páginas de un informe real del Banco Central de Chile empató arriba con Chandra 2: 0,12 % contra 0,31 % de error por carácter, una diferencia que no alcanza a ser significativa; DeepSeek-OCR quedó en 3,1 %. Pero la promesa de leer documentos sin límite no se cumplió en 16 GB: con transformers la memoria subió de 7,5 a 11,1 GB entre 10 y 40 páginas y a las 80 se quedó sin memoria; con SGLang el tiempo por token sí quedó plano, pero el modo por ventanas se colgó y una sola ventana devolvió 24 de 40 páginas sin dar ningún error.#OCR#Modelos locales#BenchmarksPortada: Volví a medir Wild contra mold y ganó mold: la culpa no era de las versiones, era de btrfsArtículoVolví a medir Wild contra mold y ganó mold: la culpa no era de las versiones, era de btrfsEn septiembre Wild le ganó a mold enlazando ripgrep. Repetí el banco con Wild 0.11 y mold 3.0 y mold ganó, también con los binarios viejos. Entre medio la máquina pasó de ext4 a btrfs. Con target en ext4 o tmpfs, Wild vuelve a ganar; en btrfs, Wild elige escribir desde un búfer y forzarle mmap le recorta entre 18 y 37 % del tiempo. En debug el enlace pesa de verdad: rust-lld tardó 37 s en btrfs y 1,9 s en ext4 el mismo enlace de bevy.#Rust#Enlazadores#BenchmarksPortada: Claude Code, Codex, OpenCode, OpenClaw, Hermes, mini-swe-agent y Raven con MiniMax-M3: 7 arneses de agentes medidos en Terminal-Bench 2.0ArtículoClaude Code, Codex, OpenCode, OpenClaw, Hermes, mini-swe-agent y Raven con MiniMax-M3: 7 arneses de agentes medidos en Terminal-Bench 2.0Puse siete arneses de agentes de código a manejar el mismo modelo barato, MiniMax-M3, en 40 tareas de Terminal-Bench 2.0: 280 ejecuciones con cada petición guardada y cada aprobada revisada por un juez ciego. El arnés más simple, mini-swe-agent, resolvió 29 de 39; Codex 26, OpenCode 25, Claude Code 23, OpenClaw y Hermes 22, Raven 20. Ninguna diferencia entre dos arneses sobrevive a la corrección por comparaciones múltiples. OpenCode fue el más barato y rápido; Raven, el más caro.#Agentes#Benchmarks#Claude CodePortada: Aislar un agente de código con gVisor o Kata: cuánto cuesta frente a Docker, medidoArtículoAislar un agente de código con gVisor o Kata: cuánto cuesta frente a Docker, medidoMedí cuánto cuesta correr el trabajo de un agente de código aislado en gVisor y en Kata Containers 4.3 (con QEMU y con Cloud Hypervisor) en vez de un contenedor Docker normal. Kata tarda 6 a 7 s en arrancar contra 0,22 s de runc y deja 199 a 302 MiB por contenedor contra 11,5; gVisor arranca en 0,33 s, usa 48,6 MiB y empata con runc en una carga de miles de archivos pequeños.#Contenedores#Seguridad#AgentesPortada: ComfyUI vs Forge en una GPU de 16 GB: empatan en SDXL y ComfyUI es el doble de rápido con Z-Image, cuando los modelos no cabenArtículoComfyUI vs Forge en una GPU de 16 GB: empatan en SDXL y ComfyUI es el doble de rápido con Z-Image, cuando los modelos no cabenMedí ComfyUI, Forge Neo y el Forge original con los mismos archivos, semillas y ajustes en una RTX 4070 Ti SUPER, con diffusers como línea base. Con SDXL empatan en 6,7 s por imagen. Con Z-Image Turbo, que no cabe junto a su codificador de texto, ComfyUI tarda 6,75 s y Forge Neo 13,4 s; con Qwen-Image fp8, 75,7 s contra 96,0 s. Los logs apuntan a cómo cada uno gestiona la memoria entre la RAM y la GPU.#IA#Benchmarks#Generación de imágenesPortada: NVFP4 vs FP8 vs GGUF en una GPU de 16 GB sin Blackwell: NVFP4 genera 2,3 veces más rápido que BF16 y empata en las 1319 preguntas de GSM8KArtículoNVFP4 vs FP8 vs GGUF en una GPU de 16 GB sin Blackwell: NVFP4 genera 2,3 veces más rápido que BF16 y empata en las 1319 preguntas de GSM8KMedí el mismo modelo de NVIDIA en BF16, NVFP4, MXFP8, FP8 y GGUF Q5_K_M en una RTX 4070 Ti SUPER. NVFP4 genera a 117 tokens por segundo contra 51 de BF16, y FP8 es el más rápido para leer un prompt largo. En las 1319 preguntas de GSM8K los tres formatos de vLLM empatan con BF16 dentro de ±3 puntos, aunque token por token NVFP4 cambia la elección de BF16 una de cada diez veces.#IA#Benchmarks#Inferencia localPortada: NVFP4 sin Blackwell: corrí el Qwen-Image de NVIDIA en una RTX 4070 Ti SUPER y el grano de NF4 estaba en 8 matricesArtículoNVFP4 sin Blackwell: corrí el Qwen-Image de NVIDIA en una RTX 4070 Ti SUPER y el grano de NF4 estaba en 8 matricesNVIDIA publicó Qwen-Image en NVFP4 solo para Blackwell. En una RTX 4070 Ti SUPER su ruta oficial no carga, y los pesos expandidos a bf16 corren más lento que NF4 (145 s contra 102 s por imagen) sin escribir mejor. Lo que sí encontré es el origen del grano de NF4: no estaba en las capas con peor error, sino en 8 matrices de los bloques del borde que NVIDIA dejó sin cuantizar. Dejarlas en bf16 lo quita a menos de medio segundo más por imagen.#IA#Benchmarks#Inferencia localPortada: Asterinas 0.19, el kernel en Rust compatible con Linux: repetí sus benchmarks en mi máquina y 13 de 23 se sostienenArtículoAsterinas 0.19, el kernel en Rust compatible con Linux: repetí sus benchmarks en mi máquina y 13 de 23 se sostienenAsterinas es un kernel escrito en Rust que corre programas de Linux sin cambios, y publica cada noche una comparación contra Linux. Repetí 23 de esos benchmarks con sus propios scripts, tres veces cada uno, en un Ryzen 7 7800X3D. En 13 el resultado se reproduce. Asterinas arrancó el doble de rápido y ganó en la latencia de sysbench con hilos; Linux ganó en las llamadas al sistema simples, la lectura y escritura de archivos y nginx que medí, y en schbench con 8 CPU. En fork el ganador se da vuelta respecto de lo publicado.#Rust#Linux#BenchmarksPortada: Kandinsky 6 en una tarjeta de 16 GB: el video sale, y en español solo el modelo grande pasó mi pruebaArtículoKandinsky 6 en una tarjeta de 16 GB: el video sale, y en español solo el modelo grande pasó mi pruebaKandinsky 6.0 genera cinco segundos de video con audio. En mi RTX 4080 de 16 GB, la receta oficial se quedó sin memoria con el modelo Lite destilado; con una receta en dos fases corrió, a unos 2 minutos 21 segundos por clip vertical. Medí la fidelidad de su español con Whisper en tres modelos de la familia: Lite destilado y Lite sin destilar no pasan la regla que fijé antes de correr; Pro destilado sí, pero su proceso llegó a 120 GiB de RAM del sistema.#Modelos#Video#GPUPortada: Por qué migré todo mi laboratorio a NixOS: cuatro máquinas, un repositorio y lo que costóArtículoPor qué migré todo mi laboratorio a NixOS: cuatro máquinas, un repositorio y lo que costóTenía cuatro máquinas con cuatro sistemas operativos distintos, servicios corriendo en tmux, contraseñas dentro de los units y varias sesiones de agentes tocando todo a la vez. En nueve días las pasé a NixOS con un solo flake. Medí lo que da: un despliegue tarda entre 11 y 17 segundos, el mismo commit produce el mismo hash de sistema en dos máquinas distintas y volver a la versión anterior toma 1,6 segundos. Y medí lo que costó: 35 de 111 commits son arreglos, se perdieron todos los entornos de Python y el DNS del router reapuntó 1.185 archivos solo.#NixOS#Infraestructura#AgentesPortada: Ocho modelos de decisión contra mis datos: ninguno superó a lo que ya uso, y el segundo del índice ordenó al revés el fraudeArtículoOcho modelos de decisión contra mis datos: ninguno superó a lo que ya uso, y el segundo del índice ordenó al revés el fraudeCorrí ocho modelos de decisión en el Decision Index, que reproduje, y en tres bancos propios con etiqueta real: planos de video, fraude de tarjetas y lluvia. Ninguno superó con claridad a la referencia clásica de cada banco. En fraude, el único banco donde se separan con claridad, d1-3B, segundo del índice, ordenó al revés y JEV-9B fue el mejor claro; en planos y lluvia los de arriba quedaron empatados.#IA#Benchmarks#Inferencia localPortada: Qwen-Image 2.1 reemplaza a FLUX en mis portadas: 7 veces más rápido en la misma tarjeta de 16 GB, y lo que pierdoArtículoQwen-Image 2.1 reemplaza a FLUX en mis portadas: 7 veces más rápido en la misma tarjeta de 16 GB, y lo que pierdoPasé los mismos prompts y las mismas seeds por el FLUX que genera mis portadas y por Qwen-Image-2.1-Turbo cuantizado a NF4, en la misma tarjeta de 16 GB. Qwen tarda 8,4 s por imagen contra 61 s, escribe exacto 13 de 18 textos contra 7 y dibuja la escena pedida en 11 de 15 portadas contra ninguna. Pierdo la atmósfera de la LoRA, y la versión que cabe en 16 GB escribe 4 textos menos que Qwen sin cuantizar.#IA#Benchmarks#Inferencia localPortada: Probé un PostgreSQL 19 vectorizado en un portátil: 18 a 21 % más rápido, y un ANY de 16.000 valores 948 veces más lentoArtículoProbé un PostgreSQL 19 vectorizado en un portátil: 18 a 21 % más rápido, y un ANY de 16.000 valores 948 veces más lentoProbé pg_vexec, un ejecutor vectorizado para PostgreSQL 19, en un portátil de 4 núcleos: ClickBench baja entre 18 y 21 % y todas las respuestas pasan el verificador del autor contra DuckDB. Pero la reescritura que salva al planificador de un OR gigante, pasar a = ANY, hace que elija un escaneo 948 veces más lento.#PostgreSQL#Bases de datos#RendimientoPortada: La raíz de DNSSEC cambió de llave el 11 de octubre: qué se rompió, hora por hora, y qué entornos ya confían en la nuevaArtículoLa raíz de DNSSEC cambió de llave el 11 de octubre: qué se rompió, hora por hora, y qué entornos ya confían en la nuevaEl 11 de octubre de 2026 la raíz del DNS empezó a firmar con la KSK-2024. Vigilé diez resolvers cada cinco minutos. Con example.com y contando desde la primera tanda con la llave nueva, systemd-resolved de Ubuntu 24.04 empezó a fallar a los 20 minutos, los unbound con solo la llave vieja entre 7 y media y 13 y media horas después, Pi-hole v5 siguió en pie y Yandex dejó de marcar sus respuestas como validadas. Antes del cambio medí qué distribuciones, imágenes Docker, routers y resolvers ya confían en ella.#DNS#DNSSEC#SeguridadPortada: Strands Decider 2B como juez de mis planos: 37 ms, y una regla de palabras lo empataArtículoStrands Decider 2B como juez de mis planos: 37 ms, y una regla de palabras lo empataMedí Strands Decider 2B como juez sobre 75 planos: con choice llega a AUC 0,91 en 34 ms por juicio, contra 0,99 de Claude Opus; una regla simple llegó a 0,90. Con su primitivo por defecto, noul, no atrapó ni uno de los 31 planos genéricos; el checkpoint v21 no lo mejora, y la repetición entre planos, que era mi falla real, la detectan todos. Datos, etiquetas y scripts publicados.#IA#Benchmarks#Inferencia localPortada: Un modelo que no escribe, solo decide: puse a Intern-Decision a predecir la lluvia sin entrenarloArtículoUn modelo que no escribe, solo decide: puse a Intern-Decision a predecir la lluvia sin entrenarloIntern-Decision salió el 26 de septiembre de 2026: modelos de 0,8B a 4B que no generan texto y devuelven una probabilidad por pregunta en una sola pasada. Lo instalé el mismo día, tropecé con tres fallos al instalarlo, uno de los cuales lo hacía entre 2 y 3,2 veces más lento, y lo puse a predecir la lluvia de mañana en 27.256 días de siete ciudades chilenas sin entrenarlo. El 2B llega a un AUC de 0,823, casi lo mismo que un Naive Bayes entrenado con 74.145 filas, y queda bajo la regresión logística.#Modelos#Benchmarks#GPUPortada: AWS dice que su harness de agentes ahorra 28% de tokens. Medí 1,82x más caro en local, 88% más barato en la nubeArtículoAWS dice que su harness de agentes ahorra 28% de tokens. Medí 1,82x más caro en local, 88% más barato en la nubeProbé Strands Harness, el runtime de agentes de AWS, contra un LangGraph pelado, mismos 3 tools, mismo gatekeeper, misma conversación de 20 turnos. Contra un Qwen3.8-27B local de 16k de contexto gastó 1,82 veces más tokens. Contra el mismo trabajo en un modelo cloud, con la temperatura por fin igualada entre los dos, gastó un 88,8% menos. Y tres auditorías adversariales tuvieron que corregir mis propios errores en el camino: 11 herramientas de más, un límite de turnos que mentía, y un doble conteo de caché que inflaba el primer número 4 veces.#Agentes#LangGraph#AWSPortada: Cómo funciona hoy la compresión de archivos (y cómo le gané 2,86% a zlib con teoría de grafos)ArtículoCómo funciona hoy la compresión de archivos (y cómo le gané 2,86% a zlib con teoría de grafos)Traduje zlib de C a Rust con c2rust, probé que la traducción es bit exacta en más de 15.000 casos, y después reemplacé la heurística de zlib por un camino mínimo en grafo. Resultado: 2,86% más chico que zlib -9, verificado byte a byte contra la C real. En el camino, cómo funciona la compresión sin pérdida hoy: LZ77, Huffman, y por qué zopfli y PPMd tampoco rompen el límite de Shannon.#Compresión#Rust#CPortada: Rust Coreutils 0.12 contra GNU 9.12: casi todo funciona igual, arrancar cuesta casi el triple y mv entre discos pierde las fechasArtículoRust Coreutils 0.12 contra GNU 9.12: casi todo funciona igual, arrancar cuesta casi el triple y mv entre discos pierde las fechasMedí Rust Coreutils (uutils) 0.12 contra GNU coreutils 9.12 en contenedores con límites: la suite de pruebas de GNU, 157 comandos con la salida comparada y el arranque de proceso. uutils es más lento en 91 de 157 celdas, tarda 2,8 veces más en lanzar 5.000 procesos, y mv entre sistemas de archivos pierde las fechas.#Rust#Coreutils#GNUPortada: Dragonfly 2.0 contra Redis 8 y Valkey 9: con 2 CPU gana por mucho, con 4 depende de cómo configures a los otrosArtículoDragonfly 2.0 contra Redis 8 y Valkey 9: con 2 CPU gana por mucho, con 4 depende de cómo configures a los otrosMedí Dragonfly 2.0, Redis 8.10 y Valkey 9.1 en contenedores con 2 y 4 CPU. Con io-threads activados, Redis y Valkey alcanzan a Dragonfly sin pipeline y lo superan con pipeline 16; con 2 CPU y sin pipeline, Dragonfly gana entre 59 % y 99 % sobre Redis por defecto. Usa 8 a 15 % menos memoria por clave.#Dragonfly#Redis#ValkeyPortada: CUDA en Rust contra CUDA C++: Rust gana por 3,2 % hasta que compruebas que no calculan lo mismoArtículoCUDA en Rust contra CUDA C++: Rust gana por 3,2 % hasta que compruebas que no calculan lo mismoCompilé cuda-oxide, el backend de NVIDIA para escribir kernels CUDA en Rust, y medí el mismo kernel contra CUDA C++. En Mandelbrot Rust sale 3,2 % más rápido, pero los dos programas difieren en 27.510 píxeles; con la aritmética igualada bit a bit, Rust queda 7 % más lento.#Rust#CUDA#GPUPortada: Wild le gana a mold enlazando Rust en 20 de 20, y en release el enlazador ya no es el cuello de botellaArtículoWild le gana a mold enlazando Rust en 20 de 20, y en release el enlazador ya no es el cuello de botellaMedí Wild 0.10.0, mold 2.42.1, rust-lld y GNU ld enlazando ripgrep y cargo. Wild ganó las 20 repeticiones de cada proyecto, por 1,9 ms y unos 8 ms. Con cualquiera de los dos el enlace es cerca del 1 % del rebuild. Y por el camino casi publico números falsos dos veces.#Rust#Enlazadores#BenchmarksPortada: Red neuronal explicada: igualó al boosting con 2.177 pesos, y cambiar la semilla le movió el AUC 0,004TutorialRed neuronal explicada: igualó al boosting con 2.177 pesos, y cambiar la semilla le movió el AUC 0,004Qué es una red neuronal, qué hace cada capa y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Una capa oculta de 128 unidades, 2.177 pesos y 81 KB, llegó a AUC 0,883 en la prueba de 2016-2026: la misma cifra que un boosting de 2,1 MB, con 0,40 ms por fila contra 3,09. Entrenarla costó cinco veces más, y repetir el entrenamiento cambiando solo la semilla movió el AUC de validación entre 0,881 y 0,884.#Machine learning#Algoritmos#PythonPortada: Transformer explicado: quedó bajo tres modelos más simples, y entre las candidatas de arriba la rejilla ordenó al revésTutorialTransformer explicado: quedó bajo tres modelos más simples, y entre las candidatas de arriba la rejilla ordenó al revésQué es un Transformer, qué hace la atención y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. La red elegida tiene 9.633 parámetros y 49 KB, y quedó por debajo del boosting, del bosque y de una red de una capa. Lo que más enseña no es el ranking: entre las seis arquitecturas que competían, el orden de la validación se invirtió en la prueba.#Machine learning#Algoritmos#PythonPortada: KNN explicado: entrenar tardó 0,007 s, predecir 5,5 s y con k = 1 memorizó lo que vioTutorialKNN explicado: entrenar tardó 0,007 s, predecir 5,5 s y con k = 1 memorizó lo que vioQué es k vecinos más cercanos, por qué hay que escalar, cómo elegir k y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Ajustar con las 74.145 filas tomó 0,007 s y puntuar la prueba de 2016-2026, 5,5 s con un hilo; con k = 1 dio AUC 1,000 en sus propios días de entrenamiento y 0,69 en validación. Con k = 100 llegó a 0,870, bajo un boosting y sobre la regresión logística.#Machine learning#Algoritmos#PythonPortada: Naive Bayes explicado: entrenó en 0,008 s y pesa 1,3 KB, pero el 62 % de sus probabilidades quedó en los bordesTutorialNaive Bayes explicado: entrenó en 0,008 s y pesa 1,3 KB, pero el 62 % de sus probabilidades quedó en los bordesQué es Naive Bayes, qué significa la suposición de independencia y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Ajustar con 74.145 filas tomó 0,008 s y el modelo ocupa 1,3 KB, con AUC 0,822; por tramos llegó a 0,844, sin diferencia concluyente con la regresión logística. El 62 % de sus probabilidades quedó bajo 0,01 o sobre 0,99, y calibrarlo bajó la pérdida logarítmica de 1,09 a 0,39.#Machine learning#Algoritmos#PythonPortada: SVM explicada: la presión en Pa hundió el AUC a 0,555 y el kernel exacto tardó 51 segundosTutorialSVM explicada: la presión en Pa hundió el AUC a 0,555 y el kernel exacto tardó 51 segundosQué es una máquina de vectores de soporte, qué hacen el margen, C y gamma, y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Sin escalar, cambiar la presión de kPa a Pa bajó el AUC en validación de 0,835 a 0,555; con las 74.145 filas el kernel RBF tardó 51 s y, en la prueba de 2016-2026, quedó bajo un boosting que entrenó en 2,6 s.#Machine learning#Algoritmos#PythonPortada: Árbol de decisión explicado: 15 nodos que se leen, 8.524 hojas que memorizanTutorialÁrbol de decisión explicado: 15 nodos que se leen, 8.524 hojas que memorizanQué es un árbol de decisión, cómo elige sus preguntas y cuándo memoriza, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Sin límite de profundidad acertó todo lo que vio y en días nuevos bajó a AUC 0,689; con profundidad 7, elegida en validación, llegó a 0,862.#Machine learning#Algoritmos#PythonPortada: ExLlamaV3 contra llama.cpp con Qwen3.8-27B en 16 GB: decodifica más rápido, pero no siempre ganaArtículoExLlamaV3 contra llama.cpp con Qwen3.8-27B en 16 GB: decodifica más rápido, pero no siempre ganaLes di a los dos motores exactamente los mismos tokens de entrada dentro de un contenedor con límites de pod. ExLlamaV3 decodifica más rápido y procesó 131 mil tokens de contexto; en archivos de 13 GB pierde menos calidad, en los de 15 GB pierde contra el GGUF. En un turno agéntico, el prefill se come casi toda la ventaja.#ExLlamaV3#llama.cpp#CuantizaciónPortada: Gradient boosting explicado: 594 árboles en cadena que entrenan 9 veces más rápido que un bosqueTutorialGradient boosting explicado: 594 árboles en cadena que entrenan 9 veces más rápido que un bosqueQué es gradient boosting, cómo cada árbol corrige a los anteriores y cuándo falla, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Con tasa 1,0 se desestabilizó y a las 3.000 rondas quedó en AUC 0,681; con tasa 0,03 y 594 rondas elegidas en validación llegó a 0,883, sin diferencia concluyente con un bosque de 200 árboles.#Machine learning#Algoritmos#PythonPortada: K-Means explicado: le pedí cuatro tipos de día al clima de Chile y encontró SantiagoTutorialK-Means explicado: le pedí cuatro tipos de día al clima de Chile y encontró SantiagoQué es K-Means, cómo funciona el algoritmo de Lloyd y cuándo engaña, medido con clima diario de siete ciudades de Chile entre 1984 y 2026. Sin escalar, la humedad aporta el 76 % de la separación; con k = 8, solo el 18 % de los inicios al azar queda a menos de 0,1 % de la mejor inercia encontrada; y ningún criterio se pone de acuerdo en cuántos grupos hay.#Machine learning#Algoritmos#PythonPortada: Random Forest explicado: cómo vota un bosque de árboles, medido con 42 años de clima de ChileTutorialRandom Forest explicado: cómo vota un bosque de árboles, medido con 42 años de clima de ChileQué es Random Forest, cómo funcionan el bootstrap y el sorteo de variables, y por qué sus árboles se entrenan en paralelo y no en cadena. Lo medí prediciendo lluvia en siete ciudades de Chile: 7,5 veces más rápido con 8 CPU, meseta pasados los 100 árboles, una columna de ruido que la importancia por defecto pone por encima de variables reales y un techo al extrapolar temperaturas.#Machine learning#Algoritmos#PythonPortada: Regresión lineal explicada: la recta que midió el calor en Chile y lo que la rompeTutorialRegresión lineal explicada: la recta que midió el calor en Chile y lo que la rompeQué es la regresión lineal, cómo se calculan sus coeficientes y cuándo deja de servir, medido con datos diarios de siete ciudades de Chile. La máxima sube 0,33 °C por década en Temuco y baja en Valparaíso, el descenso de gradiente sin escalar no llega a una solución útil, un 5 % de datos con la coma corrida multiplica el error por 4,7 y la recta entrena unas 1.100 veces más rápido que un bosque aleatorio.#Machine learning#Algoritmos#PythonPortada: Regresión logística explicada: 16 números para decidir si llueve mañanaTutorialRegresión logística explicada: 16 números para decidir si llueve mañanaQué es la regresión logística, cómo convierte una suma en probabilidad y cuándo engaña, medida con clima diario de siete ciudades de Chile entre 1984 y 2026. Una recta da probabilidades negativas en el 9 % de los días; con umbral 0,5 la logística atrapa solo la mitad de las lluvias; y promete más lluvia de la que cae.#Machine learning#Algoritmos#PythonPortada: Un chat en Amazon Bedrock AgentCore para mi blog: lo rompí con 64 mensajes y lo rearmé con reglas fuera del promptArtículoUn chat en Amazon Bedrock AgentCore para mi blog: lo rompí con 64 mensajes y lo rearmé con reglas fuera del promptTutorial: chat LangGraph en Amazon Bedrock AgentCore con Knowledge Base S3 y guardrails, probado con una conversación de 64 mensajes. Costos y opción local.#IA#AWS#SeguridadPortada: Medí Pingora 0.9.0 seis veces más lento que nginx. El culpable era una línea de mi códigoArtículoMedí Pingora 0.9.0 seis veces más lento que nginx. El culpable era una línea de mi códigoEscribí un reverse proxy mínimo con Pingora 0.9.0 y en un contenedor de 2 vCPU medía 21 mil peticiones por segundo contra las 126 mil de nginx: seis veces más lento. El culpable no era Pingora sino un getaddrinfo bloqueante que mi upstream_peer ejecutaba en cada petición. Corregido, la brecha real es 1,70x, y perf la cuantifica: 1,70x en ciclos por petición, 119,4 mil contra 70,4 mil, sin decir dónde se gastan.#Rust#Benchmarks#RedesPortada: Reglas duras contra Random Cut Forest sobre el mismo stream: el modelo aporta 13 puntos de recall y cuesta 7 veces el throughputArtículoReglas duras contra Random Cut Forest sobre el mismo stream: el modelo aporta 13 puntos de recall y cuesta 7 veces el throughputMonté Apache Flink con Kafka y medí tres reglas deterministas contra el Random Cut Forest de Amazon sobre exactamente el mismo flujo de pagos, en un servidor de cuatro núcleos sin GPU. Las reglas alcanzan 0,814 de recall a 173 mil eventos por segundo; el modelo llega a 0,943 pero baja el pipeline a 23 mil; juntos suben a 0,982.#Streaming#Benchmarks#DatosPortada: Medí 320 sitios chilenos: la mitad ya usa criptografía post-cuántica, y casi ninguno lo decidióArtículoMedí 320 sitios chilenos: la mitad ya usa criptografía post-cuántica, y casi ninguno lo decidióSondeé los 320 dominios .cl más visitados: 145 negocian X25519MLKEM768 (47,7 %), pero solo 9 de los 128 con infraestructura propia. Coste medido: 0 ms.#Criptografía post-cuántica#TLS#ChilePortada: Armé un handshake completamente post-cuántico, y después fui a ver cuál de mis servidores podía hacerloArtículoArmé un handshake completamente post-cuántico, y después fui a ver cuál de mis servidores podía hacerloRustls activó los certificados ML-DSA por defecto, solo para jerarquías privadas. Armé un mTLS donde el intercambio de claves, la firma del servidor y la identidad del cliente son post-cuánticos. Medí cuánto pesa la cadena, qué versión de cada servidor lo soporta, y corregí un número que había dado mal: la clave no es 19 veces más grande, son 128 bytes.#Criptografía post-cuántica#TLS#mTLSPortada: pg_anon encontró los emails de mi base, pero no los RUTArtículopg_anon encontró los emails de mi base, pero no los RUTProbé pg_anon, la herramienta rusa que enmascara datos personales en Postgres. Con las reglas de fábrica detectó 1 de 8 columnas con PII en una base chilena; con reglas propias, las 8. Medí recall, integridad y velocidad contra pg_dump.#PostgreSQL#Datos personales#AnonimizaciónPortada: Más bits donde duele: cuanticé un Qwen3.8-27B a la medida de mi 4070 TiArtículoMás bits donde duele: cuanticé un Qwen3.8-27B a la medida de mi 4070 TiEl Q4 se pasa de 16 GB y el Q3 pierde calidad. Un parche de llama.cpp reparte los bits capa por capa: medí un Qwen3.8-27B al 94 % de una referencia de 8 bits que sí entra en una 4070 Ti.#Cuantización#llama.cpp#GGUFPortada: Bun se reescribió de Zig a Rust en once días. Medí lo que publicaron, y lo que noArtículoBun se reescribió de Zig a Rust en once días. Medí lo que publicaron, y lo que noBun portó 535.000 líneas de Zig a Rust y publicó tres cifras concretas: arranque, peticiones por segundo y tamaño de binario. La versión 1.3.14 fue la última en Zig y la 1.4.0 la primera en Rust, así que se descargan las dos y se mide lo mismo cambiando solo el binario. El arranque la supera con holgura, el binario se queda corto, y de memoria y CPU en reposo el anuncio no da ningún número: esas dos las mido sin nada oficial con qué contrastarlas.#Rust#ArquitecturaPortada: Monté un sandbox público del Sistema de Finanzas Abiertas de Chile, y Keycloak solo no alcanzabaArtículoMonté un sandbox público del Sistema de Finanzas Abiertas de Chile, y Keycloak solo no alcanzabaChile tiene norma de finanzas abiertas y no tiene un sandbox público donde probarla. Monté uno completo y no oficial, fiel al Anexo Técnico: directorio de participantes, banco, servidor de autorización y aplicación solicitante, con PAR obligatorio, objeto de petición cifrado, mTLS y RAR en el token. Keycloak 26 cubre buena parte por configuración, pero el modelo de consentimiento que Chile eligió no existe en el producto: hubo que escribirlo entero.#Seguridad#Arquitectura#ChilePortada: Los siete consejos de GEO: reproduje la única prueba que existe y después audité mis 72 páginasArtículoLos siete consejos de GEO: reproduje la única prueba que existe y después audité mis 72 páginasUn estudio ruso probó los siete consejos que repite la industria del GEO sobre 73 páginas que seis motores citaron y ninguno sobrevivió. Reconstruí sus conteos y reproduje los siete valores de p exactos. Después llevé el detector a mis 72 páginas, y ahí apareció lo que ningún consejo mira: cuatro páginas distintas declarando la misma entidad.#SEO#GEO#EstadísticaPortada: Traduje DOOM de C a Rust sin escribir una línea, y después usé el modelo para lo que sí sirveArtículoTraduje DOOM de C a Rust sin escribir una línea, y después usé el modelo para lo que sí sirveNecesitaba pasar un programa de C a Rust y mi primera idea fue pedírselo a un modelo. Existía una herramienta que lo hace en 23 segundos. La traducción coincidió bit a bit con el original en las 11.113 tramas comparadas, salvo una que se explica por un fallo de memoria sin inicializar ya presente en el DOOM de 1993, y el modelo terminó sirviendo para otra cosa: texturas, relieve por píxel y luz continua sobre el motor original.#Rust#C#Traducción de códigoPortada: Go 1.27 trae SIMD portátil: empata con NumPy fuera de caché y pierde dentroArtículoGo 1.27 trae SIMD portátil: empata con NumPy fuera de caché y pierde dentroMedí el paquete simd experimental de Go 1.27 contra NumPy en una tarea real. Empatan cuando el corpus no cabe en caché, y NumPy gana 2.4 veces cuando sí cabe. Por el camino casi publico dos comparaciones falsas, y esas son la parte útil.#Go#Benchmarks#PythonPortada: TabPFN y TabICL contra XGBoost ajustado: el modelo que no entrena ganó en catorce de catorce tablasArtículoTabPFN y TabICL contra XGBoost ajustado: el modelo que no entrena ganó en catorce de catorce tablasLa promesa de TabPFN y TabICL es que predicen sobre una tabla sin entrenar en ella y aun así superan al boosting ajustado. La medí en catorce datasets del banco de Grinsztajn, con la misma partición y el mismo reloj para todos. Gana el que no entrena, la ventaja aguanta hasta 32 000 filas en vez de romperse, y el modelo más citado ya no se puede descargar sin cuenta.#Modelos#Benchmarks#GPUPortada: Corrí AIFS 2.0, el modelo de clima de ECMWF, en mi tarjeta de escritorio y quedé a 0.45 °C del pronóstico oficialTutorialCorrí AIFS 2.0, el modelo de clima de ECMWF, en mi tarjeta de escritorio y quedé a 0.45 °C del pronóstico oficialECMWF publicó los pesos de su modelo de pronóstico con IA. Pesa menos de un giga y corre en una tarjeta de escritorio: 48 horas de pronóstico en 108 segundos y 5.77 GB de memoria, o 33 minutos si no tienes GPU. Lo instalé paso a paso, lo comparé contra el modelo físico operativo del mismo centro y anoté los dos tropiezos que casi me hacen publicar un disparate.#Modelos#GPU#ClimaPortada: Puse el mismo agente a resolver bugs reales con tres motores locales: 284B, 27B y 27B en dos bitsArtículoPuse el mismo agente a resolver bugs reales con tres motores locales: 284B, 27B y 27B en dos bitsEl DeepSeek Harness solo se ha probado con la API oficial. Lo conecté a tres motores locales y les di instancias reales de SWE-bench Verified. Dos empatan en aciertos, uno es once veces más rápido, y el que tiene 284 mil millones de parámetros no llega ni a la salida.#Agentes#Modelos#GPUPortada: Tu diagrama de arquitectura miente: probé las dos formas de escribirlo como códigoArtículoTu diagrama de arquitectura miente: probé las dos formas de escribirlo como códigoUn editor visual de C4 apareció en Habr y no se puede autoalojar. Probé las dos alternativas que sí: el CLI de Structurizr genera los tres niveles de un sistema real en 1 segundo desde un solo archivo; C4-PlantUML llega al mismo resultado sin instalar nada, a costa de triplicar el modelo.#Arquitectura#HerramientasPortada: El chip que guarda tus claves está roto: audité las cuatro máquinas de mi enjambreArtículoEl chip que guarda tus claves está roto: audité las cuatro máquinas de mi enjambreDos fallos de CVSS 8.5 y 8.3 en el TPM por firmware afectan de Ryzen 3000 a Ryzen 9000 y a Intel hasta Ultra 200. Revisé mis cuatro máquinas: dos están afectadas, una tiene parche desde julio y la otra fue abandonada por el fabricante en 2022.#Seguridad#Hardware#LinuxPortada: PhantomRelay: por qué tu automatización se delata antes del primer byte HTTPArtículoPhantomRelay: por qué tu automatización se delata antes del primer byte HTTPUn cliente HTTP de Node es distinguible de Chrome real en el handshake TLS, antes de enviar una sola cabecera. Cómo construí un relay de navegador con un addon Rust sobre BoringSSL, escalación por costo y casi 900 tests.#Sistemas#RedesPortada: Pocket TTS: cloné mi voz en un CPU de 2019, sin GPU y sin nubeTutorialPocket TTS: cloné mi voz en un CPU de 2019, sin GPU y sin nubeUn modelo de voz de 209 MB que corre en CPU, clona una voz con 25 segundos de referencia y permite uso comercial citando la fuente. Instalación paso a paso, métricas medidas en un i5 de 2019 y mi opinión honesta frente a ElevenLabs y compañía.#IA#AudioPortada: ¿Entra Qwen3.8-27B en 16 GB de VRAM? Lo medí, y de paso descubrí que mi banco de pruebas mentíaArtículo¿Entra Qwen3.8-27B en 16 GB de VRAM? Lo medí, y de paso descubrí que mi banco de pruebas mentíaTodos repiten que el nuevo modelo de Alibaba necesita unos 15 GB en 4 bits. Mi GPU tiene 16 y el archivo pesa 16,5. Medí tokens por segundo, VRAM real y reparto CPU/GPU en tres contextos, y el modelo terminó corrigiéndome a mí.#Modelos#GPU#BenchmarksPortada: Agatha: cómo convertí YouTube en un disco duro con corrección de erroresTutorialAgatha: cómo convertí YouTube en un disco duro con corrección de erroresAgatha codifica cualquier archivo binario en frames de video 4K, los sube a YouTube y los recupera con 100% de fidelidad usando corrección de errores BCH. Cómo funciona, requisitos y ejemplos reales verificados por SHA256.#Sistemas#InvestigaciónPortada: El modelo OSI explicado: las 7 capas y la encapsulaciónArtículoEl modelo OSI explicado: las 7 capas y la encapsulaciónQué es el modelo OSI, para qué sirve cada una de sus 7 capas y cómo un dato se encapsula en segmentos, paquetes, tramas y bits al viajar por la red.#Redes#Bajo nivel