May 2008 - Posts
La gente de Google y www.androidcommunity.com están trabajando duro en el dispositivo Android. En estos días liberaron algunos videos de la nueva versión, mejorada con respecto al prototipo que habían presentando antes en el año:
Vean que tiene que competir con el iPhone de Apple. Es interesante ver cómo el avance del hardware y la mejora en los costos permite incorporar pantallas sensibles al tacto como nueva forma de interacción. Un dato menor: me llamó la atención el sistema de ingreso, que pide "dibujar" con el dedo un esquema que sirve como contraseña.
Más videos del nuevo dispositivo en:
http://androidcommunity.com/first-live-images-of-fullscreen-android-demo-20080528/
En cuanto a Microsoft, también tiene previsto soporte multi-touch en lo que se llama Windows 7:
Microsoft demonstrates multitouch
Veo que tendrá soporte de API para detectar más de un punto tocado (lo que hará aparecer nuevas formas de interactuar, más allá del apuntar del mouse actual).
Se realizó la conferencia del Wall Street Journal “D: All Things Digital” conference y ahí hubo una entrevista a Bill Gates y Steve Ballmer. Un resumen comentado en:
Slow Dissolve: Bill and Steve at the D Conference
Es interesante cómo se prepara la "partida" de Gates. Durante esa entrevista se presentaron las características de Windows 7 destacando el multi touch.
Parece que este tipo de interfaces han llegado para quedarse. Si llegó a iPhone, y ahora a Google y Microsoft, es que todo está preparado para su aceptación.
Varios de estos enlaces, provistos por los feeds de tweeter:
@parancibia
@timoreilly
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
En estas últimas semanas he comenzado a usar los servicios de
http://www.twitter.com/
Es algo extraño al principio, pero ahora lo uso diariamente, de forma que me resulte útil. Para los que no vieron el sistema, pueden ver un video explicativo:
Podría enviar este post a mi blog no técnico, pero sospecho que por estos lares, es más probable que resulte útil twitter para "hard die geek developers" como nosotros. Gracias a haber usado este sistema en las últimas semanas, he estado al tanto de algunas actividades de gente que conozco, pero está lejos, o de gente que trabaja conmigo, pero que no estamos en contacto frecuente.
También es útil para seguir las andanzas de gente conocida, aparte de leer sus blogs, desde Ayende Rahien a Tim O'Reilly, a Jeff Atwood, aMartín Salías, a Scott Hanselman, a Miguel de Icaza, a Daniel Cazzulino, a Eduardo Jeziersky, a... (unos cientos más...)
Bueno, si a alguien le interesa que va pasando en mis tareas, pueden consultar
http://twitter.com/ajlopez
Uso como sistema consolidado (anuncios de nuevos posts, enlaces tagueados en Delicious, mensajes twitters...) a
http://friendfeed.com/ajlopez
Gracias a Ezequiel Jadib, por el enlace al video
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
Hace unas semanas, escribí una aplicación tipo Scribble distribuido usando DSS. A fin de la semana pasada, escribí otra aplicación, para aprender conceptos de DSS: una aplicación que visita y baja páginas web de un sitio, con servicios DSS coordinados desde Visual Programming Language (VPL). Hay un programa VPL adicional que lee una página web, usando un control Texto to Speech. Pueden bajarse el ejemplo desde mis carpetas en Skydrive:
DssWebCrawler2008May.zip
La solución
Está compuesta de tres proyectos: un assembly DSS, uno de librería de clases con algunos utilitarios para analizar contenido HTML, y una librería de clases para hacer testint del parser HTML. La librería de test usa NUnint: pueden removerla de la solución, si quieren, porque sólo es usada para testing, no para la solución final.
El assembly que usa DSS assembly se llama DssWebCrawler. Definí ahí 5 servicios DSS:
Dispatcher: Recibe una URL inicial para bajar, y la envía al Resolver.
Resolver: Este servicio mantiene una lista de URLs visitadas, y controla si las nuevas URLs a bajar son válidas, que pertenezcan al mismo dominio, y que no hayan sido ya procesadas. Está limitado por código a explorar hasta 3 niveles de enlaces.
Downloader: Este servicio lee el contenido de una URL. El contenido obtenido es parte del mensaje de respuesta.
Harvester: Examina el contenido recibido y recolecta nuevas URLs de los enlaces que encuentra dentro. Para cada uno de esos enlaces, envía una notificación a cualquier servicio interesado en esa información.
Reader: Usa el simple parser HTML que escribí para el proyecto. Puede obtener el título de una página, o el contenido, descartando tags de HTML y scripts.
The VPL Program
Hay un program VPL (Visual Programming Language), llamado VPLWebCrawler. Consiste en tres diagramas. El primero define el envío de la primer URL a bajar:
El segundo define el proceso de notificación de nuevas URLs encontradas por el componente Harvester:
El tercer diagrama es un "plus": procesa las notificaciones del Downloader, informando nuevo contenido, lo examina, y envía el título de la página bajada a un componente Text to Speech:
Para lanzar la aplicación, ir al menú Run -> Start . Aparece una ventana, pidiendo de ingresar la URL de la página para comenzar a "crawlear":
Comienza el proceso de "crawling":
Despues de algunos segundos, los títulos de las páginas bajadas son enviados al servicio Texto to Speech: escucharemos el proceso de cada página.
Leyendo páginas
En otro programa VPL, el VPLWebReader, podemos leer "en voz alta" el contenido de una página web, usando el componente Text to Speech:
Es interesante ver que estamos usando los mismos componentes que en el anterior ejemplo. Pero usando composición VPL, podemos usarlos para otros programas.
Pueden usarlo para leer mis experimentos en "Anglish" (Angel's English) apuntando a http://ajlopezen.zoomblog.com.
Conclusiones
Los componentes fueron escritos para ser usados desde orquestración de VPL. No tienen "partners", ni conexiones directas entre ellos. Esta es ua nueva manera de programar: definimos nuestros mensajes de entrada y de respuesta, y luego los usamos desde VPL. La posibilidad de usar notificaciones es algo interesante: se puede usar para usar la misma salida en diferentes componentes destinos.
Podemos jugar un poco más: pruebe de colocar algunos de estos componentes en otro nodo/máquina, usando las nuevas capacidades de "deployer" automático desde VPL.
Espero que encuentren este ejemplo útil: me divertí escribiéndolo, hay más aplicaciones que quisiera pasar a código usando estas tecnologías.
Gracias a Fernando Tubio, por sus ideas iniciales para implementar un web crawler.
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com
Hoy voy a presentar en el RAF 2008 del Cono Sur, en Pilar, Buenos Aires, conceptos y demos de Microsoft Robotics Developer Studio. Como la semana pasada, voy a usar como base una versión reducida de la presentación de Arvindra Sehmi:
A Data-Driven Approach to Distributed, Concurrent Software - ASEHMI - April 2008.pptx
Esta vez, la charla estará más centrada en las capacidades de armar aplicaciones distribuidas, y analizar el modelo de servicios que ofrece. Es un poco difícil explicar algunos de los conceptos claves sólo en 50 minutos, pero espero que pueda marcar que estas herramientas son para más allá de robótica.
Para más información sobre Microsoft Robotics, visitar:
http://www.microsoft.com/robotics
Ejemplos presentados por Arvindra Sehmi en su RAF México:
CCRBasics.rar
En estos días escribí un ejemplo de uso de DSS, para implementar un Web Crawler:
Web Crawler example using DSS (Decentralized Software Services)
Ya vendrá el post correspondiente en español.
Un ejemplo anterior:
Distributed Scribble with Microsoft Robotics Developer Studio and DSS
Varios de los ejemplos que presento, están incluidos en el propio producto. El año pasado estuve implementando AjMessages usando DSS/CCR, pero todavía no tengo algo publicado. Para un cliente, estoy desarrollando una aplicación distribuida, configurable, usando todas estas tecnologías, espero que quede publicada, para poder bloguear sobre el tema.
Para una detallada explicación de CCR, leer:
MSDN Mag - Concurrent Affairs - Concurrency and Coordination Runtime
Concursos, desafíos, videos explicativos, desde el nuevo sitio
http://www.robochamps.com/
He dejado enlaces sobre estos temas en:
http://del.icio.us/ajlopez/dss
http://del.icio.us/ajlopez/ccr
http://del.icio.us/ajlopez/robotics
http://del.icio.us/ajlopez/msrs
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
Hoy voy a estar presentando esta tecnología en la Universidad Tecnológica Nacional, de La Plata, provincia de Buenos Aires. Página base en:
http://www.microsoft.com/robotics
Es una de las conferencias del
Congreso Nacional de Estudiantes de Ingeniería en Sistemas de Información
Mi conferencia es
Microsoft Robotics Studio
Uso una versión resumida de la presentación del bueno de Arvindra Sehmi, que pueden bajar completa de:
La idea es mostrar, en dos horas, las ideas principales en las que se basa:
- Decentralized Software Services
- Concurrent and Coordination Runtime
- Visual Programming Language
- Simulation Environment
- Robots simulados
- Soporte de la industria
Es muy fácil de instalar, y la última versión funciona y se maneja desde Visual Studio 2005 o 2008.
Más información sobre estas tecnologías en
http://www.robochamps.com
http://del.icio.us/ajlopez/robotics
http://del.icio.us/ajlopez/dss
http://del.icio.us/ajlopez/ccr
Tengo algunos ejemplos a publicar, con CCR y DSS. Ya vieron algunos en:
Genetic Algorithms with AjAgents and Concurrency and Coordination Runtime (CCR)
Distributed Scribble with Microsoft Robotics Developer Studio and DSS
Agents using Concurrency and Coordination Runtime (CCR)
Artículo introductorio a CCR en
Concurrent Affairs- Concurrency and Coordination Runtime
Espero repetir esta charla en otros lugares, como el MUG de Argentina o el Club de Programadores. La semana que viene doy una charla sobre el mismo tema, pero más orientada a aplicaciones distribuidas, en el Regional Architect Forum 2008 de Cono Sur. Algo más sobre grid computing en varios artículos:
http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx
Todo lo de Microsoft Robotics Developer Studio se puede aplicar para eso.
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
ATENCION, actualización: no sé cuál es el estado legal de este sitio, ver
http://www.pdfchm.com/terms/
donde se amparan en legislación de Rusia. ¿Alguien tiene información al respecto? ¿Enlaces de "complaints" de las editoriales? No encontré nada... No sé como usan www.postget.net como repositorio, sin que nadie les diga nada....
Mientras, alguien preguntó en Yahoo Answers, sobre sitios como éste:
http://answers.yahoo.com/question/index?qid=20070904044624AANWDPf
Sigue por ahora el post original:
Desde hace unas semanas estoy usando los servicios de
http://www.pdfchm.com
Hay de otros temas, pero en mi perfil, aparecen "computer books" de todo tipo. Semanalmente, me envían por email una lista de novedades, estas son las de esta semana:
Dear Angel Lopez.
You have received this letter because are signed on subscription.
In the text presented below, weekly news of the site www.pdfchm.com according to your current subscription:
Neural Networks and Pattern Recognition (Academic Press, 1998, English)
http://www.pdfchm.com/book/?book=10823
Scaling Software Agility: Best Practices for Large Enterprises (The Agile Software Development Series) (Addison Wesley, 2007, English)
http://www.pdfchm.com/book/?book=10826
Beginning VB 2008 Databases: From Novice to Professional (Apress, 2008, English)
http://www.pdfchm.com/book/?book=10806
Google Maps Mashups with Google Mapplets (Firstpress) (Apress, 2008, English)
http://www.pdfchm.com/book/?book=10797
Packet Forwarding Technologies (Auerbach Publications, 2007, English)
http://www.pdfchm.com/book/?book=10800
Full Frontal PR: Getting People Talking about You, Your Business, or Your Product (Bloomberg Press, 2003, English)
http://www.pdfchm.com/book/?book=10831
Putting Investors First: Real Solutions for Better Corporate Governance (Bloomberg Press, 2003, English)
http://www.pdfchm.com/book/?book=10830
The Value Factor: How Global Leaders Use Information for Growth and Competitive Advantage (Bloomberg Press, 2004, English)
http://www.pdfchm.com/book/?book=10832
What Can You Do with a Major in Biology: Real people. Real jobs. Real rewards (Cliffs Notes, 2005, English)
http://www.pdfchm.com/book/?book=10816
What Can You Do with a Major in Business: Real people. Real jobs. Real rewards (Cliffs Notes, 2005, English)
http://www.pdfchm.com/book/?book=10817
DVD Authoring and Production (CMP Books, 2001, English)
http://www.pdfchm.com/book/?book=10827
Multiplayer Game Programming w/CD (Prima Tech's Game Development) (Course Technology PTR, 2002, English)
http://www.pdfchm.com/book/?book=10822
Renaissance and Reformation: Almanac Edition 1. (Gale, 2002, English)
http://www.pdfchm.com/book/?book=10803
Working Identity: Unconventional Strategies for Reinventing Your Career (Harvard Business School, 2003, English)
http://www.pdfchm.com/book/?book=10801
Linux Transfer for Windows Power Users: Getting Started with Linux for the Desktop (Hentzenwerke Publishing, 2004, English)
http://www.pdfchm.com/book/?book=10824
Genetic and Evolutionary Computation for Image Processing and Analysis (EURASIP Book Series on Signal Processing and Communications) (Hindawi Publishing, 2008, English)
http://www.pdfchm.com/book/?book=10836
Good Cat!: A Proven Guide to Successful Litter Box Use and Problem Solving (Howell Book House, 2004, English)
http://www.pdfchm.com/book/?book=10821
IBM Pseries Sizing And Capacity Planning: A Practical Guide (IBM Redbooks) (IBM Press, 2004, English)
http://www.pdfchm.com/book/?book=10839
The Edgar Online Guide to Decoding Financial Statements: Tips, Tools, and Techniques for Becoming a Savvy Investor (J. Ross Publishing, Inc, 2004, English)
http://www.pdfchm.com/book/?book=10810
The IAF Handbook of Group Facilitation: Best Practices from the Leading Organization in Facilitation (Jossey-Bass, 2005, English)
http://www.pdfchm.com/book/?book=10798
Information Science in Theory and Practice (K. G. Saur, 2004, English)
http://www.pdfchm.com/book/?book=10820
Google Apps Hacks (Make Books, 2008, English)
http://www.pdfchm.com/book/?book=10835
How to Do Everything with YouTube (McGraw-Hill, 2007, English)
http://www.pdfchm.com/book/?book=10841
Application Design for Wearable Computing (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2008, English)
http://www.pdfchm.com/book/?book=10805
Controlling Energy Demands in Mobile Computing Systems (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2007, English)
http://www.pdfchm.com/book/?book=10807
GPU-Based Techniques for Global Illumination Effects (Synthesis Lectures on Computer Graphics) (Morgan and Claypool Publishers, 2008, English)
http://www.pdfchm.com/book/?book=10829
Light Field Sampling (Synthesis Lectures on Image, Video, and Multimedia Processing) (Morgan and Claypool Publishers, 2006, English)
http://www.pdfchm.com/book/?book=10799
RFID Explained (Synthesis Lectures on Mobile and Pervasive Computing) (Morgan and Claypool Publishers, 2006, English)
http://www.pdfchm.com/book/?book=10804
Big Book of Windows Hacks (O'Reilly, 2007, English)
http://www.pdfchm.com/book/?book=10833
Make Projects: Small Form Factor PCs (O'Reilly, 2008, English)
http://www.pdfchm.com/book/?book=10825
Managing Software Development with Trac and Subversion (Packt Publishing, 2007, English)
http://www.pdfchm.com/book/?book=10809
Network Administration with FreeBSD (Packt Publishing, 2008, English)
http://www.pdfchm.com/book/?book=10808
PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide (Peachpit Press, 2007, English)
http://www.pdfchm.com/book/?book=10840
Professional SQL Server 2000 DTS (Data Transformation Service) (Peer Information Inc, 2000, English)
http://www.pdfchm.com/book/?book=10813
Running Xen: A Hands-On Guide to the Art of Virtualization (Prentice Hall, 2008, English)
http://www.pdfchm.com/book/?book=10837
Special Edition Using Microsoft Windows Vista (2nd Edition) (Que, 2008, English)
http://www.pdfchm.com/book/?book=10828
OCP Instructors Guide for Oracle DBA Certification: A Study Guide to Advanced Oracle Certified Professional Database Administration Techniques (Rampant Techpress, 2004, English)
http://www.pdfchm.com/book/?book=10834
Teach Yourself Cobol in 21 Days (Sams Teach Yourself) (Sams Publishing, 1997, English)
http://www.pdfchm.com/book/?book=10838
Current Pediatric Therapy (Current Therapy) (Saunders, 2006, English)
http://www.pdfchm.com/book/?book=10802
Dialogue Processing in Spoken Language Systems: ECAI'96, Workshop, Budapest, Hungary, August 13, 1996, Revised Papers (Springer, 1997, English)
http://www.pdfchm.com/book/?book=10818
Software Engineering with Reusable Components (Springer, 2001, English)
http://www.pdfchm.com/book/?book=10815
MATLAB Programming for Engineers (Thomson Delmar Learning, 2001, English)
http://www.pdfchm.com/book/?book=10819
Security Modeling And Analysis of Mobile Agent Systems (Electrical and Computer Engineering) (World Scientific Publishing, 2006, English)
http://www.pdfchm.com/book/?book=10814
With best regards, PDFCHM Team.
To operate your subscription you can login into your account on the site http://www.pdfchm.com/
Algunos libros más, en mi post no técnico, orientado a otros temas y libros que me interesaron:
Libros gratis para bajarse en Internet
¿Tienen otros sitios como éste?
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/
Leyendo al bueno de Scott Hanselman en su Twitter
http://twitter.com/shanselman
me entero de este brazo robótico, inventado por Dean Kamen (el mismo inventor de la Segway) y su gente de Deka (http://www.dekaresearch.com/):´
Es impresionante cómo la robótica avanza. Desde hace décadas la robótica ha aparecido en la investigación, saliendo de la literatura de ciencia ficción. Pero en los últimos años se han producido adelantos en los materiales, miniaturización, aparición de mercados (como el militar), capitalismo de riesgo, y la confluencia del desarrollo de software con nuevas ideas en inteligencia artificial: todo esto ha producido piezas como ésta que presenta Kamen. El mismo admite que su inspiración fue la serie de Guerra de las Galaxias, donde en la segunda película Luke Skywalker pierde parte de su brazo, en combate con quien resultaría su padre. Pero no tiene mayores limitaciones, al serle implantado una prótesis, que resulta tan parecida a la que vemos en el video. Hace unos años, eso hubiera quedado en una película. Ahora lo estamos viendo funcionando.
Angel "Java" Lopez
http://www.ajlopez.com
Y ahora, enterándome de estas cosas, en Twitter: http://www.twitter.com/ajlopez
Desde el año pasado, y más en estas últimas semanas, he estado investigando sobre Grid Computing, buscando enlaces, recursos, "papers", implementaciones. Este post es el resultado de esa investigación.
Como siempre, un artículo de la Wikipedia:
http://en.wikipedia.org/wiki/Grid_computing
Si Ud. se está iniciando en el mundo de Grid Computing, estas son buenas introducciones
New to Grid Computing
Grid Computing according IBM
The anatomy of the grid
The physiology of the grid
Interesante lista de lecturas para desarrolladores en Grid
Recommended reading list for grid developers
Grid Café tiene varios artículos y recursos
Grid Cafe Grid Projects in the world
Grid Cafe The place for everybody to learn about the Grid
What is "the Grid"?
Grid @ CERN
Sobre el estado de la industria:
http://www.gridtoday.com/ (un poco demasiado abarcativo, no es sólo sobre grid computing)
http://www.gridblog.com/
La lista completa de enlaces que mantengo, en:
http://del.icio.us/ajlopez/gridcomputing
Algunos productos para examinar:
http://www.gridgain.com
http://www.digipede.net algo más sobre Digipede en http://dotnetjunkies.com/WebLog/stefandemetz/archive/2006/12/09/Free_Grid_Computing_software.aspx
http://www.gridgistics.net/
http://sourceforge.net/projects/ngrid/
Algo relacionado, que comienza a "estar de moda":
http://en.wikipedia.org/wiki/Cloud_computing
He escrito artículos en este blog sobre Grid Computing:
http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx
y en "Anglish", Angel's English:
http://ajlopez.wordpress.com/category/grid-computing/
donde hay algunas implementaciones sencillas de ideas a seguir explorando, como AjAgents, y AjMessages.
Esta lista de recursos, en Anglish, desde:
Grid Computing Resources
Angel "Java" Lopez
http://www.ajlopez.com
El año pasado participé del desarrollo de una aplicación que se ejecuta en una grilla de máquinas sin disco. Este año, estoy volviendo a actualizar el proyecto, espero poder bloggear sobre el resultado dentro de un mes. Mientras, quisiera escribir sobre algunas ideas a explorar.
En este post, uso el término "agente", de una forma algo libre. No definiré precisamente el concepto, quiero usarlo como término base a refinar en el futuro (llegando en algún momento a tratar el tema de agentes autónomos, que me parece más interesante). Por ahora, exploremos algunas ideas básicas (¿ingenuas?) para entender mejor los problemas relacionados con agentes y aplicaciones en grid. Algunas de las ideas acá presentadas pueden ser vistas como ingenuas, pero siento que es un ejercicio necesario, para aprehender los conceptos clave y los problemas a ser resueltos en este tipo de aplicaciones. Al final de este post, presentaré algunas sugerencias de implementación.
He descripto algunas aplicaciones para ejecutar en una grid en mis anteriores post:
Grid Computing Programming
Más programando para una grid
Programando para una Grid
Conceptos de Agentes
En este post, un agente es una pieza de software, con conducta y estado. Se ejecuta en un host de agentes, una aplicación que provee los servicios de base para que el agente pueda "vivir" y trabajar. Representaremos al agente con esta figura:
Patrones de comunicación de agentes
Hay mucha literatura sobre comunicación de agentes, desde simples técnicas hasta elaborados contratos, negociaciones, y más. Podemos tener agentes con creencias, deseos e intenciones. En este post, un agente es más simple: sólo tiene estado, puede enviar y recibir mensajes. Puede recibir estímulos de otros agentes y desde el ambiente de su host.
El más simple patrón de comunicación es un agente enviando un mensaje a otro agente:
Algunas notas:
- El agente enviador conoce al agente receptor. Quiero decir, alguna forma de identidada debe ser implementada. El mensaje no es enviado a cualquiera: el que envía intenta enviar el mensaje a un determinado agente.
- El mensaje transporta datos, y debe ser entendido por el receptor, posiblemente procesado por uno de sus métodos de implementación.
- En enviador no espera por una respuesta. No está interesado en un mensaje de respuesta inmediato.
- Los agentes pueden residir en diferentes máquinas en la grila, y la comunicación se produce tanto local como remota.
Durante su vida un agente puede enviar muchos mensajes a distintos agentes, que debe conocer de alguna manera:
Algunas veces, el agente enviador recibirá un mensaje desde el agente receptor, notificando algun trabajo hecho, o enviando algún dato procesado. Dependiendo de la aplicación, el mensaje de respuesta podría acarrear información para identificar al mensaje original:
En este caso, el enviador original debe estar preparado para recibir la respuesta de una manera asincrónica. Esto podría ser un interesante problema a resolver: un agente puede enviar varios mensajes, y sería mejora si puede seguir ejecutando sin recibir todas las respuestas a tiempo. Por ejemplo, en una aplicación de un juego de tablero, un agente puede delegar la exploración de un árbol de jugadas a otros agentes, y, luedo de un tiempo, sería posible tomar una decisión, con sólo algunas respuestas recibidas.
Nubes ("clouds") en el cielo de la grilla
Otro caso: un agente puede estar interesado en enviar un mensaje, pero no a un receptor determinado. Al contrario, quiere enviarlo a una "nube" de agentes, así cualquiera interesado en el mensaje tendría la oportunidad de procesarlo.
Esta característica puede ser implementada usando estas estrategias:
- Un agente envía un mensaje a un sistema de pizarra (blackboard), que otros agentes están vigilando.
- Una agente enviaría una mensaje a la aplicación host, indicando un tópico (como en una cola de mensajes), así cualquier agente subscripto recibirá el mensaje. Una variante: sólo algunos subscriptores reciben el mensaje, dependiendo de parámetros de aplicación.
- Un agente podría enviar un mensaje dirigido a alguna definición de proveedor de servicio. Un proveedor de servicio es un agente, que declara al comienzo de su vida, sus capacidades y los servicios que puede proveer.
Un ejemplo, tomemos una aplicación de un juego de tablero, ajedrez o go. Un agente en esa aplicación puede enviar un mensaje reclamando resolver cierta posición de ataque. En un sistema de pizarra, publicará el pedido. En un sistema de tópicos, lo enviaría al tópico "ataques". En una estrategia de proveedor de servicio, envía el mensaje a uno o más de los proveedores del servicio AttackResolver.
Como en el patrón anterior, un agente puede recibir una respuesta asincrónica, ahora desde "la nube":
Duplicación de agentes
Un agente tiene conducta y estado. Si el agente puede dividir su trabajo, podría tomar el camino de duplicarse a sí mismo:
Es algo extraño, pero podría ser útil, dependiendo de la aplicación a desarrollar.
Agentes y la Grilla
Cada agente puede ser albergado en un nodo de la grilla. El mecanismo de envío de mensajes debe ser capaz de enviar un mensaje a otro nodo. La aplicación host mantiene una lista de agentes por identidad, y conoce cúal es local o remoto. Una prueba ácida: una aplicación de grilla con agentes debe ser capaz de correr en una sola máquina, o en una grilla, sin cambiar el código o el algoritmo.
Como en otras implementaciones de grilla (discutidos en los post que mencioné al principio), un servidor central está a cargo de la distribución de las tareas entre los nodos de la grilla. "Grid as a Service" es una nueva frase que podemos aplicar a esta situación.
Moviendo al Agente
Un agente puede iniciar sus actividades en un node. Pero en algún momento, puede decidir de continuar su trabajo en otro nodo (la aplicación host que lo alberga también puede tomar esa decisión, independientemente del agente). Entonces, su estado sería enviado de un nodo a otro (otro caso: podría querer duplicarse y que su clon siga el trabajo en otra máquina).
Noten que la conducta del agente (que puede estar compilada o puede estar escrita en un lenguaje dinámico o de agente), no viaja. Pero bien podría ser que viaje, incluso, que haya agentes que vayan adaptando su conducta en el tiempo.
Inyectando conducta
La conducta de cada agente podría ser expresada en código compilado (archivos .jar en Java, assemblies en .NET). Otras alternativas son posibles: la conducta podría ser especificada en un lenguaje de scripting dedicado a agentes (pienso en una adaptación del AjBasic, por ejemplo).
Si la conducta se expresa en forma compilada, uno o varios servers puede tomar la responsabilidad de almacenar y distribuir esos componentes:
Ideas de implementación
Muchas de estas ideas pueden ser implementadas en cualquier lenguaje/tecnología apropiada, como Java y .NET, que soporte múltiples threads, invocación remota, serialización de mensajes, etc...
En los últimos tiempos estuve trabajando en mis projectos AjMessages y AjAgents, más información enestos post:
AjMessages: a message processor
Agents using Concurrency and Coordination Runtime (CCR)
AjMessages- hacia un procesador de mensajes
Agentes usando Concurrency and Coordination Runtime (CCR)
Algoritmos Genéticos con AjAgents y Concurrency and Coordination Runtime (CCR)
Genetic Algorithms with AjAgents and Concurrency and Coordination Runtime (CCR)
(Tengo otro proyecto, AjGrid, no publicado aún). Para este post, creo que el AjAgents podría ser una implementación de esas ideas. AjMessages tiene ahora soporte de ejecución remota, pero está más orientado a un proceso tubería ("pipeline"): es más difícil de implementar en semejante sistemas las ideas de este post.
Estoy agregando algunas características a AjAgents (ahora, AjAgents trabaja sólo en local):
- Configuración: Carga y creación de agentes en ejecución, según alguna información de configuración, ya sea al inicio o en el medio de la ejecución.
- Assembly remoto: Así un nodo de grilla pueder ser inyectado con nuevos agentes.
- Identificación de Agente: Para identificar al agente de manera única (un UID debería bastar).
- Transporte de mensaje: Windows Communication Foundation es un candidato, otro podría ser DSSP.
Un posible camino es tomar Decentralized System Services (DSS) del Microsoft Robotics Developer Studio. Un agente podría ser implementado como un servicio de DSS, ejecutando en un host DSS. La comunicación entre máquinas puede ser implementada usando DSSP como protocolo.
"Stay tuned", vendrá más código.
(Esta es una actualización y traducción de mi post en "Anglish", Angel's English:
Agents in a Grid
)
Angel "Java" Lopez
http://www.ajlopez.com/en
La tecnología Component Object Model (COM) de Microsoft hace años que prácticamente no la uso, más que de forma escondida. En la situación actual de .NET y otras herramientas, no parece hacer falta más. Pero como por una década a todos nos enseñaron sobre componentes COM distribuidos, y stateless y stateful, y transacciones requeridas, y esas cosas (como Apartment Threading Model, algo que sólo existe en el universo donde un runtime de Visual Basic no es reentrante), creo interesante poner algunos puntos de la situación actual. No soy un experto en todo COM, pero recuerdo haber devorado su implementación, y la curiosa IUnknown, que fue una solución pragmática a la diversidad de lenguajes, a la resolución de binding en runtime, y la necesidad de comunicar programas:
- COM Surge de OLE, y éste de DDE, que a su vez nacen de Office y el embebido de documentos en otros documentos, para tener componentes que binariamente, sin dependencia de lenguaje y de otros temas, se puedan comunicar entre si, como cajas negras, mediante una interfaz bien definida, o descubrible en runtime.
- Aparecen componentes COM visibles, luego llamados ActiveX Controls, que cumplen una serie de interfaces para poder ser albergados en cualquier contenedor de ActiveX controls, como el Visual Basic clásico.
- Aparecio COM distribuido, con los conceptos de tener marcados los metodos o componentes, para manejar transacciones (Required, Required New....) Habrán visto aparecer también esos conceptos en J2EE y otros lados, en los noventa del siglo pasado.
- Pero la realidad, es que hoy por hoy, todo se puede hacer sin COM, incluso el manejo de transacciones. En .NET 1.x dependiamos de System.Enterprise (no recuerdo el namespace) que interactuaba con COM, pero con .NET 2, practicamente no se necesita COM (nada más en lo de más abajo, sin verlo directamente).
- Los componentes visuales ahora son .NET, y hay varias empresas que migraron sus ActiveX controls a .NET "puro", desde hace años.
- El manejo de transacciones ahora esta en System.Transaction (muy interesante que haya transacciones en objetos, y que tus objetos puedan tener un "rollback")
- El manejo de threads es hermoso en .NET .... a la Java... ;-)
- El manejo de comunicacion distribuida, con seguridad y demas, esta en manos de Windows Communication Foundation, o por lo menos, con Web Services o Remoting (este ultimo se le esta "soltando la mano" de parte de MS, todo esta puesto en WCF).
- La necesidad de registrar el componente en el Registry, y solamente una versión del componente, ha conseguido crear el infierno de las DLL (DLL Hell), que en .NET es prácticamente inexistente.
Asi que, de alguna manera, COM no es indispensable. Puedo hacer todo lo de COM con esto que fue apareciendo con el tiempo.
Aunque se recomienda tomar con pinzas lo que aparece en Wikipedia, leemos ahí sobre COM:
The COM platform has largely been superseded by the Microsoft .NET initiative, and Microsoft now focuses its marketing efforts on .NET. COM was often used to hook up complex, high performance code to front end code implemented in Visual Basic or ASP.
To some extent, COM is now deprecated in favor of .NET. Since .NET provides rapid development tools similar to Visual Basic for both Windows Forms and Web Forms with just-in-time compilation, back-end code can be implemented in any .NET Language including C#, Visual Basic and C++.
Le dan algo de esperanza:
Despite this, COM remains a viable technology with an important software base. As of this writing, Microsoft has no plans for discontinuing either COM or support for COM. It is also ideal for script control of applications such as Office or Internet Explorer since it provides an interface for calling COM object methods from a script rather than requiring knowing the API at compile time. The GUID system developed for COM has wide uses any time a unique ID is needed.
Información sobre COM en Microsoft:
http://www.microsoft.com/com/default.mspx
Seguiremos teniendo COM en varios programas de Microsoft, pero no parece haber necesidad de incorporarlos en nuestros propios desarrollos.
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/