Rich Desktop Applications

48
Rich Desktop Applications Raphaël Rougeron http://www.raphael-rougeron.com [email protected] PHP Québec 2008 – Montréal, Canada

Transcript of Rich Desktop Applications

Page 1: Rich Desktop Applications

Rich Desktop Applications

Raphaël Rougeronhttp://www.raphael-rougeron.com

[email protected]

PHP Québec 2008 – Montréal, Canada

Page 2: Rich Desktop Applications

e-tef, la version électronique du Test d'Evaluation de Français

● Test des compétences en compréhension et expression en français général

● Exigé dans certains cas par Citoyenneté et Immigration Canada (CIC)

● Lancement de la version électronique en mars 2005

● De nombreux challenges dans sa mise au point !

Page 3: Rich Desktop Applications

Architecture e-tef

Serveurd'examens

Client Flash + Zinc

Site webe-tef

SITEF

Page 4: Rich Desktop Applications

Dans quels cas utiliser une solution type RDA ?

● Gestion de médias lourds (audio/vidéo)● Besoin d'une capacité de déconnexion et/ou

d'accéder au système de fichiers local● Besoin d'une UI plus riche (ex : traitements

graphiques, cartographie, etc...)● Plus d'efficacité pour l'utilisateur :

– moins de distractions

– interface plus productive

– moins de temps d'attente ?

Page 5: Rich Desktop Applications

Rich Desktop Applications :(tentative de) définition

● Applications client / serveur– fortement connectées (web services)

– mais tirant partie des ressources locales● Cross-platform (+ ou -)● Déployables par HTTP

– installation initiale d'un CLR

– déploiement et mises à jour faciles

Page 6: Rich Desktop Applications

Librairies AJAX

Flash/Flex

Silverlight

Applets Java

Google Gears

XulRunner

Adobe AIR

.NET (WPF)

Java Web Start

Prism

RIA RDA

XUL + CSS + JS

Page 7: Rich Desktop Applications

Les plateformes les plus accessibles aux talents des développeurs web (et les plus cross-

platform) : Adobe AIR et XulRunner

Page 8: Rich Desktop Applications

Adobe AIR

● Windows / Mac OS X (bientôt Linux)

● Flash + Actionscript ou Flex + Actionscript ou HTML + CSS + Javascript

● Moteur WebKit

● Support audio / vidéo / PDF

● IDE : Aptana, Flex Builder

● Runtime commun à toutes les applications

● Installation et mise à jour des applications

● Signature d'applications

● Propriétaire...

Page 9: Rich Desktop Applications

Pourquoi AIR peut séduire les développeurs Ajax...

● Mêmes compétences requises● Frameworks JS directement exploitables

(jQuery, extjs, dojo, ...)● Réutilisation du code● Prototypage rapide● Intégration OS via une API JS

Page 10: Rich Desktop Applications

Hello world – part 1

<?xml version="1.0" encoding="utf-8" standalone="no"?><application xmlns="http://ns.adobe.com/air/application/1.0.M5" appId="demo" version="1.0"> <name>Démo</name> <title/> <description/> <copyright/> <initialWindow> <title/> <content>demo.html</content> <systemChrome>standard</systemChrome> <transparent>false</transparent> <visible>true</visible> </initialWindow></application>

application.xml

Page 11: Rich Desktop Applications

Hello world – part 2

<html> <head> <script type="text/javascript" src="AIRAliases.js"></script> </head> <body> <h1>Hello world</h1> </body></html>

demo.html

Page 12: Rich Desktop Applications
Page 13: Rich Desktop Applications

Réutilisation de code ?

mmmm...

Page 14: Rich Desktop Applications

Adobe AIR : API Javascript

● Windows et Chrome● Système de fichiers● Drag n' Drop● Copier/coller

● SQLLite● Monitoring de

connexion● Requêtes HTTP

(classe URLRequest)

var file = new air.File();file.addEventListener(air.Event.SELECT, dirSelected);file.browseForDirectory();function dirSelected(event) {

alert(file.nativePath); }

Page 15: Rich Desktop Applications

Adobe AIR

Page 16: Rich Desktop Applications

Adobe AIR

Page 17: Rich Desktop Applications

Adobe AIR

Page 18: Rich Desktop Applications

Adobe AIR

Page 19: Rich Desktop Applications

Adobe AIR

Page 20: Rich Desktop Applications

Adobe AIR

Page 21: Rich Desktop Applications

XulRunner

● Plateforme de développement d'applis XUL● Version stable : 1.8.4 (-> Firefox 1.5)● Windows, Mac, Linux● Moteur Gecko● XUL + CSS + Javascript● IDE : XulBooster (plugin Eclipse)● Open Source

Page 22: Rich Desktop Applications

XUL

● XML-based User interface Language

● Ensemble de balises correspondant à des éléments d'interface graphique :

● Contrôles de formulaires● Grilles, arbres● Barres de menus● Barres d'outils

● Démo : XUL périodic table http://www.hevanet.com/acorbin/xul/top.xul

Page 23: Rich Desktop Applications

Hello world – part 1

[App]Vendor=R2Name=demoVersion=0.1BuildID=20070330Copyright=NonsenseID=xxx

[Gecko]MinVersion=1.8.1MaxVersion=1.9

application.ini

Page 24: Rich Desktop Applications

Hello World : part 2

<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin/" type="text/css"?><?xml-stylesheet href="chrome://project/skin/main.css" type="text/css" title="Skin"?><!DOCTYPE window SYSTEM "chrome://project/locale/start.dtd"><window

title="&window.title;"xmlns:html="http://www.w3.org/1999/xhtml"

xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"

style="width:900px;height:700px;margin:0px;padding:0px;" onload="Application.init();">

<h1>Hello World !</h1> </window>

/chrome/content/start.xul

Page 25: Rich Desktop Applications

XulRunner : quoi d'autre ?

● Localisation facile● XBL : définition de composants d'interface

réutilisables● XPCOM : création de composants métiers

réutilisables en JS, C, C++, Python● API JS :

– Manipulation d'images

– Système de fichiers

– Drag n' Drop, clipboard

– SQLLite dans la version 1.9

Page 26: Rich Desktop Applications

XulRunner

var nsIFilePicker = Components.interfaces.nsIFilePicker;var fp = Components.classes["@mozilla.org/filepicker;1"] .createInstance(nsIFilePicker);fp.init(window, __("chooseDir.filepicker.title"), nsIFilePicker.modeGetFolder);if (fp.show() == nsIFilePicker.returnOK) { this.prefs.setComplexValue("project.userDir",

Components.interfaces.nsILocalFile, fp.file); this.userDir = fp.file; this.start();}

Page 27: Rich Desktop Applications

XulRunner

Page 28: Rich Desktop Applications

XulRunner

Page 29: Rich Desktop Applications

XulRunner

Page 30: Rich Desktop Applications

XulRunner

Page 31: Rich Desktop Applications

XulRunner

Page 32: Rich Desktop Applications

RDA : recommandations

● Indicateurs d'activité ! (loading...)● Raccourcis-clavier, surtout les basiques (tab,

enter, ...)● Implémenter le copier/coller

(et le drag n' drop)● Survol des boutons● Adopter le look & feel des applis desktop

Page 33: Rich Desktop Applications

AIR vs. XULRunner

Page 34: Rich Desktop Applications

Relations client - serveur

Page 35: Rich Desktop Applications

Support des Web Services

AIR::Flex AIR::Ajax XulRunnerXML-RPC + (non-natif) - +SOAP ++ - ++REST +++ +++ +++

Page 36: Rich Desktop Applications

REST en résumé

● Utilisation du plein potentiel de HTTP● Ressources et URIs● GET, POST, PUT, DELETE, HEAD, OPTIONS● Codes d'état : 200 OK, 201 Created, 400 Bad

Request, etc...● Représentations des ressources : XML, JSON,

Atom, RSS, ical, CSV...

Page 37: Rich Desktop Applications

Penser ressources plutôt qu'actionsGET /postsPOST /posts/addGET /post/get/123POST /posts/update/123POST /posts/delete/123

vs

GET /postsPOST /postsGET /posts/123PUT /posts/123DELETE /posts/123

Page 38: Rich Desktop Applications

REST et PHP

● Difficile de trouver des outils RESTful en PHP !● ZF : Zend_Rest_Server n'est pas RESTful...● Symfony, CakePHP, CodeIgniter : pas de réel

support, même si cela reste possible de l'implémenter soi-même

● 2 frameworks RESTful : Konstruct et Tonic, mais encore bien jeunes...

● Faut tout faire soi-même ;)http://www.stato-framework.org

Page 39: Rich Desktop Applications

The Rails way : contrôleurs RESTful

$router = new My_Controller_Router_Rewrite();$router->addResource('bookmarks', new My_Controller_Router_Resource( '/users/:username/bookmarks', array('controller' => 'bookmarks',)));return $router;

http://monservice.com/users/raf/bookmarks/xxx.js-> retourne JSON

http://monservice.com/users/raf/bookmarks/xxx.xml-> retourne XML

http://monservice.com/users/raf/bookmarks/xxx-> retourne HTML

Page 40: Rich Desktop Applications

class BookmarksController extends My_Controller_Action{ // GET /users/raf/bookmarks public function indexAction() {...} // GET /users/raf/bookmarks/add public function addAction() {...} // GET /users/raf/bookmarks/edit public function editAction() {...} // POST /users/raf/bookmarks public function doPostAction() {...} // GET /user/raf/bookmarks/xxx public function doGetAction() {...} // PUT /user/raf/bookmarks/xxx public function doPutAction() {...} // DELETE /user/raf/bookmarks/xxx public function doDeleteAction() {...}}

?>

Page 41: Rich Desktop Applications

Mais attention :class BookmarksController extends My_Controller_Action{ // GET /user/raf/bookmarks/xxx public function getAction() { $this->view->bookmark

= Bookmarks::find($this->__getParam('id')); switch ($this->getRequest()->getFormat()) { case 'xml': $this->renderXml(

$this->view->bookmark->toXml() );

break; case 'atom': ... break; } }}

Page 42: Rich Desktop Applications

Mais attention :class BookmarksController extends My_Controller_Action{ // GET /user/raf/bookmarks/xxx public function getAction() { $this->view->bookmark

= Bookmarks::find($this->__getParam('id')); switch ($this->getRequest()->getFormat()) { case 'xml': $this->renderXml(

$this->view->bookmark->toXml() );

break; case 'atom': ... break; } }}

Les contrôleurs peuvent devenir lourds !!!

Page 43: Rich Desktop Applications

Responsabilités des contrôleurs

● Création d'objets associés (multiples INSERTs) ?● Validation des paramètres ?● Transactions ?● Envoi de mail, notifications ?

Est-ce vraiment le rôle des contrôleurs ?

Page 44: Rich Desktop Applications

Couche Services Ressourcesclass Bookmarks extends SResource{ public function get() {...} public function post() {...} public function put() {...} public function delete() {...}}

● Possibilité d'offrir des points d'entrée SOAP, XML-RPC et REST <methodName>bookmarks.put</methodName>● Utilisation de l'API de Réflexion :

● Typage et validation des paramètres (type hinting)● Génération automatique des fichiers WSDL et WADL

Page 45: Rich Desktop Applications

RADAR (Dave Thomas)Rest Application, Dumb-Ass Recipient

ServeurREST

Client Riche

Serveurde pages

Browser

Page 46: Rich Desktop Applications

Ressources

Dispatcher

Client riche Navigateur

Controller

View

Page 47: Rich Desktop Applications

Des questions ?

Page 48: Rich Desktop Applications

Use the Force of Javascript, Luke