Wad Robot Framework Pour Jump Camp4 It

35
Les robots de Google Wave et le WadRobotFramework Jérôme Baton 21 Janvier 2010 JumpCamp4IT

description

Le PDF de la présentation que j'ai donné lors de l'évènement JumpCamp4IT, le 21 janvier 2010 à Paris, France sur les robots pour Google Wave et notamment mon framework le WadRobotFramework.

Transcript of Wad Robot Framework Pour Jump Camp4 It

Page 1: Wad Robot Framework Pour Jump Camp4 It

Les robots de Google Wave et le WadRobotFramework

Jérôme Baton 21 Janvier 2010

JumpCamp4IT

Page 2: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 2

Qui-suis-je

Un expert mondial java/web :)

J'aime automatiser pour ne pas faire N fois la même chose.

Fan de Nono, Goldorak, R2-D2 et Moulinex

Architecte applicatif, Auto-entrepreneur Photographe amateur

www.wadael.orgtwitter.com/wadael

Page 3: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 3

LA citation

"L'homme devrait mettre autant d'ardeur à simplifier sa vie qu'il en met à la compliquer."

Henri Bergson

Page 4: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 4

Agenda

•>Google Wave (GW) – Présentation rapide>Google Wave (GW) – Présentation rapide• Les robots GW – présentation• Les robots GW - avant de pouvoir commencer• Les robots GW – méthode de base• Le WadRobotFramework (WRF)

Page 5: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 5

1/ Vocabulaire : wave, wavelet, blip

2/ Démo en ligne avec les robots● [email protected][email protected][email protected]

Google Wave – Présentation rapide

Page 6: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 6

WRF - Agenda

•Google Wave (GW) – Présentation rapide•>>Les robots GW – présentation>>Les robots GW – présentation• Les robots GW - avant de pouvoir commencer• Les robots GW – méthode de base• Le WadRobotFramework (WRF)

Page 7: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 7

• Un robot est un programme exécuté côté serveur, ayant accès à une wavelet et à son contenu, ses participants .

• Un robot peut participer à une conversation s'il y est ajouté par un participant humain.

• Un robot déclare réagir à des évènements.

• Le robot réagit (ou non) aux blips en ajoutant lui-même des blips, en en modifiant d'autres, ou en interagissant avec d'autres systèmes (wave vers twitter).

WRF - robots GW – Présentation – Théorie (1/2)

Page 8: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 8

• Un robot appartient à une appli. Web, est basé sur des servlets.

• Actuellement, hébergement uniquement sur GAE

• Un robot a un nom et une adresse, qui sera [email protected]

• Python est disponible aussi.• Accès aux APIs de GAE (datastore, …)• Accès au reste du web (XML, JSON, …)

WRF - robots GW – Présentation – Théorie (1/2)

Page 9: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 9

WRF - Agenda

• Google Wave (GW) – Présentation rapide• Les robots GW – présentation• >>Les robots GW ->>Les robots GW - avant de pouvoir commencer• Les robots GW – méthode d'écriture originale• Le WadRobotFramework (WRF)

Page 10: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 10

Robots – les pré-requis

Communs (sans ou avec le WRF)• Avoir un accès à Wave• Avoir un compte App Engine Java• Pouvoir créer une application• JDK 5 ou 6• Eclipse + plugin

Spécifiques WRF• Récupérer un JAR :)• Savoir hériter, surcharger

Page 11: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 11

WRF - Agenda

•Google Wave (GW) – Présentation rapide• Les robots GW – présentation• Les robots GW – avant de pouvoir commencer• >>Les robots GW – méthode de baseLes robots GW – méthode de base• Le WadRobotFramework (WRF)

Page 12: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 12

Robot – Méthode de base

Très bien décrite à ces adresses

• http://code.google.com/intl/fr-FR/apis/wave/extensions/robots/java-tutorial.html

• http://gaejexperiments.wordpress.com/2009/11/04/episode-7-writing-your-first-google-wave-robot/

Des articles édifiants, à l'origine du WRF

Page 13: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 13

Robot – Méthode de base

Exemple de code « standard »

public class ParrotyServlet extends AbstractRobotServlet { @Override public void processEvents(RobotMessageBundle bundle) { Wavelet wavelet = bundle.getWavelet(); if (bundle.wasSelfAdded()) { Blip blip = wavelet.appendBlip(); TextView textView = blip.getDocument(); textView.append("I'm alive!"); } for (Event e: bundle.getEvents()) { if (e.getType() == EventType.WAVELET_PARTICIPANTS_CHANGED) { Blip blip = wavelet.appendBlip(); TextView textView = blip.getDocument(); textView.append("Hi, everybody!"); } } }}

Extrait de la page http://code.google.com/intl/fr-FR/apis/wave/extensions/robots/java-tutorial.html

On doit tester pour chaque type d'évènement … pas très fun surtout si l'objectif est un robot plutôt simple ....

Page 14: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 14

Robot – Méthode de base

Avant d'écrire ce code, il faut :

• (satisfaire le pré-requis)• Avoir l'environnement• Récupérer le Jar de l'API des robots et ses dépendances (Json)• Déclarer les servlets avec des paths spécifiques à respecter (web.xml)• Déclarer les capacités du robot (capacities.xml)• Ecrire le fichier de déploiement (appengine-web.xml)• Ecrire la servlet de profil• Ecrire la servlet « métier »

Long, rébarbatif, potentiellement des erreurs imbéciles et du copier/coller peu glorifiant.

Heureusement, le WadRobotFramework est là !

Page 15: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 15

WRF - Agenda

• Google Wave (GW) – Présentation rapide• Les robots GW – présentation• Les robots GW – avant de pouvoir commencer• Les robots GW – méthode de base• >> Le WadRobotFramework (WRF)Le WadRobotFramework (WRF)

– Principe– Origine et évolutions du WRF jusqu'à aujourd'hui– Rôles– Composants– Statut actuel– Exemples– Robots simples– Robots avancés– Evolutions à venir– Au conditionnel

WRF - Agenda

Page 16: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 16

Les utilisateurs sont des programmeurs Java.

Le WRF se présente sous la forme d'un projet pour Eclipse DANS lequel l'utilisateur travaille (en effectuant des configurations simples).

Le WRF c'est une API et un générateur.

Le processus de génération lancé, un squelette de projet de robot est créé dans un répertoire dédié (generated_Robots)

Charge à l'utilisateur de créer par la suite un projet spécifique pour SON robot.

La configuration du générateur (generator.properties) est sauvegardée dans le répertoire du robot résultant.

WRF – Principe

Page 17: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 17

Un article sur la création de robot me laisse l'impression que le processus est bien fastidieux pour simplement réagir à du texte.

C'est la naissance de la surcouche dite « simple », au début fût l'APIpublic class RTFMRobotServlet extends BlipModifierRobot {

@Override

protected String modifyBlipText(String actualText) {

if(actualText.indexOf("?") == -1) return null;

else {

return actualText.replaceAll("?", "? (RTFM!!") ;

}

}

}

Pour d'autres besoins, les robots « advanced » laissent toute lattitude en exposant les mêmes objets que l'API Google et en ajoutant des fonctionnalités.

C'est le début d'une visibilité internationale :)

Puis, arriva le squelette fixe suivi du générateur de squelette.

WRF – Origine et évolutions

Page 18: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 18

Le WRF se base sur l'API Wave fournie par Google dont elle hérite des dépendances (JSON, Oauth). Le générateur nécessite la librairie Ant-Contrib.

Actuellement, trois types de robots sont proposés :✔ Appender / Ajouteur (type simple n°1)✔ Modifier / Modificateur (type simple n°2)✔ Advanced / Avancé

Le WRF propose un script ANT (http://ant.apache.org/ et ant-contrib) permettant de générer un squelette de robot personnalisé, en très peu d'étapes.

La génération ne prends pas le temps d'un café !

Voyons cela !

WRF – Composants

Page 19: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 19

Démonstration LIVE du WRF dans sa version actuelle

Avec un robot simple de type « Modifier »

(vidéo à venir)

WRF – Démonstration

Page 20: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 20

Pour générer ce robot, il a fallut● Adapter un chemin dans build.properties (une seule fois par machine)● Adapter les valeurs dans generator/generator.properties (une fois par robot)● Lancer la target correspondant au type de robot voulu (build.xml)● Patienter quelques secondes

WRF – Etapes

Page 21: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 21

A retenir, la méthode

protected abstract String modifyBlipText(String actualText)

des « modifieurs » doit renvoyer null si l'on ne veut pas faire de modification au blip traité.

Même principe pour la méthode

protected String getTextToAppend(String textOfTheBlipToReactFrom)

des « ajouteurs ».

Car si l'on renvoie la même chaine reçue en paramètre, le robot est ajouté comme coauteur du blip (modifieurs) ou un blip identique est ajouté.

WRF – Robots Simples

Page 22: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 22

Les robots simples ont les inconvénients de leurs avantages : leur simplicité restreint le nombre de leurs utilisations potentielles.

Pour ceux qui veulent plus de puissance, il y a les robots avancés

WRF – Robots simples - Synthèse

Page 23: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 23

Un RA possède une identité et des composants. Ce sont ses composants réutilisables (de type RobotWorker) qui effectuent les taches.

Un RA doit être vu comme une chaine de production que l'on définit dans son constructeur. Plusieurs RA peuvent être utilisés dans une wavelet.

Les RA ont un mode de fonctionnement double.

Ils peuvent agir à la fois sur demande, lorsque

l'utilisateur saisi une commande dans un blip

ET

automatiquement

L'utilisateur a accès à tous les objets présentés par l'API standard. Tout en offrant des fonctionnalités supplémentaires :✔ Aide : Affichage des commandes disponibles (/help en début de blip)✔ d'autres à venir ;) voir http://code.google.com/p/wadrobotframework/wiki/WhatsNext

WRF – Robots avancés (RA)

Page 24: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 24

Les robots avancés (RA) doivent hériter de WithWorkersRobot (WWR).

public class MyWithWorkersRobot extends WithWorkersRobot {

public MyWithWorkersRobot(){

super();

addRobotWorker( new CapitalizeWorker() );

addRobotWorker( new LengthWorker() );

}

@Override

public String getRobotIdentifier() {

return "my";

}

Les RobotWorker (RW) seront executés selon leur ordre d'ajout.

Ils doivent implémenter TROIS méthodes.

WRF – Robots avancés

Page 25: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 25

class LengthWorker implements RobotWorker {

@Override

public String getInstruction() {

return "len";

}

@Override

public String getDescription() {

return "Displays the length of the blip in a child blip";

}

@Override

public boolean doWork(RobotMessageBundle bun, Blip bli, Event eve,String params)

{

Blip lengthChild = bli.createChild();

lengthChild.getDocument().append("length : " + bli.getDocument().getText().length() + " characters");

return true;

}

}

WRF – Robots avancés – example de RobotWorker

Page 26: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 26

Ajouté à une wavelet, un RA sera actif si

1/ il possède des workers dont l'instruction est nulle

2/ l'on tape une commande dans un blip.

Une commande a pour structure

StartCommandDelimiter RobotIdentifier AcronymAndCommandSeparator WorkerInstruction optionnalParameters endCommandDelimiter

Exemple :

on écrit {mtr:tweet il fait beau et chaud} dans un nouveau blip et on valide.

Le RA dont l'acronyme (identifiant) est « mtr », s'il existe va executer le worker dont l'instruction est « tweet » avec pour paramètres (parameters ci-dessous) «il fait beau et chaud »public boolean doWork(RobotMessageBundle bundle, Blip blip, Event event, String parameters);

Au worker de parser les paramètres reçus

WRF – Utiliser un RA

Page 27: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 27

Atelier/Démo en live :

faire un RA avec une action automatique et une action sur demande

WRF – Robots avancés

Page 28: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 28

Cela compile ET fonctionne :)

Au 18 janvier, le WRF apparaît dans 3 des 11 articles listés par l'équipe de Google sur la page http://code.google.com/intl/fr/apis/wave/articles.html.

WRF – Statut actuel

Page 29: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 29

Quelques exemples connus.● ContrepWaveRobot [email protected]● DTC Robot [email protected]● Mumbai Health Robot

Faible feedback utilisateur :(

WRF – Exemples de Robots

Page 30: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 30

Evolutions probables (à court terme)

Un nouveau modèle permettra de générer en même temps un robot et un agent XMPP (chatbot)

Ajout de la reconnaissance de la voix de son maitre (obéissance unique)

Ajout d'autorisations d'usage pour participants.

Un robot qui génère des robots :)

Liste complète sur le wiki : http://code.google.com/p/wadrobotframework/wiki/WhatsNext

Mon champs de recherche

Interaction avec des gadgets, avec des humains, relier à des applications web, agir sur une wave « hors évènement » (cron, task).

WRF – Evolutions probables

Page 31: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 31

Le WRF sera cité dans un livre à paraître chez un éditeur anglophone connu. Eventuellement un chapitre entier y sera consacré.

Et éventuellement, je vais l'écrire

Les autres éditeurs qui traiteront la programmation Wave ne pourront pas faire l'impasse dessus non plus. Enfin, à mon humble avis :)

Par contre, je ne suis toujours pas invité à présenter à Google IO ....

et ça, ça m'énerve ....

WRF – Au conditionnel

Page 32: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 32

WRF est un projet open source auquel il est possible de participer de multiples manières.

Idées / exemples / feedback / plugin Eclipse / € / Lego NXT / Canon 7D / objectif 10-22mm / un 35mm / ...

Voir la page http://code.google.com/p/wadrobotframework/wiki/participate

WRF – Participer

Page 33: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 33

Liens

WRF: http://code.google.com/p/wadrobotframeworkWiki : http://code.google.com/p/wadrobotframework/w/list

Guide pour Wave : http://completewaveguide.com/Liste de robots : http://www.waverobots.com/

Tutoriaux par Romin K. Irani (twitter : @iRomin): http://gaejexperiments.wordpress.com/2009/12/03/episode-11-develop-simple-google-wave-robots-using-the-wadrobotframework/

http://gaejexperiments.wordpress.com/2009/12/03/episode-12-writing-an-advanced-google-wave-robot-using-wadrobotframework/

http://gaejexperiments.wordpress.com/2009/11/04/episode-7-writing-your-first-google-wave-robot/

Page 34: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 34

Questions , Réponses

Page 35: Wad Robot Framework Pour Jump Camp4 It

Jérôme BATON - Jump Camp 4 IT 35

WadRobotFrameworkWadRobotFrameworkhttp://code.google.com/p/wadrobotframework/http://code.google.com/p/wadrobotframework/

Merci de votre participation à cet atelier

Jérôme BatonWadael gmail com