lunes, 25 de enero de 2010

Shell de Unix en el Browser

Y para que se vea que no sólo nos va el rollo retro Windows, aquí dejo este UNIX online


Está lleno de pequeñas sorpresas: por ejemplo mi amigo Javier Castañón nos invita a probar la orden "invaders"...





Fuente: Y-Combinator. 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 marcianitos. Bueno, puede que a alguno. En todo caso sin resquemor.

domingo, 24 de enero de 2010

Revival del Windows 3.1 en el navegador

Para los nostálgicos, en esta página pueden revivir lo que era todo un Windows 3.1... ¡Se puede jugar al buscaminas al todo!


En efecto ya a mi primer PC (un 386SX a 20Mhz) pude meterle uno de estos, y hasta jugar al Flight Simulator y todo, aunque donde más horas le eché fue con el Turbo Pascal 5.0 de Borland... ¡Cómo pasa el tiempo!







Visto en las Hacker News de Y-Combinator. 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.

domingo, 17 de enero de 2010

Anagramas con Python

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

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']
¿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:
>>> p='retarais'
>>> 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
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:
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:

De longitud 11
( arresta arteras rastrea rateras restara restará retaras retarás retrasa traerás trasera ) ( artesonar atraernos atronarse nortearas nortearás ratearnos ratoneras sortearan sortearán tornearas tornearás ) ( alertos estarlo loteras orlaste relatos resalto resaltó soltaré soltera toleras tráelos ) ( entro entró norte rento rentó roten tenor terno torne torné treno ) ( espora operas opresa posaré repaso repasó reposa separo separó áspero óperas ) ( apretar pararte partear partera reparta reptara reptará trapear trapera trepara trepará ) ( entréis estiren estríen inertes inserte inserté interés rentéis rientes sentiré tírense ) ( cansaré cenaras cenarás cesaran cesarán encaras ensacar nacerás nácares secaran secarán ) ( enteros ernesto estreno estrenó eternos noreste nortees sorteen teneros tenores tornees ) ( caernos caserón cesaron coserán cráneos córneas encaros enrosca escoran roncase secaron ) ( amiste emitas estima matéis mesita metáis metías semita temáis temías timase ) ( ensarte ensarté enteras entesar entrase esteran estrena eternas rentase retasen sentaré )

De longitud 12
( canteros cantores cartones constaré contarse conteras contraes cornetas cortasen encastró roncaste troncase ) ( acaréis aceráis acerías caerías careáis casería cesaría escaria reacias recaías saciaré secaría ) ( alcores caerlos caleros calores colarse corales coserla créalos cóleras escolar laceros secarlo ) ( arreste arresté erraste esterar rastree rastreé restaré retarse retrase retrasé traerse térreas ) ( ardemos dameros daremos demoras desamor desarmo desarmó domarse maderos medrosa moderas redomas ) ( arrestan ensartar entraras entrarás narraste rastrean rentaras rentarás restaran restarán retrasan transaré ) ( abatirse abiertas baterías batieras estibara estibará estiraba estriaba rabietas rebatáis rebatías retabais ) ( acares aceras caerás careas casaré casera cesara cesará resaca sacaré secara secará ) ( asentir entráis estiran estrían inserta instaré rentáis retinas sentirá tiernas tirasen triasen ) ( entrarais entrarías estiraran estirarán estriaran estriarán insertara insertará rentarais rentarías restarían ternarias ) ( arterias arterías estirara estirará estriara estriará iterarás raterías restaría retarais retarías traerías )

De longitud 14
( artesón ensarto ensartó norteas notarse ratones rentosa rotasen sonarte sortean tornase torneas toserán tráenos )

De longitud 16
( arresto arrestó arteros ostrera rastreo rastreó rateros retraso retrasó rotarse sortear terrosa toreras torrase traeros trasero ) ( albores balsero besarlo boleras labores rebalso rebalsó resbalo resbaló roblase róbales róbelas saberlo salobre ábrelos árboles )







Alguien muy cercano y muy querido me dijo que estos post le resultaban inspiradores y le recordaban a los ejercicios de estilo Raymond Queneau (fundador de Oulipo), así que si no has entendido nada de todo esto espero que al menos disfrutes con el resultado ;-) 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.

jueves, 14 de enero de 2010

Juegos de Palabras con 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):
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if len(line)==n+1:
print word,
o mayores que...
def mayores_que(n):
fin = open("D:\\ES.txt")
for line in fin:
word = line.strip()
if len(line)>n+1:
print word,
un determinado valor, que no usen una determinada letra...
def has_no_e(palabra):
return (not 'e' in palabra)
o letras en general...
def avoids(letras,palabra):
for l in letras:
if l in palabra:
return False
return True
o que usen un conjunto de ellas...
def uses_all(letras,palabra):
for l in letras:
if not l in palabra:
return False
return True
que busquen palíndromos (palabras capicúas)...
def is_palyndrome(palabra):
return palabra==palabra[::-1]
o palabras cuyas letras estén en orden alfabético...
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

Una vez desarrolladas estas funciones he buscado un diccionario español en formato texto (en este enlace los hay para múltiples idiomas) y he creado la siguiente batería de pruebas para probar las funciones desarrolladas
def demo():
"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,
Y finalmente lo he ejecutado
print "\n\nPalabras de más de 21 caracteres"
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()
Siendo este el resultado:

Palabras de más de 21 caracteres
internacionalizaríamos internacionalizándolas internacionalizándoles internacionalizándolos

Palabras de 20 o más caracteres
anticonstitucionales antiproporcionalidad circunstanciadamente contrarreclamaciones descongestionaríamos extraterritorialidad inconstitucionalidad internacionalizabais internacionalizarais internacionalizarlas internacionalizarles internacionalizarlos internacionalizarnos internacionalizaréis internacionalizarían internacionalizarías internacionalizaseis malintencionadamente pentagonododecaedros precondicionamientos subdesarrolladamente bienintencionadamente desproporcionadamente electromagnéticamente intercontinentalmente internacionalizaremos internacionalizaríais internacionalizasteis internacionalizábamos internacionalizándola internacionalizándole internacionalizándolo internacionalizándome internacionalizándoos internacionalizándose internacionalizándote internacionalizáramos internacionalizásemos internacionalizaríamos internacionalizándolas internacionalizándoles internacionalizándolos

Palabras capicúas
a b c d e f g h i j k l m n o p q r s t u v w x y z ñ ó ll ada ala ama ana ara asa ata aya dad efe eje ele eme ene ese eñe non ojo oro oso sus erre alela aviva azuza dañad debed nadan radar rajar rapar rasar rayar rever rotor sacas sagas salas sanas sayas sañas sedes seres solos somos sosos narran rallar selles adamada adatada recocer reconocer sometemos

Palabras cuyas letras están en orden alfabético
a b c d e f g h i j k l m n o p q r s t u v w x y z ñ ó ad ah al as ay be ce ch cu de di dé el en es ex fi ir ll lo mu no nu os su tu tú él ñu aes ahí ajo amo ano año bel bes bis bit ces clo coz del den des dio dos doy fin fió fío gis hoy hoz huy los luz mor muy nos abel afmo afín agio ajos amor amos anos años befo cegó cejo cejó celo ceno cenó ceño ciño ciñó cruz deis dejo dejó dijo dilo dios délo ello fijo fijó film filo fino finó flor gimo hijo hilo hiló loor motu ágil achín adiós afijo afino afinó bello celos ceños chino dejos demos dilos dimos dinos délos dénos ellos fijos filos finos hijos hilos himno afijos bellos chillo chilló chinos defino dennos himnos

Palabras cuyas letras están en orden alfabético inverso
a b c d e f g h i j k l m n o p q r s t u v w x y z ñ ó da fe ge ha he id ji ka la le ll me mi mí ni oh oí pe pi ro se si so sé sí te ti té un va ve vi xi ya ye yo fea iba ida kif lea lee lid lié lía líe mea meé mía míe nea oca oda ola ole olé olí oía oíd pie pon pía píe rea red roa roe rol ron roo roí ría ríe sea sed sol son tea tic toa ton tía una une uní usa use uso usé usó uña vea ved vid vía yod yol zoo leed liba liga mica mida miga oiga ojea ojee ojeé oled olla olía onda oída peca pica pida poca poda pone rica rifa rife rifé rige roba roca roda roed roja roma roía roña seca seda sida siga soba soda sofá soga soja sola solí soma soné soñé teca toba toca toda toga tole toma tome tomé trié tría tríe unge unid unja unía urea urge urja urna usía veda vida viga volé yoga yola yuca yuta yute zeda zoca zona ojeda olida plica polca polea poned ponga ponla ponme ponía roiga rolla rolle rollé ronca ronda roída soled solía sonda tolla tonga troje unida volea volee voleé zumba zupia zurda zurra zurre zurro zurré zurró única úrica roñica solida sólida sónica tromba tronca tónica zurrón

Palabras que usan 'aeiouy'
atribuyendo atribuyeron neoyorquina ayuntamiento concluyerais constituyera contribuyera neoyorquinas obstruyerais reconstituya retribuyamos suprayectivo atribuyéndole atribuyéndome atribuyéndose atribuyéndote atribuyésemos ayuntamientos constituyeran constituyeras construyerais contribuyeran contribuyeras eyaculaciones reconstituyan reconstituyas suprayectivos yuxtaponiendo yuxtapusieron atribuyéndoles constituyerais contribuyerais reconstituyera retribuyéndola retribuyéramos multiproyectiva reconstituyamos reconstituyeran reconstituyeras reconstruyerais redistribuyamos retribuyéndolas yuxtaposiciones yuxtapusiésemos multiproyectivas reconstituyerais reconstituyéndola reconstituyéramos redistribuyéramos reconstituyéndolas

¡¡¡Que ustedes lo disfruten!!!





Fuente: Python for Software Design, versión impresa del conocido How to Think Like a Computer Scientist. 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.

miércoles, 13 de enero de 2010

Explorando Divisores Potentes con 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

1 * 2 * 3 * 4 * 6 * 8 * 12 = 13824

obtenemos 13824, que es potencia del propio 24 (en concreto, 24 al cubo). El post planteaba el siguiente reto
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):
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]
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
def mulDivisoresPropios(n):
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
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.
def esDivisorPotente(num,mul):
for potencia in range(2,num):
res=pow(num,potencia)
if res==mul:
print num,'^',potencia,'=',res,
return True
if res>mul:
return False
Veamos cuales son los números de dos cifras que cumplen esta condición
>>> for i in range(1,101):
if esDivisorPotente(i,mulDivisoresPropios(i)):
print

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
Ummm, salen más de 6. Ahora podemos adornar un poco más la cosa:
for i in range(90,101):
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
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
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





Fuente: Espejo Lúdico a través de los compartidos de Jose Antonio Prado Bassas. 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.

Red SOStenible: Internet no será otra tele


Consideramos imprescindible la retirada de la disposición final primera de la Ley de Economía Sostenible por los siguientes motivos:

1 - Viola los derechos constitucionales en los que se ha de basar un estado democrático en especial la presunción de inocencia, libertad de expresión, privacidad, inviolabilidad domiciliaria, tutela judicial efectiva, libertad de mercado, protección de consumidoras y consumidores, entre otros.

2 - Genera para la Internet un estado de excepción en el cual la ciudadanía será tratada mediante procedimientos administrativos sumarísimos reservados por la Audiencia Nacional a narcotraficantes y terroristas.

3 - Establece un procedimiento punitivo “a la carta” para casos en los que los tribunales ya han manifestado que no constituían delito, implicando incluso la necesidad de modificar al menos 4 leyes, una de ellas orgánica. Esto conlleva un cambio radical en el sistema jurídico y una fuente de inseguridad para el sector de las TIC (Tecnología de la Información y la Comunicación). Recordamos, en este sentido, que el intercambio de conocimiento y cultura en la red es un motor económico importante para salir de la crisis como se ha demostrado ampliamente.

4 - Los mecanismos preventivos urgentes de los que dispone la ley y la judicatura son para proteger a toda ciudadanía frente a riesgos tan graves como los que afectan a la salud pública. El gobierno pretende utilizar estos mismos mecanismos de protección global para beneficiar intereses particulares frente a la ciudadanía. Además la normativa introducirá el concepto de "lucro indirecto", es decir: a mí me pueden cerrrar el blog porque "promociono" a uno que "promociona" a otro que linka a un tercero que hace negocios presuntamente ilícitos

5 - Recordamos que la propiedad intelectual no es un derecho fundamental contrariamente a las declaraciones del Ministro de Justicia, Francisco Caamaño. Lo que es un derecho fundamental es el derecho a la producción literaria y artística.

6 - De acuerdo con las declaraciones de la Ministra de Cultura, esta disposición se utilizará exclusivamente para cerrar 200 webs que presuntamente están atentando contra los derechos de autor. Entendemos que si éste es el objetivo de la disposición, no es necesaria, ya que con la legislación actual existen procedimientos que permiten actuar contra webs, incluso con medidas cautelares, cuando presuntamente se esté incumpliendo la legalidad. Por lo que no queda sino recelar de las verdaderas intenciones que la motivan ya que lo único que añade a la legislación actual es el hecho de dejar la ciudadanía en una situación de grave indefensión jurídica en el entorno digital.

7 - Finalmente consideramos que la propuesta del gobierno no sólo es un despilfarro de recursos sino que será absolutamente ineficaz en sus presuntos propósitos y deja patente la absoluta incapacidad por parte del ejecutivo de entender los tiempos y motores de la Era Digital.


Red SOStenible

La disposición es una concesión más a la vieja industria del entretenimiento en detrimento de los derechos fundamentales de la ciudadanía en la era digital.

La ciudadanía no puede permitir de ninguna manera que sigan los intentos de vulnerar derechos fundamentales de las personas, sin la debida tutela judicial efectiva, para proteger derechos de menor rango como la propiedad intelectual. Dicha circunstancia ya fué aclarada con el dictado de inconstitucionalidad de la ley Corcuera (o ley de patada en la puerta). El Manifiesto en defensa de los derechos fundamentales en Internet, respaldado por más de 200 000 personas, ya avanzó la reacción y demandas de la ciudadanía antes la perspectiva inaceptable del gobierno.

Para impulsar un definitivo cambio de rumbo y coordinar una respuesta conjunta, el 9 de enero se ha constituido la "Red SOStenible" una plataforma representativa de todos los sectores sociedad civil afectados. El objetivo es iniciar una ofensiva para garantizar una regulación del entorno digital que permita expresar todo el potencial de la Red y de la creación cultural respetando las libertades fundamentales. En este sentido, reconocemos como referencia para el desarrollo de la era digital, la Carta para la innovación, la creatividad y el acceso al conocimiento, un documento de síntesis elaborado por más de 100 expertos de 20 países que recoge los principios legales fundamentales que deben inspirar este nuevo horizonte.

En particular, consideramos que en estos momentos es especialmente urgentes la implementación por parte de gobiernos e instituciones competentes, de los siguientes aspectos recogidos en la Carta:

1 - Las/os artistas como todos los trabajadores tienen que poder vivir de su trabajo (referencia punto 2 "Demandas legales", párrafo B. "Estímulo de la creatividad y la innovación", de la Carta);

2 - La sociedad necesita para su desarrollo de una red abierta y libre (referencia punto 2 "Demandas legales", párrafo D "Acceso a las infraestructuras tecnológicas", de la Carta);

3 - El derecho a cita y el derecho a compartir tienen que ser potenciado y no limitado como fundamento de toda posibilidad de información y constitutivo de todo conocimiento (referencia punto 2 "Demandas legales", párrafo A "Derechos en un contexto digital", de la Carta);

4 - La ciudadanía debe poder disfrutar libremente de los derechos exclusivos de los bienes públicos que se pagan con su dinero, con el dinero publico (referencia punto 2 "Demandas legales", párrafo C "Conocimiento común y dominio público", de la Carta);

5 -Consideramos necesaria una reforma en profundidad del sistema de las entidades de gestión y la abolición del canon digital (referencia punto 2 "Demandas legales", párrafo B. "Estímulo de la creatividad y la innovación", de la Carta).

Por todo ello hoy se inicia la campaña INTERNET NO SERA OTRA TELE y se llevarán a cabo diversas acciones ciudadanas durante todo el periodo de la presidencia española de la UE.

Consideramos particularmente importantes en el calendario de la presidencia de turno española el II Congreso de Economía de la Cultura (29 y 30 de marzo en Barcelona), Reunión Informal de ministros de Cultura (30 y 31 de marzo en Barcelona) y la reunión de ministros de Telecomunicaciones (18 a 20 de abril en Granada).

La Red tiene previsto reunirse con representantes nacionales e internacionales de partidos políticos, representantes de la cultura y legaciones diplomáticas.

Firmado Red SOStenible

http://Red-SOStenible.net

La Red Sostenible somos todos.

Si quieres adherirte a este texto, cópialo, blogguéalo, difúndelo.









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.

sábado, 9 de enero de 2010

Justicia Express (de medianoche)

Ilustrativo gráfico visto en La Información que pone los cuatro días para cerrar páginas webs en perspectiva frente a la duración media de los procedimientos judiciales en España (pleitos tengas...)


Lo bueno de esta ley de la patada en el servidor es que lo mismo vale para cerrar una página de descargas que un blog molesto.







Fuente: La Información. Miedo al Ratón visto en el blog de Marga Fernandez. 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.

viernes, 8 de enero de 2010

Shigeo Shingo, Poka Yoke y la Calidad Total

Una imagen recurrente de cualquier conflicto en un rincón perdido del mundo es la del grupo de guerrilleros con sus AK-47 subidos en un pick up Toyota. La resistencia de los Toyota es legendaria, y raro es el ranking automovilístico de fiabilidad que no encabece Toyota junto con el resto de fabricantes japoneses.


Esta fortaleza es en parte mérito de ingenieros como Shigeo Shingo (新郷 重夫, 9 de Enero de 1909 - 1990), coinventor del Zero Quality Control. En la decada de los 60 del pasado siglo Shingo aplicó sus conocimientos sobre control estadístico de la calidad a los procesos de fabricación, introduciendo una serie de sistemas mecanicos sencillos cuyo objeto era prevenir que las partes fuesen ensambladas erróneamente. La idea central de este concepto es la interrupción del proceso cuando ocurre un defecto, identificando de forma inmediata la causa y su corrección. El ZQC es parte integral del Sistema de Producción Toyota.


Estos mecanismos de inspección se denominan Poka Yoke (ポカヨケ, 'a prueba de fallos'), y parten de la premisa de que los defectos se dan porque ocurren errores en el proceso. Con la inspección adecuada y tomando las acciones necesarias en el lugar preciso se eliminan los defectos.

Hoy en día estamos rodeados de Poka Yokes en nuestra vida cotidiana, algunos más visibles que otros como por ejemplo los conectores USB, las tarjetas SIM de los móviles o los slots donde se insertan las memorias de los ordenadores, todos ellos ejemplos de componentes que sólo admiten una forma de inserción. De hecho la generalización de este tipo de sistemas a ámbitos hospitalarios podrían evitar la pérdida de vidas.





Un post sobre la calidad tiene que estar dedicado invitablemente a mi amiga Raquel Díaz ;-) Fuente: Wikipedia sobre Shigeo Shingo. Puede resultar interesante comparar este sistema con el de la Teoría de Restricciones de Eliyahu Goldratt (La Meta). 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.

jueves, 7 de enero de 2010

Richard Hammning - Códigos de Hamming

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.

martes, 5 de enero de 2010

Tráfico Aerero en España en Tiempo Real - Atlantic Source

A petición popular hemos localizado un servicio de seguimiento de tráfico aéreo similar al encontrado ayer para la zona Benelux. En Atlantic Source podemos seguir el tráfico marítimo y aéreo en España:

Es posible que de primeras sólo muestre el tráfico marítimo. Para ver los aviones debemos usar el desplegable del lateral.


Pinchando en los aviones podemos conocer su posición, altitud, velocidad, destino así como una gráfica de la trayectoria seguida en los últimos minutos, así como la prevista.






Fuentes: Microsiervos [1], [2] y [3]. Yahoo Groups. Tenemos también un servicio similar para Suiza. 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.

lunes, 4 de enero de 2010

Casper - Mashup para Seguimiento de Aviones en Tiempo Real

Os recomiendo una visita a Casper Live Aircraft Tracking, un mashup que permite visualizar los vuelos de la zona Benelux en tiempo real.


Hay muchos otros geo-mashups, como por ejemplo éste que permite seguirles la pista a los trenes suizos o este otro que muestra la navegación marítima en tiempo real.





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.

La Fotografía Ultrarápida de Harold Edgerton

Edgerton, globo y bala.

A 20 años de su fallecimiento recordamos hoy a Harold Eugene "Doc" Edgerton (6 de Abril de 1903 – 4 de Enero de 1990), legendario profesor del Massachusetts Institute of Technology que haciendo un novedoso uso del estroboscopio obtuvo algunas de las imágenes más sorprendentes y bellas del siglo XX

Milkdrop

En 1947 fundó la empresa EG&G y desarrolló la cámara Rapatronic con la que fotografió fenómenos nucleares. Las contribuciones de Edgerton se extienden al campo del sonar y la fotografía submarina, trabajando junto a Jacques Cousteau, con el que se ganó el apodo de "Papa Flash".

Barajando

Edgerton fue uno de los profesores más queridos del MIT. El último curso que impartió fue "Fotografía de Pájaros e Insectos".

Cuaderno de notas

"El truco de la educación", solía decir, "consiste en enseñar a la gente de tal forma que no se den cuenta de que están aprendiendo hasta que es demasiado tarde".

Naipe y bala






Fuente: Wikipedia sobre Edgerton. Imprescindible The Edgerton Digital Collection EDC Project. 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.

¡¡¡Wan Link Sniper cumple dos años!!!

¡Dos años con el blog!

Lo primero: gracias a todos los que habeis venido. Mención especial para los que os habeis animado a dejar un comentario a lo largo de estos meses. A riesgo de dejarme a gente en el tintero, no puedo dejar de mencionar a Javier Castañón, Sam Bonete, Jose Frechín, al Ornitorrinco Enmascarado, Randy del Corro, Jos, Lester Burnham ... Un abrazo muy, muy especial para todos y cada uno de los suscriptores, a día de hoy 69 por correo, 49 a través del feed RSS y 35 a mis elementos compartidos.


En todo este tiempo este rincón perdido del ciberespacio ha tenido 40.146 visitas únicas, a las que se han servido 77.053 páginas. El 25% volvéis, y el 10% habéis venido más de 10 veces. La gran mayoría, un 92%, usáis Windows, un 5% *nix (Linux, SunOS, FreeBSD, NetBSD, OpenBSD) y en torno al 2.5% Macintosh (otro *nix :-) En cuanto al resto de sistemas operativos tenemos gente que ha llegado a lomos de iPhone, SymbianOS, iPod, Nintendo Wii, Android, Playstation 3, BlackBerry, PalmOS y hasta desde una Playstation Portable, aunque este último por lo que sea no ha vuelto :-) En el capítulo navegadores la cosa queda Internet Explorer 49,26% vs Firefox 43,47%.


Habéis venido de 112 países: España, México, Argentina, Colombia, Chile, Perú, Venezuela, Estados Unidos, Ecuador, Bolivia, Costa Rica, República Dominicana, El Salvador, Guatemala, Uruguay, Panamá, Paraguay, Puerto Rico, Cuba, Brasil, Nicaragua... y de sitios tan al norte como Kópavogur, Islandia 64°07'N 21°46'O,

y tan al sur como Ushuaia, Tierra del Fuego, Argentina 54°48'S 68°19'O,


en todo caso de ciudades con nombres maravillosos y evocadores como Arequipa, Atitalaquia, Atizapan de Zaragoza, Bahia Blanca, Barra de Navidad, Boca Del Monte, Cajamarca, Campeche, Cancun, Celaya, Cerro Azul, Cerro de Pasco, Chacabuco, Chalco de Diaz, Chapingo, Chetumal, Chiclayo, Chihuahua, Chimbote, Chincha Alta, Cholula, Chuquicamata, Ciudad Acuna, Ciudad Altamirano, Ciudad de Valles, Ciudad Del Carmen, Ciudad Hidalgo, Ciudad Madero, Ciudad Mante, Ciudad Obregon, Ciudad Victoria, Coacalco, Coatzacoalcos, Colima, Colon, Comodoro Rivadavia, Concepcion Del Uruguay, Conchali, Concordia, Cordoba, Corrientes, Coyoacan, Cozumel, Cuernavaca, Culiacan, Curico, Curuzu Cuatia, Cuzco, Del Viso, Dorrego, Durango, Ecatepec de Morelos, El Pedregal, El Verde, Ensenada, Ensenada, Formosa, Garza Garcia, Guadalajara, Guadalupe, Gualeguaychu, Guanajuato, Guasave, Guaymas, Hermosillo, Huanuco, Huaraz, Huauchinango, Ica, Iguala, Iquitos, Isidro Casanova, Jiutepec, Juarez, Juliaca, Junin, La Candelaria, La Cisterna, La Florida, La Paz, La Plata, La Rioja, La Serena, La Victoria, Lagos de Moreno, Las Parejas, Los Mochis, Luis Guillon, Lujan, Macul, Magdalena, Maipu, Mar Del Plata, Matamoros, Mazatlan, Mendoza, Merida, Mexicali, Mexico City, Michoacan, Monclova, Montemorelos, Monterrey, Moquegua, Morelia, Moroleon, Moron, Mulege, Naucalpan de Juarez, Navojoa, Neuquen, Nezahualcoyotl, Nogales, Nuevo Laredo, Nuevo Leon, Nunoa, Oaxaca, Ocotlan, Ocoyoacac, Olavarria, Orizaba, Osorno, Pachuca, Palpala, Parana, Patzcuaro, Pergamino, Piedras Negras, Pinamar, Piura, Posadas, Poza Rica de Hidalgo, Providencia, Pucallpa, Puebla, Puerto Vallarta, Punta Arenas, Queretaro, Quilicura, Quillota, Quillota, Quilmes, Quilmes, Quinta Normal, Rafaela, Rancagua, Resistencia, Reynosa, Rio Ceballos, Rio Colorado, Rio Cuarto, Rio Gallegos, Rivadavia, Rosario, Sahuayo, Saladillo, Salamanca, Salta, Saltillo, Salto, San Antonio, San Antonio de Padua, San Bernardo, San Carlos de Bariloche, San Cosme Xalostoc, San Cristobal de Las Casas, San Fernando, San Genaro, San Guillermo, San Isidro, San Jorge, San Juan, San Luis Potosi, San Luis Rio Colorado, San Martin de Los Andes, San Miguel de Allende, San Miguel de Tucuman, San Nicolas de Los Arroyos, San Nicolas de Los Garza, San Pedro de Las Colonias, San Rafael, San Salvador de Jujuy, Santa Apolonia, Santa Fe, Santa Rosa, Santiago Del Estero, Surco, Tacna, Talara, Talcahuano, Tampico, Tandil, Tapachula, Tarapoto, Tehuacan, Temuco, Tenancingo de Degollado, Tepatitlan, Tepic, Tepotzotlan, Texcoco de Mora, Tierra Blanca, Tijuana, Tlalnepantla, Tlapa de Comonfort, Tlaxcala, Torreon, Tortuguitas, Tostado, Trujillo, Tula de Allende, Tulancingo, Tuxtla Gutierrez, Uruapan Del Progreso, Valdivia, Valparaiso, Venado Tuerto, Veracruz, Vicente Lopez, Victoria, Villa Gesell, Villahermosa, Vina Del Mar, Vincente Lopez, Vitacura, Xalapa, Yautepec, Zacatecas, Zacualtipan, Zamora de Hidalgo, Zapopan, Zapotlanejo, Zarate, Zihuatanejo, Zimapan, Zumpango...

Ya termino, y lo hago citándome de nuevo. Esto es parte de un post que escribí en julio de 2008, y lo sigo suscribiendo palabra por palabra:
La verdad es que estoy feliz con el blog. Me obliga a estar al día, a leer y a estudiar y por encima de todo me está permitiendo conocer a un montón de gente inquieta y estupenda
Como siempre, muchas gracias por venir.
Un abrazo a todos.
Antonio.







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.