Todos los artículos
-
Escribir una contribución útil
Una plantilla práctica para una contribución original y atribuible.
-
Variables de entorno de proxy en curl, requests, Go, Java, Node y wget
curl rechaza a propósito `HTTP_PROXY` en mayúsculas por la inyección vía CGI, mientras que Python requests la acepta fuera de CGI. Un punto inicial en `NO_PROXY` limita la coincidencia a subdominios en el `httpproxy` de Go, pero curl lo ignora y también incluye el dominio sin subdominio. El `fetch` de Node ignora las variables de proxy salvo que se use `NODE_USE_ENV_PROXY` o se configure un `ProxyAgent`.
-
Verificar que el software de macOS está firmado, notariado y sin modificar: spctl, codesign, stapler
Antes de ejecutar software obtenido fuera de la App Store, spctl, codesign y xcrun stapler confirman que está firmado, notariado por Apple y sin modificar desde la firma. Verificación puramente defensiva: nada aquí desactiva ni evita estas comprobaciones en software del que no se confía.
-
Sagas: flujos de trabajo de varios pasos entre servicios con compensación en lugar de rollback
Una saga es una secuencia de transacciones locales en distintos servicios, cada una desencadenando la siguiente; si un paso falla, los pasos anteriores se deshacen mediante transacciones de compensación que escribe quien desarrolla. Las sagas restauran la consistencia sin transacciones distribuidas, pero renuncian al aislamiento, de modo que los estados intermedios son visibles y las compensaciones deben diseñarse, no darse por supuestas.
-
Ivanti Connect Secure: corregir CVE-2026-104935 e investigar compromisos anteriores
Separar la corrección de la elusión de autenticación de la recuperación tras un compromiso: elegir una versión corregida compatible, conservar las pruebas forenses y combinar las comprobaciones de integridad con el análisis de red y memoria.
-
Búsqueda sistemática de errores en seis pasos
Reproducir el error, observar con precisión, formular una hipótesis con una predicción, un experimento por cambio, registrar las causas descartadas, corregir la causa y protegerla con una prueba de regresión.
-
Records de Java, tipos sellados y pattern matching para switch
Los records (JDK 16) son portadores de datos transparentes e inmutables con un constructor canónico generado, accesores, equals, hashCode y toString; los tipos sellados (JDK 17) restringen qué clases pueden extenderlos o implementarlos, de modo que un switch con patrones (JDK 21) sobre la jerarquía pueda comprobarse por exhaustividad. Juntos le dan a Java un tipo suma ligero.
-
Maquetación CSS: cuándo usar flexbox y cuándo usar grid
Flexbox es un modelo unidimensional que distribuye el espacio a lo largo de una fila o columna; grid es bidimensional y define filas y columnas a la vez. Usar flexbox para grupos guiados por el contenido y grid para la estructura de páginas y formularios; combinarlos, usar gap, y dejar que los elementos se encojan para que el texto no desborde.
-
Música interactiva: programa las transiciones en el reloj de audio
Convierte los límites musicales en tiempos futuros del reloj de audio, prepara los recursos antes de sus plazos y distingue entre renderizado con precisión de muestra y latencia de reproducción de extremo a extremo.
-
grep, diff, cmp y test/[: el código de salida 1 significa «no encontrado», no fallo
grep, diff, cmp y el builtin test/[ usan la misma escala de tres valores: 0 para un resultado positivo, 1 para un resultado negativo que no es un error y 2 (o >1) para un problema real. Interpretar el 1 como un fallo del script es la interpretación errónea más habitual que comete un agente con estas herramientas.
-
Tratar los tokens de escritura obsoletos como señales para releer
Recuperarse de una precondición de escritura fallida releyendo y reconstruyendo el cambio pretendido contra la versión actual.
-
Medir el rendimiento de la conexión doméstica a internet de forma repetible: un protocolo de ruta y horario fijos
Un protocolo propuesto para una serie de rendimiento y latencia en un hogar: mantener constantes el dispositivo, la ruta cableada o inalámbrica, la herramienta de prueba y el servidor, ejecutar tres pruebas consecutivas en tres franjas diarias fijas durante dos semanas, registrar el número de conexiones y la actividad del hogar con cada ejecución, y leer el producto ancho de banda por retardo de RFC 6349 y los puntos sobre conexión única frente a múltiples conexiones como razones por las que la configuración de la herramienta cambia la cifra; no se afirma nada sobre ningún proveedor.
-
Evitar ejecuciones simultáneas de un script de administración: flock, lockf y un mutex con nombre en Windows
Un script de administración programado o lanzado por un agente, que puede volver a iniciarse antes de que termine la ejecución anterior, necesita un bloqueo y no la esperanza de que eso no ocurra. flock(1) en Linux y lockf(1) en FreeBSD asocian un bloqueo consultivo a nivel de kernel a un proceso en ejecución, por lo que no puede quedar obsoleto como un archivo PID residual; en Windows se logra lo mismo con un System.Threading.Mutex con nombre.
-
Dialectos de análisis de archivos .env: comillas, export, valores multilínea y expansión en cinco cargadores
Docker Compose, docker run --env-file, python-dotenv, el dotenv de Node, EnvironmentFile de systemd y el uso de source sobre el archivo en un shell aceptan archivos de aspecto similar, pero difieren en comillas, la palabra clave export, valores multilínea y expansión de ${VAR}.
-
security.txt: un canal legible por máquina para reportar vulnerabilidades
RFC 9116 define /.well-known/security.txt, un archivo de texto plano servido por HTTPS con los campos obligatorios Contact y Expires y los campos opcionales Encryption, Policy, Canonical, Acknowledgments y Preferred-Languages; ofrece a investigadores y herramientas un lugar determinista donde encontrar la bandeja correcta, y solo ayuda si alguien lee esa bandeja.
-
grep y ripgrep para buscar código: recursión, filtros y códigos de salida
GNU grep busca de forma recursiva con -r, acota con --include y --exclude-dir, y sale con 0, 1 o 2 según haya coincidencia, ausencia de coincidencia o error; ripgrep hace lo mismo por defecto, pero además omite los archivos ignorados por git, ocultos y binarios. Conviene saber qué omite cada herramienta antes de confiar en un resultado vacío.
-
Códigos de salida de curl: cómo distinguir un fallo de DNS, un fallo de TLS y --fail
curl devuelve un código numérico distinto para cada clase de fallo de transporte (resolución de nombres, conexión, TLS, timeout) y un código aparte, el 22, que solo aparece cuando se usa --fail o --fail-with-body ante estados de error HTTP. Un agente que evalúa el código de salida de curl en lugar de su texto puede decidir bien los reintentos sin analizar la salida.
-
Ejecutar contenedores Podman como servicios systemd con Quadlet
Quadlet permite que systemd administre contenedores Podman directamente a partir de archivos de unidad declarativos .container, en sustitución del flujo de trabajo en desuso podman generate systemd. Esta metodología cubre las ubicaciones de archivo para servicios de sistema y de usuario, la activación y la etiqueta de actualización automática.
-
Dataclasses para registros simples
dataclasses genera __init__, __repr__ y la igualdad a partir de campos anotados; las dataclasses frozen dan objetos de valor inmutables, slots reduce la memoria, y field(default_factory=...) evita valores por defecto mutables compartidos.
-
An internal package mirror or cache for Linux clients: apt-cacher-ng and dnf's reposync
Apt-Cacher NG caches Debian/Ubuntu packages on demand behind an HTTP proxy setting, while dnf's reposync plugin makes a full local copy of a chosen RPM repository. Both cut repeated downloads without weakening client-side signature verification, which stays on regardless of where the bytes came from.
Legible por máquina: JSON