Tutorial para comer Sushi correctamente

Aparte del idioma está bien enterarse de las costumbres del país al que se viaja. Una de las cosas más importantes es la etiqueta a la hora de comer. En Japón, China y Korea es de muy buena educación hacer ruido al absorber los fideos. De hecho si no se hace ruido al comer fideos puedes quedar mal.


Sushi en japonés escrito con un solo símbolo Kanji.
La parte de la izquierda significa pescado, y la parte de la derecha significa delicioso.

He encontrado un tutorial donde se explican algunas técnicas básicas para comer Sushi con palillos de forma correcta. Parece ser que una de las cosas más importantes consiste en no mojar el arroz en la salsa de soja para que mantenga todo su sabor, recordadlo si vais alguna vez a un restaurante Japonés.

Conferencia Javahispano – Eclipse RCP

En el post de historia de la programación, Juanjo y yo acabamos comentando los diversos entornos de desarrollo especialmente preparados para trabajar con Java. Para mi, el mejor entorno es Eclipse, cuya filosofía es darnos un entorno básico que podemos ir configurando a base de plugins según nuestras necesidades. Se trata de un proyecto Libre sustentado por más de 40 grandes empresas, la principal de ellas es IBM.

Ayer vino Martín Perez de JavaHispano a dar unas excelentes conferencias sobre Java a la Universidad de Alicante.

En la primera conferencia explicó en que consiste Eclipse RCP. Se trata de un framework a partir del cual podemos construir aplicaciones sobre la base de Eclipse. Es decir, nos proporcionan un Eclipse «Vacio» que podemos modificar para crear aplicaciones de gestión o lo que queramos. ¿Qué ventajas tenemos? Pues que podemos usar el sistema de ayuda de Eclipse en nuestros programas, o el sistema de perspectivas y vistas etc. Para quien esté interesado en el tema un tutorial para iniciarse.

En la segunda conferencia, algo menos técnica, se centró en como podemos montar sistemas J2EE basados en Software Libre. Es realmente impactante ver como una empresa se puede ahorrar 30.000 euros usando un servidor de aplicaciones como Jboss en vez de Websphere de IBM cuando realmente la potencia y funcionalidades pueden llegar a ser similares en muchos aspectos. También me enteré que en la multinacional Bayer se cansaron de pagar estas barbaridades y ahora utilizan Software Libre.

El problema es que los directivos no se creen que algo gratuito puede funcionar igual o incluso mejor que algo que cuesta 50.000 euros. Pero poco a poco el panorama está cambiando.

¿Cómo funciona un buscador? – Capítulo 4 – PageRank

Llegamos al último capítulo de la serie donde vamos a explicar los fundamentos de ordenación de resultados de una búsqueda basándonos en el cálculo del Pagerank de Google.

En el capítulo 3 aprendimos como los resultados de una búsqueda se ordenan según su importancia usando una serie de algoritmos. Pero estos algoritmos son totalmente autómaticos y simplemente se basan en la correspondencia del texto de las páginas con la búsqueda que estamos realizando. Para poder obtener una ordenación mejor debemos introducir componentes más «subjetivos», como por ejemplo el número de enlaces que apunta a determinada página web. Cuantos más enlaces hacia nuestra página mayor será nuestra puntuación (Con ciertas restricciones importantes que veremos a continuación).

Veamos la fórmula básica (No os asustéis que es muy sencillita) con la que se calcula la puntuación (PageRank) de una página web:

  • -PR(A) significa que vamos a calcular el PageRank de la web A.
  • -T1, T2, T3 … Tn son las páginas web que tienen un link hacia la página web A.
  • -d es una constante que suele vale 0.85
  • -C(T1), C(T2), C(T3) … C(Tn) son el número de links al exterior de las webs T1,T2,T3 etc…

Vemos que la fórmula tiene en cuenta el PageRank que cada página que nos apunta, además, cuantos más enlaces al exterior tiene la página que nos apunta menor es la puntuación que nos da. Teóricamente la fórmula calcula la probabilidad de que un usuario llegue a tu página navegando haciendo clicks aleatoriamente, cuantos más enlaces hacia tu página más probable es que llegue un navegante despistado. Pero será aún más probable si hay enlaces a tu página desde una web famosa con mucho PageRank. Para verlo más claro vamos a utilizar un ejemplo, imaginaros las siguientes webs:

-Página Web A (PageRank = ¿?¿?)
-Página Web T1 (PageRank = 5):
   -Link hacia A.
   -Link a slashdot
   -Link a barrapunto
   -Link a la nasa
-Página Web T2 (PageRank=3):
   -Link hacia A
   -Link a google

Deseamos conocer el valor del PageRank de la Web A y ver si nos beneficia más la Web T1 o la Web T2. Procedemos a aplicar la fórmula:

PageRank(A)=(1-0.85) + 0.85*(PageRank(T1)/C(T1)) + 0.85*(PageRank(T2)/C(T2))

Nos valta saber C(T1) y C(T2) que simplemente se calculan sumando el número de links al exterior de ambas páginas, C(T1)=4 y C(T2)=2.

PageRank(A)=(1-0.85) + 0.85*(5/4) + 0.85*(3/2)

PageRank(A)=(1-0.85) + 1 + 1.275

Observad que la página T2 con PageRank 3 nos beneficia algo más que T1 con PageRank 5 porque no tiene tantos links al exterior. Si terminamos de operar obtenemos nuestra puntuación final:

PageRank(A)=2.425=2(Redondeando hacia abajo)

Ya sabemos calcular el PageRank a mano (Algo bastante inútil, aquí te lo calculan automáticamente), pero ¿Qué conclusión práctica podemos sacar de la fórmula? Veámoslo con un par de ejemplos prácticos:

– Si tenemos una web con PageRank 2 y nos enlazan 20 nuevas páginas con PageRank 1 seguramente sigamos con PageRank 2, pero si hay una web que nos enlaza con PageRank 6 seguro que subiremos a PageRank 3. Cuanto mayor sea el PageRank de la web que nos enlaza mayor es la puntuación que nos da.

-Si tenemos una web con PageRank 2 y nos enlaza una web con PageRank 3 que tiene enlaces a otras 5000 webs seguramente sigamos con PageRank 2, pero si la misma web solo tiene nuestro enlace seguro que subiremos a PageRank 3. Cuanto menos enlaces al exterior tenga la web que nos enlaza mayor es la puntuación que nos da.

Hoy en día el algoritmo para calcular el PageRank es mucho más complicado que el explicado y tiene en cuenta muchas más variables para dar puntuaciones lo más fiables posibles. Pero la base sigue siendo parecida a la fórmula de este artículo. ¿Cómo mejoraríais la fórmula del PageRank? ¿Qué factores creéis que son importantes a la hora de evaluar una web de forma automática?

Más información en los papers orginales escritos por los creadores de Google en The Anatomy of a large-scale hypertextual Web search engine y The PageRank citation ranking: Bringing order to the Web.

Y para los que han llegado hasta aquí leyendo todos estos artículos un regalito: una foto de Sergey de juerga en la universidad, uno de los creadores del fenómemo Google haciendo el gilipichis 😉

Historia de la programación

Ya había visto algún que otro poster con la linea evolutiva de ‘todos’ los lenguajes de programación. La famosa editorial americana O’reilly acaba de publicar un espectacular poster que sin duda fascinará a todos los programadores.

Todo empezó hace 50 años con el nacimiento de Fortran. Es interesante ver las conexiones entre los diferentes lenguajes, y ver como algunos de ellos desaparecen mientras que otros siguen dando guerra. Pero yo creo que lo más importante es aprender de la historia y poder sacar conclusiones sobre lo que nos depara el futuro.

¿Cómo será el poster de aquí 50 años? ¿Quién ganará la batalla Java o .NET? ¿Y en los lenguajes concernientes a tecnologías web que pasará?

Yo personalmente cada vez le veo el futuro más negro a Java, simplemente porque cuando llegue Longhorn de aquí 2 años .NET entrará en casi todos los ordenadores del mundo. Una vez más Microsoft aprovechará su posición en el mercado de los sistemas operativos para introducir una nueva tecnología y desbancar a la competencia. ¿O realmente es Sun Microsystems quien está fallando en su estrategia y está dejando que Microsoft gane la batalla al igual que pasó con Netscape? ¿Será Google quien le de un giro a la industria introduciéndose en nuestros escritorios?

El efecto Mariposa

El jueves fui al cine a ver El efecto Mariposa. No esperaba que fuera nada del otro mundo, pero al final resultó ser una película buena. El argumento de la película se basa en una de las primeras consecuencias de la teoría del caos: «Un pequeño cambio en las condiciones iniciales de un sistema puede provocar grandes cambios al cabo del tiempo». La forma popular de decir lo mismo es conocido como Efecto Mariposa:

Si una mariposa agita con su aleteo el aire de Pekín, puede modificar los sistemas climáticos de Nueva York del mes que viene y provocar un huracán

El protagonista de la peli puede volver al pasado, realizar un pequeño cambio en sus actuaciones y volver al presente viendo que todo ha cambiado radicalmente. Ya no os cuento más sobre la película, id a verla 😉 ahora nos vamos a centrar en la base teórica de la película.

Efecto mariposa

En nuestra vida cotidiana estamos acostumbrados a observar intuitivamente sistemas No caóticos. Por ejemplo: si le das una patada a un balón, lo lanzas a 20m. Luego le das una patada un poco más fuerte llegará hasta los 25 m. Es decir, un pequeño cambio en las condiciones iniciales provoca un pequeño cambio en las condiciones finales. Toda la física clásica está basada en este principio, pensad en las 3 leyes de Newton por ejemplo, un pequeño cambio en una ecuación hará que tengamos un pequeño cambio en los resultados finales.

Pero también estamos acostumbrados a observar sistemas caóticos sin saberlo realmente. Por ejemplo el movimiento de las nubes donde un pequeño cambio puede provocar grandes cambios en el sistema. Veamos como se hicieron los primeros descubrimientos de sobre la existencia de sistemas caóticos, precisamente observando la atmósfera.

Hacia 1960, el meteorólogo Edward Lorenz se dedicaba a estudiar el comportamiento de la atmósfera, tratando de encontrar un modelo matemático, un conjunto de ecuaciones, que permitiera predecir a partir de variables sencillas, mediante simulaciones de ordenador, el comportamiento de grandes masas de aire, en definitiva, que permitiera hacer predicciones climatológicas.

Lorenz realizó distintas aproximaciones hasta que consiguió ajustar el modelo a la influencia de tres variables que expresan como cambian a lo largo del tiempo la velocidad y la temperatura del aire. El modelo se concretó en tres ecuaciones matemáticas, bastante simples, conocidas, hoy en día, como modelo de Lorenz.

Pero, Lorenz recibió una gran sorpresa cuando observó que pequeñas diferencias en los datos de partida (algo aparentemente tan simple como utilizar 3 ó 6 decimales) llevaban a grandes diferencias en las predicciones del modelo. De tal forma que cualquier pequeña perturbación, o error, en las condiciones iniciales del sistema puede tener una gran influencia sobre el resultado final.

Por eso es muy difícil hacer precciones del tiempo a largo plazo. Porque no podemos conocer exactamente cual es la situación actual de la atmósfera. Los datos que obtienen los satélites son aproximados, si el movimiento de las nubes no fuera caótico con una aproximación tendríamos suficiente; pero al ser un sistema caótico debemos saber la situación y estado exactos de cada masa de aire para poder hacer unas buenas predicciones.

Lorenz intentó explicar esta idea mediante un ejemplo hipotético. Sugirió que imaginásemos a un meteorólogo que hubiera conseguido hacer una predicción muy exacta del comportamiento de la atmósfera, mediante cálculos muy precisos y a partir de datos muy exactos. Podría encontrarse una predicción totalmente errónea por no haber tenido en cuenta el aleteo de una mariposa en el otro lado del planeta. Ese simple aleteo podría introducir perturbaciones en el sistema que llevaran a la predicción de una tormenta.

De aquí surgió el nombre de efecto mariposa que, desde entonces, ha dado lugar a muchas variantes y recreaciones. Por ejemplo, en las novelas de Isaac Asimov aparece muchas veces el dilema de que al viajar hacia el pasado no hay que tocar nada, ni provocar ningún cambio, porque podría tener consecuencias insospechadas en el presente. En otras novelas se considera que la teoría del caos no tiene validez en el caso de los viajes en el tiempo, ya que un pequeño cambio es algo inapreciable que sería eliminado por fuerzas mayores (Al igual que una pequeña piedra en un gran rio).

Se denomina, por tanto, «efecto mariposa a la amplificación de errores que pueden aparecer en el comportamiento de un sistema complejo. En definitiva, el efecto mariposa es una de las características del comportamiento de un sistema caótico, en el que las variables cambian de forma compleja y errática, haciendo imposible hacer predicciones más allá de un determinado punto, que recibe el nombre de horizonte de predicciones».

Para terminar, algo muy importante sobre la teoría del caos que os terminará de liar :

«El caos observa que realmente existen movimientos sin orden. Gracias a la teoría del caos, hemos comprendido que puede haber movimientos erráticos que no son aleatorios, sino que responden a reglas fijas. Sí, efectivamente son fenómenos sin orden aparente- como por ejemplo el clima planetario- cuya motivación causal puede ser incomprensible y cuyas leyes se nos escapan, pero en absoluto son fenómenos derivados del azar» – Feigenbaum

Un libro sobre el tema muy recomendado para comenzar: Caos de James Gleick, y un enlace clásico sobre el tema en castellano. Seguiremos hablando sobre el Caos en este blog, esto solo ha sido una introducción para ir calentando 😉

¿Si conociésemos la posición actual de todas las partículas de nuestro planeta, introdujéramos todos los datos en un gran ordenador junto con las leyes físicas concernientes a la interacción de las partículas seríamos capaces de predecir el futuro (Dejando aparte la mecánica cuántica , por si hay algún físico leyendo esto 🙂 )?

¿Pensáis que un pequeño cambio en algún momento de vuestra vida habría hecho que fuera totalmente diferente o pensáis que hay «fuerzas mayores» que hacen que todo fluya como debería al igual que al tirar una piedra a un rio no provoca grandes cambios?

Tened cuidado con lo que hacéis hoy, una pequeña decisión podría tener consecuencias que no podéis ni sospechar 😉

Delaunay y Voronoi

Vamos a comentar intuitivamente uno de los algoritmos más famosos y más útiles de la geometría computacional usando un ejemplo práctico. Aprenderemos a generar imágenes como esta:

Comenzamos la aventura. Imaginaros que tenemos una empresa de transporte con varias centrales de distribución, cada punto de la imágen representa uno de estos centros:

Ahora imaginaros que debemos determinar las zona que debe cubrir cada central de distribución de forma que tengamos que viajar lo mínimo posible. Es decir, debemos determinar las zonas del plano que están más cercanas a cada punto.

Para calcular estas zonas hay que seguir una serie de pasos. Primero debemos aplicar el algoritmo de Delaunay, que consiste en trazar triángulos entre los vértices con ciertas restricciones que ahora veremos. Veamos una posible triangulación:

Esta es una forma de triangular, pero para nuestro propósito no es válida. Debemos conseguir una triangulación de forma que Cualquier circunferencia trazada entre los 3 vértices de cada triángulo no tenga ningún otro punto dentro. Lo veremos más claro con una imágen que demuestra que la triangulación anterior no era válida:

¿Cómo solucionamos el problema? Pues probando diversas triangulaciones (Hay un método complicado de explicar que lo hace muy bien) hasta que no haya ninguna circunferencia que toque más de 3 vértices. En nuestro caso solo tenemos que cambiar una arista:

Fijaros que hemos cambiado un poco la triangulación y ahora al trazar la circunferencia ya no tenemos ningún otro vértice interior. Si hacemos lo mismo con el resto de triángulos vemos que hemos conseguido que no tengan otros vértices dentro, en este momento hemos conseguido la Triangulación de Delaunay a partir de los vértices/centrales de distribución iniciales. En la siguiente imagen trazamos todas las circunferencias posibles, fijaros que ninguna toca más de 3 vértices.

Pufff, un poco lioso pero lo que queda es cuesta abajo. A continuación debemos calcular las regiones más cercanas a cada punto (A estas regiones las llamaremos Regiones de Voronoi). Para ello nos apoyaremos en la Triangulación de Delaunay que ya hemos calculado. Marcamos el punto central de cada circunferencia y trazamos Perpendiculares a las aristas de los triángulos. Vamos a verlo con dos de los círculos para no liar (Los puntos amarillos son los centros de las circunferencias y las líneas naranjas son perpendiculares a las aristas de los triángulos):

Si seguimos aplicando el mismo método (y eliminamos del dibujo los circulos para no liar) obtendremos lo siguiente:

Si además eliminamos la Triangulación de Delaunay, tendremos la imagen definitiva donde se definen las zonas más cercanas a cada centro de distribución:

Por ejemplo, la zona coloreada de verde es la Región de Voronoi del punto A. Esto quiere decir que todo lo que está pintado de verde está más cerca de A que de cualquier otro punto del dibujo. Lo podéis comprobar con una regla si no os convenzo 😉

Si habéis llegado hasta aquí, tenéis premio: Un applet donde haciendo clicks podéis ir colocando las sedes de vuestra empresa y vais viendo en tiempo real la triangulación de Delaunay y las regiones de Voronoi. También podéis generar muchos puntos dándole al botón Generar, con el que conseguiréis una imagen similar a la mostrada al inicio de este artículo. A los programadores os pongo el código fuente por si quieren trastear algo, os aviso que está muy poco documentado.

Resumiendo, en geometría computacional las regiones de Voronoi son las zonas del plano más cercanas a un conjunto dado de puntos. Esto a nivel práctico lo utilizan muchas empresas para definir sus zonas de cobertura. Por ejemplo, McDonalds lo utiliza para decidir donde tiene que poner una nueva sede. También se utiliza en planes de prevención de riesgos para saber a que zonas afectaría un escape de una central nuclear.

También se utiliza en aplicaciones más artísticas, como en la primera imágen de este artículo, la creación de cristaleras etc. También podéis generar vuestras regiones de voronoi utilizando Photoshop: Filtro -> Textura ->Vidriera . Para aplicar ese filtro Photoshop internamente realizar la Triangulación de Delaunay que hemos aprendido y posteriormente calcula las Regiones de Voronoi. Todos a crear Vidrieras y si no os queda algo claro preguntad 🙂