[Toulouse-pm] OSCON 2006, Mardi
Michel Rodriguez
mrodrigu at ieee.org
Tue Jul 25 17:19:34 PDT 2006
Mardi matin
Donc me revoila tout frais, après une soirée tranquille hier soir, en
companie de quelques italiens, vu qu'il faut bien que je bosse un peu
(mon italien) pendant cette conf. donc quelques bières, peu de chanve de
convaincre 2 adeptes de Rails que Perl est bieng mieux, et au dodo.
Real World Web Services - Scott Davis
<http://www.davisworld.org/presentations/handsOnWebServices.pdf> est une
partie de la présentation.
Et oui, c'est l'année du ouèbe tout poynt ziro, donc je m'intéresse aux
technologies de l'an dernier... mais vous inquiétez pas, O'Reilly donne
un livre gratuit aux participants, et j'ai choisi "Ajax Hacks".
Il commence par un peu de pub pour sa boite, dont je tairais le nom
parce que je suis méchant et rancunier.
Au passage, pour taper les compte-rendus en français sur un clavier US,
quelques imap en vi comme ":imap e' é" évitent de taper <CTRL-K>
avant... bien pratique, et ça me donne l'impression de pas avoir perdu
mon temps hier. Ca donne juste des trucs un peu bizzare avec le curseur,
après une voyelle il se positionne _devant_ la lettre pendant 1 seconde,
mais on s'y habitue. Remapper <CTRL-N> sur <TAB> est aussi excellent, ça
auto-compléte les mots si je les ai déja utilisés dans le fichier (ça
tombe bien, je me repète souvent et j'ai un vocabulaire limité). Je ne
peux plus taper de tabs, mais de toute façon j'aime pas les tabs, et ça
sert à rieng en POD.
Maintenant une longue liste d'accronymes... beurk!
Bonne idée, il donne les définitions des accronymes tirées de Wikipedia.
SOA
Il commence par SOA: au choix Service-Oriented Architecture, ou
Sarbanes-Oxley act (si vous savez pas ce que c'est, vous avez bien de la
chance, ou Soldiers of Allah)
<http://en.wikipedia.org/wiki/Service-oriented_Architecture>
Il parle beaucoup, vite, donc ça va être dur de tout retranscrire, je
pense que je vais devoir me limiter à vous donner les liens vers les
définitions.
WS
Maintenant on passe à Web Services (WS)
<http://en.wikipedia.org/wiki/Web_service>
Un truc: un web service n'est pas forcément en XML, le plus important
c'est qu'il soit "remote", et "message-oriented". En plus il devrait
être "platform-independant", "vendor-neutral" et "internet-based".
Pour l'instant c'est un peu du vent quand même, beaucoup de "c'est
super" et pas beaucoup de détails technique.
Ajax
L<http://en.wikipedia.org/wiki/Ajax_%28programming%29>.
Client/SOA: pour certains c'est l'étape après Ajax. Un gros problème
cependant: XSS (cross-site scripting), les requêtes Ajax ne peuvent pas
contacter un server dans un domaine différent pour limiter le risque. On
pourrait avoir du javascript signé par le site web d'origine, mais ça ne
marche pas cross-browser. Donc ça doit être le serveur d'origine qui
appelle les autres sites web pour le client. Par exemple on peut avoir
un proxy qui gère les appels à différents sites. Là ça commence à
devenir intéressant.
<http://en.wikipedia.org/wiki/Client/SOA>
Web 2.0
Donc comme c'est une conférence O'Reilly, il doit maintenant nous causer
de Web 2.0
Il demande à la salle: qui a déjà utilisé Mapquest? Toutes les mains se
lèvent. Qui à déjà utilisé Google Maps? Pareil. Qui a utilisé Mapquest
depuis que Google Maps existe? 3 mains! Web 2.0 - Web: 1 - 0
Mash-ups: pour ceux qui vivent dans une grotte, c'est la combinaison de
données venues de plusieurs sources. Exemples
<http://www.chicagocrime.org/map/>.
Au passage, en cherchant autre chose, je tombe sur un catchpa sympa:
<http://www.hotcaptcha.com/> (pas forcément un truc à voir au boulot)
SOAP
<http://en.wikipedia.org/wiki/SOAP>
Avant SOAP il y avait XML-RPC, qui une fois trituré par un commité est
devenu SOAP (la trituration à été assez importante!).
WSDL
<http://en.wikipedia.org/wiki/WSDL>
SOAP est le format du message, WSDL décrit l'interface du WS.
Il y a plein d'outils pour générer au moins un squelette de code à
partir du WSDL... en Java. En Perl je sais pas, les spécialistes peuvent
nous dire.
UDDI
<http://en.wikipedia.org/wiki/UDDI>
Pas vraiment utilisé, au contraire des 2 précedentes technologies. Ca
permet de faire des répertoires de WS, mais en pratique on récupère le
WSDL directement, sans passer par une étape intermédiaire.
SOAP en action
SOAP avec l'API WS de Google (en béta depuis le dernier millénaire).
Il nous montre le format des messages, requêtes et réponses. Je tape pas
assez vite pour retranscrire le tout! En plus ça cause surtout Java,
fait chier.
Il nous montre le résultat de WSDL2Java sur le WSDL de Google. Puis
déclare que c'est pas trop joli, donc il préfère utliser l'API fournie
par Google, plus pratique.
Je vous passe le code en Java, pour ne pas me faire virer de la liste.
Pause, il est content que tout le monde revienne après le café.
Une remarque du public: pourquoi c'est tot en Java. Il s'excuse et avoue
que ses exemples en Perl sont trop horrible pour qu'il les montre en
public.
Conclusion sur SOAP: c'est lourd, pas vraiment browser-friendly. Donc on
va passer à:
REST
<http://en.wikipedia.org/wiki/Representational_State_Transfer>
Plus simple (mais il y a quand même une thèse par Roy Fielding dessus
(<http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm>)
Il y a 2 types d'applications REST: pur REST, qui suit les principes
développés par Fielding, et "popular REST", en fait tout ce qui est WS
mais pas SOAP.
Il explique l'origine du terme "cargo-cult"
(<http://en.wikipedia.org/wiki/Cargo_cult>)
Le principe c'est de faire des requêtes simplement avec une URL et des
paramêtres, et de récupérer le résultat en simple XML (ou en fait autre
chose, genre JSON). Ce qui est cool c'est qu'en regardant la requête on
la comprend. Par contre il faut lire la définition de l'API pour pouvoir
l'utiliser, il n'y a pas l'équivalent de WSDL (encore qu'il semble qu'il
y ait un projet pour ça).
Rest en action
Un service REST: Yahoo! Ca tombe bien, ça complète bien le service SOAP
de Google. Effectivement, sur ce qu'il montre, c'est bien plus simple à
utiliser que le WS de Google. Pas besoing de générer le squelette du
client, c'est tellement simple qu'il n'y en a pas besoin!
Il demande: "comment rendre ça sûr?" Ben de la même façon qu'on rend un
site web sûr: https!
C'est un des avantages de REST: ça réutilise l'infrastructure existante
(ceci dit il me semble qu'on peut faire ça aussi avec SOAP).
REST toujours
Un exemple avec l'API REST d'Amazon (Amazon a aussi une API SOAP, mais
vraiment c'est plus simple d'utiliser l'API REST).
<http://awszone.com> présente un peu toutes les possibiltés offertes par
Amazon. Je peux pas trop tester le site, la connection wireless est pas
terrible ici (pour une raison à laquelle je n'aurais pas pensée:
<http://radar.oreilly.com/archives/2006/07/oscon_kicks_off.html#comments
>), mais le site a l'air assez impressionant: il présente aussi la
version SOAP du service, génére du code si on veut... la totale ("really
cool stuff" d'après le speaker).
Il fait une erreur en tapant le critère de tri dans une requête,
récupère un message d'erreur: avec SOAP il aurait utilisé le WSDL et
n'aurait pas eu ce problème (mais bon, s'il avait lu la doc du service
REST non plus, et pis les tests devraient révéler l'erreur assez tôt
dans le processus de développement).
Un peu de philosophie sur REST
En fait, pour lui, il n'y a pas vraiment de différence philosophique
entre la version SOAP (Google) et la version Yahoo! (REST).
L'implémentation est différente, mais le code suit exactement les même
principes.
Il rentre dans une discussion sur la différence entre URI et URL. Les
vrai RESTeurs (ou RESTafarians) affirment que seule les URIs devraient
être utilisées, pas les URL. Il avoue ne pas vraiment être d'accord.
J'avoue ne rieng comprendre au débat! Donc j'en profite pour aller faire
un tour sur le site de la Gazzeta dello Sport pour voir le résultat de
l'appel des clubs punis... zut, ça sera dans demi-heure, donc je
retourne à mon compte-rendu, vous avez de la chance.
Je vois qu'il recommande de jeter un oeil à
<http://www.xml.com/pub/a/2004/12/01/restful-web.html> (et aux autres
articles du même auteur (<http://xml.com/pub/at/34>).
Une des forces du "popular REST" est qu'en utilisant GET, ça permet de
bookmarker facilement le résultat d'une requête. Bien sûr ça limite
aussi la taille des donnés passées entre le client et le serveur. Il n'y
a pas de règles qui force à utiliser GET, mais c'est recommendé pour
respecter l'esprit REST.
Encore quelques exemples de services REST
Un peu de Google maps (obligé non?). Il nous montre le lien généré par
le bouton "link to this page". Ca montre bien l'interêt de REST, qui
permet de retrouver facilement les choses, en donnant une URL à tout les
résultats renvoyés par un service.
Par exemple je suis là:
http://maps.google.com/maps?f=q&hl=en&ie=UTF8&t=k&om=1&ll=45.529508,-122
.663008&spn=0.001853,0.003573
Atom suit aussi les principes REST (et au passage, je trouve Atom bien
mieux fait que RSS, c'est plus logique, ça permet de mettre à peu près
tout ce que je veux dans le feed... recommandé!)
JSON
Le principal avantage de JSON, c'est que ça n'est pas XML! (*"we don't
need no stinkin' XML"*) C'est dur de parser du XML en Javascript, tandis
que JSON ça se charge hyper facilement en Javascript dans le client.
Malgré mon (lourd!) passé XMLien, je dois dire que je suis complètement
d'accord. Tiens, je savais pas que JSON est un sous-ensemble de YAML.
json.org pour plus d'info. En perl on a JSON et JSON::Syck (parce que
*"JSON is YAML"*)
ESB
Un dernier accronyme pour nous achever, mais je saisis pas ce que ça
veut dire: le E est pour "Enterprise", donc mon cerveau se déconnecte
automatiquement, désolé.
C'est fini, c'était pas mal en fait, des fois d'un peu trop haut niveau,
et un peu marketing parfois, mais c'était un bon tour d'horizon quanf
même.
Bon, je vais devoir aller manger sans savoir ce qui se passe en
Italie... je pense que je survivrais quand même.
A plus.
Mardi Après-midi
Rolling your own Google Maps - Scott Davis
Il recommence avec sa pub au début du cours.
Il commence par expliquer en quoi Google maps est important:
l'utilisation de Javascript et CSS pour une application complètement
nouvelle, et impossible à faire sans ça. En plus il n'y a pas besoin de
plug-in pour s'en servir.
En plus Google a publie' une API pour Google maps.
Les limitations du service: c'est gratuit, mais pas libre. L'utilisateur
DOIT utiliser l'API fournit par Google.
2 frameworks pour faire la même chose: MapBuilder
(<http://mapbuilder.sourceforge.net/>) et OpenLayers
(<http://www.openlayers.org>)
Donc attaquons la partie pratique: créons notre propre appli!
Le code est disponible pour les participants au cours, il sera
disponible pour le public dès que le livre qu'il est en train d'écrire
sera publié. Donc vous n'aurez pas le code aujourd'hui, juste la
description de la démarche qu'il utilise.
Version 1: d'abord on crée une image avec des "tiles", dans une table, 3
lignes, 4 colonnes.
Version 2: il crée 2 "div"s autour de la table: une qui définit la table
entière, et une qui définit la partie affichée de la table. Il utilise
CSS pour que la partie affichée soit plus petite que la table entière.
Version 3-5: Il commence à écrire le js qui fait bouger la table
entière. Du coup la table affichèe montre une autre partie de la table.
Il assigne ça au drag-n-drop de la souris (entre mouseDown et MouseUp il
"dragge"). Il utilise prototype (librairie javascript).
Un truc qui me plait: dans son script il écrit "Event.observe( window,
'load', myscript, false);" au lieu de mettre le script dans l'attribut
"onload" du tag "body". Je débute en js, et c'est le genre d'info que
j'apprécie (je sais pas si c'est spécifique à prototype ou si ça marche
de base en js, j'essaierai plus tard). Le "false" empêche l'évênement de
"bubbler".
Version 6: il ajoute un peu de code pour empêcher l'utilisateur de
dragger trop loin, pour bloquer le déplacement de la table entière.
Version 7-8: Il se débarasse de la table, et commence à faire des
calculs (semi-)sophistiqués pour savoir quelles sont les lignes/colonnes
affichées et ajuster le positionnement de la carte entière avec CSS,
puis il télécharge les images (toujours de fausses images à lui.
Bon, en fait ce tutorial me fait quand même un peu chier. Ce genre
d'exercice, pour moi, ça marche si c'est un TP. Mais suivre un mec qui
explique son code au podium pendant 3 heures, ça commence à me fatiguer.
Donc je suis pas sûr de rentrer aprés la pause...
Ma conclusion perso sur ces 2 cours est que Web Services ou Google maps
ou Ajax bidule... au bout d'un moment, c'est plus la peine de lire des
papiers ou d'aller à des cours, il faut se poser devant le clavier et
JFDI (*"Just Fucking Do It!"*).
Doc... ce soir il y a la soirée MySQL au bar d'un des hotels de la conf,
puis le State of The Onion de Larry Wall, donc c'est l'heure d'aller
faire la sieste et de prendre des forces.
Ciao
--
Michel Rodriguez
IEEE Standards - Electronic Services
More information about the Toulouse-pm
mailing list