# Xiliux > Software honesto en Rust y Python: criptografía post-cuántica, herramientas de trading fiables y automatización con IA. Detrás está Juan Carlos Isaza, el desarrollador que escribe cada línea y cada artículo con conocimiento de primera mano. ## Productos - [Quipu — cifrado post-cuántico en Rust](https://xiliux.com/quipu): KEM híbrido X25519 + ML-KEM-1024 y firma híbrida Ed25519 + ML-DSA-87, con perfil CNSA 2.0. Resistente al algoritmo de Shor. - [Informes — obligaciones recurrentes](https://xiliux.com/informes): no perder un reporte con vencimiento (LegalTech). - [Servicios y MVPs](https://xiliux.com/servicios): del brief al MVP en 2 semanas. - [English landing](https://xiliux.com/en): the same work described in English, for readers outside Colombia, with [Quipu](https://xiliux.com/en/quipu) and [services](https://xiliux.com/en/services) translated. - [Código de las librerías](https://xiliux.com/librerias/codigo): fuente completo de las nueve micro-librerías, descarga directa y firmada (Ed25519 + ML-DSA-87). ## Librerías de código abierto - [position-sizing](https://github.com/isazajuancarlos/position-sizing): Traduce un presupuesto de riesgo a una cantidad que el exchange acepte, sin pasarse nunca del riesgo. Redondea hacia abajo, respeta mínimos, nocional y contract size, y cuenta las comisiones. Nace de un bug real: max(1, int(cantidad)) abre posiciones que arriesgan diez veces lo autorizado. - [ccxt-resilience](https://github.com/isazajuancarlos/ccxt-resilience): Endurece un cliente ccxt legítimo contra los falsos positivos de Cloudflare: hardening de cabeceras y retry selectivo con backoff que reintenta solo lo transitorio (403/429/timeout) y re-lanza los errores reales al instante. - [honest-eval](https://github.com/isazajuancarlos/honest-eval): Dos primitivas para no mentirte en un backtest: split walk-forward con embargo (sin fuga de futuro) y un gate de significancia apareado con n efectivo de Kish y cota inferior de confianza. Python puro, sin dependencias. - [hysteresis-state](https://github.com/isazajuancarlos/hysteresis-state): Máquina de estados con histéresis por confirmación: un estado nuevo solo se commitea tras sostenerse N observaciones consecutivas. Anti-flapping para clasificadores ruidosos, con histéresis asimétrica opcional. Python puro, sin dependencias. - [fanout-broadcast](https://github.com/isazajuancarlos/fanout-broadcast): Reparte un mensaje a varios canales con aislamiento de fallos: un canal caído no detiene a los demás, y un reporte dice qué se entregó, qué se omitió y qué falló. Para notificaciones, webhooks o alertas. Python puro, sin dependencias. - [dotkey-i18n](https://github.com/isazajuancarlos/dotkey-i18n): Internacionalización mínima: claves con notación de punto sobre ficheros JSON, con caché, fallback al idioma por defecto e interpolación. Sin gettext ni paso de compilación, agnóstica del framework. Python puro, sin dependencias. - [tumbaga](https://github.com/isazajuancarlos/tumbaga): Verificación de contraseñas con cadena de esquemas y actualización oportunista: el usuario migra de bcrypt a Argon2id al iniciar sesión, sin restablecer nada y sin enterarse. Existe porque un hash es de una sola vía —de bcrypt(clave) no se saca la clave—, así que no hay script que migre contraseñas: el único instante en que se puede es el inicio de sesión. - [chibcha](https://github.com/isazajuancarlos/chibcha): Constantes legislativas colombianas con la norma que las fija: SMMLV, UVT, auxilio de transporte, IPC, aportes, ARL, jornada y festivos. Nada devuelve un número pelado —smmlv(2026).norma dice de qué decreto sale—, porque en una liquidación el valor sin su fuente no se sustenta ante nadie. Si un año no está, levanta excepción en vez de devolver el más cercano. - [mirilla](https://github.com/isazajuancarlos/mirilla): Conduce un Chromium sin cabeza por CDP sobre una tubería —los descriptores 3 y 4— en vez de por un puerto: nada que descubrir, nada a lo que esperar, y dos pruebas en paralelo no se pisan. Existe porque un banco que afirma sobre el texto que devuelve el servidor mide el códec y no el producto: un fragmento insertado en el sitio equivocado devuelve el mismo 200 con el mismo cuerpo. Entra por el formulario en vez de inyectar la cookie, así que mide el acceso de paso. Dos dependencias. ## Artículos - [¿Puede una IA descifrar tu cifrado? La amenaza real es otra](https://xiliux.com/blog/puede-una-ia-descifrar-tu-cifrado): El titular del 'hackeo con IA' mezcla tres amenazas distintas. La IA no rompe la matemática del cifrado: potencia bugs de implementación, phishing y fuerza bruta. La amenaza a las matemáticas es la computación cuántica, y se mitiga con criptografía post-cuántica híbrida. - [chimini: la tabla periódica jugable donde fusionas elementos y ves qué pasa](https://xiliux.com/blog/chimini-tabla-periodica-jugable-fusion-elementos): Un laboratorio de química y física nuclear que corre en el navegador, gratis y sin instalar. Fusiona elementos, exponlos a energía y explora la tabla periódica con datos reales. - [SameSite=Lax no te protege del login-CSRF](https://xiliux.com/blog/samesite-lax-no-cubre-el-login-csrf): SameSite=Lax no cubre el login-CSRF, y lo descubrimos poniendo tres modelos de IA a atacar nuestro propio servidor de identidad: uno dio una falsa alarma, otro la refutó, y un tercero encontró el bug real. - [El mismo formato de texto no garantiza la misma firma](https://xiliux.com/blog/mismo-formato-no-es-misma-firma): Fusionábamos dos implementaciones de sesión en una sola librería. El formato del token era idéntico; las firmas, no. Lo que un vector fijo cazó antes de cerrarle la sesión a todos. - [Qué es la cadena de custodia digital (y qué tiene que hacer tu software)](https://xiliux.com/blog/que-es-cadena-de-custodia-digital): La cadena de custodia digital no es un hash: es la prueba continua de que un archivo no cambió, de quién lo produjo y de cuándo existió. Las cuatro garantías que un sistema tiene que dar para que una evidencia electrónica se sostenga. - [Sellado de tiempo: cómo fechar una evidencia digital para que nadie discuta la fecha](https://xiliux.com/blog/sellado-de-tiempo-evidencia-digital): Un hash y una firma prueban qué es un archivo y quién lo firmó, pero no cuándo existió. El sellado de tiempo es la pieza que da la fecha de forma verificable: qué es, cómo funciona una TSA y por qué la fecha del sistema no sirve. - [Maté al proceso y el drenaje siguió colgado: un nieto tenía la tubería](https://xiliux.com/blog/un-nieto-hereda-la-tuberia-y-el-drenaje-cuelga): Un subproceso se cuelga, lo mato con SIGKILL, y aun así mi programa se queda esperando su salida para siempre —a 0% de CPU—. La tubería no la tenía el hijo: la heredó un nieto, y mientras él viva el EOF no llega. - [Mi memoria adaptativa quedó vacía en producción, y no era un bug](https://xiliux.com/blog/mi-memoria-adaptativa-quedo-vacia-y-no-era-un-bug): Un sistema que debía aprender de sus propios fracasos acumuló cero registros, mientras una tabla vecina crecía. No había error en el código —los logs estaban limpios—. Era un punto muerto: dos mecanismos de seguridad que se mataban de hambre. - [No afirmes que una frontera de seguridad aguanta: demuéstrala](https://xiliux.com/blog/no-afirmes-una-frontera-de-seguridad-demuestrala): Confinar qué puede tocar un trozo de código —el sistema de archivos, lanzar procesos— es un problema de capabilities. Y hay una diferencia enorme entre diseñar la frontera y PROBAR que aguanta: la primera es una afirmación; la segunda, un arnés que ataca su propia frontera y guarda la evidencia. - [Apagué el bot: cinco estrategias, 77.000 velas y cero ventaja neta de comisiones](https://xiliux.com/blog/cinco-estrategias-77000-velas-y-cero-ventaja): Medí cinco estrategias de trading sobre 77.000 velas de un minuto de BTC y ETH, descontando comisiones. La mejor daba +0,0135 % con un estadístico t de 0,16. Por qué eso es cero, y por qué apagar fue la decisión correcta. - [29 tareas zombis: el trabajo que nunca termina no da ningún error](https://xiliux.com/blog/escaneos-zombis-la-tarea-que-nunca-termina): Un orquestador tenía 29 tareas en estado «ejecutándose» desde hacía días. Nadie se enteró, porque una tarea colgada y una tarea lenta se ven exactamente igual. La causa, la reconciliación al arrancar, y por qué el registro no servía para detectarlo. - [Un hash no es una cadena de custodia, y «la firma valida» prueba dos cosas de tres](https://xiliux.com/blog/un-hash-no-es-una-cadena-de-custodia): Verificar una firma digital exige tres cosas: la forma, la clave pública y la confianza en que esa clave es de esa persona. La tercera no la comprueba ninguna máquina. Qué prueba de verdad un hash, qué prueba una firma, y dónde se cae un informe de integridad. - [Seis horas esperando a un proceso que era él mismo](https://xiliux.com/blog/el-bucle-que-se-encuentra-a-si-mismo): Un bucle de espera que buscaba un proceso por su línea de órdenes giró seis horas y doce minutos. El patrón estaba escrito en el propio shell, así que se encontraba a sí mismo y la condición no podía volverse falsa nunca. Las formas correctas de escribirlo. - [Cincuenta segundos para medio megabyte: la optimización que arreglaba la constante y no el orden](https://xiliux.com/blog/optimizacion-que-arregla-la-constante-no-el-orden): Una conversión de base cuadrática sobrevivió meses en una librería de criptografía con todas las pruebas en verde. El comentario que la documentaba convencía de que el problema estaba resuelto. Medición, causa y el algoritmo clásico que lo bajó 111×. - [Mi detector estaba ciego en 1.029 de 6.309 líneas y sus tres pruebas seguían en verde](https://xiliux.com/blog/banco-solo-de-negativos-no-discrimina): Un banco de pruebas hecho solo de casos negativos sobre archivos que hoy están limpios no distingue una regla correcta de una regla ciega: los dos devuelven vacío. Cómo se detecta, y las tres condiciones que hacen que una pareja de pruebas discrimine de verdad. - [Dije que no salían datos. Al primer envío bueno, salieron dos](https://xiliux.com/blog/un-negativo-solo-vale-si-el-camino-llego-a-ejecutarse): Un cero, un silencio o un «no encontrado» son indistinguibles del negativo real cuando el código que los produciría nunca llegó a ejecutarse — y encima dan la confianza de haber verificado. El control positivo, y por qué hay que volver a mirar después del primer éxito. - [Tu banco de pruebas E2E mide el códec, no el producto](https://xiliux.com/blog/tu-banco-e2e-mide-el-codec-no-el-producto): Cien pruebas en verde y la pantalla rota. Por qué afirmar sobre el HTML que devuelve el servidor no prueba nada en cuanto el navegador construye parte de la interfaz — y cómo dibujarla de verdad, incluidas las pantallas con sesión. - [Sellar un archivo para que nadie pueda discutir que no lo tocaste](https://xiliux.com/blog/sellar-evidencia-digital-firma-post-cuantica): Un hash único obliga a exhibir todo el conjunto para probar un solo archivo. Un árbol de Merkle, no. Cómo funciona Tunjo: raíz de integridad, firma triple post-cuántica y un verificador que puede ejecutar cualquiera. - [Te roban la base de datos y no pueden crackear ni una contraseña](https://xiliux.com/blog/te-roban-la-base-de-datos-y-no-crackean-ni-una-contrasena): Argon2 encarece cada intento, pero el atacante que se lleva tu tabla de usuarios tiene tiempo infinito y GPUs. Un OPRF cambia el juego: el hash depende de una clave que no viaja con la base de datos. Cómo funciona, qué cuesta y qué se rompe. - [Todo el mundo escribe qué reportar. Nadie escribe cómo no perder ninguno](https://xiliux.com/blog/como-no-perder-un-reporte-obligaciones-recurrentes): Los incumplimientos rara vez vienen de desconocer la obligación, sino de rastrear treinta vencimientos en una hoja de cálculo. Por qué el Excel deja de servir y qué significa gestionar por reglas en vez de recordatorios. - [El redondeo que hace que tu bot arriesgue 10 veces lo que crees](https://xiliux.com/blog/dimensionar-posicion-sin-pasarse-del-riesgo): Dimensionar una posición parece una división, pero hacerla caber en los mínimos del exchange es donde se pierde dinero. El patrón max(1, int(...)) y cómo evitarlo con Decimal y redondeo hacia abajo. - [Por qué tu bot recibe 403 de Cloudflare (y cómo endurecer un cliente ccxt)](https://xiliux.com/blog/por-que-tu-bot-recibe-403-de-cloudflare-ccxt): Muchos exchanges ponen Cloudflare delante de su API y, a ratos, challenguean con 403 a peticiones legítimas de tu propia cuenta. Cómo mitigarlo sin evadir nada: hardening de cabeceras y retry selectivo con backoff. - [Dos formas en que un backtest te miente (y cómo evitarlas)](https://xiliux.com/blog/dos-formas-en-que-un-backtest-te-miente): Casi todo el edge que se mide en un backtest es una de dos ilusiones: el modelo vio el futuro, o la variante ganadora ganó por ruido. Dos primitivas en Python puro para descartar ambas antes de arriesgar nada. - [Cuando tu clasificador parpadea: histéresis para señales que oscilan](https://xiliux.com/blog/anti-flapping-histeresis-clasificador-ruidoso): Una señal que cerca del umbral hace OK, CAÍDO, OK, CAÍDO dispara alertas o failovers en cada tembleque. La solución es vieja y elegante: no cambiar de estado hasta que el nuevo se sostenga. - [Notificar a varios canales sin que un fallo tumbe al resto](https://xiliux.com/blog/repartir-a-varios-canales-sin-que-uno-tumbe-al-resto): Mandar lo mismo a Slack, Discord, un webhook y un email parece un for de tres líneas. Lo es, hasta que el primer canal lanza una excepción y los demás se quedan sin enviar. - [i18n sin gettext: traducciones en JSON con claves de punto](https://xiliux.com/blog/i18n-minima-sin-gettext-claves-de-punto-json): Para una app pequeña o mediana, gettext y Babel son un peaje de ficheros .po y un paso de compilación. A veces solo quieres un t() honesto sobre unos JSON. - [Cómo integrar un LLM (Claude o GPT) en tu aplicación Python](https://xiliux.com/blog/integrar-llm-ia-en-python): Guía práctica y con código para conectar un modelo de lenguaje a tu app Python: llamadas a la API, streaming, salidas estructuradas y buenas prácticas para producción. - [NiceGUI: crea una aplicación web en Python sin escribir JavaScript](https://xiliux.com/blog/nicegui-web-app-python-sin-javascript): Qué es NiceGUI, cómo funciona y por qué es ideal para MVPs, dashboards y herramientas internas hechas 100% en Python. Con ejemplo de código. - [Automatiza tareas repetitivas con un bot en Python](https://xiliux.com/blog/automatizar-tareas-con-bot-python): Cómo identificar qué automatizar y construir un bot o script en Python que te ahorre horas: scraping, informes, notificaciones y ejecución programada. - [¿Qué es la criptografía post-cuántica y por qué deberías migrar ya?](https://xiliux.com/blog/que-es-criptografia-post-cuantica): Explicación clara de la amenaza cuántica, el ataque 'harvest now, decrypt later', los estándares ML-KEM y ML-DSA del NIST, y por qué la migración empieza hoy. - [Cifrado híbrido: por qué combinar criptografía clásica y post-cuántica](https://xiliux.com/blog/cifrado-hibrido-clasico-post-cuantico): Qué es el cifrado híbrido, por qué combinar X25519 con ML-KEM-1024 (y Ed25519 con ML-DSA-87) es más seguro que elegir uno solo, y cómo lo aplica Quipu. - [RAG explicado: cómo darle a un LLM tu propia información](https://xiliux.com/blog/rag-explicado-llm-con-tus-datos): Qué es Retrieval-Augmented Generation, por qué evita las alucinaciones y cómo construir un asistente que responde con TUS documentos. Con el patrón en Python. - [De la idea al MVP: lanza tu producto en 2 semanas con Python](https://xiliux.com/blog/de-la-idea-al-mvp-python-2-semanas): Qué es un MVP, qué NO debe incluir, y cómo un stack Python moderno (FastAPI, NiceGUI, SQLite) permite validar tu idea en semanas en lugar de meses. - [Quipu: cifrado post-cuántico en Rust puro, con una rueda para Python](https://xiliux.com/blog/quipu-cifrado-multilenguaje-rust-python-node-go): Quipu es una librería de cifrado híbrido post-cuántico para datos en reposo, escrita en Rust puro. Para quien no programa en Rust, se distribuye como rueda nativa de Python (PyO3). Por qué dejamos atrás la C ABI y los bindings de varios lenguajes, con ejemplos.