Archive

Archive for May, 2007

20:20 talk on hardware hacking for software people

May 19th, 2007

I just got back from XTech 2007 in Paris. It was an excellent conference this year and I’m really proud of having contributed in a small way by being on the programme committee. Every year the speaker lineup gets better and better.


The theme this year was ‘The Ubiquitous Web’. HTTP isn’t just for computers any more, and I’m particularly interested in how developers like me can learn to make their own network-connected objects in the real world. To spread the word, I gave a lightning talk on my experiences with the Arduino hardware hacking boards and other toys from tinker.it.

I put the slides on SlideShare.

English

20:20 talk on hardware hacking for software people

May 19th, 2007

I just got back from XTech 2007 in Paris. It was an excellent conference this year and I'm really proud of having contributed in a small way by being on the programme committee. Every year the speaker lineup gets better and better.

The theme this year was 'The Ubiquitous Web'. HTTP isn't just for computers any more, and I'm particularly interested in how developers like me can learn to make their own network-connected objects in the real world. To spread the word, I gave a lightning talk on my experiences with the Arduino hardware hacking boards and other toys from tinker.it.

I put the slides on SlideShare.

Permalink

Uncategorized , ,

LOS HABITANTES DE LA WEB SEMÁNTICA: AGENTES, AGENTES INTELIGENTES Y AGENTES SEMÁNTICOS

May 8th, 2007
Como sucede con toda nueva rama del conocimiento, existe bastante confusión en cuanto al vocabulario de las tecnologías semánticas. En este artículo me centro en explicar qué se entiende por agente, agente inteligente y agente semántico, términos que aparecen casi siempre que se habla de la Web semántica. A fin de resaltar las semejanzas y diferencias entre ellos, usaré definiciones y ejemplos.

Si consultamos el diccionario de la Real Academia Española, veremos que agente significa "Persona que obra con poder de otra". Si actualizamos un poco la definición ("Programa o máquina que obra con poder de una persona o de otro programa o máquina"), tendremos una primera idea de lo que se entiende por agente en ingeniería.

En general, se acepta que un agente es cualquier sistema capaz de percibir cambios en su entorno, de representar de algún modo la información sobre el estado actual de sus objetivos y de actuar sobre su entorno basándose en éstos y en experiencias pasadas. Cuando se consideran entornos virtuales (la Web, intranets, etc.), se habla de agentes de software; en entornos físicos, los agentes pueden ser animales, personas, robots o autómatas. Por ejemplo, el vehículo Mars Pathfinder –que recorrió la aherrumbrada superficie de Marte durante varios meses de 1997– era un agente en un entorno físico bastante agresivo para la vida humana.

Ejemplo de agente fsico

En lo que sigue consideraré únicamente agentes de software, no robots ni autómatas. Según Michael Wooldridge, un agente es un sistema de software capaz de actuar autónoma y flexiblemente en un entorno cambiante. Para Gerhard Weiss, un agente es una entidad computacional que percibe y actúa autónomamente en su entorno. Ambas definiciones coinciden en que los agentes gozan de cierta libertad de actuación en su entorno; es decir, no se limitan a efectuar ciertas tareas siempre de la misma forma, sino que tienen sus propias “ideas” sobre cómo alcanzar sus objetivos. Perdóneme el lector o la lectora por personificar a los agentes: les entristece mucho que los traten como programas o subrutinas.

Según Jeffrey Bradshaw, las principales características de los agentes son éstas (no todas son obligatorias y algunas pueden darse en mayor o menor grado):

  • Persistencia: El código de un agente se ejecuta continuamente, no cuando el usuario lo decide, y decide por sí mismo cuando deje ejecutar alguna acción. Los agentes siempre permanecen activos: se ejecutan en un bucle infinito y observan su entorno, actualizan su estado y determinan qué acciones realizar. Se comportan como buitres (siempre mirando, siempre esperando a que llegue el turno de actuar), pero sin sus siniestras intenciones.
  • Autonomía: Un agente puede tomar decisiones sin la intervención humana o de otros agentes. Es decir, para cumplir sus objetivos, un agente controla sus propias acciones.
  • Reactividad: Un agente es capaz de percibir su entorno y mantener un vínculo constante con él, de modo que puede responder adecuadamente a los cambios. Los agentes más reactivos tienen en cuenta la posibilidad de que se produzcan fallos o de que las cosas no vayan como se esperaba.
  • Proactividad: Un agente no actúa dirigido solamente por los sucesos que se producen en su entorno, sino que también toma iniciativas para lograr sus objetivos. Es decir, los agentes reconocen y utilizan las oportunidades que se les presentan. Las iniciativas pueden proceder de experiencias pasadas, pues los agentes aprenden del pasado.
  • Habilidad social: Un agente constituye una entidad social integrada en una sociedad, en la cual hay tareas, recursos y papeles que se distribuyen entre los agentes. Algunos objetivos sólo se pueden conseguir mediante la colaboración con otros agentes o con humanos.

Como los agentes son programas, ¿debemos concluir que los programas son también agentes? Para contestar a la pregunta, consideremos un programa conversor de euros a francos suizos. El programa funciona así: cada vez que un usuario ejecuta el programa, éste se conecta por Internet a los mercados de divisas, extrae el tipo de cambio –que fluctúa constantemente– y lo presenta por pantalla. El programa es, en cierto sentido, consciente de su entorno porque devuelve una salida (un tipo de cambio) tras recibir una entrada (la ejecución del programa) y porque se conecta a los mercados de divisas. Sin embargo, no es un agente: su salida actual no afecta a sus futuras salidas; dicho de otro modo, no tiene “memoria” de sus actos ni puede aprender de ellos. Además, el programa carece de persistencia: sólo permanece activo un tiempo muy breve; una vez que devuelve el tipo de cambio, se vuelve inactivo. Vemos, en definitiva, que no todos los programas son agentes.

Muchas personas piensan que los agentes no son más que objetos con algunas funciones añadidas; según ellos "un agente es un objeto que… [aquí añaden sus características favoritas]". Otros van más lejos: afirman que la única diferencia entre ellos radica en que "agente" es una palabra de moda, como en su día lo fue "objeto". (Si desea saber más sobre objetos, clases y la programación orientada a objetos, puede consultar http://www.javahispano.org/tutorials.item.action?id=25 y http://www.javahispano.org/tutorials.item.action?id=33). Existen ciertas semejanzas entre objetos y agentes: en primer lugar, se caracterizan por su estado y por su comportamiento; en segundo, se comunican entre sí mediante mensajes.

Con todo, también hay diferencias entre unos y otros. Primera: los objetos no tienen ningún control sobre sus acciones, que están determinadas desde su creación; por el contrario, los agentes las controlan para cumplir sus objetivos. Éstos pueden tener un comportamiento impredecible. Por ejemplo, si se pide a un agente que compre algún CD barato en alguna tienda, cualquier resultado es posible: el agente podría volver con Power, Corruption and Lies de New Order o con un CD de cantos hindúes del siglo V antes de Cristo, o sin nada. A diferencia de los objetos, los agentes pueden decir "no" (es más, algunos gozan con eso).

Segunda diferencia: los agentes gozan de más autonomía y flexibilidad que los objetos, tan esclavos ellos. Como las clases definen los métodos y atributos como públicos o privados, los objetos (instancias de las clases) no pueden cambiar la visibilidad de métodos y atributos. Si el método dispararFlecha de un objeto arcoOlímpico es público, el objeto no puede impedir que otros objetos lo usen. Un agente, en cambio, sí podría impedir que otros agentes usaran su dispararFlecha (volviéndolo privado, p. ej.), siempre que eso favoreciera sus objetivos.

Tercera diferencia: tal como se mencionó antes, los agentes siempre están activos (vigilan su entorno, actualizan su estado y determinan qué acciones son apropiadas); los objetos vienen a ser muertos a tiempo casi completo, porque sólo “viven” (están activos) cuando sus métodos son llamados por otros objetos.

Cuarta y última diferencia: los objetos jamás se equivocan (en todo caso, se equivocan quienes los programan), mientras que los agentes puede tomar decisiones equivocadas e incluso aprender de sus errores pasados. Si un objeto tiene un método calcularIVA que aplica un porcentaje equivocado (14% en lugar de 16%, verbigracia), el objeto nunca aprenderá nada de ese error, pues ya nació –mejor dicho, se instanció– con él.

Diferencias entre agentes y objetos


Suele usarse el término agente inteligente para referirse a agentes dotados de cierta inteligencia artificial y que, por tanto, gozan de un alto grado de autonomía, reactividad, proactividad y habilidad social. El concepto de inteligencia resulta sumamente escurridizo: algunos investigadores piensan que las máquinas nunca alcanzarán una inteligencia como la humana. En apoyo de esta opinión acude este hecho: el sentido común resulta más difícil de reproducir que cualquier habilidad técnica. Otros investigadores piensan en la inteligencia como un fenómeno emergente (los fenómenos emergentes son propiedades de un sistema complejo que no pueden reducirse a las propiedades de sus partes constituyentes). En consecuencia, piensan que la inteligencia podría alcanzarse, en principio, a partir de partes constituyentes no biológicas. Para no entrar en discusiones que llevan ocupando a los filósofos desde hace siglos, empleo el término inteligencia para denotar la capacidad de adaptarse al medio y de aprender (es decir, descubrir información). Hasta el más escéptico en cuanto a las posibilidades de la inteligencia artificial coincidirá conmigo en que existen ya programas que permiten descubrir información mediante asociaciones y búsqueda de patrones.

Según Barbara Hayes-Roth, los agentes inteligentes realizan continuamente tres funciones: perciben las condiciones cambiantes del entorno; actúan para modificar las condiciones del entorno; y razonan para interpretar percepciones, resolver problemas, extraer inferencias y determinar acciones.

Algunas personas usan agente inteligente como sinónimo de agente, cuando en realidad un agente no tiene por qué tener "inteligencia" (piénsese en un cliente de correo, p. ej.). Otras reservan agente inteligente para los agentes que contienen planificaciones, calendarios, reglas, etc. Se suele emplear el término bot (abreviatura de robot) para los agentes que, siguiendo reglas estrictas e invariables, realizan tareas repetitivas: buscar productos, rellenar cuestionarios, mostrar noticias sobre un determinado asunto… Los bots usados por los buscadores de información –Google, Yahoo, MSN Search– para construir sus bases de datos se denominan arañas.

Los agentes inteligentes suelen relacionarse con los sistemas expertos. Un sistema experto es un programa que intenta imitar el comportamiento de un experto en un dominio concreto. Por ejemplo, un sistema experto en medicina podría, a partir de los síntomas del enfermo, emitir diagnósticos. Los agentes difieren de los sistemas expertos en dos aspectos esenciales: primero, éstos no interaccionan con el entorno; segundo, los agentes suelen desarrollarse con la intención de colaborar con otros agentes, mientras que los sistemas expertos no colaboran ni intercambian información entre ellos.

Dar una clasificación completa de los agentes es tarea harto compleja; pues cada autor suele proponer su propia clasificación, a menudo tan discutible como cualquier otra. Los agentes pueden clasificarse según su movilidad (estáticos, dinámicos), según si son deliberativos (contienen modelos simbólicos de su entorno y reglas de razonamiento) o reactivos (no poseen modelos simbólicos de su entorno y, por tanto, actúan siguiendo el esquema estímulo-respuesta), según las tareas que desempeñan, las características que predominan, etc. Hyacinth S. Nwana clasifica así los agentes: agentes colaboradores, agentes de interfaz, agentes móviles, agentes de información, agentes reactivos, agentes híbridos y sistemas heterogéneos de agentes.

Si consideramos como criterio de clasificación las tareas que desempeñan los agentes, existen muchos tipos de agentes. Los más conocidos están vinculados al comercio electrónico: los agentes de compra comparativa se encargan de localizar mercancías al mejor precio posible; los de subasta permiten a los usuarios pujar por una mercancía o bien; los de negociación automatizan los procesos de negociación habituales en las transacciones comerciales. En general, en casi cualquier dominio pueden usarse agentes. Por ejemplo, el proyecto Guardian (http://ksl-web.stanford.edu/projects/guardian/) desarrolló un agente inteligente para monitorizar a los pacientes de las unidades de cuidados intensivos. Este agente permite, entre otras cosas, controlar constantemente el estado de los pacientes, definir los tratamientos y cuidados necesarios a corto y largo plazo, así como diagnosticar posibles enfermedades y complicaciones. Debido a lo delicado de su tarea, el agente reacciona rápidamente a cualquier modificación del estado del paciente.


Los sistemas multiagente son sistemas distribuidos de software formados por un conjunto de agentes autónomos (nodos) que trabajan juntos para resolver problemas. Asignándose tareas unos a otros y colaborando, los agentes pueden solucionar problemas que serían irresolubles para un agente aislado. En un sistema multiagente no hay un control global del sistema ni un lugar donde esté toda la información. La "inteligencia" de un sistema multiagente puede obtenerse de dos maneras. En primer lugar, mediante el uso de agentes inteligentes para el sistema. En segundo lugar, usando agentes reactivos (como expliqué antes, son aquellos que reaccionan siguiendo el esquema conductista: estímulo-respuesta). En este caso, la inteligencia colectiva del sistema es un fenómeno emergente.

Las enormes posibilidades de los sistemas multiagente se vislumbran en Robocup Rescue (puede encontrarlo en http://www.rescuesystem.org/robocuprescue/), un sistema multiagente que simula la respuesta de los equipos de rescate a cualquier desastre natural (un terremoto, por ejemplo). La simulación consiste en la reconstrucción fotográfica de un desastre y, luego, en manejar un conjunto de agentes inteligentes (que hacen el papel de víctimas, policías, bomberos, etc.) en ese entorno. El objetivo de Robocup Rescue consiste, por un lado, en reducir al mínimo los daños en el mundo virtual que sufre el desastre; y, por otro, en sacar de la simulación conclusiones que puedan aplicarse en el mundo real a la coordinación de equipos de rescate. La complejidad de Robocup Rescue es ingente, por cuanto maneja situaciones como rescatar personas atrapadas en edificios en ruinas, en llamas o inundados. RoboCup Rescue es también una competición: los participantes construyen sus propios agentes y compiten por reducir al mínimo los efectos de los desastres naturales.

Existen muchas plataformas para crear agentes e interconectarlos: IBM Aglets, ZEUS, JADE (Java Agent Development Framework), ABLE, MadKit, JATLite (Java Agent Template Lite), Grasshopper, AgentBuilder, FIPA-OS, Concordia, Gossip, FarGo, Voyager. Si usted no tiene experiencia en agentes y desea probar alguna plataforma, le recomiendo empezar con AgentBuilder (http://www.agentbuilder.com/Documentation/product.html). Es un conjunto integrado de herramientas que permite desarrollar agentes inteligentes y aplicaciones basadas en ellos, sin necesidad de programar (la versión PRO permite desarrollar también aplicaciones multiagente). Recomiendo esta solución comercial porque me parece una de las más sencillas y rápidas para quien carezca de experiencia en el desarrollo de agentes. JADE y ABLE son más potentes que AgentBuilder, pero también son más complejas de usar.

ZEUS (http://labs.bt.com/projects/agents/zeus/) es una herramienta para desarrollar sistemas multiagente. Es una herramienta educativa y no necesita conocimientos de programación. Tanto las ontologías como los agentes se crean mediante asistentes visuales, como sucede con AgentBuilder. Al final del proceso de creación de los agentes, ZEUS genera código fuente escrito en Java. Como Java es un lenguaje multiplataforma (véase, por ejemplo, http://www.javahispano.org/articles.article.action?id=55), el código compilado puede ejecutarse en las plataformas más habituales (una plataforma es una combinación de hardware y software que permite ejecutar aplicaciones; por ejemplo, Microsoft Windows/Intel x86 es la plataforma más común). En consecuencia, con ZEUS pueden construirse sistemas multiagente donde un agente "viva" (perdón, resida) en un PC con Linux, otro en un Macinstosh con Mac OS X, un tercero en una estación de trabajo UNIX…


Los agentes semánticos son agentes que usan tecnologías de la Web semántica (RDF/RDFS, OWL, ontologías) para cumplir sus objetivos. Puede obtener una descripción de tales tecnologías en http://www.javahispano.org/tutorials.item.action?id=55. Debido a que todavía no existe una Web semántica, no hay agentes semánticos que puedan aprovechar sus posibilidades. Existen, sin embargo, agentes semánticos que operan sobre dominios muy específicos (intranets de empresas, por ejemplo); y también hay algunos agentes semánticos que actúan como buscadores de información o como asistentes personales. Por ejemplo, el navegador Amblit Navigator (http://www.amblit.com/products/AmblitNavigator.html) incluye un asistente (Intelligent Personal Agent) al que se le puede enseñar qué desea el usuario y cuándo lo desea.

Este agente admite preguntas como las siguientes: ¿Cuál es la cotización de Endesa? ¿Qué tiempo hará en París la próxima semana? ¿Cuál es el número de teléfono de María Senso Huertas? También se le pueden dar órdenes del tipo "Búscame un mapa de Hannover" o "Averigua dónde puedo encontrar la película Les 400 coups". Para entender miles de sentencias en lenguaje natural, el agente semántico de Amblit se apoya en una ontología y en un software de comprensión del lenguaje natural. Este software "traduce" las preguntas u ordenes en texto libre a conceptos de la ontología (puede encontrar más información sobre ontologías en http://www.wshoy.sidar.org/index.php?2005/12/09/30-ontologias-que-son-y-para-que-sirven).

Ejemplo de agente semántico del tipo agente personal


Para mostrar las posibilidades de los agentes semánticos, considero el siguiente ejemplo: Heliodoro Gómez ha puesto en marcha una tienda de lámparas en su barrio. Se acerca la hora de hacer el primer pago fraccionado del IRPF y no sabé qué impreso usar ni cómo calcular el rendimiento neto empresarial. Preocupado por hacer mal las cosas y recibir luego una simpática carta de Hacienda, Heliodoro ha decidido usar un agente semántico para encontrar un asesor contable y fiscal. Para ello, se conecta a la Web semántica y elige un agente personal que parece fiable.

Escribe en un cuadro de texto "Busco asesor contable y fiscal (cerca de la calle Arboleda, en Soria). Quiero que sea barato y bueno", y el agente se pone en marcha. Primero obtiene una lista de todos los asesores que están a menos de dos kilómetros de la calle Arboleda; luego, para comprobar la calidad de cada uno, investiga si tienen reclamaciones de clientes, quejas ante los colegios profesionales o denuncias. A continuación, busca los que tienen tarifas bajas. Finalmente, selecciona a dos asesores y se los propone a Heliodoro.

A éste no le gusta ninguno de los dos. Uno no es todo lo barato que Heliodoro desearía, y el otro no puede atenderle hasta dentro de dos semanas (está de viaje de novios). Decepcionado con los resultados, Heliodoro escribe a su agente semántico: "Mira otras opciones". El agente repite el trabajo que había hecho, pero no encuentra más asesores que cumplan las condiciones del usuario. Entonces prepara una lista de los asesores cercanos a la calle Arboleda y de buena reputación, independientemente de que sean caros o baratos; acto seguido, contacta con los agentes semánticos de esos asesores para intentar negociar una reducción de las tarifas que aplican. Sólo uno acepta la reducción. Tras una rápida negociación entre agentes, la reducción se fija en un 20% (con la condición de que el cliente pagará cada trimestre de asesoría por anticipado y al contado).

El agente muestra a Heliodoro los datos del asesor elegido y la tarifa que ha quedado establecida. Heliodoro desconfía de la tarifa, porque le parece demasiado barata, y le pregunta a su agente: ¿Cómo has negociado la tarifa? ¿Cómo sabes que ese asesor es bueno? El agente, dotado de paciencia infinita, le proporciona pruebas de todo (para saber más sobre estas pruebas, puede consultar http://www.wshoy.sidar.org/index.php?2007/01/30/37-la-web-semantica-metadatos-ontologias-logica-y-confianza). Contento por ahorrarse un dinerillo, Heliodoro cierra su agente personal y se levanta del ordenador. Mientras se prepara un café, piensa en la Web semántica: "Es buena idea esto de la nueva Web. ¡Y pensar que hace diez años parecía ciencia-ficción! Hasta me están cayendo simpáticos los bichos esos, los agentes".

Spanish

ApacheCon Europe 2007 keynote

May 7th, 2007

Last Friday I had the great privilege of giving a keynote talk at the ApacheCon Europe conference in Amsterdam. My topic was the new possibilities for software hackers coming from cheap, scriptable hardware prototyping. I illustrated the path from the desktop via my work in Second Life, and showed how it translates into physical computing.


I made a recording of the audio from the talk on my laptop’s microphone, and I’ve synchronised it with video of the slides in this Flash movie:

If you prefer, there’s also the audio-only MP3.

English

ApacheCon Europe 2007 keynote

May 7th, 2007

Last Friday I had the great privilege of giving a keynote talk at the ApacheCon Europe conference in Amsterdam. My topic was the new possibilities for software hackers coming from cheap, scriptable hardware prototyping. I illustrated the path from the desktop via my work in Second Life, and showed how it translates into physical computing.

I made a recording of the audio from the talk on my laptop's microphone, and I've synchronised it with video of the slides in this Flash movie:

If you prefer, there's also the audio-only MP3.

Permalink

Uncategorized , , ,