Todos los artículos
-
Propiedad de recursos en Rust FFI: empareja el constructor foráneo con su destructor real
Define de forma explícita la asignación, la liberación y la vida útil de los callbacks en un wrapper de Rust acotado alrededor de recursos foráneos.
-
Operaciones masivas en lugar de bucles fila por fila: viajes de ida y vuelta, transacciones y COPY
Un bucle que envía una sentencia por fila paga un viaje de ida y vuelta, un análisis sintáctico y, a menudo, un commit por cada fila; una operación masiva envía el conjunto en una sola sentencia, un único flujo o una única transacción. La propia guía de PostgreSQL recomienda hacer un solo commit, usar COPY para las cargas y crear los índices después de cargar; las bibliotecas cliente ofrecen executemany y copy por el mismo motivo.
-
Network throughput and retransmits on Linux: ss -ti, nstat, and iperf3
ss -ti shows one connection's own retransmission and RTT view; nstat reports the same kind of counters host-wide from the kernel's SNMP and extended TCP statistics; iperf3 measures achievable throughput directly when retransmits are low but throughput still disappoints.
-
Un primer game day: un experimento de caos con hipótesis, radio de impacto y regla de aborto
Ejecuta un primer ejercicio de inyección de fallos como experimento programado y anunciado: define el estado estable como una salida medible, formula la hipótesis de que se mantiene ante un fallo concreto, limita el radio de impacto, fija una condición de aborto, inyecta el fallo y registra cómo reaccionaron el sistema y las personas. Los Principles of Chaos Engineering aportan los cuatro pasos y el libro de SRE de Google describe el juego de roles de desastres como un ritual semanal.
-
Razonar sobre la complejidad antes de optimizar
La complejidad asintótica predice cómo crece el tiempo de ejecución con el tamaño de la entrada; reconocer en la revisión de código los bucles cuadráticos, las búsquedas lineales repetidas y la recursión sin límite evita la mayoría de los incidentes de rendimiento antes de necesitar un perfilado.
-
Separar iluminación HDR, exposición, tone mapping y salida a pantalla
Usa etapas explícitas para conservar la información de brillo de la escena, fijar la exposición de forma predecible y generar una señal adecuada para la pantalla de destino.
-
Un contador de pasos de muñeca y un teléfono en el bolsillo divergen más en días con muchos paseos cortos y manos ocupadas
Hipótesis: dos contadores de pasos de consumo llevados por la misma persona, uno en la muñeca y otro en el bolsillo del pantalón, discrepan en una fracción mayor los días que el diario marca como de muchos paseos cortos o manos ocupadas (cochecito, bolsas, carrito) que los días con pocos paseos largos, porque cada dispositivo lee movimientos corporales distintos; se propone como prueba un registro diario con ambos dispositivos indicados y no se informa de ninguna medición.
-
La serialización determinista de Protocol Buffers no es una identidad canónica de mensaje
Evita usar bytes arbitrarios de protobuf como huella semántica estable entre entornos de ejecución y versiones.
-
Separar el servicio que actúa del usuario representado en las pruebas de delegación
Prueba una acción delegada haciendo visibles en el oráculo tanto la identidad del servicio que la ejecuta como la del usuario al que representa. Este método propuesto evita tratar la autenticación correcta del servicio como prueba suficiente de la autoridad del usuario.
-
HTTP keep-alive y reutilización de conexiones: pools, timeouts de inactividad y la condición de carrera de la conexión obsoleta
HTTP/1.1 mantiene la conexión abierta para más peticiones salvo que se envíe Connection: close, lo que elimina un handshake TCP y TLS en cada petición después de la primera; el cliente debe conservar un pool durante toda la vida del proceso, leer cada cuerpo de respuesta y fijar su timeout de inactividad por debajo del del servidor para no reutilizar una conexión que este ya cerró.
-
APT pinning: mantener un paquete en una versión u origen concreto con archivos de preferencias
El pinning de APT permite retener un único paquete, obtenerlo de una suite que no es la predeterminada o evitar que un futuro apt upgrade lo modifique. Se configura con un archivo por propósito en /etc/apt/preferences.d, en lugar de editar un único archivo compartido, y se comprueba con apt-cache policy.
-
AdamW: por qué el weight decay desacoplado difiere de una penalización L2
AdamW reduce los parámetros de forma independiente de la actualización adaptativa del gradiente. Así el término de decay no entra en las estimaciones de momentos de Adam, aunque la tasa de aprendizaje, el número de actualizaciones y los grupos de parámetros siguen influyendo en la regularización.
-
Lectura, concesión y copia de seguridad de permisos NTFS con icacls y Get-Acl/Set-Acl
icacls lee y concede permisos NTFS y codifica la herencia con los indicadores (OI)(CI); icacls /save y /restore guardan y reaplican un árbol completo de ACL antes de un cambio, y Get-Acl/Set-Acl ofrecen la misma información como objetos de PowerShell.
-
Las mejoras medidas tras actuar sobre los peores casos son en parte regresión a la media
Hipótesis: cuando un esfuerzo de ingeniería selecciona los endpoints, tests, hosts o tenants con peor puntuación según una métrica ruidosa y comunica su mejora tras la intervención, buena parte de esa mejora habría ocurrido igualmente, porque a las mediciones extremas suelen seguir otras menos extremas. Se describe una prueba propuesta con un grupo de control sin intervenir.
-
Derivadas en shaders: conservar gradientes válidos en ramas y costuras UV
Diagnostica huellas de textura inestables distinguiendo entre coordenadas continuas, gradientes explícitos y operaciones de derivada en el flujo de control divergente de un fragment shader.
-
Objetivos de nivel de servicio y presupuestos de error
Un SLO es un valor objetivo para un indicador de nivel de servicio, como la disponibilidad o la latencia; la diferencia entre ese objetivo y el 100 % es el presupuesto de error, que determina cuánto riesgo pueden asumir los despliegues.
-
Un script de configuración para el primer día que se verifica a sí mismo: bootstrap, doctor y smoke test
Un único comando tras clonar el repositorio produce un entorno funcional o una lista precisa de lo que falta y cómo corregirlo: un script doctor de solo lectura comprueba cada requisito, un bootstrap idempotente instala solo lo que las comprobaciones señalan como ausente y un smoke test determina el código de salida. La CI lo ejecuta desde una máquina limpia para que no se deteriore entre una incorporación y otra.
-
Comprobaciones de calidad de datos: actualidad, volumen, nulos y unicidad como conjunto mínimo
Cuatro comprobaciones baratas detectan la mayoría de las cargas defectuosas: ¿la fuente es lo bastante reciente?, ¿llegó un número plausible de filas?, ¿están rellenas las claves y las métricas?, ¿es única la granularidad declarada? Cada comprobación se formula como una consulta que devuelve las filas erróneas, se ejecuta tras la carga y antes de publicar, y distingue entre aviso y bloqueo.
-
Intervalos de confianza en breve: qué dice el intervalo y qué no
Un intervalo de confianza del 95 % procede de un procedimiento que capta el valor verdadero en el 95 % de las muestras repetidas; un intervalo concreto lo contiene o no lo contiene. Su anchura disminuye con la raíz cuadrada del tamaño muestral y aumenta con la dispersión. Debe leerse como el rango de valores compatibles con los datos, informarse junto a cada estimación y calcularse para la diferencia al comparar.
-
Extracción segura de archivos: path traversal en zip y tar
Las entradas de un archivo comprimido pueden llevar nombres como ../../etc/passwd, rutas absolutas o enlaces simbólicos. Extrae solo después de resolver la ruta de destino de cada entrada y comprobar que queda dentro del directorio de destino, rechaza los enlaces que apunten fuera y limita el tamaño total y el número de entradas.
Legible por máquina: JSON