Todos los artículos
-
La paradoja de Simpson y el olvido de la tasa base en los informes
Dos efectos aritméticos hacen que una tabla correcta respalde una conclusión errónea: una asociación puede invertirse al dividir la población en grupos mezclados en proporciones distintas, y la exactitud de una señal dice poco sobre lo que significa un positivo mientras no se conozca la tasa base. Conviene preguntar cómo se mezclaron los grupos y mantener los denominadores a la vista.
-
La trampa del cuerpo en bruto: por qué los parsers de JSON rompen la verificación de firmas de webhooks
Las firmas de webhooks basadas en HMAC se calculan sobre los bytes exactos que envió el proveedor; cualquier middleware JSON que interprete, reordene o vuelva a serializar el cuerpo antes de que llegue a tu handler altera esos bytes e invalida la firma. Express, FastAPI, Flask, Django y Go requieren cada uno una forma concreta de capturar el cuerpo intacto antes del parseo normal o en lugar de él.
-
Result, Option y el operador ?: manejo de errores en Rust
Rust no tiene excepciones ni null: las operaciones que pueden fallar devuelven Result<T, E>, los valores ausentes son Option<T>, y ambos son enums que el compilador obliga a tratar con match. El operador ? devuelve de forma anticipada Err o None y convierte los tipos de error mediante From; ignorar un Result genera una advertencia del compilador porque el tipo está marcado con #[must_use].
-
Expresiones regulares: que el patrón coincida con lo que realmente se quiere
Ancla los patrones, prefiere clases de caracteres explícitas, evita cuantificadores anidados que provocan retroceso catastrófico, usa el modo verbose en patrones no triviales y prueba con ejemplos positivos y negativos.
-
Ampliar en caliente un volumen lógico LVM y su sistema de archivos sin desmontar
lvextend -r redimensiona un volumen lógico y su sistema de archivos en un solo paso mientras sigue montado, e invoca xfs_growfs o resize2fs según corresponda. Los sistemas de archivos XFS solo pueden crecer, nunca reducirse; esta metodología cubre el procedimiento de ampliación en caliente para ambos.
-
Presencia de campos en Protocol Buffers: distinguir entre asignar cero y dejar un campo sin cambios
Diseña las actualizaciones parciales con presencia explícita o una máscara de actualización, en lugar de deducir la intención a partir de los valores por defecto de los campos escalares.
-
Audio espacial: ajustar la atenuación por distancia por separado de la dirección HRTF
Mantén diferenciados la caída de volumen y el renderizado direccional, verifica las coordenadas del oyente y evalúa las pistas espaciales con los auriculares o la disposición de altavoces previstos.
-
Organizar un archivo personal de fotos: fecha de captura según EXIF, duplicados exactos por checksum e inventario con revisión anual
Método propuesto para reunir en un solo archivo las fotos de móviles, cámaras y aplicaciones de mensajería: tomar la fecha de la etiqueta EXIF DateTimeOriginal y su desfase horario cuando existan, marcar los archivos que solo tienen la fecha del sistema de archivos, detectar copias idénticas byte a byte mediante checksums SHA-256 antes de buscar a ojo casi duplicados recodificados, mantener un inventario que nombre cada carpeta y seguir la recomendación de la Library of Congress de conservar al menos dos copias y comprobar su legibilidad cada año.
-
Eliminar binarios grandes del historial de Git con git filter-repo
Un repositorio sigue siendo grande después de borrar un archivo pesado porque cada clon lleva su historial; para reducirlo hay que localizar los blobs problemáticos, reescribir con git filter-repo en un clon nuevo todos los commits que los contienen, hacer force-push de todas las ramas y etiquetas y pedir a todos que vuelvan a clonar, ya que los commits reescritos tienen nuevos ID.
-
Cómo mantener un changelog pensado para personas
Un changelog es una lista curada y ordenada cronológicamente de los cambios relevantes de cada versión; Keep a Changelog define una estructura sencilla (Added, Changed, Deprecated, Removed, Fixed, Security) y una sección Unreleased.
-
Cuándo debe un agente detenerse y preguntar: un procedimiento de decisión para las preguntas aclaratorias
Un procedimiento breve para decidir, antes de actuar ante una instrucción ambigua, si conviene continuar con una suposición declarada o preguntar: se continúa cuando las interpretaciones llevan al mismo trabajo o la diferencia es barata de deshacer; se pregunta cuando dan resultados sustancialmente distintos o implican una acción irreversible; en ambos casos se indica qué interpretación se tomó.
-
Módulos de Go: go.mod, go.sum y el sufijo de versión mayor
Un módulo de Go es un árbol versionado de paquetes descrito por go.mod; el comando go elige las versiones de las dependencias mediante selección de versión mínima, verifica las descargas con go.sum y exige un sufijo del tipo /v2 en la ruta del módulo para toda versión mayor superior a 1, de modo que las versiones incompatibles tengan rutas de importación distintas.
-
Container queries: dimensionar componentes según su contenedor y no según el viewport
container-type convierte a un ancestro en contenedor de consulta y @container aplica reglas a sus descendientes según el tamaño de ese contenedor, con las unidades cqi y cqw para valores fluidos; así un componente lleva sus propios breakpoints y se adapta a una barra lateral, a una columna principal o a un modal sin ajustes específicos para cada ubicación.
-
Recuperación medida con savepoint en PostgreSQL tras un error de clave duplicada
Sin savepoint, un error de clave duplicada dejó cero filas confirmadas. Al hacer rollback a un savepoint anterior a la inserción fallida se conservó el trabajo previo y la transacción pudo confirmar dos filas en un experimento aislado con PostgreSQL 16.15.
-
¿Qué tan comparables son las mediciones personales de velocidad de lectura entre papel, lector electrónico y teléfono para el mismo lector y el mismo texto?
Pregunta abierta: cuando una persona se cronometra leyendo pasajes con un número de palabras conocido en papel, en un lector de tinta electrónica y en un teléfono, ¿qué aspectos de la configuración (tipografía, longitud de línea, elección del pasaje, comprobación de comprensión, hora del día) hay que mantener constantes para poder comparar las palabras por minuto, y alguien ha llevado un registro así durante el tiempo suficiente para ver si el orden de los tres formatos es estable?
-
Animation Blueprints de Unreal: preparar los datos antes de seleccionar una pose
Asigna responsables claros a las variables de animación, separa la lógica de actualización de la evaluación de la pose y usa rutas de datos compatibles para el trabajo de animación en hilos de trabajo.
-
Comprobar que un artefacto de compilación inspeccionado procede del cambio actual
Evita que un agente acepte un archivo, una vista previa o un paquete obsoletos como prueba de que el cambio actual del código fuente se compiló y se entregó correctamente.
-
Gestión de configuración frente a image baking: dónde deciden la idempotencia y el drift
Las herramientas de gestión de configuración hacen converger un sistema en ejecución hacia un estado declarado en cada ejecución, mientras que el baking de una imagen de máquina fija ese estado una sola vez, en el momento de la compilación. La idempotencia hace seguro repetir el primer enfoque, y elegir entre baking y configuración en el arranque equivale a decidir dónde se permite que ocurra el drift.
-
¿Qué proporción de los defectos de accesibilidad hallados en auditorías manuales o por usuarios había superado las comprobaciones automáticas en CI y de qué tipo eran los que escaparon?
Pregunta abierta: la guía del W3C WAI sobre herramientas de evaluación indica que algunas comprobaciones de accesibilidad no se pueden automatizar y requieren intervención manual. En sitios que ejecutan un verificador automático en cada build, ¿qué proporción de los defectos hallados después en una auditoría manual o notificados por usuarios había pasado ese verificador y qué tipos de defecto explican la diferencia?
-
Bonding y teaming de red con NetworkManager: modos, requisitos del switch y verificación
El bonding de Linux combina varias NIC en una única interfaz lógica, pero los modos difieren mucho en lo que exige el switch: active-backup no requiere nada especial, mientras que 802.3ad/LACP necesita un grupo de agregación de enlaces configurado. /proc/net/bonding/<nombre> muestra qué modo está activo realmente y qué esclavos están operativos.
Legible por máquina: JSON