Core 'ngrato

Un poquito de opera.
Bueno, realmente no es parte de ninguna opera, sino una tremenda canción napolitana.
Esta aria fue escrita en 1911 por el Alessandro Sisca (llamado Cordiferro) con música compuesta por Salvatore Cardillo. Ambos eran emigrantes italianos (de Napoles) en Nueva York.
Este es un trozo, al final teneis un par de versiones completas más.
Con vosotros el gran Mario del Monaco:


Letra con traducción

Catarì, Catarì,
Catarì, Catarì,
pecche' me dice sti parole amare?
porque me dices estas palabras amargas

pecche' me parle, e 'o core me turmiente
,
porque me hablas, y me atormentas el corazón,
Catarì?
Catarì?

Nun te scurda' ca t'aggio dato 'o core,

no te olvides que te di mi corazon
Catarì, nun te scurda'!
Catarì, no te olvides!

Catarì, Catarì,
Catarì, Catarì,
che vene a dicere
que vienes a decir
stu parla' ca me da spaseme?
estas palabras que me dan dolor?

Tu nun ce pienze a stu dulore mio
tu nunca piensas en mi dolor,
tu nun ce pienze, tu nun te ne cure.
tu nunca piensas, tu no tienes corazon

Core, core 'ngrato,
corazón, corazón ingrato
t'haie pigliato 'a vita mia,
tu has tomado mi vida

tutt'e' passato
y ahora todo es pasado
e nun ce pienze cchiu'!
y no lo piensas más!

Estas son otras versiones, en cada una se notan diferencias, todas son impresionantes.

Luciano Pavarotti
Tiene subtitulos en español

Placido Domingo

José Carreras

Mario Lanza

Mente Vacia, Corazon Lleno

Intelectual aprende a morir!

Comillas dobles o simples en ruby

He hecho una pequeña comparativa en ruby entre usar dobles comillas y simples.
Básicamente cuando ruby se encuentra unas dobles comillas inspecciona dentro para ver si dentro hay alguna variable que interpolar. Si solo usamos comillas simples no se preocupa de ello y lo coge todo como un string.
Quería ver el tiempo que pierde ruby por tener que inspeccionar las comillas dobles.
La prueba es muyy sencilla.
Este es el comando que lancé:

time ./comillas.rb > /dev/null && sleep 60 && time ./sincomillas.rb > /dev/null

Y estos los códigos:

comillas.pl

#!/usr/bin/ruby
alfa="alfa"
100_000_000.times {puts "Con comillas #{alfa}"}

sincomillas.pl

#!/usr/bin/ruby
alfa="alfa"
100_000_000.times {puts 'Con comillas'+alfa}

Y los resultados:

real 8m14.826s
user 7m49.817s
sys 0m23.533s

real 8m1.829s
user 7m35.332s
sys 0m23.941s

La diferencia es pequeña, las comillas dobles son un 2,96 % más lentas.

Números complejos

La razón por la que se crearon los números complejos es puramente algebraica.
La ecuación x*x + 1 = 0 no tiene solución para los números "normales" (los que teóricamente podemos construir en la realidad).
Para resolver dicha ecuación hace falta un elemento que al multiplicarlo por si mismo de menos 1 (el elemento neutro de la multiplicación).
Esto puede conseguirse con matrices, pero es un álgebra no conmutativa y además hacen falta 4 elementos (matrices 2x2).
La solución más sencilla fue inventarse los números complejos.
Un números complejo z es un par de de números reales (a, b) con la siguiente álgebra:

-) Suma: z1 = (a1, b1) z2 = (a2, b2)
z1+ z2 = (a1 + a2, b1 + b2)

-) Multiplicación: z1 + z2 = (a1*a2 - b1*b2, a1*b2 + a2*b1)

Es fácil ver que (1,0) es el elemento neutro, y que cada número complejo tiene su opuesto y su inverso. Además son communtativas, distributivas y asociativas. Con estas operaciones los números complejos son lo que se llama un cuerpo.

El elemento (0,1) cumple la siguiente propiedad:

(0,1)*(0,1)= (0-1, 0+0) = (1,0)

Es decir, su cuadrado es menos la identidad, que es justo lo que buscábamos.
A (0,1) se le llama unidad imaginaria y se denota i.
Todo número complejo z = (a,b) puede escribirse de esta manera:

z = (a,0)*(1,0) + (b,0)*i

A los números de la forma (x,0) se los identifica con los reales pues se comportan exactamente igual (son lo que se llama isomorfos a ellos) y
así escribimos z= a+bi, sabiendo que z, a , b, i son números complejos.
Igual que cuando decimos que i es la raíz cuadrada de -1, este -1 es el número complejo (-1,0) no el número real -1. Un número real tiene cuadrado positivo o nulo.
Una consecuencia de esto es que los números complejos no se pueden ordenar de mayor a menor, no existe ninguna manera de ordenarlos bien.

Bueno, tenemos el objetivo cumplido, pero del todo?
Tiene todo polinomio solución dentro de los números complejos?
La respuesta es el teorema fundamental del álgebra, y dice que si.
Sea p(z) un polinomio de orden n, entonces existe w complejo tal que
p(w) = 0.

Existen numerosas demostraciones de este teorema. Pero lo más curioso es que no existe, que yo sepa, ninguna demostración puramente algebraica (es decir que derive directamente de las operaciones que acabamos de definir).

Aunque el motivo por el que aparecieron los números complejos era algebraico, es un asunto mucho más complejo de lo esperado.
Montones de hechos matemáticos que resultaban misteriosos, tuvieron su explicación al desarrollarse las teorías de variable compleja.
No hay más que fijarse en esta expresión (identidad de Euler):



Aquí tenemos los números clásicos, e, pi, 1 y 0. Los números complejos son lo que faltaban para el cuadro.

Muchas teorías en física se expresan de manera natural al usar números complejos.
Parece como si el Universo realmente fuera matemático, ya que los números imaginarios lo describen mejor.

Jacinto Benavente

Aqui teneis un texto de Jacinto Benavente (Biografía) bastante chulo:

MONÓLOGO DEL LADRóN DE SUEÑOS

La noche es mi reino, y en la noche las almas, al sumergirse en el profundo mar del sueño, entre sus sombras, exploran la verdad de su vida, como los submarinos al sumergirse bajo las aguas turbulentas observan más seguros la ruta de los barcos sobre ellas navegantes. Y en este reino de la noche, poblado de almas en letargo, soy el Ladrón de los Sueños, minador de luz, captador de verdades, tesoros que los hombres, más cobardes que avaros, ocultan y guardan hasta de sí mismos, sin pararse a contarlos, sin querer saber sobre ellos, aunque yo los muestre a sus ojos, más cerrados despiertos que dormidos. Como en las noches de la ciudad, de calle en calle va el farolero rasgando la oscuridad con pinchazos de luz, así yo por la ciudad de los sueños rasgo de claridad las almas que, a la luz de sus sueños, pudieran conocerse y saber de sí mismas si al despertar no fuera para ellas caer en sueño más profundo: el de no querer saber nunca la verdad de su vida. Hoy se ha entrado la ciencia por mis dominios con gran aparato investigador; mas, como siempre, antes que los hombres de ciencia supieron los poetas las verdades del misterioso abismo de mi reino. Como los cuerpos, para su descanso, se desnudan de vestiduras al acostarse, también al dormir para soñar se desnudan las almas, y si pudieran así hablar y entenderse unas con otras, nadie se engañaría en la vida. Una mujer y un hombre van a hablarse así ahora, sin saber ellos mismos que hablan ellos, desnudas sus almas en la desnuda verdad de sus deseos. Al despertar lo habrán olvidado todo; volverán al engaño, a la mentira, entre sospechas y traiciones, entre miedos y sombras. Animador de luz, captador de verdades, la noche es mi reino; soy el Ladrón de los Sueños.

De: Vidas cruzadas

Chi Kung

Bueno, voy a dar mi punto de vista del chi kung, el punto de vista de alguien que no sabe casi nada sobre ello. Preparaos para un post algo místico.

Chi Kung significa trabajo de energía (kung es trabajo). En la practica se refiere al conjunto de meditaciones de origen chino.
Existen muchas posiciones y ejercicios, cada una enfocada a diferentes órganos o partes del cuerpo. Unos más marciales y otros más orientados a la salud (mental, física o espiritual).
Hay ejercicios estáticos y dinámicos y de diferente dureza.
Pero básicamente siempre es lo mismo, aprender a controlar la mente y en cuerpo.
El paso más básico, es relajar el cuerpo. Realizar el ejercicio con el cuerpo lo más relajado posible, pero sin dejadez. Poniendo la energía justa en ello. Esto lleva un tiempo hacerlo, sobre todo dependiendo de la posición, pero resulta relativamente fácil acostumbrarse a ello.
Luego viene lo difícil, relajar la mente.
No pensar en el tiempo, no darles vueltas a los problemas... dejar que todo fluya.
La manera de hacer esto es concentrándose en el ejercicio, sintiéndolo. Este el autentico trabajo, dominar la mente para que hagas lo que tu quieras.
Es un trabajo a muy largo plazo, poco a poco. Es frustante a veces, y requiere mucha paciencia y fuerza de voluntad. Algo que justamente es lo que más va desarrollando.

Los beneficios son muy importantes.
Para la salud sobre todo tiene una acción preventiva. Fortalece el cuerpo y evita que enfermemos facilmente. También regenera tejidos y es recomendable para pequeñas lesiones, y en general para toda afección que sea leve, por ejemplo ulceras.
Como lo hace? Pues por un lado ataca las causas (stress, bloqueos emocionales...) y por otro activa el organismo y sobre todo la zona dañada.

Marcialmente. Antiguamente, antes de aprender según que estilo de kung fu, el aspirante debía pasar meses meditando durante meses varias horas al día. Así aprendía paciencia, valor, concentración y a no crear tensión, algo importante en el kung fu.
El chi kung es la base del kung fu, algo que por desgracia se aprecia poco.

Mucha gente practica chi kung por razones místicas. A mi me atraía mucho este aspecto antes.
Ahora pienso que si realmente lleva a algo más será una sorpresa agradable, pero que el propósito del chi kung es mejorar esta vida, no lo que pueda venir después.
A buda le preguntaron si meditando se conseguían poderes. El dijo que si, pero que no significaban nada. Para que quieres telepatía si puedes preguntar?
Uno de los poderes más relacionados con el chi kung es la intuición. No creo que sea nada místico,
si eres capaz de acallar la mente y potenciar tu atención es natural que percibas más, y más claro.
Para que os hagáis una idea de hasta donde se puede llegar, dicen que los faquires, meditando, son capaces de dominar su consciencia hasta el punto de no sentir dolor. Así es como son capaces de acostarse en su camas de pinchos. Seguro que todos habéis ignorado el dolo, simplemente no erais conscientes de ello porque estabais muy concentrados en otra cosa. La meditación trata de conseguir ser capaz de dirigir la atención, para lograr nuestros fines y para librarnos de los males que podamos tener.
Realmente parece que no estés haciendo nada, pero la lucha interior, contra tu mente, que no es más que el reflejo del egoísmo y el orgullo, es la batalla más importante que puedes librar por ti. Más que ganar todo el oro del mundo.
No importa cuanto tengas, sino cuanto disfrutes lo que tengas.

Más topología, es la guerra!

Veamos más cosas de topología.

La base de una topología son los abiertos (son sus elementos). De donde surge el nombre?
La topología más conocida es la topología usual. Se llama así porque es la que se estudia en el instituto. Cuando decimos cual es estamos utilizando la topología usual. Lo mismo que cuando hacemos limite de senx/x cuando x tiende a 0.
Revisar la definición de limite (que es un concepto topológico).
Cuales son los abiertos de esta topología?
Simplemente (básicamente, hay un par de finezas matemáticas por ahí) son los intervalos abiertos de la forma (a,b). De ahí el origen del nombre abierto.
Y porque en el instituto no mencionan la palabra topología?
Pues justamente porque se trata de una topología métrica (la distancia entre dos puntos es|a-b|). Los abiertos son las bolas definidas con esta métrica, en esencia.
No hace falta meter toda la artillería de la topología para las cosas "sencillas" del calculo.
Por cierto que el limite no es único. Por ejemplo con la topología indiscreta cualquier punto es
el limite de 1/n cuando n tiende a infinito, esta topología no distingue nada...
En los espacios métricos si se cumple que el limite es único, si existe...

En relación a esto, hablemos de los espacios de Hausdorff (en honor a Felix Hausdorff, 1866-1942).
Un espacio topológico se dice de Hausdorff si para cualquier par de puntos existen dos entornos de esos puntos cuya intersección es vacía (no tienen puntos en común). Un entorno de un punto es un conjunto que contiene un abierto que contiene al punto.
En palabras, un espacio de Hausdorff es un espacio topológico que distingue puntos.
Todo espacio métrico (como espacio topológico) es espacio de Hausdorff, pero el inverso no es cierto, sino vaya avance...
Los espacios de Hausdorff son desde el punto de vista topológico un refinamiento de los métricos.

Un concepto más complejo es el de conjunto compacto. Os dejo con la definición de la wikipedia
Espacio compacto
Es un concepto raro. En matemáticas muchas veces el efecto es anterior a la causa.
Aparece un problema. Se estudia. Se descubren cosas nuevas, nuevos conceptos. Se crea una nueva teoría. Vamos al revés de como se enseñan luego las matemáticas.
En este caso supongo que el concepto de compacto vino de este resultado o de su estudio
Heine-Borel
De nuevo estamos en R pero con n dimensiones. Para estos espacios un conjunto es compacto si es cerrado y acotado. Son propiedades equivalentes.
Pero en otros espacios esto no es así, sobre todo para los de dimensión infinita (típicamente en espacios de Hilbert de dimensión infinita). Que un conjunto sea acotado le da muchas propiedades, de ahí su interés.

Muchos conceptos que conocemos, como continuidad, cerrado, denso, clausura ,limite y muchos más tienen su generalización topológica.
Muchos teoremas se generalizan y admiten nuevas formulaciones, todo esta relacionado (por ejemplo cosas como que los números racionales son densos dentro de los reales, teorema del calculo exterior, que generaliza y une al teorema fundamental del calculo, al de Gauss y al de Stokes...).
Además de nuevos conceptos como homología y homotopia. Además la topología guarda una intima relación (mmmm....) con el resto de las ramas de las matemáticas.
Y muchas más cosas.
Si queréis saber más, como diría Homer Simpson, Al almacén de los libros!

Euler y la topología


Es difícil hablar del origen de algo. En el caso de la topología si que hubo alguien muy ligado a ella.
Leonhard Euler (pronunciado algo así como Oiler, 1707-1783, Basilea, Suiza).
Euler es uno de los matemáticos más importantes de la historia. Todo un genio increíble. Tenéis un par de videos sobre su vida y obra aquí:

Primera parte

Segunda parte


Después de esto comprendereis porque Euler es como el Beethoven de las matemáticas.

Euler fue el primer matemático "moderno" en reconocer la naturaleza topologica de algunos problemas, y en resolverlos.
Existen dos problemas muy famosos.

Los puentes de Königsberg

Básicamente en el problema de los puentes las distancias (geometría) no importa, sino como están conectadas las cosas, es un problema topologico.
Para cada cada isla, o punto, deben llegar un número par de puentes o caminos (el de salida y el de entrada), salvo para el de comienzo y el de final.
Sin embargo para toda las islas existe un numero impar, y son más de dos islas.
Esta es la demostración en palabras, así de sencilla.


Característica de Euler

Porque para un poliedro el números de caras menos el de aristas, más el de vértices es siempre 2, sin importar las caras que tenga?
La causa es topológica: un poliedro es la deformación de una esfera.
No importa en cuantas caras deformes las esfera, a ser la topología lo que estudia lo que no cambia bajo deformaciones, si la esfera tiene algún invariante (topológico) los poliedros también lo tendrán. Este invariante se llama característica de Euler-Poincaré. Este ultimo generalizo y formalizo esta propiedad topológica.


Euler fue el gran impulso de la topología.

Que es la topología?

De manera intuitiva, la topología es la parte de las matematicas que estudia las propiedades de un cuerpo que no cambian si deformamos el cuerpo.
Una definicíon más matemática es el estudio de las propiedades de un conjunto que son invariantes bajo homeomorfismos (aplicaciones continuas con inversa tambien continua, es decir, deformaciones "suaves" del conjunto).
La definición general de topolgía es mucho mas abstracta.
Sea A un conjunto, y T un subconjunto de partes de A , P(A) (es decir, un conjunto de conjuntos de elementos de A). Entonces se dice que A con T es un espacio topologico (A,T) (equivalentemente que T es una topología sobre A) si:

i) El conjunto vacio O y el conjunto total (A) pertenecen a T.

ii) La intersección finita de elementos de T es elemento de T (es decir, que si cojemos un número finito de elementos de T y hacemos su intersección, es decir los
elementos en común, el conjunto resultante esta en T)

iii) La unión (finita o no, incluso no numerable) de elementos de T es elemento de T.

A los elementos de T se les llama abiertos.

En resumen, tenemos un conjunto (por ejemplo los alumnos de una clase de matemáticas), y a partir de ese conjunto hacemos conjuntos (grupos de alumnos). Entonces básicamente si la interseccion y la union de esos conjuntos es otro conjunto de los que hemos hecho (grupo), entonces hemos hecho una topología (nuestra clase se ha convertido en un espacio topologico XD)
No es trivial definir una topología, y dado un conjunto a veces pueden darse varias topologías.

Por ejemplo, sean los numeros enteros Z.
Sean T1={ O, numeros enteros, numeros pares, numeros impares}
T2={ O, numeros enteros, numeros negativos, numero positivos o nulos}
Entonces (Z, T1), (Z, T2) son espacios topologicos con el mismo conjunto base.

La definición anterior es muy general (podemos convertir cualquier conjunto en un espacio topologico!). Generalmente se trata de toplogías que no sirven para nada, salvo para diversión.
El caso más trivial es (A, P(A)). A esta topologia se la llama topologia discreta.
Tened la idea que una topologia es una manera de distinguir entre elementos (puntos) de un conjunto (es algo parecido a una distancia, pero más general). Por lo tanto si la topología es P(A) es como si pudieramos distinguir cualquier elemento de A (puesto que cualquier elemento de A también los es de P(A) por definición de P(A). De ahi el nombre de discreta.
En el caso opuesto tenemos la topología indiscreta, que solo tiene dos elementos O y A.
Ve todos los elementos como el mismo.
El los ejemplos anteriores T1 solo distingue entre números pares e impares y T2 entre negativos y no.
Tenede en cuenta que una topologia es algo más que una partición del conjunto, las propiedades que debe cumplir de intersección y unión serán muy importantes.

Existen casos particulares como las topologias metricas, normadas y escalares.
Cuando en un espacio tenemos definida una distancia (una métrica) entonces podemos definir una topologia de manera automatica a partir de las "bolas" (una bola centrada en x y de radio r)
son los elementos que distan a un a distancia MENOR que r de x. Lo de menor es importante para definir los abiertos.
Una norma permite definir una distancia, y un producto escalar implica una norma y por tanto una métrica, y de ahi que lleven a poder definir topologías.

UnclassicalPiano

Buscando por youtube el Fade to Black de Metallica encontré una versión que me impresiono...
Se trata de un chavalín de 14 años que toca el piano desde los 6 bastante bien.
Le va el heavy y ha sacado versiones en piano de algunos clásicos.
Y es más impresionante teniendo en cuenta que saca toda la música de oído...



Tiene bastantes más videos suyos con versiones en piano de grandes canciones.
Echadle un ojo, son geniales.

Más videos

Comparativa entre lenguajes IV

Esta es una pequeña variación del anterior. El archivo que se maneja ahora son 256 Mb (el mcedit no es capaz de editarlo, y al vi le cuesta un rato...)



#include

int main() {
FILE *fe, *fs;
unsigned char buffer[2048]; // Buffer de 2 Kbytes
int bytesLeidos;
int caracteres=0;

fe = fopen("dat.c", "r");
if(!fe) {
printf("El fichero %s no existe o no puede ser abierto.\n", "dat.c");
return 1;
}
fs = fopen("out.c", "w");
if(!fs) {
printf("El fichero %s no puede ser creado.\n", "out.c");
fclose(fe);
return 1;
}

while((bytesLeidos = fread(buffer, 1, 2048, fe)))
fwrite(buffer, 1, bytesLeidos, fs);
fclose(fe);
fclose(fs);
fe= fopen("dat.c", "r");
fs= fopen("out.c", "r");
while(!feof(fe)) {
if (fgetc(fe)==fgetc(fs)) {
caracteres++;
}
}
fclose(fe);
fclose(fs);
fe= fopen("dat.c", "r");
fs= fopen("out.c", "r");
while(!feof(fe)) printf("%c",fgetc(fe));
while(!feof(fs)) printf("%c",fgetc(fs));
fclose(fe);
fclose(fs);
printf("el numero de caracteres es %d \n",caracteres);
return 0;
}
#!/usr/bin/ruby
buffer=""
caracteres=0
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "w")
while not (fe.eof?)
fe.read(2048,buffer)
fs.print(buffer)
end
fs.close
fe.close
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "r")
while not (fe.eof?)
if fe.getc == fs.getc
caracteres+=1
end
end
fs.close
fe.close
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "r")
fe.each_line {|line| puts line }
fs.each_line {|line| puts line }
fs.close
fe.close
puts "el numero de caracteres es "+caracteres.to_s

#!/usr/bin/perl
$buffer="00000000000000000000000000000000000000";
$caracteres=0;
open FE, "dat.pl";
open FS, ">out.pl";
while($buffer = ) {
print FS $buffer;
}
close FE;
close FS;
open FE, "dat.pl";
open FS, "out.pl";
while($char = getc(FE)) {
$char2=getc(FS);
if ($char == $char2) {
$caracteres++;
}
}
close FE;
close FS;
open FE, "dat.pl";
open FS, "out.pl";
while($linea = ) {print $linea;}
while($linea = ){ print $linea;}
close FE;
close FS;
print "$caracteres \n";


Ejecutamos cada uno consecutivamente, con un pequeño descanso tras cada uno:

time ./IO > log && sleep 60 && time ./IO.rb > log && sleep 60 && time ./IO.pl > log

C
real 2m26.733s
user 2m4.612s
sys 0m7.064s

ruby
real 14m45.380s
user 14m2.765s
sys 0m23.749s

perl
real 15m12.326s
user 14m48.728s
sys 0m8.397s

Aparte de las diferencias con C (7 veces más lentos), vemos que el tiempo de ruby es mejor, salvo en el tiempo de sistema. Interesante.

Los Suaves

Impresionantes.
Los Suaves son un grupo de rock de Ourense. Sus componentes son Yosi Domínguez (voz y guitarra), Alberto Cereijo (guitarra), Fernando Calvo (guitarra), "Charly" Domínguez (bajo), "Tino" (Batería). Un grupo con dos guitarras solistas más la de Yosi (a veces).
Si os gusta la guitarra eléctrica este es vuestro grupo.
Para mi su doble directo es el mejor disco de rock de la historia...



Más videos en youtube:
Maldita sea mi suerte

Si pudiera

Otra version, con Yosi algo cocido

Si pudiera

Video con imagenes
Dolores se llamaba Lola

Una version del malas noticias, esto es tener buenos fans, lastima que falte el solo final, es algo increible
Malas Noticias

Códigos III

Aqui están los códigos de la tercera entrega:



#include

int main() {
FILE *fe, *fs;
unsigned char buffer[2048]; // Buffer de 2 Kbytes
int bytesLeidos;
int caracteres=0;

fe = fopen("dat.c", "r");
if(!fe) {
printf("El fichero %s no existe o no puede ser abierto.\n", "dat.c");
return 1;
}
fs = fopen("out.c", "w");
if(!fs) {
printf("El fichero %s no puede ser creado.\n", "out.c");
fclose(fe);
return 1;
}

while((bytesLeidos = fread(buffer, 1, 2048, fe)))
fwrite(buffer, 1, bytesLeidos, fs);
fclose(fe);
fclose(fs);
fe= fopen("dat.c", "r");
fs= fopen("out.c", "r");
while(!feof(fe)) {
if (fgetc(fe)==fgetc(fs)) {
printf("Son iguales \n");
caracteres++;
}
}
fclose(fe);
fclose(fs);
fe= fopen("dat.c", "r");
fs= fopen("out.c", "r");
while(!feof(fe)) printf("%c",fgetc(fe));
while(!feof(fs)) printf("%c",fgetc(fs));
fclose(fe);
fclose(fs);
printf("el numero de caracteres es %d \n",caracteres);
return 0;
}

#!/usr/bin/ruby
buffer=""
caracteres=0
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "w")
while not (fe.eof?)
fe.read(2048,buffer)
fs.print(buffer)
end
fs.close
fe.close
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "r")
while not (fe.eof?)
if fe.getc == fs.getc
printf("Son iguales \n")
caracteres+=1
end
end
fs.close
fe.close
fe = File.new("dat.rb", "r")
fs = File.new("out.rb", "r")
fe.each_line {|line| puts line }
fs.each_line {|line| puts line }
fs.close
fe.close
puts "el numero de caracteres es "+caracteres.to_s

#!/usr/bin/perl
$buffer="00000000000000000000000000000000000000";
$caracteres=0;
open FE, "dat.pl";
open FS, ">out.pl";
while($buffer = ) {
print FS $buffer;
}
close FE;
close FS;
open FE, "dat.pl";
open FS, "out.pl";
while($char = getc(FE)) {
$char2=getc(FS);
if ($char == $char2) {
print "Son iguales \n";
$caracteres++;
}
}
close FE;
close FS;
open FE, "dat.pl";
open FS, "out.pl";
while($linea = ) {print $linea;}
while($linea = ){ print $linea;}
close FE;
close FS;
print "$caracteres \n";

Comparativa entre lenguajes III

Vamos a ver ahora como se comportan los diferentes lenguajes respecto a operaciones de entrada/salida básicas. Aquí empieza a ser más difícil hacer códigos que sean análogos en cada lenguaje, es decir que hagan exactamente lo mismo y sin buscar "trucos".

Hacemos lo siguiente.
Partimos de un fichero de texto de 260k llamado dat.x
Lo copiamos en modo binario a través de un buffer de 2k para generar el archivo de salida out.x
Los comparamos carácter a carácter y contando los caracteres que hay.
Finalmente volcamos dat.x y luego out.x a pantalla.
Mostramos dos simulaciones:

Tiempos

C: real 0m11.837s
0m11.780s

user 0m0.016s
0m0.004s

sys 0m1.136s
0m1.228s

Ruby: real 0m12.036s
0m11.630s

user 0m0.320s
0m1.816s

sys 0m2.468s
0m0.948s

Perl: real 0m12.134s
0m12.165s

user 0m1.348s
0m1.376s

sys 0m0.856s
0m1.164s

El número se caracteres es igual en todos casos, 262144, menos en C que tenemos 262145 ya que nos aparece un carácter mas, EOF. Todas las lineas son 123456789abcdef, 15 caracteres + EOL por 16385 lineas.

Códigos II

Aquí están los códigos para la segunda tanta de pruebas.



#include
#include

main() {
int n,i,k;
double phi,fibonacci;
double a,b;

phi=(1.0+sqrt(5.0))/2.0;
for (k=0; k<1000;k++){
for (n=0; n<100;n++) {
a=b=1.0;
for (i=0; i < n;i++) a=phi*a;
for (i=0; i < n;i++) b=b/(-phi);
fibonacci=(a + b)/sqrt(5.0);
printf("%lf \n", fibonacci);
}
}
}

#!/usr/bin/ruby
phi=(1.0+Math::sqrt(5.0))/2.0;
1000.times do
100.times do |n|
puts (((phi**n)+(-phi)**(-n))/Math::sqrt(5.0)).to_s
end
end

#!/usr/bin/perl
$phi=(1.0+sqrt(5.0))/2.0;
for ($k=0; $k<1000;$k++){
for ($n=0; $n<100;$n++) {
print ((($phi ** $n)+(-$phi)+(-$phi)** (-$n))/sqrt(5.0));
print "\n";
}
}

#!/usr/bin/python
import math
phi=(1.0+math.sqrt(5.0))/2.0;
for k in range(1000):
for i in range(100):
print (((phi**i)+(-phi)**(-i))/math.sqrt(5.0))

Comparativa de lenguajes II

Vamos ahora a realizar cálculos matemáticos más complejos, multiplicaciones y divisiones. Para ello calcularemos números de Fibonacci a partir de su formula explicita a partir del número aúreo.
(Ver http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci)

El tiempo que mostramos es el que le cuesta en mostrar los 100 primeros números de Fibonacci (antes solo mostrabamos 33) 1000 veces...

Tiempos

C:
real 0m5.225s
user 0m0.364s
sys 0m0.840s

Ruby:
real 0m5.381s
user 0m2.076s
sys 0m0.584s

Python:
real 0m5.165s
user 0m1.360s
sys 0m0.520s

Perl:
real 0m5.371s
user 0m0.740s
sys 0m0.560s


Los tres lenguajes son muy parecidos, los tiempos cambian de una simulación a otra, destacando perl.
El formato de salida cambia. El ultimo valor es:
python 2.18922995835e+20
ruby 2.18922995834556e+20
perl 2.18922995834556e+20
C 218922995834555793408.000000
Ahi vemos el truco de python, menos precisión.
De todas maneras ocurre algo interesante, para los primeros términos la formula da valores aproximados (con decimales) mientras que debían ser enteros. Cosas de la representación finita...

Codigos I

Estos son los códigos de la primera comparativa.



RECURSIVO

Códigos

#include
long int llamadas=0;
int fibonacci(int n) {
llamadas++;
if (n==0 | n==1)
return 1;
else
return fibonacci(n-1) + fibonacci(n-2);
}

main() {
int i;

for (i=0; i<33;i++)>
printf("%d \n", llamadas);
}

#!/usr/bin/ruby
$llamadas=0
def fibonacci(n)
$llamadas+=1
return 1 if n==1 or n==0
fibonacci(n-1)+fibonacci(n-2)
end

33.times { |num| puts fibonacci(num).to_s }
puts $llamadas.to_s

#!/usr/bin/perl
$llamadas=0;
sub fibonacci {
$llamadas++;
my $n = shift;
return 1 if ( $n == 0 or $n == 1 );
return fibonacci( $n-1 ) + fibonacci( $n-2 );
}
for ($num=0; $num < 33; $num++) {
print fibonacci($num) ."\n";
}
print $llamadas."\n";

#!/usr/bin/python
llamadas=0
def fib(n):
global llamadas
llamadas+=1
if n == 0:
return 1
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

for i in range(33):
print fib(i)
print llamadas

ITERATIVO

Códigos

#include
int fib (int n)
{
if (n==0 | n==1) return 1;
int a = 1, b = 1;
int i;
for (i = 3; i <= n; ++i) {
int a_prev = a;
a = b;
b += a_prev;
}
return b;
}

main() {
int i;
for (i=0; i<34;i++) printf("%d \n", fib(i));

}

#!/usr/bin/python
def fib(n):
a, b = 1, 1
for i in range(n):
a, b = b, a + b
return a

for i in range(33):
print fib(i)

#!/usr/bin/ruby
def fibonacci(n)
curr = 1
succ = 1
n.times do |i|
curr, succ = succ, curr + succ
end
return curr
end
33.times { |num| puts fibonacci(num).to_s }

#!/usr/bin/perl -w
sub fibonacci
{
my ($n, $a, $b) = (shift, 1, 1);
($a, $b) = ($b, $a + $b) while $n-- > 0;
$a;
}
for ($num=0; $num < 33; $num++) {
print fibonacci($num) ."\n";
}




Comparativa de lenguajes I

Vamos a ir realizando una comparativa entre varios lenguajes de programación.
Estos serán C, perl, python y ruby.
Elegimos C porque es un lenguaje de nivel medio que nos dará un buen tope de eficiencia. Utilizaremos programas sencillos para que la habilidad como programador influya lo menos posible.
Tampoco nos importa la eficiencia. Se trata de una comparativa en tiempos de ejecución, no de realmente comparar lenguajes.
El primer programa consistirá en mostrar los primeros 33 números de Fibonacci. El último número calculado es 3524578
Primero utilizaremos una implementación recursiva. Mostraremos además el número de llamadas a la función, que debería ser independiente del lenguaje.
También es de esperar que las funciones recursivas tarden más, ya que estamos haciendo simples sumas y al hacerlo recursivo añadimos complejidad.
En el siguiente post mostrare los codigos utilizados.


RECURSIVO


Tiempos


C:
18454895 llamadas
real 0m0.636s
user 0m0.628s
sys 0m0.004s


Ruby:
18454895 llamadas
real 1m10.941s
user 1m2.888s
sys 0m8.001s


Perl:
18454895 llamadas
real 0m38.455s
user 0m38.418s
sys 0m0.016s



Python:
18454895 llamadas
real 0m29.659s
user 0m29.626s
sys 0m0.016s



ITERATIVO


Tiempos

C:
real 0m0.002s
user 0m0.000s
sys 0m0.000s

Ruby:
real 0m0.013s
user 0m0.004s
sys 0m0.004s

Python:
real 0m0.032s
user 0m0.016s
sys 0m0.008s

Perl:
real 0m0.006s
user 0m0.000s
sys 0m0.004s

Vemos la potencia de C y que la recursividad se paga caro.
Extraña que en modo iterativo python sea más lento. Aún así parece el más rápido de los lenguajes interpretados. Además el número de llamadas depende de que la sucesión empiece en 0, 1 o en 1, 1....
Si alguien se quiere entretener puede tratar de ver que ley de tiempos sigue cada procedimiento
(por ejemplo O(n) o O(1)...)



La familia Yang

Para hablar del origen del estilo Yang voy a contar un poco la historia de esta familia.
Muchos estilos de kung fu tienen como nombre el apellido de la familia que lo fundo, por ejemplo, Hung Gar, Choy Gar, Li Gar.
El fundador del estilo Yang fue Yang Lu Chan, aunque quien estructuró su entrenamiento fue su nieto, Yang Chen Fu.


Yang Lu Chan (1799-1872)

Existen dos versiones:

Yang Lu Chan y su amigo, Li Bai-Hui llevaron presentes de dinero y comida por el privilegio de estudiar con Cheng Chan-Xing, maestro de Tai chi chuan estilo Chen. Los largos problemas de estomago de Yang mejoraban solo con los beneficios de la práctica del tai chi. Li, que tenía una enfermedad del pulmón, quería los mismos beneficios. Pero ninguno tenía las artes marciales en mente cuando fueron a la ciudad de Cheng.

Otra afirma que Yang Lu Chan, a pesar de su enfermedad buscaba aprender tai chi, buscando un estilo que fuera bueno para su salud.
Como el kung fu era considerado algo muy importante dado su poder cada familia enseñaba sus secretos solo a sus miembros. Yang Lu Chan entró entonces al servicio de la familia Chen. Observando, a veces en secreto aprendió el estilo. Se trataba de alguien de extremada habilidad y perspicacia.
Cuenta que un luchador de Hsing-i fue a retar a la familia. Debía de tratarse de algun luchador muy famoso, pues ningún miembro de la familia se atrevió a responder.
Entonces apareció Yang Lu Chan y aceptó el reto. Después de observarse durante tiempo, el retador renunció al combate al no ver ninguna manera de derrotar a Yang.
Aunque el castigo por haber aprendido a hurtadillas el estilo era la muerte, viendo lo sucedido la familia Chen decidió admitirlo como discípulo.

Yang Lu-Chen llevó a sus hijos, Yang Ban-Hou (1837-1892) y Yang Jian-Hou (1839-1917) a Beijin e hicieron del Tai Chi de la familia Yang un gran nombre en los círculos de las artes marciales locales. Yang Jian-Hou tuvo 2 hijos, el mayor Yang Shou-Hou, aprendió todos los secretos de la familia Yang y las técnicas de su padre y de su tío. El famoso profesor de la familia Yang, Yang Chen-Fu era el hermano pequeño de Yang Shou-Hou. El aprendió el tai chi de su padre y su hermano mayor. Yang Chen-Fu y su estudiante Che Wei-Ming, expandieron el Tai Chi por toda China. Yang Chen Fu llegó a ser el profesor mas famoso de los tiempos modernos. Su hermano Yang Shou-Hou era conocido como un excelente luchador, pero era tan duro con sus alumnos que nuca alcanzó la popularidad de Yang Cheng-Fu. Fue el quien estableció la mayoría de formas del estilo.
Un discípulo suyo fue Hu Yuen Chou, celebre maestro de Choy Li Fut, y a partir del cual indirectamente conoci el taichi, siguiendo el linaje (Doc-Fai Wong, Pedro Rico).
Yang Cheng-Fu era una persona enorme. Existe una leyenda que cuenta que fue asaltado por varios agresores. Yang se tapo con una manta y fue apaleado por sus asaltantes. Dandole por muerto se fueron. Cuentan que se levanto ileso, a los días sus asaltes murieron, victimas de heridas internas. Es una leyenda...


Yang Chen-Fu (1883-1936)

Tai Chi Chuan

El Tai Chi Chuan es un estilo de kung fu, de los denominados internos ya que se centra en mente y espíritu, sin utilizar de ninguna manera la fuerza bruta. De hecho esto es parte de la esencia del Tai Chi Chuan, comprender la situación para acomodarse a ella y aprovecharla, en vez de forzar las cosas.
Su nombre significa Gran Puño Final.
Su técnica esta basada en el Ying- Yang, los opuestos complementarios. Nunca oponerse a la fuerza, sino cambiarla. Busca siempre un equilibrio, la mente esta totalmente concentrada, pero relajada. El cuerpo tiene energía, pero sin llegar a generar tensión.
Como desarrollar más estas ideas es como hablarle de musica a un ciego lo dejo aquí, y a practicar.

El origen del Tai Chi Chuan se pierde en las leyendas de la antigua china y se remontan a mas de 1500 años. Era practicado por seguidores del Taoismo, que veían en el un estilo marcial en armonía con la salud, que además de ser un estupendo sistema de defensa fortalecía la salud.
Existen varias estilos de Tai Chi Chuan, el más popular es el estilo Yang y el que conozco.

El los últimos años se ha puesto de moda el tai chi, como gimnasia buena para la salud.
Como ejercicio es ideal para gente mayor, ya que no genera tensión, ejercita suavemente el cuerpo y activa el organismo. También permite relajar la mente. Sin embargo se esta perdiendo la parte marcial, y con ello mucho de su sentido.

10 Recetas para Ser Feliz

Estos son algunos consejos dados por Alejandro Jodorowsky para ser más feliz.

"Felicidad es estar cada día menos angustiado".


1. Cuando dudes de actuar, siempre entre "hacer" y "no hacer" escoge hacer. Si te equivocas tendrás al menos la experiencia.

2. Escucha más a tu intuición que a tu razón. Las palabras forjan la realidad pero no la son.

3. Realiza algún sueño infantil. Por ejemplo: si querías jugar y te hicieron adulto antes de tiempo, ahorra unos 500 euros y ve a jugarlos a un casino hasta que los pierdas. Si ganas, sigue jugando. Si sigues ganando, aunque sean millones, sigue hasta que los pierdas. No se trata de ganar sino de jugar sin finalidad.

4. No hay alivio mas grande que comenzar a ser lo que se es. Desde la infancia nos endilgan destinos ajenos. No estamos en el mundo para realizar los sueños de nuestros padres, sino los propios. Si eres cantante y no abogado como tu padre, abandona la carrera de leyes y graba tu disco.

5. Hoy mismo deja de criticar tu cuerpo. Acéptalo tal cual es sin preocuparte de la mirada ajena. No te aman porque eres bella. Eres bella porque te aman.

6. Una vez por semana, enseña gratis a los otros lo poco o mucho que sabes. Lo que les das, te lo das. Lo que no les das, te lo quitas.

7. Busca todos los días en el diario una noticia positiva. Es difícil encontrarla. Pero, en medio de los acontecimientos nefastos, siempre, de manera casi imperceptible, hay una. Que se descubrió una nueva raza de pájaros; que los cometas transportan vida; que un nene cayo desde un quinto piso sin dañarse; que la hija de un presidente intentó suicidarse en el océano y fue salvada por un obrero del cual se enamoró y se casaron; que los jóvenes poetas chilenos bombardearon con 300.000 poemas, desde un helicóptero, a La Moneda, donde fue eliminado Allende, etc.

8. Si tus padres abusaron de ti cuando pequeño/a, confróntate calmadamente con ellos, en un lugar neutro que no sea su territorio, desarrollando cuatro aspectos: 'Esto es lo que me hicieron. Esto es lo que yo sentí. Esto es lo que por causa de aquello ahora sufro. Y esta es la reparación que pido'. El perdón sin reparación no sirve.

9. Aunque tengas una familia numerosa, otórgate un territorio personal donde nadie pueda entrar sin tu permiso.

10. Cesa de definirte: concédete todas las posibilidades de ser, cambia de caminos cuantas veces te sea necesario.

Alejandro Jodorowsky


Alejandro Jodorowsky nació en Tocopilla (Chile) el 7 de febrero de 1929. De ascendentes rusos, de donde provine su apellido, a los 24 años abandono su Chile natal para trasladarse a México, y más tarde a Francia, donde ha vivido sus últimos años.

Es un artista muy polifácetico, destacando en teatro, cine y literatura.
Su vida esta dedicada a la imaginación y al desarrollo personal, a través del arte sobre todo.
Es el creador de la psicomagia, cuyo fin es idéntico a la psicología pero que realiza el camino inverso: usar el lenguaje del inconsciente, para mediante acciones, sanar a la persona.
Es también famoso por su uso del tarot, aprovechando el carácter proyectivo de este y su propia intuición para comunicarse con las personas.


Tiene una corta filmografía, con películas son extrañas, llenas de simbolismos. Además de alguna obra de teatro.
Donde se ha acercado más al gran publico es con sus obras literarias.
Muchas de ellas gráficas, en colaboración con notables dibujantes, siendo la más famosa el Incal, con el dibujante Moebius.
Su obra es extensa, yo particularmente recomiendo:
La danza de la realidad, autobiografia, imprescindible.
Psicomagia, una terapia pánica, muy interesante, expone su metodo para sanar la mente.
El tesoro de la sombra koans de Jodorowsky, algunos son impresionante
El Maestro y las Magas completa su autografia relatando su
experiencia con varias mujeres que le marcaron de algun modo.
El dedo y la luna
La Sabiduría de los chistes ambos son muy interesantes y divertidos
La Sabiduría de los cuentos cuentos procedentes de diversas tradiciónes (sufí, judia, budista...) comentados por Jodorowsky. Muy instructivo.

En youtube, como no..., podeis encontrar varias entrevistas de él.

Triana

Triana fue un grupo de rock andaluz de finales de los años 70. Su musica, muy experimental es muy especial, con algunas canciones preciosas.
Lamentablemente su trayectoria se trunco justo en pleno éxito.
Jesús de la Rosa (voz y teclados) murió en 1983 en una accidente de trafico volviendo de una actuación benéfica.
La banda original la formaban aparte de él, Eduardo Rodríguez (voz y guitarra) y Juan José Palacios "Tele" (batería y percusión).



Otras canciones:

Tu frialdad

En el lago

Abre la puerta

Manolillo Chinato

Manuel Muñoz Sánchez, Manolillo Chinato, nacido en Puerto De Béjar (Salamanca). Estos son algunos de sus poemas.

AUNQUE TU NO ME DES NADA

Mi amor por ti es como el sol,
grande y redondo.
Tu amor por mì como la luna,
pequeña y preciosa.
Mi amor por ti es como el cielo,
siempre infinito.
Tu amor por mì como la tierra,
más pequeñito.
Mas, como mi libertad
no te puede exigir nada,
yo te lo daré a ti todo
aunque tú no me des nada.

ANOCHE PASÉ FRÍO

Anoche pasé frío, y me desenamoré un poco.
Anoche pasé frío y fui poeta.
Anoche mientras mi carne se helaba
y mi alma en mi cuerpo se escondía,
vi, como mi amor para ti,
era un juguete ya pasado de moda
que ya nada valía.

Cualquier amanecer echarán
al viejo juguete de mi amor a un carro de basura
y, alejándose en la amarga soledad,
oirá al carretero dar palos a su mula,
que todo se lo da por un poco de paja
y a veces pochas uvas.

Y estaré allí donde ya nada vale nada
hasta que algún día una dulce gitanilla
con mocon y pecas en la cara,
limpie con su manga grasienta
la suciedad que la sociedad pegó a mi alma.
Y volveré a ser un juguete reluciente de amor y de alegría.

Qué importa que me engañes y luego me sonrías.
Que importa ser poeta o ser basura.
Anoche pasé frío en el cuerpo y en el alma.
Anoche pasé frío y quedo mi libertad de amor... helada.


BUSCÁNDOME

Qué asco me da no ser todavía no ser yo mismo.
Cuántas veces tendré que escurirme aún en el espejo.

Ya estoy hasta los "guevos"
de seguir aguantándome a mi mismo.

Quiera la luna y quiera el silencio
que choque contra la ridícula costumbre,
aunque en ellos queden desparramados
mis preciosos sesos.

Y salga el sol por donde salga
y la luna se esconda apenas sin sentirlo,
después de las estrellas, en silencio,
he de seguir luchando "pa" morirme
con la tenue sonrisa de mi mismo.



MÁS QUE COJONES

Tengo el alma agobiada de tanto
amarte en silencio.
Tengo el corazón cansado
de caminar en soledad.
Ahora no me basto conmigo
para alimentar mi cuerpo y saciar de amor mi alma.
Ya no encuentro ni en las flores ni en el campo.
mis suspiros.
Ya no me apetece ni ser pájaro, ni viento,
ni sol, ni agua;
apenas tengo ilusión de ser blanca mariposa.
Camino con mi alma triste por el campo,
sin flores en las manos, sin besos y sin lágrimas.
Mas que cojones, ¡viva la libertad,
la rebeldía y la esperanza!


Estos son algunos de sus poemas sacados de su libro Amor, rebeldía, libertad y sangre.
El poema de la pagina principal (Tengo ronca el alma...) es uno de ellos.
En el disco de Extrechinato y tu teneis versiones de algunos

Abrazado a la Tristeza

Y en algunas canciones de Extremoduro

Ama,ama y ensancha el alma