Thomas Bayes

Leyendo un artículo en Minid en el que comenta que Mozilla incorpora un Filtro Bayesiano para filtrar el spam he recordado la impresionante labor de Thomas Bayes. Un matemático inglés que vivió desde 1702 hasta 1761, y desarrollo los fundamentos de la teoría probabilística a la cual hoy en día se le siguen obteniendo nuevas utilizadades.

Thomas Bayes presentó un ensayo sobre la teoría de la probabilidad y su famoso teorema a la Royal Society que se publicó en 1764. Tuvo un gran impacto en la época y de hecho Condorcet (Otro matemático) hizo descubrimientos parecidos sin conocer los textos de Bayes.

Pero realmente cuando más utilidad práctica se le está encontrando es en nuestros días de la era de la información. Sus herramientas matemáticas las usan los físicos con su mecánica cuántica, los telecos con sus señales, control de tráfico en redes etc. Y los informáticos lo usamos cada día sin darnos cuenta, cuando usamos google están actuando Bayes, cuando usamos nuestra cámara digital también actua Bayes, cuando usamos traductores automáticos, el diccionario de nuestro teléfono móvil, los filtros para el spam de nuestro lector de correo electrónico. En tareas de investigación se usa en visión artificial, sistemas expertos, reconocimiento de lenguaje natural etc.

Básicamente para hacer un filtro de spam lo que haríamos de forma directa sería mirar ciertas palabras que aparecen en los típicos correos basura, apuntarlas, y luego mirar si en cierto mail aparece o no la palabra. Esta técnica es un poco arriesgada porque eliminaría muchos mails que no fueran spam. Gracias a la probabilidad de Bayes, podemos utilizar probabilidades condicionadas, es decir podemos tener en cuenta también el contexto de una palabra. De esta forma un filtro hecho a lo «bestia» eliminaría todos los mails que tengan la palabra «sexo», esto podría cargarse algunos mails que no fueran de spam. Con un filtro Bayesiano tendríamos en cuenta el contexto por lo que vemos las cadenas en general, por ejemplo «mucho sexo gratis». Al ver esto el filtro bayesiano ve que la probabilidad de que un mail sea de spam conteniendo la palabra «gratis» condicionado a que esté la palabra «sexo» antes es muy alta y descartará el e-mail.

Otra ventaja de los filtros Bayesianos es que se pueden implementar como algoritmos incrementales. Esto quiere decir que va «aprendiendo» de nuestros gustos, va viendo que mails eliminamos como spam y cuales no para mejorar sus decisiones futuras.

¿No es increíble que Thomas Bayes se avanzara tanto a sus tiempos? ¿Que pensaría Bayes si le dijeramos que sus descubrimientos se están utilizando para eliminar correo basura?

Day of the Tentacle

Navegando por Tirando Líneas he descubierto ScummVM con el cual podemos rememorar muchos de los juegos clásicos de Lucas jugando desde cualquier plataforma; Linux, Windows, Mac etc.Veamos en que consiste el sistema Scumm según las palabras de Jacobo:

El DOTT es un juego de LucasArts, que utiliza el sistema SCUMM. Este sistema consiste en que, en lugar de estar hecho el juego en C o en ensamblador, está en un lenguaje especial que se ejecuta en una «máquina virtual». Esta máquina virtual, por supuesto, se proporcionaba con el juego. ScummVM es una máquina virtual de estas, que se pretende que sea capaz de ejecutar todos los juegos de LucasArts que usaron SCUMM.

Yo me he puesto a jugar al Day of the Tentacle, y después de 10 minutos me he divertido, he pensando, he viajado en el tiempo, he tenido tentaciones de dominar el mundo, me han puteado, me he reido, en definitiva he sentido todo un cúmulo de sentimientos que más quisieran conseguir muchos de los juegos actuales. Es genial volver a tumbar los altavoces para despegar el vómito falso de la pared, abrir la caja fuerte, volver a participar en el concurso de belleza etc.

Para mí es uno de los mejores juegos para PC de la historia en todos los aspectos. ¿Cual es vuestro videojuego favorito?

La programación es como la Jardinería

Ya hemos hablado aquí en otras ocasiones sobre el problema de encontrar una forma metódica de crear programas grandes que no fallen. Es un problema no resuelto y hay gente que está dedicando sus vidas a encontrar nuevos paradigmas y cambiar la forma de programar que tenemos, pero hay otra tendencia que consiste en resignarse y aceptar que la programación nunca será como la arquitectura o la ingeniería de caminos.

Dos de los ingenieros de java defienden esta última posición en su libro The Pragmatic Programmer. Pero también circula por internet una interesante entrevista a los autores dividida dos partes: Parte1 y Parte2.

Básicamete su argumentación es que cuando construyes un edificio tendrá el mismo aspecto que en el mapa del arquitecto y éste se queda practicamente inmutable en el mismo sitio durante años y años, solo tenemos que hacer una mínima manutención. Mientras que en un jardín plantamos las semillas y no podemos saber realmente cual será el aspecto final, debemos ir retocando contínuamente cada planta para que el jardín no se convierta en un caos. La verdad es que la metáfora del jardín se parece mucho más a mi día a día con la programación que el caso del edificio.

There is a persistent notion in a lot of literature that software development should be like engineering. First, an architect draws up some great plans. Then you get a flood of warm bodies to come in and fill the chairs, bang out all the code, and you’re done. A lot of people still feel that way; I saw an interview in the last six months of a big outsourcing house in India where this was how they felt. They paint a picture of constructing software like buildings. The high talent architects do the design. The coders do the constructing. The tenants move in, and everyone lives happily ever after. We don’t think that’s very realistic. It doesn’t work that way with software.

We paint a different picture. Instead of that very neat and orderly procession, which doesn’t happen even in the real world with buildings, software is much more like gardening. You do plan. You plan that you’re going to make a plot this big. You’re going to prepare the soil. You bring in a landscape person who says to put the big plants in the back and short ones in the front. You’ve got a great plan, a whole design.

But when you plant the bulbs and the seeds, what happens? The garden doesn’t quite come up the way you drew the picture. This plant gets a lot bigger than you thought it would. You’ve got to prune it. You’ve got to split it. You’ve got to move it around the garden. This big plant in the back died. You’ve got to dig it up and throw it into the compost pile. These colors ended up not looking like they did on the package. They don’t look good next to each other. You’ve got to transplant this one over to the other side of the garden.

¿Pensáis que la programación será siempre una disciplina como la jardinería o llegaremos algún dia a crear una disciplina ingenieril formal para crear software?

El sueño de Leibnitz

Leyendo Azogue me ha venido a la cabeza que todos sabemos quien inventó las bombillas, el teléfono etc. ¿Pero sabemos qué mentes humanas estuvieron detrás de la creación de ese ordenador que usamos todos los días? Una de las primeras personas en tener el concepto de computadora universal en mente fue Leibnitz hace 3 siglos.

El pensamiento humano llevaba miles de años preparándose para crear las computadoras, desde la época de Aristóteles e incluso Platón se filosofaba sobre la forma en que está estructurado el mundo y como se podría modelizar, creando los primeros sistemas lógicos. Posteriormente con Galileo y Copérnico la ciencia y la filosofía retomaron el camino dejado muchos siglos atrás, dentro de ésta corriente renovadora un joven llamado Leibniz tuvo un «sueño». Soñó con máquinas que fueran capaces de realizar cálculos, dejando libre así a la mente humana.

Leibnitz era un joven muy optimista pero sabía que su sueño no era fácil de conseguir. Empezó estudiando el sistema lógico que había construido Aristóteles dos milenios antes, quedó fascinado por la la división aristotélica de conceptos. A partir de esto Leibnitz quiso crear un alfabeto especial cuyos elementos representaran conceptos en vez de sonidos, un alfabeto mediante el cual se pudiera modelizar y explicar cualquier cosa. Estuvo aferrado a esta visión durante toda su vida y consiguió desarrollar en cierta medida gran parte del lenguaje simbólico que se utiliza aún hoy en día por los matemáticos.

En matemáticas es conocido por haber desarrollado el cálculo diferencial a la vez que Newton. Pero al contrario que éste, Lebnitz creó un simbolismo muy apropiado para poder trabajar con esta nueva disciplina. La notación de Newton ya no se utiliza debido a su gran complicación, en cambió hoy en día se usa la notación de Lebnitz. Seguramente consiguió este simbolismo tan apropiado gracias a su visión de querer crear un lenguaje simbólico universal.

En cuanto a las máquinas consiguió crear la primera máquina que además de sumar y restar podía multiplicar y dividir, defendió las grandes posibilidades en cuanto a ahorro de cálculos que se podría conseguir gracias a las máquinas. La máquina de Leibnitz plenamente mecánica, incorporaba un dispositivo llamado «volante de Lebnitz» que se ha seguido utilizando hasta bien entrado el siglo XX en las máquinas registradoras.

Relacionándolo también con los ordenadores actuales, trabajó y se quedó realmente asombrado al descubrir la potencia y simplicidad del sistema binario. Intentó descubrir propiedades ocultas en los números usando esta notación pero no lo consiguió.

El sueño de Leibnitz tenía tres componentes principales. La primera parte consiste en crear un compendio o enciclopedia que abarque la totalidad del conocimiento humano. Una vez hecho esto se puede pasar a la siguiente fase que consiste en escoger los conceptos clave subyacentes y dotar a cada uno de ellos de los símbolos adecuados. Para terminar las manipulaciones de estos símbolos se podrían reducir a reglas de deducción, que es lo que Leibnitz denominó como Calculus Ratiocinator y que hoy en día conocemos como lógica simbólica. Como se puede ver este es un proyecto enorme el cual Leibnitz no pudo llevar a cabo en vida debido a sus ocupaciones extra a cargo del duque Ernesto Augusto. Pero lo importante es que sentó las bases de unas ideas que guiarían a los matemáticos y a la ciencia en general durante los siglos venideros. Podríase decir que los ordenadores actuales han hecho que se cumpla el sueño de Leibnitz.

Curso de fotografía

Estoy asistiendo a un cursillo de iniciación a la fotografía. La verdad es que he hecho miles de fotos con mi cámara digital sin tener ni idea, así que estoy aprendiendo muchas cosas sobre iluminación, encuadre, planos etc. para poder hacer fotos algo más decentillas. Os dejo que opinéis sobre las fotos que he sacado después de 2 días de cursillo usando una camara de 3 megapixels de Fuji que me ha dejado mi compañero de piso .



Haced click en las imágenes para verlas ampliadas

Las fotos están sacadas en el Campus de la Universidad de Alicante

Azogue de Neal Stephenson

Ya tengo el primer libro de Azogue del creador de la serie Criptonomicón. Traducido por Pedro Jorge Romero y ya comentado por él en un post. Por cierto, impresionante la traducción.

Cuenta los comienzos de la creación de Criptonomicón la cual es la protagonista de los anteriores libros del mismo autor. Pero yo destacaría más que la acción de la novela transcurre en la época de Leibnitz, Newton, John Wilkins etc. El autor sabe reflejar el ambiente de la época a la perfección y nos hace sentirnos al lado de estos grandes genios. Son unos tiempos donde se forjan las primeras ideas en cuanto al concepto de computación, el auge de la alquimia, la física de Newton, la batalla del Cálculo, la importancia de la codificación y el criptoanálisis para controlar los movimientos del enemigo.
Realmente apasionante, recomendable para todos los amantes de la criptografía, la ciencia en general, y también a los geeks y los no geeks 🙂 Para todos.