Archive for July, 2009

Libros de verano (VI)

Wednesday, July 29th, 2009

Rebelión en la granja de George Orwell, se trata junto con 1984 de una de sus dos obras mas “importantes”.

Rebelión en la granja
Rebelión en la granja es una fábula alegórica en la que se narra una violenta transición de una granja gobernada por humanos a una granja gobernada por los propios animales. Una vez los animales adquieren el poder surge una clase política dominante, la de los cerdos, que se irá haciendo con más y más privilegios y el sueño de igualdad y libertad acabará convertido en una autentica pesadilla de gobierno dictatorial ostentado por esa clase “elegida”.
La narración es una alegoría de lo que ocurrió en Rusia tras la expulsión de los zares y la toma del poder de Lenin. La mayor parte de los personajes de la historia tienen su equivalente con los personajes reales como Stalin y Trotsky, los trabajadores Rusos, el ministerio de propaganda, la policía política,etc. Incluso se hace alusión a Hitler y a Churchill, dueños de las granjas vecinas.

Es una dura crítica, no tanto a la idea del comunismo sino como a la degeneración del fin y los medios de este sistema al implantarse. Esto es aplicable en general a cualquier sistema totalitario donde unos pocos detentan el poder.

Es muy ameno, muy breve y muy conciso, recomendable al cien por cien.

Libros de verano (V)

Tuesday, July 14th, 2009

La isla del tesoro de Robert Louis Stevenson, un clásico de aventuras juvenil.
Decidí releerlo de nuevo porque tenía muy buenos recuerdos de el. Lo leí estando allá por ¿6º de EGB? y últimamente me ha dado por la vena nostálgica. Ya casi no recordaba el libro y me daba pena olvidarlo así que aquí estamos intentando dejar por escrito un buen recuerdo.

portada_isla_tesoro

Escrito para su hijastro, es un libro inolvidable (aun siendo mayor) que narra las aventuras del joven Jim Hawkins al hacerse con un mapa de una misteriosa isla donde se hacia referencia a un tesoro enterrado. Jim, acompañado de personajes adultos y bien considerados (un médico y un noble) de la zona, zarpará en busca del tesoro, seguido muy de cerca en todo momento por piratas que saben de la existencia de dicho tesoro y no pararán hasta dar con el.
No quiero desvelar nada de la trama, hay que leerlo.
Es un libro con el que he rememorado sensaciones de mi niñez, aún recuerdo el corral de casa de mis abuelos en el pueblo, ahí leía yo al atardecer este libro y al pasar por ciertos capítulos (el barril de manzanas y el fortín de la isla, por ejemplo) me he sentido como si estuviese allí de nuevo, leyendo sin otra cosa que hacer salvo disfrutar del libro.
En fin, que os lo recomiendo encarecidamente. Por favor, no lo despreciéis por ser una novela juvenil merece la pena.
Por último un extracto del propio libro para el comprador indeciso:

Si los cuentos que narran los marinos,
Hablando de temporales y aventuras, de sus amores y sus odios,
De barcos, islas, perdidos Robinsones
Y bucaneros y enterrados tesoros,
Y todas las viejas historias, contadas una vez más
De la misma forma que siempre se contaron,
Encantan todavía, como hicieron conmigo,
A los sensatos jóvenes de hoy:

-¿Qué más pedir? Pero si ya no fuera así,
Si tan graves jóvenes hubieran perdido
La maravilla del viejo gusto
Por ir con Kingston o con el valiente Ballantyne,
O con Cooper y atravesar bosques y mares:
Bien. ¡Así sea! Pero que yo pueda
Dormir el sueño eterno con todos mis piratas
Junto a la tumba donde se pudran ellos y sus sueños.

Script python para DIA

Wednesday, July 8th, 2009

He creado un sencillo script para tratar un problema que ya es un clásico en mi día a día. Se trata de las máquinas de estados.  A lo largo del tiempo he ido tratando esto de forma cada vez más automática y creo que hoy por hoy lo tengo bastante currado.

Actualmente parto de un dibujo UML de una máquina de estados realizado con el programa DIA. Mediante el script que os dejo en este post exporto a un fichero de tipo texto la descripción del autómata (estados,acciones y transiciones) y una vez tengo este fichero de texto plano le paso una serie de scripts AWK que me he currado para obtener la definición en lenguaje C de la máquina. Esta definición en C es cargada por una librería (también currada por el menda) que ejecuta la máquina de estados. Como usuario de esta librería lo único que debemos hacer es rellenar las funciones “plantilla” que generan los scripts AWK, llamar a la librería y ejecutar la máquina.

Como todo, es mejorable, pero eso es objeto de otro post, lo que quería hacer ahora es dejaros el script python para poder exportar la máquina a texto y que vosotros podais tratar este fichero para vuestras propias herramientas.

Lo bueno de este script es que funciona en Windows y Linux (era un problema que me amargaba la existencia con el antiguo sistema que teníamos en el curro, el plugin que teniamos para DIA solo funcionaba en Windows, además de no tratar con máquinas UML sino con una variante un tanto peculiar propietaria).

En fin, he posteado el script a la lista de DIA y os lo dejo también aquí.

Descargar script

Cálculos

Tuesday, July 7th, 2009

Cálculo del punto de rocío

El punto de rocio es la temperatura a la que empieza condensarse el vapor de agua contenido en el aire, produciendo, rocío, neblina o, en el caso de que la temperatura sea lo suficientemente baja, escarcha.
Generalmente el rocío se produce cuando no hay radiación solar, al anochecer, en la noche o al amanecer, también puede producirse después de una tormenta, generalmente en verano.

Para una masa dada de aire, con una determinada cantidad de vapor de agua (humedad absoluta), la humedad relativa es la proporción de vapor contenida en relación a la necesaria para llegar al punto de saturación, expresada en porcentaje. Cuando el aire se satura (humedad relativa = 100%) se alcanza el punto de rocío.

Para calcular el punto de rocío se utiliza la siguiente fórmula:

Donde:

Pr = Punto de rocío
T = temperatura en ºCelsius
H = humedad relativa

El aumento de la humedad del aire puede producirse por alguno de los dos fenómenos siguientes:

  • Por disminución de la temperatura ambiental
  • Por aumento de la cantidad de agua en el ambiente

El primero de los fenómenos se relaciona con el concepto de temperatura de rocío. Si se mantiene la cantidad de agua del ambiente constante y se disminuye la temperatura llega un momento en que se alcanza una humedad relativa del 100%. En este momento hemos alcanzado el punto de rocío y su temperatura la temperatura de rocío. Esto es justamente lo que ocurre en las madrugadas de invierno. La temperatura desciende tanto que llega al punto de rocío, en ese momento la humedad relativa del 100% hace que el agua se condense en las superficies.

De todas formas es frecuente que el agua se condense antes de que se alcance el punto de rocío, eso es debido a la existencia en la atmósfera de ciertas partículas flotantes (aerosoles) que actúan de núcleos higroscópicos y fuerzan la condensación.

El punto de rocío es una magnitud complicada de calcular y depende de muchas variables; normalmente se notifica este valor en los pronósticos extendidos y al ver cuál es la proximidad entre este valor y la temperatura ambiental, se podrá saber si habrá niebla o precipitaciones.

Calculo de la raiz enésima

Dado que la runtime de C no proporciona raices de cualquier grado, podemos optar por dos alternativas:

a) Usar métodos numéricos (newton-raphson, por ejemplo)

b) Usar logaritmos

c) Usar pow(x,1/N)

Dado que la C runtime si que cuenta con funcion para calcular logaritmos y pow no funciona con exponentes que no sean enteros,me parece más sencillito usar este método, así tenemos:

Propiedades de los logaritmos:

log(a*b) = log a + log b

log(a/b) = log a - log b

log(a^n) = n * log a

log (raiz enesima(p)) = log p/n = 1/n*log(p)

Con esta última propiedad podemos hacer los siguiente para calcular la raiz octava:

x = raiz_octava(N), aplicamos logaritmos:

log x = log (raiz_octava(N))

log x = 1/8 log(N)
log x = y

x = antilog(y)

El antilogaritmo de un número es 10 elevado a ese número.

Alex jugando al Ajedrez

Monday, July 6th, 2009

Aquí lo tenemos derrotando a su primer adversario :-)

alexajedrez

Regresión lineal

Wednesday, July 1st, 2009

Se trata de, partiendo de una serie de datos que forman una nube de puntos, encontrar una recta que represente a todos esos puntos. De esta forma podremos estimar como evolucionará una variable determinada.

Por ejemplo: Supongamos los siguientes datos que recogen 33 meses de datos que relacionan la distancia recorrida por unos autobuses con su coste de mantenimiento:

gráfica distancia-coset

gráfica distancia-coste

Si nos interesa extrapolar para ver como evolucionará el coste debemos encontrar una fórumula que nos permita calcular futuros valores.
Esta formula es, en este caso, la de una recta. Se dice que ajustamos los puntos a esta recta de regresión.
Esto no será siempre posible, cuando la correlación lineal tienda a cero significará que los puntos no se parecen ni de coña a una recta y si tiene a uno significará que se puede ajustar bastante bien a una recta.

Calculo de la correlación lineal

La correlación lineal mide la relación lineal entre dos variables. El cálculo del coeficiente de correlación lineal se realiza dividiendo la covarianza por el producto de las desviaciones estándar de ambas variables:

correlacion_linealDonde:

Sigma(x,y) = Covarianza de x e y
Sigma(x) = Desviacion típica de las distribucion marginal
Sigma(y) = Desviacion típica de las distribucion marginal

El valor del índice de correlación varía en el intervalo

[-1, +1]

* Si r = 0, no existe relación lineal.

  • Si r = 1, existe una correlación positiva perfecta.
  • Si 0 < r < 1, existe una correlación positiva.
  • Si r = -1, existe una correlación negativa perfecta.
  • Si -1 < r < 0, existe una correlación negativa.

Calculo de la covarianza

La covarianza la calculamos mediante la siguiente formula:

covarianzaO lo que es lo mismo: !covarianza_rapida.png!Esta última fórmula es más rápida de ejecutar.

Calculo de la desviación típica

La desviación estándar (o desviación típica) es una medida que informa de la media de distancias que tienen los datos respecto de su media aritmética, expresada en las mismas unidades que la variable.
La calcularemos con la siguiente fórmula:

desviacion_tipica

Calculo de la varianza

La varianza es la media aritmética del cuadrado de las desviaciones respecto a la media de una distribución estadística.

varianza_muestral

La implementación

Calcularemos una recta del tipo: y = mx + b

La pendiente “m” se calculará así:

m = (Sumatorio(x*y) - (Media(y) * Sumatorio(x))) / (Sumatorio(x^2) - (Media(x) * Sumatorio(x)))

El coeficiente b:

b = Media(y) - (m*Media(x))