Todos los artículos
-
Cancelación en asyncio: realizar la limpieza sin engullir CancelledError
Mantener la cancelación observable para quien es dueño de la tarea mientras se liberan los recursos en la ruta interrumpida.
-
Dónde guardan sus registros los sistemas operativos, y cómo consultar cada uno
Un agente que diagnostica un servicio necesita saber qué subsistema contiene el registro antes de poder leerlo. Esta referencia enumera el almacén de registros y el comando de consulta para Linux (journald/rsyslog), el registro unificado de macOS, el Registro de eventos de Windows, el informe de errores de AIX y los archivos de syslog de FreeBSD.
-
Iterables frente a iteradores: el protocolo detrás de los bucles for
Un iterable devuelve un iterador nuevo desde __iter__; un iterador devuelve elementos desde __next__, lanza StopIteration al terminar y debe seguir lanzándola. Un bucle for llama a iter una vez y a next repetidamente, de modo que un iterador agotado pasado a un segundo bucle parece vacío. Anotar Iterable para un solo recorrido, Sequence o Collection cuando se necesitan varios.
-
Realizar una revisión de código que mejore el código
Un procedimiento para quien revisa, derivado de las prácticas de ingeniería de Google: juzgar si el cambio mejora la salud general del código, revisar el diseño antes que el estilo, y mantener el tiempo de respuesta dentro de un día laborable.
-
NULL en SQL: la lógica trivaluada y sus trampas
NULL significa desconocido, por eso toda comparación con NULL no da ni verdadero ni falso, sino desconocido; WHERE descarta las filas desconocidas, NOT IN con un NULL no encuentra nada, las funciones agregadas omiten NULL, y una restricción de unicidad permite varios NULL. Usar deliberadamente IS NULL, IS DISTINCT FROM y COALESCE.
-
Niebla volumétrica: integrar dispersión y transmitancia a lo largo del rayo de visión
Cómo lograr una integración de niebla estable: define los coeficientes del medio, respeta la longitud de cada segmento y prueba por separado los cambios de luz y de densidad.
-
HAProxy como balanceador de carga TCP/HTTP en Linux: prueba de configuración, recarga sin cortes y health checks
Para poner HAProxy delante de servidores backend hay que activar health checks por servidor, validar la nueva configuración con haproxy -c antes de que se enlace a ningún puerto y recargar mediante el mecanismo de recarga sin cortes, de modo que las conexiones en curso terminen en el proceso antiguo en lugar de perderse.
-
HTTPS en todas partes: redirecciones, HSTS y renovación de certificados
Servir cada host por TLS con certificados renovados automáticamente, redirigir HTTP a HTTPS y enviar Strict-Transport-Security para que los navegadores rechacen después el texto plano; comprobar tanto los nombres de host como IPv6.
-
«ERESOLVE unable to resolve dependency tree» de npm y los conflictos de peer dependencies
Desde npm 7, las peerDependencies se instalan automáticamente, y si ninguna versión puede satisfacer a la vez todos los rangos de peers, la instalación falla con 'npm error code ERESOLVE' ('npm ERR! code ERESOLVE' antes de npm 10.6). El artículo explica cómo leer las líneas Found/Could not resolve de npm para identificar los paquetes exactos en conflicto, y por qué --legacy-peer-deps o --force no deberían ser la respuesta por defecto.
-
Probar el acceso a una exportación privada desde la solicitud hasta su eliminación final
Seguir una exportación privada a través de la generación, la recuperación, la caducidad y la limpieza. El método propuesto comprueba todo el ciclo de vida del artefacto, en lugar de considerar suficiente una comprobación de autorización exitosa en el momento de crear la exportación.
-
El método RED para servicios orientados a solicitudes, con ejemplares que vinculan un bucket lento con una traza
Instrumentar de manera idéntica todo servicio que maneja solicitudes con tasa, errores y duración: un contador con etiquetas de ruta, método y estado, y un histograma de duración; cuando existe trazado, adjuntar ejemplares (un id de traza con un valor registrado) al histograma para que un bucket lento del panel abra la traza que aterrizó allí.
-
Reconocimiento de colaboradores: una tabla de colaboradores por tipo de contribución, sin clasificaciones
La especificación All Contributors exige una sección de colaboradores en un lugar destacado, en forma de tabla con nombre, enlace y categoría de contribución, que incluya todo tipo de contribución en cualquier nivel, sin que el orden importe; recomienda no excluir a nadie por un nivel de contribución percibido como bajo. El trailer Co-authored-by de Git reconoce a los coautores de un único commit. Juntos permiten que un proyecto pequeño reconozca la documentación, el triage, el diseño y los informes, no solo el código fusionado.
-
Túneles SSH: reenvío de puertos local, remoto y dinámico
ssh -L expone un servicio remoto en un puerto local, -R expone un servicio local en el host remoto, -D ofrece un proxy SOCKS y -J salta a través de un bastión; combinar estas opciones con -N, enlazar a localhost y establecer ExitOnForwardFailure para que un reenvío que no pudo configurarse no deje una sesión silenciosamente inútil.
-
La fijación de sesión persiste sobre todo donde el framework deja la rotación del identificador de sesión en manos de quien desarrolla
Hipótesis: las aplicaciones web cuyo framework rota por defecto el identificador de sesión al iniciar sesión (como documenta Spring Security) muestran hallazgos de fijación de sesión con poca frecuencia, mientras que las aplicaciones sobre pilas donde quien desarrolla debe invocar la función de regeneración en el momento correcto siguen produciéndolos; el defecto es más un problema de valor por defecto que un problema de conocimiento.
-
La pirámide de pruebas: qué prueba pertenece a qué nivel
Muchas pruebas unitarias rápidas, menos pruebas de integración, muy pocas pruebas de extremo a extremo: la forma surge del tiempo de ejecución, el aislamiento y el valor diagnóstico de un fallo, no de una norma. Una pirámide invertida («cucurucho de helado») es lenta, frágil y difícil de diagnosticar.
-
Escribir documentación técnica comprensible
Documentación que funciona desde la primera lectura: definir el propósito y el público, elegir el tipo de texto según Diátaxis (tutorial, guía práctica, referencia, explicación), escribir en voz activa y presente, definir los términos una vez y usarlos de forma consistente, y hacer que una persona ajena o un agente ejecute el texto antes de darlo por válido.
-
Invitaciones iCalendar: UID, SEQUENCE y cómo gestionar correctamente las zonas horarias
Un evento iCalendar se identifica mediante UID y se revisa mediante SEQUENCE; sus horas pueden ser UTC, hora local con un TZID que remite a un VTIMEZONE incrustado, o flotantes. Usar hora local anclada a una zona para reuniones recurrentes, UTC para eventos puntuales entre husos horarios distintos, y enviar actualizaciones y cancelaciones con el METHOD de iTIP que el cliente receptor espera.
-
Un registro de temporada de calefacción: consumo de calefacción, temperatura interior y grados-día en una sola línea temporal
Un protocolo propuesto para una temporada de calefacción: leer el consumo de calefacción del hogar (un medidor de calor, de gas o de electricidad, o el tiempo de funcionamiento de un termostato) a una hora fija, registrar junto a él la temperatura interior y los cambios de consigna, derivar los grados-día de calefacción a partir de los máximos y mínimos diarios registrados con una base indicada, y mantener una columna de condiciones para poder contrastar el consumo de un mes con el clima y los eventos ocurridos; no se afirma ninguna temperatura objetivo ni ningún ahorro.
-
Procedencia y versionado para conjuntos de datos pequeños
Mantener los datos en bruto inmutables, con sumas de verificación y un origen registrado; derivar los archivos nuevos con scripts en lugar de editarlos; versionar los punteros de datos junto con el código (DVC o Git LFS); describir el paquete con un datapackage.json; y anotar la procedencia en términos de PROV, de modo que cada cifra de un informe se resuelva en un commit, una suma de verificación y un script.
-
Usar pruebas de contrato para las API externas
Probar el comportamiento de solicitud y respuesta del que realmente depende una integración, incluyendo la paginación, los errores y las escrituras condicionales.
Legible por máquina: JSON