SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
JumpCamp4IT


  Les robots de Google Wave et le
  WadRobotFramework
  Jérôme Baton         21 Janvier 2010
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.org
                    twitter.com/wadael




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


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




                  Jérôme BATON - Jump Camp 4 IT            3
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)




                 Jérôme BATON - Jump Camp 4 IT   4
Google Wave – Présentation rapide




1/ Vocabulaire : wave, wavelet, blip

2/ Démo en ligne avec les robots
● emoticonbot@appspot.com


● cartoonybot@appspot.com


● contrepwaverobot@appspot.com




                  Jérôme BATON - Jump Camp 4 IT   5
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)




                  Jérôme BATON - Jump Camp 4 IT   6
WRF - robots GW –
     Présentation – Théorie (1/2)
• 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).


                  Jérôme BATON - Jump Camp 4 IT         7
WRF - robots GW – Présentation –
                 Théorie (1/2)

• 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
  nom_application@appspot.com
• Python est disponible aussi.
• Accès aux APIs de GAE (datastore, …)
• Accès au reste du web (XML, JSON, …)

               Jérôme BATON - Jump Camp 4 IT   8
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 d'écriture originale
• Le WadRobotFramework (WRF)




                 Jérôme BATON - Jump Camp 4 IT   9
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

                  Jérôme BATON - Jump Camp 4 IT   10
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)




                  Jérôme BATON - Jump Camp 4 IT   11
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




                                       Jérôme BATON - Jump Camp 4 IT                                12
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 ....
                                       Jérôme BATON - Jump Camp 4 IT                                  13
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à !

                                    Jérôme BATON - Jump Camp 4 IT   14
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)
  – Principe
  – Origine et évolutions du WRF jusqu'à aujourd'hui
  – Rôles
  – Composants
  – Statut actuel
  – Exemples
  – Robots simples
  – Robots avancés
  – Evolutions à venir Jérôme BATON - Jump Camp 4 IT   15
  – Au conditionnel
WRF – Principe

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.



                              Jérôme BATON - Jump Camp 4 IT               16
WRF – Origine et évolutions

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'API
public 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.
                                       Jérôme BATON - Jump Camp 4 IT       17
WRF – Composants

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 !

                             Jérôme BATON - Jump Camp 4 IT               18
WRF – Démonstration




Démonstration LIVE du WRF dans sa version actuelle
    Avec un robot simple de type « Modifier »



                  (vidéo à venir)




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

                         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




                             Jérôme BATON - Jump Camp 4 IT               20
WRF – Robots Simples
                            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é.

                            Jérôme BATON - Jump Camp 4 IT                21
WRF – Robots simples -
            Synthèse

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




                             Jérôme BATON - Jump Camp 4 IT              22
WRF – Robots avancés (RA)
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
                                Jérôme BATON - Jump Camp 4 IT            23
WRF – Robots avancés

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.

                                 Jérôme BATON - Jump Camp 4 IT       24
WRF – Robots avancés – example de
                   RobotWorker
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;
            }


}
                                             Jérôme BATON - Jump Camp 4 IT                             25
WRF – Utiliser un RA
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
                                 Jérôme BATON - Jump Camp 4 IT                    26
WRF – Robots avancés


               Atelier/Démo en live :

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




                   Jérôme BATON - Jump Camp 4 IT   27
WRF – Statut actuel

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.




                             Jérôme BATON - Jump Camp 4 IT                28
WRF – Exemples de Robots

 Quelques exemples connus.
● ContrepWaveRobot      contrepwaverobot@appspot.com
● DTC Robot             dtc-robot@appspot.com
● Mumbai Health Robot




Faible feedback utilisateur :(




                             Jérôme BATON - Jump Camp 4 IT   29
WRF – Evolutions probables

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).

                             Jérôme BATON - Jump Camp 4 IT               30
WRF – Au conditionnel

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 ....




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


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


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

WRF: http://code.google.com/p/wadrobotframework
   Wiki : 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/
                                       Jérôme BATON - Jump Camp 4 IT                                       33
Questions , Réponses




     Jérôme BATON - Jump Camp 4 IT   34
WadRobotFramework
       http://code.google.com/p/wadrobotframework/




Merci de votre participation à cet atelier



                                              Jérôme Baton
                                           Wadael gmail com

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

Contenu connexe

Similaire à Wad Robot Framework Pour Jump Camp4 It

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009JUG Lausanne
 
121102 aetc_consultingconf4d
121102 aetc_consultingconf4d121102 aetc_consultingconf4d
121102 aetc_consultingconf4dNathalie Richomme
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosPublicis Sapient Engineering
 
Training Bioloid Premium FR
Training Bioloid Premium FRTraining Bioloid Premium FR
Training Bioloid Premium FRMaxime Vallet
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02Rahma Boufalgha
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02Rahma Boufalgha
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! frameworkBenoît Simard
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Publicis Sapient Engineering
 
Créer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantCréer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantpprem
 
Solutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptSolutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptRaphaël Semeteys
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 

Similaire à Wad Robot Framework Pour Jump Camp4 It (20)

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009
 
GWT no-dto
GWT no-dtoGWT no-dto
GWT no-dto
 
121102 aetc_consultingconf4d
121102 aetc_consultingconf4d121102 aetc_consultingconf4d
121102 aetc_consultingconf4d
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
 
java (1).pdf
java (1).pdfjava (1).pdf
java (1).pdf
 
Training Bioloid Premium FR
Training Bioloid Premium FRTraining Bioloid Premium FR
Training Bioloid Premium FR
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
Javavs net
Javavs netJavavs net
Javavs net
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
Créer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantCréer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composant
 
Solutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptSolutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScript
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 

Wad Robot Framework Pour Jump Camp4 It

  • 1. JumpCamp4IT Les robots de Google Wave et le WadRobotFramework Jérôme Baton 21 Janvier 2010
  • 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.org twitter.com/wadael Jérôme BATON - Jump Camp 4 IT 2
  • 3. LA citation "L'homme devrait mettre autant d'ardeur à simplifier sa vie qu'il en met à la compliquer." Henri Bergson Jérôme BATON - Jump Camp 4 IT 3
  • 4. 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) Jérôme BATON - Jump Camp 4 IT 4
  • 5. Google Wave – Présentation rapide 1/ Vocabulaire : wave, wavelet, blip 2/ Démo en ligne avec les robots ● emoticonbot@appspot.com ● cartoonybot@appspot.com ● contrepwaverobot@appspot.com Jérôme BATON - Jump Camp 4 IT 5
  • 6. 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) Jérôme BATON - Jump Camp 4 IT 6
  • 7. WRF - robots GW – Présentation – Théorie (1/2) • 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). Jérôme BATON - Jump Camp 4 IT 7
  • 8. WRF - robots GW – Présentation – Théorie (1/2) • 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 nom_application@appspot.com • Python est disponible aussi. • Accès aux APIs de GAE (datastore, …) • Accès au reste du web (XML, JSON, …) Jérôme BATON - Jump Camp 4 IT 8
  • 9. 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 d'écriture originale • Le WadRobotFramework (WRF) Jérôme BATON - Jump Camp 4 IT 9
  • 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 Jérôme BATON - Jump Camp 4 IT 10
  • 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 base • Le WadRobotFramework (WRF) Jérôme BATON - Jump Camp 4 IT 11
  • 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 Jérôme BATON - Jump Camp 4 IT 12
  • 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 .... Jérôme BATON - Jump Camp 4 IT 13
  • 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à ! Jérôme BATON - Jump Camp 4 IT 14
  • 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) – Principe – Origine et évolutions du WRF jusqu'à aujourd'hui – Rôles – Composants – Statut actuel – Exemples – Robots simples – Robots avancés – Evolutions à venir Jérôme BATON - Jump Camp 4 IT 15 – Au conditionnel
  • 16. WRF – Principe 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. Jérôme BATON - Jump Camp 4 IT 16
  • 17. WRF – Origine et évolutions 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'API public 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. Jérôme BATON - Jump Camp 4 IT 17
  • 18. WRF – Composants 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 ! Jérôme BATON - Jump Camp 4 IT 18
  • 19. WRF – Démonstration Démonstration LIVE du WRF dans sa version actuelle Avec un robot simple de type « Modifier » (vidéo à venir) Jérôme BATON - Jump Camp 4 IT 19
  • 20. WRF – Etapes 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 Jérôme BATON - Jump Camp 4 IT 20
  • 21. WRF – Robots Simples 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é. Jérôme BATON - Jump Camp 4 IT 21
  • 22. WRF – Robots simples - Synthèse 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 Jérôme BATON - Jump Camp 4 IT 22
  • 23. WRF – Robots avancés (RA) 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 Jérôme BATON - Jump Camp 4 IT 23
  • 24. WRF – Robots avancés 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. Jérôme BATON - Jump Camp 4 IT 24
  • 25. WRF – Robots avancés – example de RobotWorker 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; } } Jérôme BATON - Jump Camp 4 IT 25
  • 26. WRF – Utiliser un RA 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 Jérôme BATON - Jump Camp 4 IT 26
  • 27. WRF – Robots avancés Atelier/Démo en live : faire un RA avec une action automatique et une action sur demande Jérôme BATON - Jump Camp 4 IT 27
  • 28. WRF – Statut actuel 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. Jérôme BATON - Jump Camp 4 IT 28
  • 29. WRF – Exemples de Robots Quelques exemples connus. ● ContrepWaveRobot contrepwaverobot@appspot.com ● DTC Robot dtc-robot@appspot.com ● Mumbai Health Robot Faible feedback utilisateur :( Jérôme BATON - Jump Camp 4 IT 29
  • 30. WRF – Evolutions probables 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). Jérôme BATON - Jump Camp 4 IT 30
  • 31. WRF – Au conditionnel 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 .... Jérôme BATON - Jump Camp 4 IT 31
  • 32. WRF – Participer 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 Jérôme BATON - Jump Camp 4 IT 32
  • 33. Liens WRF: http://code.google.com/p/wadrobotframework Wiki : 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/ Jérôme BATON - Jump Camp 4 IT 33
  • 34. Questions , Réponses Jérôme BATON - Jump Camp 4 IT 34
  • 35. WadRobotFramework http://code.google.com/p/wadrobotframework/ Merci de votre participation à cet atelier Jérôme Baton Wadael gmail com Jérôme BATON - Jump Camp 4 IT 35