George Boole

Hace un tiempo estuvimos recordando las hazañas de Leibnitz en el siglo XVII, uno de los primeros hombres que imaginaron algo parecido a un ordenador. Pero en el camino hasta la creación de un ordenador como el que estás usando ha intervenido mucha gente. Una de las aportaciones más importantes fue la de George Boole que sentó las bases de la lógica matemática que utilizan los ordenadores y sistemas digitales de hoy en día.

George Boole nació en el seno de una familia modesta en el Siglo XIX, sus padres enseguida notaron su talento y le ayudaron a desarrollar sus capacidades de forma autodidacta. Según cuenta la leyenda fue mientras caminaba por un prado cuando tuvo la idea de que se podrían expresar las relaciones lógicas que postuló Aristóteles dos milenios antes de forma algebraica.

Pero cuando realmente le vino la inspiración a Boole fue cuando a partir de unas discusiones entre sus amigos De Morgan y Hamilton comenzó a desarrollar una nueva lógica a partir de la lógica de Aristóteles. Comenzó usando letras para representar a las clases de la lógica clásica de Aristóteles. Consiste básicamente en utilizar símbolos para representar realidades, esto puede parecer muy simple pero tiene muchas consecuencias. Por ejemplo, si x representa a humanos e y representa a las cosas altas, se define xy como la clase de las cosas que pertenecen a la vez a x y también a y. Por lo tanto xy representaría a los humanos altos. La conclusión inmediata de esto es que si este operador se aplica a una clase sobre si misma obtenemos la misma clase, yy=y o xx=x . Actualmente este operador es conocido como la intersección.

El siguiente paso es sustituir estas clases por números y ver cuando se siguen cumpliendo las propiedades. ¿Cuando es verdadero xx=x ? Resulta que solo se cumple para dos números, el 0 y el 1 (Probadlo si no os lo creéis). Esto nos lleva a que el álgebra de la lógica se convierte en álgebra ordinaria si trabajamos con los valores 0 o 1. Que justamente son los valores con los que trabaja cualquier sistema digital. Boole también definió los operadores + y -. La suma de x + y representa todas las cosas que contienen a x e y (Conocido actualmente como Unión) y la resta x -y los elementos que pertenecen a x y no están en y.

Este párrafo es un poco durrillo, los no aficionados a las matemáticas pueden saltarselo ;). A partir de éstas reglas Boole llegó a conclusiones que muchos siglos antes había llegado Aristóteles, pero en esta ocasión utilizando su propia lógica basada en el 0 y el 1. Por ejemplo, si x-x = 0 y sacamos factor común tenemos que x(1-x)=0. Que en notación de conjuntos sería x INTERSECCION !x = conjunto vacío, es decir que nada puede pertenecer y no pertenecer al mismo tiempo a una clase determinada. Por ejemplo, una cosa no puede ser grande y al a vez ser pequeña. Esto lo denominó Aristóteles como principio de no contradicción. Este tipo de coincidencias animaron a Boole a seguir trabajando en su nueva lógica.

Se podría decir que el sistema lógico de Boole englobaba toda la lógica de Aristóteles pero iba también mucho más allá. Aunque aún quedaba mucho para construir para conseguir el sueño de Leibnitz. Hasta Boole la lógica no había avanzado prácticamente nada desde hacía dos milenios. Pero a partir de los trabajos de éste, la lógica no ha parado de evolucionar a pasos agigantados. Las reglas lógicas de Boole resultan adaptarse perfectamente a un comportamiento digital ya que trabajan con ceros y unos. Por lo que hoy en día la Lógica de Boole esta presente en nuestras vidas cotidianas ya que es la base del funcionamiento de cualquier aparato electrónico digital.

Estas notas sobre la historia de la informática están inspiradas en el libro La computadora Universal de Martin Davis que leí en la asignatura História de la informática impartida por nuestro colega blogero Jose Luis.

Para los interesados en la Lógica de Boole en la wikipedia, tenéis una pequeña introducción.

Vuestro nombre en Egipcio

Via Ephemera encuentro una web donde automáticamente transforma el texto que pongamos en un textbox a Jeroglíficos Egipcios.


Kirai escrito con jeroglíficos egipcios

En la escritura jeroglífica, aunque no lo parezca, cada símbolo representa un sonido, y no una palabra. Por ejemplo, el típico dibujo del halcón representa el sonido ‘A’, por eso aparece tantas veces.

Descubrir esto tan ‘simple’ supuso uno de los grandes problemas criptográficos de la historia que fue solucionado finalmente gracias a Champollion y la Piedra Roseta.

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?