Ir al contenido principal

Entradas

EL VERDADERO VALOR DE EXPONER TU CÓDIGO AL ESCRUTINIO

Escribir en aislamiento es cómodo, pero suele ser el camino más rápido para inyectar deuda técnica silenciosa en los cimientos de tu proyecto. A lo largo de mis más de 15 años diseñando y escalando plataformas, he comprobado que el límite técnico de un sistema rara vez es el lenguaje. El verdadero cuello de botella es la falta de retroalimentación temprana. Mentorizar equipos y debatir enfoques en los meetups de nuestra comunidad me ha dejado una gran lección: el crecimiento exponencial ocurre cuando te ves obligado a justificar tu lógica frente a otros colegas. Hacer una revisión técnica va mucho más allá de cazar errores de sintaxis. Implica trazar rutas de contingencia para anticipar cómo esa pieza de software afectará la alta disponibilidad cuando la carga operativa se multiplique. Para documentar y socializar estos procesos de refactorización colectiva, recopilé varios de estos debates en un proyecto open source ( https://github.com/pixelead0/aprendiendo-pythonCDMX ...

EL ESPEJISMO DEL ESCALADO INFINITO: CUANDO TUS LAMBDAS CHOCAN CON LA PARED

Es fácil caer en la trampa de pensar que el modelo serverless es la solución mágica para cualquier carga de trabajo. Despliegas tu código, te olvidas de la infraestructura subyacente y dejas que la nube escale por ti. Sin embargo, en la trinchera operativa descubres rápidamente la letra pequeña: los límites estrictos de tiempo de ejecución y memoria. Hace un tiempo, me enfrenté a un proceso crítico que, al aumentar el volumen de transacciones, empezó a rozar el temido límite de los 15 minutos en nuestras funciones Lambda, amenazando con fallos silenciosos y cuellos de botella inesperados. Diseñar una arquitectura resiliente es muy parecido a jugar ajedrez; no basta con resolver la jugada inmediata, debes anticipar cómo se comportará el tablero cuando tu sistema deba procesar diez veces más carga. La tentación inicial siempre es aplicar un parche rápido (como intentar optimizar el script para rascar unos segundos), pero en lugar de eso, optamos por pagar deuda técnica y r...

LA COMUNIDAD Y EL OPEN SOURCE: EL MOTOR DE TU EVOLUCIÓN TÉCNICA

El crecimiento profesional en ingeniería no ocurre en el vacío. Si bien la experiencia técnica individual es valiosa, la verdadera maestría llega cuando participamos activamente en comunidades y proyectos open source. Es en estos espacios donde el aprendizaje trasciende lo académico para convertirse en una resolución colectiva de problemas reales. Participar en comunidades, como lo he hecho personalmente al liderar y contribuir en espacios enfocados en Python, permite exponerse a diversas arquitecturas y desafíos de escala que raramente vemos en un solo entorno laboral. Esta interacción nos obliga a refinar nuestras habilidades de comunicación, aprender a documentar sistemas de forma clara y, sobre todo, a recibir feedback honesto de colegas con contextos distintos. El open source actúa como una lente que aumenta nuestra capacidad técnica, obligándonos a escribir código legible, modular y mantenible —características fundamentales de cualquier sistema de alta disponibilid...

POR QUÉ EL CÓDIGO POR DIVERSIÓN MEJORA TU ARQUITECTURA

En el día a día operativo, es sumamente fácil quedar atrapado en la inercia infinita de los tickets, los pipelines y la resolución de incidentes críticos. Pasamos jornadas enteras diseñando robustas arquitecturas cloud-native sobre AWS o GCP para asegurar la alta disponibilidad de los servicios transaccionales. Sin embargo, al estar inmersos exclusivamente en las exigencias de los sistemas empresariales, corremos el riesgo de perder la capacidad de experimentar y fallar de forma segura. Desarrollar pequeños scripts o proyectos personales, sin la presión asfixiante de un SLA o los estándares de un cliente, es el verdadero terreno fértil para la innovación técnica. Es como ejecutar simulaciones tácticas en un entorno logístico aislado: al explorar herramientas sin el riesgo de un colapso en producción, descubres patrones de diseño totalmente nuevos. Estos descubrimientos lúdicos luego se transforman en tus mejores herramientas para anticipar cuellos de botella y trazar ru...

POR QUÉ UN SIMPLE BOT TE ENSEÑA MÁS DE ARQUITECTURA QUE LA DOCUMENTACIÓN

Hacer un bot de Telegram para resumir textos suena a un script inofensivo de fin de semana. Hasta que lo pones a interactuar con el mundo real. En la trinchera descubres que el verdadero desafío rara vez es la lógica de negocio o la sintaxis de la librería. El reto es domar la latencia. Es como gestionar el flujo logístico en un centro de distribución: si no anticipas la saturación y creas áreas de contención, un pico de demanda colapsa toda la operación. Ahí es cuando chocas de frente con los rate limits de las APIs externas, y tu código lineal y predecible simplemente deja de ser viable. Para evitar que las peticiones se asfixien, te ves obligado a rediseñar el flujo, implementando procesamiento asíncrono robusto. Es en estos escenarios donde adoptar una arquitectura event-driven deja de ser teoría de pizarrón y se convierte en pura supervivencia operativa. Hace poco armé un pequeño proyecto open source ( https://github.com/pixelead0/Telegram-Summarizer ) justo para explor...

KARNITAS v1.0.2 (Kernel Agentic Runtime Network for Intelligent Tasks & Automation Systems).

  ¿Dejarías que la IA escriba código sin un contrato claro de lo que esperas? 🤖📝 Hace unas semanas les presenté K.A.R.N.I.T.A.S., nuestra propuesta de estándar abierto para gobernar el contexto en entornos multi-agente y evitar que herramientas como Cursor o Claude adivinen tu arquitectura. Hoy damos el siguiente paso con el lanzamiento de la v1.0.1, integrando Spec-Driven Development (SDD) al núcleo de la convención. Si ya es hora de ponerle reglas claras a la IA, el enfoque basado en especificaciones es el camino. Con esta actualización logramos: 🛠️ ¿Qué cambia con SDD en KARNITAS? Contratos previos a la ejecución: Definimos el comportamiento esperado del sistema mediante especificaciones estrictas antes de que los agentes tiren una sola línea de código. Taco-Núcleo Verificado: El estado del contexto ahora pasa por una zona de validación forzada, garantizando pruebas precisas y una arquitectura libre de alucinaciones. Ciclo de desarrollo confiable: Una estructura...

K.A.R.N.I.T.A.S. (Kernel Agentic Runtime Network for Intelligent Tasks & Automation Systems).

¿Cansado de que Cursor, Copilot o Claude alucinen librerías, rompan tu arquitectura o repitan el mismo bug que corregiste hace un mes? 🤖🌮 A medida que integramos más asistentes de IA en nuestros flujos de trabajo, nos estamos topando con un muro: los repositorios fueron diseñados para humanos, no para sistemas multi-agente. Sin una "memoria operativa" y un contexto gobernado, la IA adivina, y adivinar en ingeniería de software cuesta caro. Hoy me emociona presentarles el RFC de nuestro nuevo estándar abierto: K.A.R.N.I.T.A.S. (Kernel Agentic Runtime Network for Intelligent Tasks & Automation Systems). Sí, el nombre tiene el clásico toque de la casa, pero la arquitectura detrás es infraestructura pura. KARNITAS propone una topología estándar (mediante un directorio .agents/ en tu repositorio) para que humanos y modelos de lenguaje compartan una Única Fuente de Verdad. No es un framework ni una librerí...

Migración de ext4 a BTRFS: Mi experiencia con Debian 12

Recientemente me embarqué en la aventura de migrar mi sistema Debian 12 del tradicional sistema de archivos ext4 a BTRFS. En este artículo, comparto mi experiencia completa, desde la planificación hasta la implementación final, incluyendo los obstáculos que encontré y cómo los superé. ¿Por qué migrar a BTRFS? Antes de entrar en los detalles técnicos, quiero explicar brevemente por qué decidí dar este salto: Instantáneas (snapshots) : La capacidad de crear puntos de restauración del sistema de forma rápida y eficiente. Compresión transparente : Ahorro de espacio en disco sin sacrificar rendimiento. Checksums para integridad : Protección automática contra la corrupción silenciosa de datos. Balanceo inteligente : Redistribución de datos que optimiza el uso del almacenamiento. Preparación para el futuro : BTRFS sigue evolucionando con nuevas características. Mi configuración inicial Mi sistema contaba con la siguiente estructura: /dev/sdb1 - 512M - Partición EFI /dev/sdb2 - 58.8G -...

Recuerdos del #19s

 El sismo del 2017 en la Roma, ver caer edificios, es lo más devastador que he vivido. Con la adrenalina del momento y el instinto de sobrevivencia, sacas fuerzas y energía quien sabe de donde. En ese entonces trabajaba en la PB de un coworking, uno de esos edificios viejos que solo maquillan para rentarlos a sobre precio.... la sra Angy estaba en la cocineta haciendo la limpieza, como todos los días, sentimos  la vibración de la mesa, como si hubiera pasado un tráiler, alguien gritó, está temblando.... todos salimos corriendo, pero.... la sra Angy, se quedo congelada, inmóvil, me regresé por ella y literalmente casi la arrastro, ella solo caminaba por la inercia de que la jalaba de la mano.... Cuando salimos del edificio, comenzaron a caer vidrios, uno de ellos me alcanzo a rozar muy levemente en la espalda (solo fue el rasguño), en ese momento solté a la sra Angy y corrí hacia avenida Insugentes, justo la calle daba hacia una estación del metrobús, yo solo veía como la estru...

Ejecutar en segundo plano Maquinas Virtuales VirtualBox al arrancar sistema Linux

Tengo 2 maquinas virtuales windows en las que estoy desarrollando unas modificaciones.  El acceso a las VMs es solo para tener el servicio de SQL Server y IIS. Como me resulta tedioso abrir VirtualBox y despues encender las VMs manualmente y ademas tener ahí las pantallas de las maquinas sin usar, ocupando espacion en mi monitor. He encontrado en http://askubuntu.com/questions/57220/start-vboxheadless-vm-at-startup la manera de cargar en automatico las VMs de VirtualBox al iniciar el sistema. Paso 1: Crear archivo dentro de /etc/init.d sudo vim /etc/init.d/StartVM Paso 2: Pegar el siguiente código, adecuar segun tus necesidades.  #! /bin/sh # /etc/init.d/VM # #Edit these variables! VMUSER=pixelead0 case "$1" in start) echo "Starting VirtualBox VM DevSQLServer ..." sudo -u $VMUSER VBoxManage startvm DevSQLServer --type headless echo "Starting VirtualBox VM DevIIS ..." sudo -u $VMUSER VBoxManage startvm DevIIS --type headless...

Comprimir varias carpetas en archivos separados. #ShellSripting

Para comprimir varias carpetas en archivos ZIP separados desde la terminal de linux. Nos ubicamos en el directorio que contiene los directorios a comprimir y escribimos. for i in * ; do zip ../backup/$i.zip -j $i; done Parametro: -j  En mi caso solo requiero que se guarden los archivos sin subdirectorios, para eso utilizo este parametro.

Personalizar Sublime Text 3

Les comparto mi configuración perzonalizada para Sublime-Text-3. Entre las que destacan. Desactivar el ajuste de línea. Cambiar de color las pestañas con archivos modificados. Eliminar espacios en blanco al final de las lineas, despues de guardar. Mostrar en la barra de estado el tipo de codificación Resaltar la linea en donde se encuentra el cursor. Remarcar el recuadro en el minimapa. Así se ve la configuración personalizada. Solo hay que entrar en Menú --> Preferences --> Settings - User y pegar las siguientes líneas. // Settings in here override those in "Default/Preferences.sublime-settings", // and are overridden in turn by file type specific settings. { // Adds whitespace up to the first open bracket when indenting. Requires // auto_indent to be enabled. "indent_to_bracket": true, // Disables horizontal scrolling if enabled. // May be set to true, false, or "auto", where it will be disabled for ...

Facturacion CFD/CFDI - Programa en python para administrar comprobantes. (PARTE 2)

Desde que entró en vigor la nueva reforma fiscal del SAT a partir del 2014 se ha hecho a un lado la factura en papel, y ahora toda la facturación se hace en electrónico. Esto se convierte en un problema, porque hay que descargar del correo o desde la pagina del SAT todos los archivos XML y posteriormente hay que 'descifrarlos', en la mayoría de los casos esto se vuelve demasiado tedioso para todos. En un post anterior, compartí un pequeño script en PHP para Administrar la recepción de CFD/CFDI y renombrar los archivos XML a algo más entendible a la vista. Días despues nuestro amigo +Ricardo Torres nos ayudó a pasar el mismo script a python y nos explica paso a paso como hacer que funcione en Windows. Y a partir de su código en github, he creado una versión modificada que hace lo siguiente. RENOMBRA CFD/CFDI RECIBIDOS. Este script lee un CFD/CFDI con nombre archivo.xml para después renombrarlo de la siguiente manera: _RFCReceptor_Fecha_RFCemisor_serie_folio_su...

MySQL: Consultar llaves foraneas (FK) existentes en una base de datos

Con este script podemos conocer cuales son las llaves foraneas (FK) existentes en una base de datos. SELECT b.table_name, b.column_name, b.constraint_name, b.referenced_table_name, b.referenced_column_name FROM information_schema.table_constraints a JOIN information_schema.key_column_usage b ON a.table_schema = b.table_schema AND a.constraint_name = b.constraint_name WHERE a.table_schema=database() AND a.constraint_type='FOREIGN KEY' ORDER BY b.table_name, b.constraint_name; Fuente: http://stackoverflow.com/questions/2470356/mysql-show-create-constraint

SQL: buscar por rangos de fecha con campos mes y año separados.

Tengo una tabla con campo año y mes por separado. Se requiere seleccionar un rango de fechas. Por ejemplo de Septiembre de 2011 a Mayo de 2012. BD: SQL Server 2000  Opcion 1: (SIN FUNCIONAR)  Esta consulta no nos devuelve nada debido a que mes es un campo numérico. select anio, mes from ventas where (anio>=2011 and mes>=9) and (anio<=2012 and mes<=5) Opcion 2: (no me gustó)  Esta opción nos trae todos los registros de 2011 y 2012, después con código php se pueden usar strtotime y después filtrar los registros que necesitamos. select anio, mes from ventas where (anio>=2011) and (anio<=2012) Opcion 3: (sin funcionar) Intentando concatenar los campos select anio, mes,(anio+'-'+mes+'-01') Opcion 4: (sin funcionar) Concatenando los campos utilizando cast, casi solucionado pero le agrega un espacio en el mes. select anio, mes, convert (varchar(10),cast(anio as char(4))+'-'+cast(mes as char(2))+'-01',12...

Si los lenguajes de programación fueran una religión….

Si los lenguajes de programación fueran una religión…. C sería el Judaísmo – Es viejo, restrictivo, pero la mayor parte del mundo está familiarizado con sus normas y las respeta. El problema es que no te puedes convertir, o estás desde el principio, o crees que es una locura por completo. También cuando las cosas van mal la gente desea culpar al mundo con sus problemas. Java sería el Cristianismo Fundamentalista – Teóricamente está basado en C, pero se pasa por alto tantas de las antiguas leyes, que no se parece en absoluto. En su lugar, añade su propio conjunto de normas nuevas e inflexibles, las cuales los creyentes piensan que son muy superiores a las originales. Y no solamente estan seguros de que sea el mejor idioma del mundo, sino que desean quemar a aquellos que estén en desacuerdo. PHP sería en Cristianismo de Cafetería – Se pelea con Java por la supremacía del mercado web. Coge algunos aspectos de C y Java, pero sólo los que le gustan. Probablemente no sea ta...

Como beneficiarse con los descuentos de "EL BUEN FIN" en septiembre sin usar la tarjeta de crédito

No, no pienses que estoy loco!  En los meses de junio, julio y agosto muchas empresas comienzan a prepararse para las ventas de fin de año (navidad, día de reyes, "el buen fin").  Si las grandes empresas se preparan para vendernos sus productos y beneficiarse con nuestro dinero, ¿Que tan malo es que nosotros los consumidores tambien comencemos a preparar nuestros gastos para aprovechar los descuentos?. - ¿Que es el buen Fin? Para los que desconozcan que es el buen fin les dejo estos enlaces http://www.elbuenfin.org/que-es-el-buen-fin/ http://es.wikipedia.org/wiki/Buen_Fin OJO: No aliento el consumo mercadologico de fin de año. Hace cuanto tiempo que deseas cambiar aquellos viejos electrodomesticos y/o muebles del hogar; Refrigerador,  estufa, sala, television, estereo, comedor, computadora vieja o algun otro. La mayoría de los articulos mencionados son elevados en precio, por lo cual se nos dificulta pagarlos de contado, y es por ello que ...

Administrar la recepción de CFD/CFDI - Script que lee XML de un Comprobante Fistal Digital

Hoy en día la preocupación de la mayoría de las empresas se concentra en la generación de Comprobantes Fiscales Digitales basados en las normas del SAT. En este nicho ya hay bastantes pesonas y empresas trabajando. Sin embargo no he visto o desconozco una herramienta que ayude a administrar la RECEPCION DE CFD's. Me ha pasado que despues de comprar en diferentes negocios, cada empresa genera un archivo xml con nombre generico, que es de utilidad para ellos. Al tener varias facturas la administración se vuelve complicada. Una manera de administrar estos comprobantes digitales es renombrarlos utilizando algun layout, ya sea de manera manual o con un proceso automatico Este script ayuda a leer un CFD para despues formatear el nombre del archivo de la siguiente manera: Fecha_RFCemisor_serie_folio_subtotal_iva_total Fecha: Fecha en que se generó el comprobante RFCemisor: RFC de quien emite el cfd/cfdi Serie y Folio: Numero de Serie y folio de la factura Subtotal, iva, total:...

Agregar separador en archivo por posiciones con SED

Una vez instalado el comando SED en Windows. Tenemos el archivo prueba.txt que contiene:   Para mostrar de la linea 5 a la 8 type prueba.txt | sed -n "5,8p" Para mostrar de la linea 10 al final del archivo type prueba.txt | sed -n "10,$p" USAR SED POR POSICIONES. Fuente:   http://www.gentoo.org/doc/es/articles/l-sed2.xml Tenemos el archivo prueba con el siguiente contenido. Prueba.txt abbcccddddeeeeefffff 12345678901234567890 23456789012345678901 34567890123456789012 45678901234567890123 56789012345678901234 67890123456789012345 78901234567890123456 89012345678901234567 90123456789012345678 01234567890123456789 12345678901234567890 23456789012345678901 34567890123456789012 45678901234567890123 56789012345678901234 67890123456789012345 78901234567890123456 Necesitamos dar formato a cada linea del archivo por posiciones y agregar un separador, en este caso punto y coma. ...