Por @Alvy — 16 de Octubre de 2020

El hombre de las fotos | Microsiervos (Fotografía)

Generar números aleatorios no es fácil para los ordenadores, inherentemente deterministas. Por eso se trabaja en algoritmos que permitan generarlos cumpliendo con diferentes definiciones de aleatoriedad y a la vez ciertas premisas: que no requieran mucha memoria, que el código sea rápido y no demasiado complejo y que los resultados sean «reproducibles» (por ejemplo en simulaciones). Esto último es en cierto modo un poco paradójico, pero es así como funcionan: una vez iniciado un generador con un valor dado debería generar siempre la misma secuencia.

En la página dedicada a la familia PCG de generadores de números aleatorios hay una interesante tabla que muestra todas estas características para los diversos algoritmos que se utilizan habitualmente: Mersenne, ARC4Random, LCG 64/32, XorShift 32/64, RanQ… El propio PCG, explicado en este paper dice ser una solución que cubre con todas las necesidades:

El nombre de la familia, PCG, significa generador congruente permutable. Combina los dos conceptos que subyacen en el esquema de generación, a saber: las funciones de permutación en tuplas y se emplea un generador congruente lineal.

Toda la documentación y el blog que está en esa misma página son interesantes para entender algunos de los problemas actuales: que los generadores de números aleatorios no son suficientemente aleatorios, que algunos son demasiado predecibles o inseguros, lentos o que no tienen funciones que serían muy útiles como el «saltar hacia adelante» (jump ahead). El código está disponible en C y C++.

Las aplicaciones de los generadores de números aleatorios van mucho más allá de usarlos en juegos y simulaciones: también juegan un papel importante en criptografía y seguridad. Si se utilizan generadores inseguros puede que un buen algoritmo criptográfico no sirva de nada o sea fácilmente vulnerable; de ahí su importancia.

Relacionado:

Compartir en Flipboard Compartir en Facebook Tuitear
Por @Alvy — 2 de Octubre de 2020

Typography in 8 bits: System fonts » DamienG

En el blog de Damien se analizan algunas Tipografías en 8 bits que además se pueden descargar para utilizar en cualquier diseño o proyecto. Están disponibles en TrueType y otros formatos, en tamaños normalmente de 7 píxeles de altura y 5-7 píxeles de ancho (el octavo píxel solía estar en blanco para separar las letras).

La lista de sistemas retro de los que están extraídas estas deliciosas antiguallas es ya entrañable de por sí:

  • Commodore PET (1977)
  • Apple ][ (1977)
  • Atari 400/800 (1979)
  • Acorn BBC Micro (1981)
  • Sinclair ZX Spectrum (1982)
  • Commodore 64 (1982)
  • Amstrad CPC (1984)
  • MSX (1983)

Además de los archivos con las fuentes hay amplias explicaciones sobre algunos detalles característicos de cada una de ellas: las variantes del ASCII que se usaban y otras curiosidades interesantes. Por ejemplo la tipografía del Spectrum y el Atari 400/800 era de 6×6 píxeles, ridículamente pequeña, lo que implicaba que muchas letras fueran asimétricas. Pero en aquella época era lo que había.

IBM 3270 Font

Como estupendo bonus también encontré esta tipografía del IBM 3270 que puede usarse en Debian, Ubuntu y está disponible adicionalmente en un archivo en formatos TTF, OTF, WOFF y Adobe Type 1 [.zip]. Lo de «Adobe Tipo 1» casi me ha sacado una lagrimilla porque es uno de los más antiguos formatos de los que tengo memoria, del PostScript original.

Relacionado:

Compartir en Flipboard Compartir en Facebook Tuitear
Por @Alvy — 28 de Septiembre de 2020

En el siempre didáctico canal de Ben Eater, dedicado a la programación en lenguajes de bajo nivel, la electrónica de los procesadores y cosas así encontré este vídeo que muestra cómo es el código máquina resultante de compilar un sencillo programa en C. Y, aunque quienes programan pueden imaginar cómo funciona, me pareció una excelente narrativa sobre lo que sucede «tras las bambalinas».

Hay cierto debate filosófico en los comentarios sobre si lo que se muestra como código máquina es tal y es más bien ensamblador, algo muy similar pero en cierto modo diferente. Si bien es cierto que en mi opinión parece más ensamblador –porque hay instrucciones con nombres, pseudovariables y otras referencias– eso no le quita mérito al asunto. Ver el código máquina sería básicamente lo mismo, pero más aburrido: un chorro de bytes en hexadecimal, situados en las posiciones de memoria que indica la columna izquierda.

(Por cierto que lo de bajo nivel de estos lenguajes se refiere a «estar más cerca del hardware de la máquina», no a que sean más toscos o simples, aunque también; el código máquina solo tiene unas pocas decenas o cientos de instrucciones. El caso es que el código máquina está mucho más cerca de los unos y ceros de los chips que las referencias y códigos del ensamblador o el código mucho más «humano» y lleno de funciones y opciones del lenguaje C. Más bajo que el código máquina solo estaría ponerse a soldar cables seguramente.)

En cualquier caso, Eater va recorriendo línea a línea un sencillo programa que imprime la conocida secuencia de Fibonnaci (0, 1, 1, 2, 3, 5, 8, 13…) y su equivalente compilado. Va explicando a qué equivalen los bucles, asignaciones de variables, comparaciones y otras operaciones del C, vistas en ensamblador. Es todo bastante directo y óptimo, diría que altamente satisfactorio. Tan sólo hay unas pocas instrucciones que no están muy claro lo que hacen: algunas al inicio del programa (para preparar el stack por si se devuelve un valor o algo así) y otra tras la función printf que imprime los valores, que tampoco está muy claro qué hacen, aunque parece que es algo como guardar la longitud del valor impreso por si hubiera que usarlo o devolverlo como función o algo así.

Es una gran lección que en 10 minutos permite apreciar cómo unos lenguajes que los humanos podemos «leer» se convierten en algo que los procesadores de los ordenadores pueden entender y ejecutar. Tremendamente didáctico, obligatorio para clase de informática, como quien dice.

Relacionado:

Compartir en Flipboard Compartir en Facebook Tuitear
Por @Alvy — 27 de Septiembre de 2020

Foo@bar.comDesde tiempos inmemoriales hackers y programadores han utilizado foo y bar como variables de ejemplo al escribir su código o hablar sobre él. Es lo que «técnicamente» llaman variables metasintácticas: algo para representar entidades desconocidas, sea eso lo que sea. Algo así cuando en castellano hablamos de fulanito y menganito, pero en código.

Foo y bar van seguidas de foobar, qux, quux, garply y muchas otras variables de este estilo. En el caso de Foo y bar siempre se ha creído que provenían de una adaptacion de la expresión militar fubar (Fucked Up Beyond All Repair) –algo que está «jodido más allá de toda posibilidad de repararlo»– aunque el archivo Jargon dice que otra posibilidad es la palabra alemana furchtbar (terrible).

Se como fuere, alguien se hizo en tiempos jurásicos de la internet primigenia con bar.com, un jugoso y simpático dominio de tres letras que resultaba más que apropiado para el buzón foo@bar.com. Y en su web actualmente hay un personaje –el Foo– que cuenta la triste historia de ese buzón de correo.

Según parece, hasta 1994 o 1995 foo@bar.com recibía algunos mensajes a la semana, generalmente provenientes de administradores o programadores que estaban usándolo en pruebas de todo tipo. Como no eran muchos mensajes, el Foo contestaba en plan gracioso, contestándolos uno por uhno, y si alguien se daba cuenta al otro lado se llegaban a establecer comunicaciones curiosas.

Pero en los años siguientes todo cambió. La Web empezó a crecer y mucha gente comenzó a usar foo@bar.com como correo falso para entrar en algunas webs que pedían un correo de registro. En aquella época no había validación de los correos, seguridad ni autenticación, por no hablar de leyes de privacidad ni todas esas cosas de hoy en día. El caso es que comenzó a llegar tantísimo correo a foo@bar.com que el Foo pasó de recibir cientos a miles de mensajes cada día. Y a nadie le importaban ya las respuestas.

Tras probar una temporada a filtrar las respuestas automáticas de las webs, de listas y el spam (incluso rebotándolo), el Foo se dió por vencido y dejó de contestar.

Ya nadie contesta desde ese buzón, pero la web sigue existiendo, con una plantilla simple. Tiene tres secciones: la historia de Foo @ Bar.com, una de chistes de bares y otra de chistes de abogados.

Cliente: ¿Cuál es la contraseña de la wifi?
Barman: Antes tiene que pedir una bebida.
Cliente: Vale, deme una Coca-Cola.
Barman: ¿Le da igual Pepsi?
Cliente: Bueno. ¿Cuánto es?
Barman: 3 dólares.
Cliente: Aquí tiene. Y dígame, ¿cuál es la contraseña de la wifi?
Barman: Antes tiene que pedir una bebida. Sin espacios, todo en minúsculas.

(Vía Hacker News.)

Relacionado:

Compartir en Flipboard Compartir en Facebook Tuitear

PUBLICIDAD

Desarrolla más rápido con Xojo