Now these folks really knew a couple things about how to write truly amazing job opening ads. 1959, 'North by Northwest' year. Source: Putting the "War" into "War Gaming" (1959) at Amazing JF Ptak
Pseudo random walk down web 2.0 st
Publicado por
Wan Link Sniper
en
miércoles, diciembre 24, 2014
Etiquetas: catastrofes, poder, programacion, psicologia, seguridad, wargames

Publicado por
Wan Link Sniper
en
lunes, diciembre 24, 2012
Etiquetas: navidad, programacion
Poco más puedo añadir a estas alturas. Que gracias a gente como él no estamos todos hablando alemán.Que le trataron fatal. Que fue uno de los grandes.

Publicado por
Wan Link Sniper
en
sábado, junio 23, 2012
Etiquetas: amigos, ciberderechos, coraje, criptografia, poder, programacion
Como estoy harto de buscar una y otra vez esta pequeña aplicación Javascript, me la apunto aquí y así ya la tengo localizada.
Tim Holman tiene otras demos similares, y un blog muy, muy interesante.

Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos de Google Reader y desde Twitter.
Publicado por
Wan Link Sniper
en
sábado, febrero 04, 2012
Etiquetas: programacion, visualización
Como muy bien apuntan en alt1040, si la definición de videojuego es según la RAE "dispositivo electrónico que permite, mediante mandos apropiados, simular juegos en las pantallas de un televisor o de un ordenador", puede que sea hora de replantearse la definición.
Por ejemplo, Joshua Noble y su equipo nos traen Receipt Racer, un juego con una curiosa 'pantalla'. Este micropoyecto fue presentado en el taller "Let's feed the future workshop" del OFFF Festival celebrado en Barcelona el pasado 8 de Junio de 2011.

Publicado por
Wan Link Sniper
en
domingo, septiembre 11, 2011
Etiquetas: mashups, programacion, visualización
"I installed VisualStudio 2003 in a Virtual PC to work on an old WinCE project," writes Toshko Andreev, "the WinCE emulator wasn't very happy about that."


Publicado por
Wan Link Sniper
en
viernes, diciembre 03, 2010
Etiquetas: comic, diseño, programacion
En esta película de 1959 "The Electronic Coach” vemos a un jovencísimo Donald E. Knuth (The Art of Computer Programming, TeX, Premio Turing 1974) sacando estadísticas de baloncesto en 1959 con un IBM 650 y ayudando así a mejorar los resultados de su equipo.

resulta ser un precursor de los métodos descritos en Super Crunchers (Ian Ayres). Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos, y a partir de ahora desde Twitter o Friendfeed.
Publicado por
Wan Link Sniper
en
lunes, septiembre 13, 2010
Etiquetas: bio, liderazgo, mates, peliculas, programacion
Malte Jehmlich ha combinado unas cajas, un coche radio control y una videocámara inalámbrica y el resultado es la mejor recreación de Wipeout que haya parido madre...
RACER DEMO 0.1 - video game mashup por Sputnic en Vimeo.

Publicado por
Wan Link Sniper
en
viernes, agosto 06, 2010
Etiquetas: 3d, 4d, arte, coches, diseño, herramientas, mashups, peliculas, programacion, visualización
En 1983, un año después de la aparición del ZX-Spectrum, el legendario Sandy White revolucionó el panorama de los videojuegos con su impresionante Ant Attack, un mundo tridimensional poblado de hormigas gigantescas. Aquí le tenemos en una reciente entrevista
Sandy es uno de mis héroes personales del Spectrum (el otro es Dusko Dimitrijevic). Todavía tengo guardada la entrevista que le hicieron en Microhobby a cuento de su siguiente juego, I Of the Mask, en el que nuevamente se adelantó varios años a cualquier cosa parecida que estuviese por venir. La he escaneado como mejor he podido.





La Página Personal de Sandy White es una auténtica pasada. Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos, y a partir de ahora desde Twitter o Friendfeed. En la elaboración de este post no se han maltratado hormigas gigantes.
Publicado por
Wan Link Sniper
en
jueves, agosto 05, 2010
Etiquetas: 3d, programacion, retro, spectrum, visualización
Hace exactamente 95 años nacía John Wilder Tukey (16 de Junio, 1915 - 26 de Julio, 2000), químico, matemático, estadístico y pionero informático americano. Destaquemos brevísimamente algunas de sus contribuciones:
En 1947 acuñó el término 'bit' (binary digit, dígito binario) en una comunicación interna de los laboratorios Bell, un año antes de que Claude Shannon enunciase su Teoría de la Información en la que popularizó definitivamente el término.
En 1965 publica junto con James Cooley el algoritmo Cooley–Tukey de Transformada Rápida de Fourier (FFT), un eficiente método que permite calcular la transformada de Fourier discreta y su inversa, de gran importancia en una enorme variedad de aplicaciones, desde el tratamiento digital de señales y filtrado digital en general a la resolución de ecuaciones diferenciales parciales, tratamiento de imagen y audio, reducción de ruido en señales, análisis de materiales, síntesis...
En 1974 trabajó en el desarrollo de un entorno de representación gráfica de datos en múltiples dimensiones, en un sistema denominado captura proyectiva o projection pursuit desarrollando un sistema informático, Prim-9, que parece sacado directamente de la tercera temporada de Lost


Con esta entrada entro a participar en el carnaval de matemáticas, ya por su quinta edición, organizada esta vez por el blog ciencia. Bell Labs tiene múltiples artículos sobre Tukey. Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos, y a partir de ahora desde Twitter o Friendfeed. En la elaboración de este post no se ha maltratado ningún gato (y en todo caso al final se le ha aplicado la correspondiente IFFT)
Publicado por
Wan Link Sniper
en
miércoles, junio 16, 2010
Etiquetas: bio, cumpleaños, mates, peliculas, programacion, visualización
La fantástica Smashing Magazine dedica recientemente uno de sus artículos a la elaboración de un póster dedicado a los genios de la programación y la informática. Podemos explorarlo cómodamente gracias al servicio Fotozum de los amigos de Métriz Canarias.

Publicado por
Wan Link Sniper
en
martes, junio 08, 2010
Etiquetas: amigos, arte, bio, diseño, fotozum, herramientas, liderazgo, mashups, programacion, visualización, web20
Una tabla de madera, una canica, dos servos, una webcam, Arduino y un poco de Processing...

Publicado por
Wan Link Sniper
en
sábado, mayo 01, 2010
Etiquetas: fisica, programacion, visualización

En 1985 el yugoslavo Dusko Dimitrijevic voló desde su tierra natal hasta Ingleterra con la intención de vender varios videojuegos para el ZX SPectrum a la compañía Bug Byte. Esta empresa ya le había comercializado un año antes su "Kung Fu", un original videojuego de artes marciales basado en gráficos vectoriales. Sin embargo al llegar a Liverpool Duke se encontró con que Bug Byte había cerrado.
Sin billete de vuelta (contaba con el dinero que iba a cobrar por los programas que había escrito para volver a casa) se las ingenió para dar con uno de los ex directores de Bug Byte, que le remitió a Ocean. Ocean le compró los juegos y le puso unas semanas a trabajar junto con programadores suyos para que Duke viera el tipo de juegos en los que estaban interesados.
Medio año más tarde Duško Dimitrijević y Mario Mandić entregaban M.O.V.I.E., un juego basado en el sistema Filmation, con un escenario enorme compuesto por más de 250 pantallas repletas de detalles diseñados por Dragoljub Anđelković, que hoy podemos examinar gracias al estupendísimo servicio Fotozum de los amigos de Metriz.
Al arrancar el juego el detective Marlowe se encuentra en su despacho y debe encontrar una comprometedora cinta que muestra los trapos sucios del gangster local, Bugs Maloy. Por el camino contará con la ayuda de la inevitable mujer fatal, Tanya, cuya hermana gemela (Vanya) hará cuanto sea posible por matarnos.
Dejo aquí una rara entrevista hecha en su momento al genial Dusko Dimitrijevic, en la que habla (creo que en serbio) acerca de sus creaciones.
Podemos jugar a M.O.V.I.E online (y a un montón de juegos más) en este enlace, ver un vídeo de una partida completa (unos 20 minutos) así como leer un par de estupendas reseñas en zona48k y en el clásico Crash. Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos, y a partir de ahora desde Twitter o Friendfeed (Shhhhhhhhhhhhhhh: OPEN, DOCTOR, PUZZLE y SHIFRA).
Publicado por
Wan Link Sniper
en
sábado, marzo 06, 2010
Etiquetas: diseño, fotozum, programacion, retro, spectrum, visualización
En el post anterior comentaba como me pongo a ratos con el libro Python for Software Design, versión impresa del conocido How to Think Like a Computer Scientist. Como ya indiqué, se trata de una fantástica introducción al lenguaje Python del profesor Allen B. Downey.
En el ejercicio 4 del capítulo 12 propone un ejercicio para explorar un diccionario en busca de anagramas. Leemos en la Wikipedia que un anagrama es una palabra o frase que resulta de la transposición de letras de otra palabra o frase. Por ejemplo roma, amor, omar y mora son anagramas, así como lámina y animal.
El objetivo de la práctica es escribir una serie de funciones que impriman todos los conjuntos de anagramas del fichero (en nuestro caso un diccionario español, que podemos obtener en este enlace). Estas son las mías
from string import join,maketrans¿Cómo funciona esto? El truco, si es que hay alguno, consiste en usar una de las estructuras de datos más potentes de Python, los diccionarios, para recorrer la lista de palabras e ir formando un diccionario (lo que se denomina un hash en Perl o array asociativo en PHP) que conecte una clave con la lista de todas las palabras que sean anagramas entre sí. Pero, ¿cómo podemos organizar 'becuadros' y 'rebuscado' para que nos de una clave única de búsqueda? La respuesta la encontré hace tiempo leyendo un artículo de A.K.Dewdney en su estupenda columna 'Computer Recreations' de 'Scientific American' ('Investigación y Ciencia'): ordenar las letras de las palabras alfabéticamente. Veamos como funciona:
def encuentraAnagramas():
anagramas={}
fin = open("E:\\ES.txt")
intab = "áéíóú"
outtab = "aeiou"
trantab = maketrans(intab, outtab)
for line in fin:
word = line.strip()
word2 = word.translate(trantab)
l=list(word2)
l.sort()
clave=join(l,'')
try:
anagramas[clave].append(word)
except KeyError:
anagramas[clave]=[word]
return anagramas
def buscador(palabra,diccionario):
lpalabra=list(palabra)
lpalabra.sort()
clave=join(lpalabra,'')
return(diccionario[clave])
>>> f=encuentraAnagramas()
>>> buscador('monja',f)
['jamón', 'mojan', 'monja']
>>> buscador('roma',f)
['amor', 'armo', 'armó', 'mora', 'ramo', 'roma']
>>> buscador('estados',f)
['dotases', 'estados']
>>> buscador('rebuscado',f)
['becuadros', 'rebuscado']
>>> p='retarais'Todas estas palabras, cuando sus letras son ordenadas alfabéticamente, convergen en 'aaeirrst'. Esa es la clave de búsqueda para los anagramas que podemos formar con estas letras. Con todas las piezas juntas, no es difícil encontrar cuales son las listas más grandes de anagramas... para lo que usaremos otro diccionario:
>>> l=list(p)
>>> l
['r', 'e', 't', 'a', 'r', 'a', 'i', 's']
>>> l.sort()
>>> l
['a', 'a', 'e', 'i', 'r', 'r', 's', 't']
>>> f['aaeirrst']
['arterias', 'arter\xedas', 'estirara', 'estirar\xe1', 'estriara', 'estriar\xe1', 'iterar\xe1s', 'rater\xedas', 'restar\xeda', 'retarais', 'retar\xedas', 'traer\xedas']
>>> for item in _:
print item,
arterias arterías estirara estirará estriara estriará iterarás raterías restaría retarais retarías traerías
d={}
for i in f.keys():
cantidad=len(f[i])
try:
d[cantidad].append(f[i])
except KeyError:
d[cantidad]=[f[i]]
for i in d.keys()[-4:]:
print 'De longitud ',i
for lista in d[i]:
print '(',
for elem in lista:
print elem,
print ')',
print
Y estas son las listas de anagramas resultantes:
Publicado por
Wan Link Sniper
en
domingo, enero 17, 2010
Etiquetas: lenguaje, programacion, python
A ratos estoy con el libro Python for Software Design, versión impresa del conocido How to Think Like a Computer Scientist, una fantástica introducción al lenguaje Python del profesor Allen B. Downey.
Concretamente el capítulo 9, "Juegos de palabras", propone una serie de ejercicios en los que poner en práctica lo aprendido en los capítulos precedentes. En primer lugar nos enseña a abrir y leer un fichero de texto línea a línea
filein = open('words.txt')
for line in filein:
word = line.strip()
print word
Y a partir de aquí pide que desarrollemos funciones que recorran un diccionario (el fichero ES.txt) encontrando palabras de longitud igual a...def de_longitud(n):o mayores que...
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if len(line)==n+1:
print word,
def mayores_que(n):un determinado valor, que no usen una determinada letra...
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if len(line)>n+1:
print word,
def has_no_e(palabra):o letras en general...
return (not 'e' in palabra)
def avoids(letras,palabra):o que usen un conjunto de ellas...
for l in letras:
if l in palabra:
return False
return True
def uses_all(letras,palabra):que busquen palíndromos (palabras capicúas)...
for l in letras:
if not l in palabra:
return False
return True
def is_palyndrome(palabra):o palabras cuyas letras estén en orden alfabético...
return palabra==palabra[::-1]
def is_abecedarian(palabra):
letra_anterior=''
for letra_nueva in palabra:
if letra_nueva<letra_anterior:
return False
letra_anterior=letra_nueva
return True
def is_abecedarian2(palabra):
letra_anterior='z'
for letra_nueva in palabra:
if letra_nueva>letra_anterior:
return False
letra_anterior=letra_nueva
return True
def demo():Y finalmente lo he ejecutado
"Imprime todas las palabras de la lista"
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
print word,
def demo2():
"Imprime palabras que no contienen la letra e"
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if has_no_e(word):
print word,
def demo3():
"Imprime palabras que evitan un conjunto de letras"
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if avoids('aeio',word): # "aents"
print word,
def demo4():
"Imprime palabras que usan un conjunto de letras"
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if uses_all('aeiouy',word):
print word,
def demo5():
"Imprime palabras cuyas letras están en orden alfabético"
from string import maketrans
fin = open("D:\\ES.txt")
intab = "áéíóúñ"
outtab = "aeioun"
trantab = maketrans(intab, outtab)
for line in fin:
word = line.strip()
word2=word.translate(trantab)
if is_abecedarian(word2):
print word,
def demo5_1():
"Imprime palabras cuyas letras están en orden alfabético inverso"
from string import maketrans
fin = open("D:\\ES.txt")
intab = "áéíóúñ"
outtab = "aeioun"
trantab = maketrans(intab, outtab)
for line in fin:
word = line.strip()
word2=word.translate(trantab)
if is_abecedarian2(word2):
print word,
def demo6():
"Imprime palabras capicúas"
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if is_palyndrome(word):
print word,
print "\n\nPalabras de más de 21 caracteres"Siendo este el resultado:
mayores_que(21)
print "\n\nPalabras de 20 o más caracteres"
mayores_que(19)
print "\n\nPalabras capicúas"
demo6()
print "\n\nPalabras cuyas letras están en orden alfabético"
demo5()
print "\n\nPalabras cuyas letras están en orden alfabético inverso"
demo5_1()
print "\n\nPalabras que usan aeiouy"
demo4()

Publicado por
Wan Link Sniper
en
jueves, enero 14, 2010
Etiquetas: lenguaje, programacion, python
A través de los compartidos de Jose Antonio Prado Bassas me encontré ayer con este curioso reto del blog Espejo Lúdico en el que juega con los divisores propios de un número.
Los divisores propios de un número son sus divisores menos el propio número. Así, por ejemplo, los divisores propios de 12 son 1, 2, 3, 4 y 6. Pues bien, si tomamos los divisores propios de 24: 1, 2, 3, 4, 6, 8 y 12 y los multiplicamos
hay hasta seis números más de dos cifras con esa propiedad (por supuesto el exponente no tiene por qué ser un cubo). ¿Sabrías descubrirlos?Bueno. Aquí hay un problemilla para explorar con Python. Primero cree una función que devuelve una lista de los divisores propios de un número
def divisoresPropios(n):Parece que funciona. Ahora transformamos un poco la función anterior para que en vez de devolver una lista de los divisores propios los vaya multiplicando y devuelva el resultado
lista=[]
for i in range(1,(n/2)+1):
if (n%i)==0:
lista.append(i)
return lista
>>> divisoresPropios(6)
[1, 2, 3]
>>> divisoresPropios(12)
[1, 2, 3, 4, 6]
>>> divisoresPropios(15)
[1, 3, 5]
>>> divisoresPropios(24)
[1, 2, 3, 4, 6, 8, 12]
def mulDivisoresPropios(n):Ya casi está. Definimos una función que toma un número y el múltiplo de sus divisores propios, y busca si se da algún caso en el que el número elevado a alguna potencia sea igual al múltiplo antes calculado.
res=1
for i in range(1,(n/2)+1):
if (n%i)==0:
res*=i
return res
>>> mulDivisoresPropios(6)
6
>>> mulDivisoresPropios(12)
144
>>> mulDivisoresPropios(15)
15
>>> mulDivisoresPropios(24)
13824
def esDivisorPotente(num,mul):Veamos cuales son los números de dos cifras que cumplen esta condición
for potencia in range(2,num):
res=pow(num,potencia)
if res==mul:
print num,'^',potencia,'=',res,
return True
if res>mul:
return False
>>> for i in range(1,101):Ummm, salen más de 6. Ahora podemos adornar un poco más la cosa:
if esDivisorPotente(i,mulDivisoresPropios(i)):
12 ^ 2 = 144
18 ^ 2 = 324
20 ^ 2 = 400
24 ^ 3 = 13824
28 ^ 2 = 784
30 ^ 3 = 27000
32 ^ 2 = 1024
40 ^ 3 = 64000
42 ^ 3 = 74088
44 ^ 2 = 1936
45 ^ 2 = 2025
48 ^ 4 = 5308416
50 ^ 2 = 2500
52 ^ 2 = 2704
54 ^ 3 = 157464
56 ^ 3 = 175616
60 ^ 5 = 777600000
63 ^ 2 = 3969
66 ^ 3 = 287496
68 ^ 2 = 4624
70 ^ 3 = 343000
72 ^ 5 = 1934917632
75 ^ 2 = 5625
76 ^ 2 = 5776
78 ^ 3 = 474552
80 ^ 4 = 40960000
84 ^ 5 = 4182119424
88 ^ 3 = 681472
90 ^ 5 = 5904900000
92 ^ 2 = 8464
96 ^ 5 = 8153726976
98 ^ 2 = 9604
99 ^ 2 = 9801
for i in range(90,101):De hecho estos números no parecen escasear, así por ejemplo en el entorno al millón tenemos muchos números que cumplen con la condición
if esDivisorPotente(i,mulDivisoresPropios(i)):
lista=divisoresPropios(i)
print ' = ',
for i in range(len(lista)-1):
print lista[i],'*',
print lista[len(lista)-1]
90 ^ 5 = 5904900000 = 1 * 2 * 3 * 5 * 6 * 9 * 10 * 15 * 18 * 30 * 45
92 ^ 2 = 8464 = 1 * 2 * 4 * 23 * 46
96 ^ 5 = 8153726976 = 1 * 2 * 3 * 4 * 6 * 8 * 12 * 16 * 24 * 32 * 48
98 ^ 2 = 9604 = 1 * 2 * 7 * 14 * 49
99 ^ 2 = 9801 = 1 * 3 * 9 * 11 * 33
1000076 ^ 23 = 1001749462105722003405829447631732777649010002466398328988709223525747312767402349848863851215950119508215957162865997753165741643557502976 = 1 * 2 * 4 * 7 * 11 * 14 * 17 * 22 * 28 * 34 * 44 * 68 * 77 * 119 * 154 * 187 * 191 * 238 * 308 * 374 * 382 * 476 * 748 * 764 * 1309 * 1337 * 2101 * 2618 * 2674 * 3247 * 4202 * 5236 * 5348 * 6494 * 8404 * 12988 * 14707 * 22729 * 29414 * 35717 * 45458 * 58828 * 71434 * 90916 * 142868 * 250019 * 500038

Publicado por
Wan Link Sniper
en
miércoles, enero 13, 2010
Etiquetas: mates, programacion, python
El ordenador en el que escribo este post tiene 8 gigabytes de RAM, esto son 68.719.476.736 bits (68.000 millones de unos y ceros). Por fuerza algunos han de fallar antes o después y una única instrucción de máquina errónea puede ocasionar cuelgues, pérdida de datos...
Sin embargo los ordenadores son extremadamente fiables, gracias en gran parte al genial Richard Hamming (11 Febrero 1915 – 7 Enero 1998) entre cuya extensísima lista de contribuciones a la informática destaca la invención de los denominados códigos de Hamming, un mecanismo conocido como SECDED ("single error correction, double error detection")
En efecto, muchas memorias llevan un sistema de detección y corrección de errores de Hamming que minimiza los problemas ocasionados por los fallos de los componentes individuales. Esto se logra mediante redundancia, almacenando 64 bits de datos en 72 bits de memoria física usando un código denominado de distancia 4. Si uno de esos 72 bits es golpeado por un rayo cósmico el sistema detectará y corregirá el error. En el improbable caso de que dos bits del mismo bloque fallen el sistema podrá al menos detectar el error y disparar un sistema de emergencia, por ejemplo bloqueando el ordenador en vez de permitir que los datos se corrompan.
Merece la pena dedicar unos minutos hoy a leer su genial "You and your research" (PDF, inglés, 16 páginas) que ya comentamos aquí hace un año.
Fuente: Wikipedia. Como siempre, gracias por venir. Si te gustó el post puedes apuntarte a través del correo electrónico o por medio del feed RSS (más información acerca del RSS). También puedes seguirme a través de mis elementos compartidos, y a partir de ahora desde Twitter o Friendfeed.
Publicado por
Wan Link Sniper
en
jueves, enero 07, 2010
Etiquetas: bio, programacion, protocolos
Hoy celebramos el 81 cumpleaños de Peter Naur (Copenhague, 25 de Octubre de 1928), la N de la notación BNF con la que se definen las gramáticas de los lenguajes de ordenador. Naur, astrónomo de formación, ha trabajado en el Regnecentralen (Instituto de Computación Danés), en el Instituto Niels Bohr y en la Universidad Técnica de Dinamarca, y entre 1968 y 1998 como profesor en la Universidad de Copenhague. En 2005 recibió el Premio Turing (el Nobel de la Informática), por sus contribuciones generales al diseño de los lenguajes de programacion y en concreto al diseño y especificación del lenguaje Algol 60.
Los encargados de concederle el premio Turing destacaron el rigor y la elegancia del influyente informe de 1960 sobre Algol 60, su papel en el desarrollo del compilador GIER Algol, así como sus contribuciones a la ingeniería del software. Naur fue pionero en el uso de aserciones (que él llamaba "general snapshots") usadas para probar que un programa cumple sus especificaciones, y lideró el cambio de paradigma hacia la programación estructurada. Tillykke, Master Naur!
Publicado por
Wan Link Sniper
en
domingo, octubre 25, 2009
Etiquetas: bio, cumpleaños, programacion