¿Códigos de Verificación Única Vez: Peores que las Contraseñas?

2025-08-07

Muchos servicios usan un método de inicio de sesión defectuoso: enviar un código de 6 dígitos por correo electrónico o teléfono. Esto es increíblemente inseguro. Los atacantes pueden crear fácilmente sitios de phishing para engañar a los usuarios a que ingresen códigos, robando cuentas. Los administradores de contraseñas no ofrecen protección. El inicio de sesión de Minecraft de Microsoft, que usa este método, ya ha sufrido numerosos robos de cuentas. ¡Deja de usar este sistema de inicio de sesión inseguro!

Leer más
Tecnología

PATH de Linux: El Secreto del Shell

2025-04-29

¿Alguna vez te has preguntado cómo Linux encuentra los comandos que ejecutas? La respuesta: ¡depende del shell, no del kernel! Este artículo profundiza en la mecánica de la variable de entorno PATH, revelando cómo los shells (como dash) utilizan funciones como `padvance` para buscar ejecutables dentro de PATH, mientras que la llamada al sistema `execve` del kernel en realidad recibe la ruta completa. Los lenguajes de programación como Python, Go y Rust también implementan su propia búsqueda en PATH en sus bibliotecas de subprocesos, en última instancia, dependiendo de funciones subyacentes como `execvp`. El artículo también explica por qué los shebang requieren rutas absolutas y el papel inteligente de `/usr/bin/env`.

Leer más
Desarrollo

Deja de explicar *e* con interés compuesto

2025-04-11

Las clases de matemáticas a menudo introducen la constante natural *e* usando el interés compuesto: una cuenta con un interés anual del 100% se duplica con la capitalización anual, se convierte en 2,25 veces con la capitalización semestral, aproximadamente 2,714 veces con la capitalización diaria y exactamente *e* veces con la capitalización continua. Sin embargo, esto es engañoso. El crecimiento compuesto es exponencial, pero el ejemplo usa la división lineal de los períodos de capitalización. Los bancos deben publicar por separado la tasa de interés, el intervalo de capitalización y el rendimiento porcentual anual. Hay maneras mucho más elegantes de introducir *e*, como su propiedad única de ser su propia derivada o su papel crucial en la fórmula de Euler. Estos enfoques no requieren conocimiento previo de *e* y son matemáticamente más rigurosos.

Leer más

De horas a 360 ms: sobreingeniería de una solución de rompecabezas

2025-02-08

El autor intenta resolver un rompecabezas de Sudoku con el objetivo de encontrar la solución que produce el máximo MCD posible entre los nueve números de nueve dígitos formados por las filas. Los intentos iniciales usando el solucionador Z3 no lograron encontrar una solución en horas. El autor entonces empleó varias estrategias de optimización: análisis matemático para reducir el espacio de búsqueda, un algoritmo BFS y mejoras iterativas en la función `is_good`, pasando de HashSet a bitset y finalmente usando SIMD para computación vectorial. La multitarea y la sincronización refinada de hilos redujeron el tiempo de solución de horas a 360 ms, logrando una aceleración de más de 1600x. Aunque una respuesta codificada resultó ser la más rápida, el artículo muestra cómo incluso problemas aritméticos aparentemente simples ofrecen ganancias significativas de rendimiento mediante una optimización algorítmica meticulosa.

Leer más
Desarrollo

La elección del sitio del servidor de Minecraft genera un debate sobre los sistemas de votación

2024-12-21

La elección de un sitio para un servidor de Minecraft provocó un debate profundo sobre diferentes sistemas de votación. El sistema de votación por mayoría simple (Plurality voting) utilizado inicialmente llevó a que ganara la opción menos popular debido al "efecto spoiler". Posteriormente, se probó la votación instantánea (Instant runoff), que resolvió algunos problemas, pero violó la monotonicidad cuando cambiaron los candidatos. El autor presenta además el método de Borda y el teorema de la imposibilidad de Arrow, recomendando finalmente la votación por puntuación (Score voting) y la votación por aprobación (Approval voting) como opciones superiores, ya que cumplen las tres condiciones del teorema de la imposibilidad de Arrow: unanimidad, no dictadura e independencia de alternativas irrelevantes.

Leer más