Todos los artículos
-
Servir peticiones de rango para descargas reanudables
Un servidor que anuncia Accept-Ranges: bytes, responde a Range: bytes=start-end con 206 Partial Content y Content-Range, evalúa If-Range contra un ETag fuerte y devuelve 416 con Content-Range: bytes */length para rangos no satisfacibles permite a los clientes reanudar descargas interrumpidas y leer partes de archivos grandes. Estos pasos cubren el servidor, el cliente y las comprobaciones.
-
Bloqueo de cuentas y calidad de contraseñas en Linux con pam_faillock y pwquality
pam_faillock bloquea una cuenta tras varios inicios de sesión fallidos y el comando faillock permite consultar o borrar ese estado; pam_pwquality aplica las reglas de robustez de contraseñas definidas en pwquality.conf. Ambos se integran en PAM mediante authselect en la familia RHEL y pam-auth-update en Debian/Ubuntu, no editando a mano la pila de PAM.
-
Por qué NTP sigue ejecutándose dentro de las máquinas virtuales pese a los agentes invitados y los relojes paravirtualizados
Las máquinas virtuales reciben ayuda relacionada con la hora de varias capas (kvm-clock, agentes invitados, servicios de integración de Hyper-V), pero ninguna sustituye a un cliente NTP o chrony dentro del invitado. El artículo explica qué hace realmente cada capa y por qué la sincronización horaria sigue siendo responsabilidad del sistema operativo invitado.
-
Traspaso de mantenedor y factor autobús: qué debe poder hacer un sucesor desde el primer día
Un proyecto sobrevive a su mantenedor cuando una segunda persona ya tiene todas las cuentas y claves, puede hacer una release solo con los pasos escritos y sabe dónde se registran las decisiones. PEP 541 muestra qué ocurre si no es así en PyPI: un proyecto se considera abandonado solo si el propietario no responde, no ha habido ninguna release en doce meses y su página de inicio no muestra actividad; solo entonces puede pasar a un nuevo propietario según la regla de abandono. La transferencia de repositorios de GitHub traslada issues, pull requests, estrellas y watchers junto con el código.
-
Entornos de vista previa por rama: una copia desplegada por pull request, eliminada al hacer merge
Dar a cada pull request una copia en ejecución de la aplicación en su propia URL, construida una vez por commit, nombrada según el número del pull request, poblada con el seed local y conectada a servicios de terceros en sandbox; publicar la URL en el pull request, limitar la concurrencia y eliminar la copia y sus datos al hacer merge, al cerrar o por inactividad.
-
Un diario personal de decisiones: escribir la entrada antes de conocer el resultado
Propuesta de formato para el diario de decisiones de una persona: una entrada por cada decisión no trivial, escrita antes de actuar, con las opciones consideradas, el resultado esperado, la confianza expresada como número y una fecha de revisión; la revisión posterior compara la expectativa con el resultado y separa la calidad de la decisión de la suerte del resultado.
-
Una base de conocimiento personal en carpetas de texto plano: inbox, notes, sources, projects y archive
Estructura de carpetas para una base de conocimiento personal que una persona o un agente puede mantener durante años: cinco carpetas de primer nivel con distinto tiempo de vida, una nota por archivo con identificador estable y una cabecera breve, un índice mantenido a mano y una regla de archivado en lugar de borrado; la estructura es plana para que la búsqueda y los enlaces no dependan de dónde esté cada archivo.
-
Trabajar en un repositorio grande con sparse checkout y partial clone
Sparse checkout limita qué directorios aparecen en el árbol de trabajo (el modo cone enumera directorios), partial clone con --filter=blob:none aplaza la descarga del contenido de los archivos hasta que hace falta y shallow clone trunca el historial; los tres resuelven problemas distintos y se pueden combinar, pero partial clone requiere que el promisor remote esté en línea.
-
Los endpoints GET que cambian el estado son la principal fuente de acciones no deseadas desencadenadas por clientes automatizados
Hipótesis: en las aplicaciones web que cambian el estado mediante GET (enlaces de acción en correos, page?do=delete, aprobaciones con un clic), la mayoría de los cambios sin sesión de usuario asociada los causan clientes automatizados como prefetchers de enlaces, escáneres de seguridad del correo, crawlers y bibliotecas HTTP con reintentos. El RFC 9110 prevé expresamente que estos soliciten libremente los URI de métodos seguros y repitan las solicitudes idempotentes tras un fallo; trasladar esas acciones a POST elimina casi por completo esta clase de problema.
-
Se ha instalado un paquete malicioso: contener la ejecución antes de sustituir las credenciales
Una propuesta de secuencia de respuesta ante paquetes maliciosos de npm o Python: detener la ejecución y la publicación, conservar pruebas, revocar las credenciales expuestas desde un sistema limpio, inspeccionar la persistencia en repositorios, reconstruir y verificar la recuperación.
-
JSON Lines: un valor por línea para logs, datasets y respuestas en streaming
JSON Lines (también llamado NDJSON) coloca un valor JSON completo por línea, en UTF-8 sin marca de orden de bytes y con cada línea terminada en salto de línea; a los archivos se les pueden añadir registros al final, y se pueden dividir, filtrar con grep y comprimir, y un flujo truncado solo pierde su última línea. Las secuencias de texto JSON del RFC 7464 añaden un byte separador de registro para facilitar la recuperación. Conviene usar cualquiera de los dos en lugar de un único array JSON grande cuando los registros se producen o se consumen uno a uno.
-
Parallax occlusion mapping: trazar un campo de alturas con límites predecibles
Cómo usar intersecciones de campos de alturas dependientes de la vista para situar el detalle de una superficie, con límites explícitos de escala, muestreo y silueta.
-
Registro de viajes en coche o bicicleta: distancia, duración y condiciones con el instrumento de medida indicado
Protocolo propuesto para registrar cada viaje: nombrar el instrumento (cuentakilómetros, sensor de rueda con su circunferencia configurada o una app de GPS) en la cabecera, no mezclar nunca instrumentos en una misma columna de distancia, registrar inicio y fin en formato RFC 3339, anotar ruta, paradas y condiciones, y considerar normal la dispersión en rutas repetidas, ya que gps.gov indica que la precisión del smartphone empeora cerca de edificios, puentes y árboles.
-
Recorrido de diseño de un servicio de feature flags: conjuntos de reglas, evaluación local y despliegues porcentuales estables
Recorrido de diseño de un servicio de flags: definiciones servidas como un conjunto de reglas versionado por entorno, SDK que almacenan en cache y evalúan localmente, un contexto de evaluación para la segmentación, reparto por hash estable para que los usuarios no cambien de variante durante un despliegue, valores preevaluados para clientes no confiables e informes que detectan flags muertos.
-
Instalación y refuerzo de seguridad del servidor OpenSSH integrado en Windows Server
Add-WindowsCapability instala la función OpenSSH Server; sshd_config se encuentra en %ProgramData%\ssh, las claves autorizadas de un administrador deben ir en administrators_authorized_keys con una ACL restringida, o el servidor las ignora, y DefaultShell determina qué ejecuta realmente una sesión SSH.
-
Interpolación de snapshots: un búfer para mantener una línea temporal remota estable
Renderiza el estado remoto entre snapshots con marca de tiempo, elige un retardo que tolere el jitter de red y gestiona las muestras ausentes sin confundir interpolación con predicción.
-
Fijar dependencias de NuGet: PackageReference, gestión central de paquetes y packages.lock.json
NuGet resuelve en cada restore la versión mínima aplicable de cada paquete, de modo que el resultado puede variar si aparecen versiones nuevas o rangos flotantes. Para un build repetible, se declaran las versiones una sola vez en Directory.Packages.props, se activa RestorePackagesWithLockFile para que packages.lock.json registre la clausura completa, se hace commit del archivo de bloqueo en las aplicaciones y se restaura con --locked-mode en CI.
-
Registrar las suposiciones como datos de primera clase
Asocia las suposiciones a las decisiones que dependen de ellas, con una comprobación de validación y un desencadenante para reconsiderarlas.
-
__slots__ y dataclasses con slots=True: instancias más pequeñas con atributos fijos
Declarar __slots__ reemplaza el __dict__ de cada instancia por un almacenamiento fijo, lo que ahorra memoria y rechaza atributos mal escritos. @dataclass(slots=True) lo genera a partir de los campos, pero devuelve una clase nueva: esto rompe super() sin argumentos y exige weakref_slot=True para admitir referencias débiles. Además, todas las clases base deben declarar slots.
-
Caché de compilación en CI: claves, restauración alternativa y envenenamiento de la caché
Una caché de CI se identifica con un hash del lockfile y claves alternativas ordenadas, se limita por rama con la rama por defecto como origen compartido y se elimina por tamaño o antigüedad; las cachés de capas de Docker deben exportarse e importarse de forma explícita en CI. Las cachés no están firmadas, de modo que cualquier actor con acceso de escritura a un ámbito de confianza puede inyectar código en compilaciones posteriores.
Legible por máquina: JSON