Vous êtes sur la page 1sur 84

PROGRAMMEZ !

PROgrammez !
www.programmez.com
mensuel n119 - mai 2009

Le magazine du dveloppement

Tout savoir sur

Eclipse 4.0 !

Silverlight 3.0 :
Microsoft rvolutionne son web

CODER

pourle

istockphoto.com/Pgiam

FUN
Programmer pour le plaisir avec Wii Remote, Android, DeepZoom, Smallbasic, Skype, Yahoo !

Cloud Computing
Vos applications sur le web !
Les diffrentes architectures du cloud Google App Engine la sauce Java Windows Azure, les services Amazon
M 04319 - 119 - F: 5,95 E

Tmoignages

Faire carrire ltranger


Serveur
Installer LAMP sans souci

Windows
PowerShell 2.0 : toutes les nouveauts

Mthode
Matriser le Design Pattern Etat

3:HIKONB=^UZ^Z]:?k@b@b@j@k;

Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH

Donnez votre avis sur ce numro : www.programmez.com/magazine_satisfaction.php

PRO grammez !
Le magazine du dveloppement

numro 119 - mai 2009


12

sommaire\\

\\ actus
Lactualit en bref ..............................................................................8 Agenda ..............................................................................................8

\\ projet
Windev : lentreprise avant tout ..........................................................11

22

\\ vnements
Solutions Linux : nuage, matriel et succs............................................12 Intel Software Conference ..................................................................13 Microsoft Mix 2009............................................................................14

\\ outils
Dans les coulisses du projet Eclipse e4 ................................................16 Silverlight 3.0 : un cran au-dessus !......................................................22 27

\\ gros plan

Cloud Computing :
Vos applications sur le web !
Cloud Computing : plates-formes et fonctionnement................................27 Dveloppez en Java vos applications Google App Engine ..........................30 Manipuler les files de messages de Windows Azure Storage depuis Java ..33 Comprendre loffre et larchitecture Amazon Web Services......................37

\\ dossier : Coder pour le

FUN

41

Wiimote, XNA et C# ..........................................................................41 DeepZoom : un zoom infini pour le web ! ..............................................44 Dvelopper un dictaphone pour Android ................................................48 Un gadget Skype pour SideShow ..........................................................53 Raliser votre widget avec Yahoo ! Blueprint ..........................................58 Smallbasic : le langage de 7 77 ans ..................................................61

62

\\ carrire
Faire carrire ltranger....................................................................62

\\ technologie
Vous ne reconnatrez plus votre C++ ....................................................64

\\ code
Ajax et framework PHP ......................................................................66 Installer et utiliser Lamp / Wamp ........................................................68 Comprendre le Design Pattern Etat ......................................................70 Dcouvrir PowerShell 2 ......................................................................74

\\ temps libre
En direct des labos ! ..........................................................................79 Crer un jeu vido de A Z avec XNA (suite et fin) ................................80 Les livres du mois ..............................................................................82

En complment sur www.programmez.com


CODE
Les sources des articles

NOUVEAU
Livres blancs : langages, outils...

TLCHARGEMENT QUOTIDIEN
ECLIPSE e4 Tous les outils et leurs mises jour Actualit Forum Tutoriels, etc.

FAITES EVOLUER VOTRE CODE.


Linnovation en dveloppement parallle.
Analysez, compilez, dboguez, contrlez et optimisez votre code pour le multicore avec Intel Parallel Studio. Fait pour les applications srielles daujourdhui et les innovations parallles de demain.

Pr-commandez ds maintenant. Date de livraison le 26 mai.


www.intel.com/software/parallelstudio

2009-2010, Intel Corporation. Tous droits rservs. Intel, le logo Intel, sont des marques dIntel Corporation, dposes ou enregistres aux tats-Unis et dans dautres pays.

PRO grammez !
Le magazine du dveloppement

dito\\

Un ciel nuageux
Serions-nous retombs dans le cycle infernal de la bulle internet d'il y a 9 ans ? On dit souvent que l'Histoire ne se rpte jamais ou au contraire quelle n'est qu'un ternel recommencement... Avec notre fameux " nuage " informatique, qui n'est finalement qu'une autre utilisation des applications sur Internet, on redcouvre le Web fourre-tout et la profusion d'annonces autour du " cloud " pour rester tendance. Les esprits chagrins, ou les mauvais esprits, c'est selon l'humeur, diront " mais c'est simplement l'informatique la demande, et les applications en mode ASP d'il y a 10 ans ! ". Ce nest , ni totalement faux ni totalement vrai . Le " cloud " les remet au got du jour, et en y ajoutant une dimension indite ! Je paie lapplication et les ressources machines que j'utilise. Et surtout, je suis capable d'adapter en quelques secondes mon serveur " dans le nuage " au nombre d'utilisateurs connects mon application " nuage " ! Imaginez que vous ayiez un site web marchand qui connaisse priodiquement des pics d'activits; au lieu de payer des dizaines de serveurs sous-utiliss durant des mois, vous vous contentez de louer pour x heures les serveurs et les ressources ncessaires. Si pour l'utilisateur et l'administrateur, les avantages sont certains, cela reprsente pour l'diteur, une remise en cause et un changement profond de son modle conomique. Il doit passer de la vente de licences la location, mais il lui faudra plusieurs annes avant d'obtenir le mme chiffre d'affaires ! Par ailleurs sur la scurit, l'introprabilit entre les services, de nombreuses questions se posent car aujourd'hui de srieuses lacunes existent. Et les pannes successives sur Google, Windows Azure, Salesforces jettent le trouble sur la qualit de service et la disponibilit des services et des plates-formes. Les fournisseurs de nuage sont obligs de s'engager sur un taux de disponibilit. Mais que faire quand on agrge plusieurs services et qu'un prestataire tiers tombe, entranant le reste des services, qui, pourtant, est disponible ? Casse-tte en perspective sur les responsabilits. La solution ? Avoir deux ou trois prestataires de remplacement pour chaque service SaaS ! Et pour notre ami le dveloppeur, qu'est-ce que le Cloud change ? Il est peu concern pour le moment, car les technologies, les API, les plates-formes voluent rapidement et la mise en production s'avre dlicate sur des environnements non stables susceptibles de rendre obsolte un dveloppement. Cependant, ds aujourd'hui, le dveloppeur doit comprendre les enjeux, la philosophie du Cloud. Car si fondamentalement, le code ne change pas beaucoup d'un code classique sur sa machine, il doit tout de mme tre conscient des limites de certaines fonctions, acqurir de nouveaux rflexes de scurit, de modles de donnes, grer les modes connect-dconnect. Il lui faut composer avec les interfaces et une puissance machine sans rapport avec sa machine locale, repenser l'architecture, la structure de son application, de son code. Et surtout, il devra choisir la plate-forme Cloud computing et se limiter celle-ci, car chaque fournisseur diteur veut tirer la couverture soi... Aspirine non incluse. Franois Tonic

Rdaction : redaction@programmez.com Directeur de la Rdaction : Jean Kaminsky Rdacteur en Chef : Franois Tonic - ftonic@programmez.com Ont collabor : F. Mazu, C. Remy, C. Soutou. Experts : G. Renard, B. Cab, G. Andr, G. Plouin, V. Bostoen, R. Kwon, L. Bar, C. Lomba, S. Mornas, D. Guignard, J. Chable, F. Queudret, C. Villeneuve, P. Guermonprez, J-Y. Terrien, F. Dupuis, R. Sabin Mompelat, F. Pedro, D. Cohen. Crdits photo : istockphoto.com/Pgiam Publicit : Rgie publicitaire, K-Now sarl Pour la publicit uniquement : Tl. : 01 41 77 16 03 - diff@programmez.com Editeur : Go-02 sarl, 6 rue Bezout 75014 Paris - diff@programmez.com Dpt lgal : parution - Commission paritaire : 0712K78366 ISSN : 1627-0908 Imprimeur : ETC - 76198 Yvetot Directeur de la publication : J-C Vaudecrane
Abonnement : Programmez 22, rue Ren Boulanger, 75472 Paris Cedex 10 - Tl. : 01 55 56 70 55 mail : abonnements.programmez@groupe-gli.com Fax : 01 40 03 97 79 - du lundi au jeudi de 9h30 12h30 et de 13h30 17h00, le vendredi de 9h00 12h00 et de 14h00 16h30. Tarifs abonnement (magazine seul) : 1 an - 11 numros France mtropolitaine : 49 - Etudiant : 39 - CEE et Suisse : 55,82 - Algrie, Maroc, Tunisie : 59,89 - Canada : 68,36 - Tom : 83,65 Dom : 66,82 - Autres pays : nous consulter. PDF : 30 (Monde Entier) souscription exclusivement sur www.programmez.com

LINFO PERMANENTE
WWW.PROGRAMMEZ.COM

PROCHAIN NUMRO
N120 juin 2009, parution 31 mai

XP, les mthodes


pour mieux dvelopper
Les mthodes agiles sont l pour mieux matriser un projet, un dveloppement.

Web 2.0

Silverlight 3.0 : tout ce qui va changer pour le dveloppeur et votre site web !

Multi-plate-forme
Compiler pour plusieurs systmes, les langages utiliser, les outils dployer

actu \\ en bref
Le SDK Android passe en version 1.5, ou presque. Pour le moment disponible en pr-version, ce SDK apporte de nombreuses nouveauts : amlioration des lments dinterface, rotation des applications, performances en hausse pour le GPS, Gmail, la camra. Le moteur webkit est lui aussi mis jour. Surtout, on dispose de nouvelles API (media Framework, fonctions vocales). Attention : le SDK prcdent ne fonctionne pas avec le nouveau plug-in. Site : http://developer.android.com/sdk/preview/ Vous rvez dutiliser CheckStyle avec vos codes C# ? Cest dsormais possible avec StyleCop. Son objectif : analyser le code C# et sortir un rapport des violations. Il permet de faciliter la correction des principales failles. Excellente initiative. Site : http://www.codeplex.com/StyleFix Netbeans travaille toujours sur la future version 6.7 devant sortir en juin prochain. Les grandes nouveauts sont lintgration de Maven et de Kenai, (sorte de forge pour y dposer des projets open source). Java 7 avance toujours. Une des nouveauts sera lintgration du Coin Project. Ce projet doit faciliter ce que lon appelle en anglais " Small language changes ". Cela doit par exemple permettre des appels aux constructeurs plus concis avec des paramtres, avoir des call avec des mthodes aux noms " exotiques ", notamment en utilisant des langages non Java. Coverity lance Coverity Build Analysis. Cette technologie innovante de Coverity veut donner aux entreprises les moyens de lutter efficacement contre le gaspillage de temps et dargent occasionn par les systmes de compilation sousperformants, lors des phases de dveloppement. QT Creator, le nouvel IDE graphique de Qt Software, est disponible depuis quelques semaines. Il propose un diteur avanc pour son code C++, des outils de gestion de projets et de build et possde bien entendu un puissant constructeur graphique dinterface. A tester durgence ! Site : http://www.qtsoftware.com/products/developer-tools

Langage
ukihiro "Matz" Matsumoto, crateur de Ruby, tait de passage Paris lors du salon Solutions Linux. Nous avons eu le plaisir de le rencontrer quelques minutes. " Jai dmarr le projet il y a 16 ans, en 1993. Ctait mon projet, mon langage, en Open Source. En 1995, avec la premire version, la communaut commena sagrandir avec les gens sy intressant en Europe, aux Etats Unis. " raconte Matz. Mais durant les premires annes comme il lvoque, la communaut fut surprise et essentiellement centre au Japon et les premires mailinglists internationales se dvelopprent dans un 2e temps en Anglais. " A partir de l, la popularit commena crotre " poursuit notre crateur. " Jai design le langage selon mes rflexions, mes convictions. Ruby est fait pour tre facilement utilisable. Cest je pense la raison de son succs. Mais il est (aussi) trs riche. Et redonne envie de programmer. Cest important je trouve ",

Le crateur de Ruby surpris par son succs ! Y

F.T.

commente Yukihiro. Quant limplmentation de Ruby sur les machines virtuelles comme Java ou .Net, le crateur rappelle quil sagit de son bb et quil y a deux lments considrer : le design et limplmentation. Mme si cela est une bonne chose, " dans le futur, il sera plus rapide. Et ce sera mon Ruby (qui sera implment) " rajoute Matz. Car un des problmes actuels est que limplmentation nest pas celle du langage " standard " mais dune version modifie et souvent incomplte. " Je communique avec les projets JRuby et IronRuby mais

je ne travaille pas avec eux. Je fixe, par exemple, les bugs ", poursuit Yukihiro. Aujourdhui, si Yukihiro reste le penseur de Ruby, plus de 50 comitters de la communaut travaillent faire voluer et dvelopper Ruby. Sur les outils, la situation est bonne. " Ruby est utilis par de nombreux dveloppeurs que ce soit sur Eclipse ou NetBeans qui lintgre par dfaut. Il faut avoir de meilleurs tests, de meilleurs profiling, etc. " commente Yukihiro. A noter la disponibilit de Ruby 1.9.1 qui fixe plusieurs bugs.

agenda \\
MAI Les 12 et 13 mai 2009, CNIT Paris La Dfense : - Virtual forum (13 mai), pour tout savoir virtualiser www.virtualforum.fr - Solutions intranet travail collaboratif (12 et 13 mai), www.salon-intranet.com - Solutions IT On Demand (12 mai) tous les logiciels et services applicatifs en ligne la demande. - Management de projet www.groupesolutions.fr Les 16 et 17 mai, Paris La Villette, Ubuntu Party. Loccasion de tester la distribution, de rencontrer la communaut, de mieux connatre Ubuntu. Des confrences et ateliers se succderont les deux jours. Entre gratuite. www.ubuntu-party.org Le tour dcouverte Flex 3 et Air travers la France. Ateliers gratuits de dcouverte des outils Adobe http://www.baao.com/Formations/LE_TOUR_DE_F LEX_ET_AIR_.html

Le 26 Mai, Toulouse, premire dition de l"Open Source Software Industry Forum " (OSSIF), pour crer une rencontre annuelle entre les professionnels du logiciel libre et les grands comptes industriels locaux. http://www.ossi-forum.com/ Les 25 et 26 Mai 2009, Paris 12e, Chalet de la Porte Jaune. Edition 2009 de la confrence XP Day France, pour tout savoir sur les mthodes agiles. (www.xpday.fr).

ETRANGER JUIN Cambridge (Grande-Bretagne), du 16 au 18 juin Confrence Code Generation 2009 Lvnement phare europen sur les approches de gnration de code. Plus de 30 sessions pratiques prsentes par des experts de l'industrie http://www.codegeneration.net/cg2009/

PROgrammez ! \\ Mai 2009

actu \\ en bref
Intel renforce sa prsence dans le projet du compilateur GCC. Plusieurs collaborateurs du fondeur vont participer aux dveloppements, lamlioration des fonctions de GCC, binutils, gdb et glibc. Une bonne nouvelle ! HP a surpris son monde en dvoilant un outil gratuit pour surveiller et scanner les applications Flash : SWFScan. Issu du laboratoire scurit, cet outil dcompile les applications et extrait le code ActionScript afin de vrifier les failles potentielles (60 failles contrles). Site : http://www.hp.com/go/swfscan SQL Server 2008 est mis jour en service pack 1. Deux nouveauts retenir : lintgration du pack dans linstalleur du SGBD, la version 2 du Report Builder destine la BI et au reporting. Pas de nouvelle fonction intgre. Le SP2 pour MS Office 2007 devrait tre disponible quand vous lirez ces lignes. En attendant la sortie de Java 7, le projet Jigsaw a t lanc dans le cadre de la JDK pour le rendre plus modulaire, plus souple. La premire tape concernera Java 7 qui devrait arriver dbut 2010. Lobjectif est de crer un systme de modules bas niveau, ddi spcifiquement la JDK et accessible aux dveloppeurs et Sun le supportera totalement. Il se veut complmentaire aux JSR 277, 294 et mme OSGi. Pour en savoir plus : http://blogs.sun.com/mr/entry/jigsaw Vous devez rdiger une documentation, un rapport technique ? Calenco peut vous aider. Il permet un usage collaboratif, une gnration multi format. Calenco se prsente sous forme dune application web, et un stockage au format XML des donnes.

Composant

Infragistics fait le printemps


Lditeur vient de sortir la version 2009.1 de sa suite NetAdvantage pour .Net. Pour cette dition, Infragistics a voulu miser sur les performances et la qualit gnrale des composants, tout en rajoutant de nouveaux composants. Rappelons que cette suite inclut ASP .Net, WPF et Windows Form. Le petit nouveau est Silverlight qui arrive en version technique (CTP) et est dj prt tre utilis avec Silverlight 3 ! Auparavant, lditeur avait mis jour sa suite NetAdvantage pour JSF qui introduit trois nouveauts : un modle objet client (dans le navigateur), vitant daller sur le serveur, un webgrid amlior (comme le support du CSV) et une fonction Icon pour faciliter le changement des tats des icnes.

Outil

Les outils de provenance du code source : un rel enjeu ?


Avec la multiplication des licences, des briques open source, des codes sources extrieurs, il devient ncessaire de faire attention lorigine du code utilis afin dviter toute violation de proprit intellectuelle et en particulier un code mal identifi, des violations de licences ou mme un conflit inter licences. Ces outils visent soit vrifier la vole soit a posteriori le code : provenance (origine), licence utilise, dtecter des violations. Ils sappuient sur dimmenses bases de donnes rpertoriant des centaines de millions de lignes de code open source. On peut aussi y dfinir ses propres politiques de vrification. Pour une entreprise, ces outils peuvent viter bien des problmes comme on a pu le voir avec Cisco ou Free. HP propose deux solutions : FossBazaar et Fossology. Ce dernier vise la dcouverte du code, des licences. Surtout, loutil est disponible en open source ! Black Duck est aujourdhui lditeur le plus connu sur ce march, certes petit, mais destin un bel avenir. Notons enfin la prsence de Protecode. Originaire du Canada, il est depuis peu prsent en France. Une version dveloppeur est disponible : Developer IP Assistant. Elle supporte Java, javascript, C, C++, C#, VB, PHP Python. Il sintgre en , toute discrtion dans le dveloppement pour vrifier les ajouts de codes, les licences, etc.

Web

Ilog Elixir passe la 2e


Aprs plusieurs mois de dveloppement, la suite de composants graphiques pour Flex / Air dAdobe est enfin disponible en version 2. Plus que jamais, Elixir renforce sa partie prsentation et visuelle avec des effets amliors et des composants graphs bien plus labors. On peut ainsi concevoir des graphs dynamiques trs complexes, de la cartographie ou encore des calendriers. Les dveloppeurs ont beaucoup travaill sur loptimisation mais aussi sur la documentation qui tait parfois incomplte ou pas assez prcise. Ce nest pas pour autant quIlog oublie la v1 (supprime du catalogue) en fixant des bugs avec un second patch. Site : http://www.ilog.com/products/ilogelixir/

10

PROgrammez ! \\ Mai 2009

Windev : lentreprise avant tout


ans le prcdent numro, nous avions fait un focus sur cet atelier de dveloppement tout-en-un. Cest aussi un des succs logiciels franais les plus connus. Contrairement une ide reue, Windev nest pas que franco-franais. " Notre march est europen. Nous sommes prsents dans 60 pays dont les Etats-Unis, lAustralie ", prcise Virgil Saramito (directeur des ventes, PC Soft). Et les utilisateurs sont trs divers, mme si lentreprise est la cible principale, du grand compte la PME / TPE, sans oublier les dveloppeurs indpendants et les consultants, et les dveloppements sont majoritairement des applications de gestion.

Alter Way, intgrateur Open Source de rfrence, couvre les besoins de lensemble du systme dinformation avec ses quatre offres

CONSULTING
Conseil en architecture Choix doutils Industrialisation Best practices Audits

SOLUTIONS
SOLUTIONS APPLICATIVES Applications Web, ECM, E-commerce, Intgration de donnes, Business intelligence, Dveloppements spcifiques SOLUTIONS DINFRASTRUCTURE Supervision, Serveur de messagerie, Serveurs dinfrastructure, Bases de donnes, Management IP, Filtrage et partage des connexions Internet, Scurit

Des SSII spcialises en Windev


Armstrong Solutions, SSII ralisant des logiciels sur mesure pour les entreprises et administrations, utilise depuis de nombreuses annes Windev qui est le principal environnement mis en uvre par les quipes. La socit est une SSII spcialise en Windev ; elles sont encore peu nombreuses en France. Mme si comme nous lindiquaient Franck Palusci et Bruno Richet, les grands comptes peuvent hsiter choisir Windev, cause du " politiquement correct ", et parce que loutil nest pas rfrenc par les DSI.

FORMATION
Un catalogue de plus de 60 formations Des programmes de certifications : PHP, MySQL, PostgreSQL, Java 1200 personnes formes par an Prs dune centaine dintervenants sur tous les sujets dont quinze internes certifis Des partenariats forts : SUN, MySql, Talend, Ingres

Louverture
Mais comme le rappelle V. Saramito, Windev ne se limite pas cela, loutil est prsent dans lindustrie, notamment pour la ralisation des interfaces hommesmachines. Il offre galement des fonctions bas niveau, pratiques pour se connecter et piloter des matriels embarqus, rcuprer des donnes de capteurs, etc. Et lajout de Java et dun plug-in Eclipse apporte de nouvelles dimensions loutil. Quelle est la force de Windev ? " Nous avons un planning 5 ans. Nous nous adaptons aux demandes, au march " prcise V. Saramito. PC Soft sait ragir en intgrant rapidement des technologies qui simposent ou trs demandes par les utilisateurs. La ractivit est un lment important. Le web 2 est trs prsent, la version 14 renforce cela, avec Google, Java, Ajax, Salesforce ou encore les fonctions de mashup.

HOSTING
Hbergement haute disponibilit 24/7 Exploitation et infogrance Solutions SaaS Solutions de stockage Solutions de-commerce Des solutions techniques performantes et stables

Des solutions tout faire


Mais les rsultats ravissent les responsables. La SSII voit dans un langage de programmation en franais, un atout (cest plus comprhensible, mme pour un non dveloppeur). Et la disponibilit de WebDev -ddi aux dveloppements web- fait aussi ses preuves. Ainsi, Armstrong Solutions a conu, entre autres, le site de Speedy Et la SSII aligne plusieurs dizaines de rfrences, en particulier dans les grandes entreprises. Jean Vidames

TECHNOLOGIES
PHP / Python / Java / ECM JasperSoft / Talend / Bases de donnes Open-Xchange

www.alterway.fr

OPEN SOURCE
Le libre, autrement

vnements \\ linux

Solutions Linux : nuage, matriel et succs


Incontestablement, ldition 2009 de Solutions Linux a remport un beau succs : plus de 8000 visiteurs, plus dune centaine dexposants, des dizaines dassociations, communauts, un public constitu pour plus dun tiers de professionnels et en particulier de TPE / PME. Rendez-vous est dj donn fin mars 2010 la Porte de Versailles.

lusieurs tendances taient perceptibles durant le salon : une prsence discrte des logiciels par rapport aux annes prcdentes, le retour en force du matriel (en particulier les serveurs), des intgrateurs et SSII open source toujours aussi prsents, et enfin, la monte en puissance dUbuntu et du cloud computing. Le cloud a t une des vedettes de cette dition 2009, notamment dans les keynotes et les confrences. Ubuntu avait un discours trs prcis sur le sujet avec la prsentation de la future version 8.10 de la mouture serveur de la distribution. Ubuntu profitait de labsence de Red Hat pour se montrer. Pari russi. Lambition dUbuntu ? Proposer une alternative Windows Server, Libre et Open Source que les fournisseurs de Cloud pourraient utiliser. Lobjectif de lditeur nest pas de proposer sa propre plate-forme La prsence dUbuntu via Amazon Web Services illustre cela. Outre labsence de Red Hat, on notait la discrtion

D.R.

dIBM mais par contre un certain dynamisme de Sun avec MySQL et les serveurs

Plus de communaut moins de logiciels


La partie association fut elle aussi active, notamment contre la loi Hadopi, mais surtout grce une prsence plus importante quen 2008. Et cest une bonne nouvelle ! Lesprit communautaire prouve quil demeure vivace et bien l ! Le reste du salon tait tout de mme assez orient professionnels, entreprises, peu grand public, hormis dans les communauts. Laudience du salon prouve son orientation entreprise. Et la forte prsence des serveurs et hbergeurs dmontre cette tendance. Les acteurs souhaitent profiter de la crise et de lintrt nouveau des entreprises envers lOpen Source. Autre bonne nouvelle : le renouveau marqu du consortium OW2 que lon sentait un peu terne depuis quelques mois. Le salon fut ainsi loccasion dorganiser une grande confrence et de prsenter Elastic Grid. Ce projet est une couche de provisionning ddie au cloud et rentrant au niveau de l'infrastructure IAAS. Il vise parfaitement contrler, surveiller ce qui se passe dans son

cloud, dans les applications, les serveurs. Bien plus fin que la console EC2, Elastic Grid pourrait tre repris dans le prochain Ubuntu Server orient cloud.

Et les dveloppeurs ?
Si les logiciels furent discrets (hormis les classiques openOffice, la messagerie qui se pose en alternative Exchange), le dveloppeur ntait pas non plus la fte. Peu de choses spcifiques dans les alles. Novell dvoilait le trs attendu SuSe Studio, un outil en ligne pour configurer et gnrer une distribution SuSe ! La partie dveloppeur la plus intressante tait sans aucun doute dans les communauts et en particulier autour de Ruby, PHP Quelques diteurs taient . tout de mme prsents comme Xool Technologies. Xool est une SSII franaise spcialise dans les logiciels industriels et en particulier sur les outils de tests. Le salon fut aussi loccasion de croiser Tristan Nitot de Mozilla Europe et de parler du futur de Mozilla et tout particulirement de Firefox 3.5 et mme 4.0, ou encore de rencontrer pour quelques heures peine le crateur de Ruby ou le nouveau patron de Zend F.T.

Quelques annonces retenir


linutop : un PC 100 % open source, de dimensions rduites le but ? rduire le cot de maintenance. Disponible en deux versions il est idal pour les coles, les petites structures. Globull de Bull : un projet innovant de Bull ! On peut y stocker son environnement de travail sur ce botier hautement scuris. Peut tre un peu cher pour le particulier mais pour crypter et scuriser des donnes, cest lidal ! Azuki : enfin quelque chose pour le dveloppeur. Azuki propose une plate-forme complte de dveloppement et notamment un toolkit RIA, le tout reposant sur un socle open source, dont lincontournable Spring. Accord de formation entre Anaska et Sun : Anaska dj fortement prsent dans les formations MySQL, la socit (groupe Alter Way) va proposer lensemble de la gamme Sun (Glassfish, JavaFX, etc.).

12

PROgrammez ! \\ Mai 2009

confrence \\ intel

Intel est connu pour ses processeurs mais un peu moins pour ses logiciels destins aux dveloppeurs C++ et Fortran permettant de profiler, doptimiser son code. Comme chaque anne, le fondeur organise une confrence logicielle en Europe. Cette anne, elle sest droule Salzbourg en Autriche, centre exclusivement sur le code parallle.
lus dune centaine de personnes furent rassembles au cur de la vieille ville de Salzbourg : des revendeurs Intel, des partenaires, des journalistes et des dveloppeurs. Les sessions ont prsent Parallel Studio, la bote outils pour le code parallle dIntel qui sera disponible en juin prochain. Et le dfi est la hauteur de lenjeu : selon une statistique fournie par Microsoft, peine 3 % des dveloppeurs ont mis en uvre ces 6 derniers mois des instructions parallles dans leur code ! Intel a rappel le challenge : avec la gnralisation des processeurs multiples curs (mme si la majorit des ordinateurs utiliss sont en monocoeur), comment tirer parti de cette puissance ? La seule solution est dadapter son code, de loptimiser pour quil fonctionne paralllement sur plusieurs curs. Or ce travail reste dlicat et complexe. Cest pour cela que dans toutes les sessions techniques, le message de lintgration et de la simplicit a t martel.

montrer comment ce plugin pour lIDE de Microsoft aide le dveloppeur, facilite la paralllisation du code, le debug, le profiling. Cependant Intel demeure raliste : Parallel Studio nest pas une solution miracle. Au dveloppeur de faire, aussi, son travail de codeur : il faut utiliser les bons outils, savoir comment on paralllise son code et encore plus les zones de code parallliser (car on ne paralllise pas tout son code). Et il faut savoir mettre en place un cycle de dveloppement parallle : on " designe " le code, on code, on dbogue, on vrifie et on " tune ". Car noubliez pas un lment vital : un mauvais code paralllis sexcutera lentement. Un code optimis aux bons endroits sera particulirement efficace.

Le futur selon Intel Software


La journe sest conclue avec lintervention de James Reinders, vangliste et directeur des logiciels de dveloppements qui a prsent quelques nouveauts venir. Les outils tels que vTune vont bnficier des fonctions de Parallel Studio dans les versions sortant courant 2010. Toujours pour lanne prochaine, Intel promet la disponibilit de Parallel Studio Advisor, du support de Windows 7, de Visual Studio 2010 (et du concurrency runtime qui nest pas actuellement pris en compte). Mais lun des aspects les plus importants de cette session finale fut le projet Ct Technology que James range dans la catgorie " program-

Aider le dveloppeur
" Go Parallel " voil pour le slogan. La question est de savoir comment y aller. Intel a rappel quil existe deux gammes : la gamme actuelle avec le compilateur, le Thread Building Blocks, etc. et Parallel Studio. Ce dernier vise uniquement les dveloppeurs C++ sous Windows alors que les autres outils sont disponibles sur diffrents langages et pour diffrents systmes. Lintgration avec Visual Studio a t largement mise en avant par les diffrentes sessions. Objectif :

mation parallle avance ". Ct permet de faire de la programmation parallle de donnes, un axe doptimisation particulirement important pour Intel. Une bta publique sera disponible vers la fin de lanne. Il sagit dobtenir un haut niveau dabstraction, capable de monte en charge tout en offrant des performances leves. Le tout sans recompiler son code, et les outils maison (et de partenaires ?) supporteront cette technologie. Au final, une des rflexions de James mais aussi de Microsoft durant la journe fut : " faut-il un langage parallle, de nouveaux outils, de nouvelles librairies ? ". Sur le langage spcifique au monde parallle, James Reinders trouve lide intressante mais pose tout de suite la question sur le code actuel, sa migration. Ce serait un vritable Big Bang affirme-t-il. La question est loin dtre tranche mme si le but dIntel est daider le dveloppeur concevoir parallle. Mais alors pourquoi Parallel Studio nest-il pas disponible sur dautres systmes et IDE que Windows et Visual Studio ? L encore, James a t clair : Intel nest pas oppos une arrive sur Linux, mais quels IDE supporter ? Pourquoi pas Eclipse ? Un constat revenait souvent dans la bouche des participants : vanglisation, pdagogie, formation. Le dveloppement parallle exige une rigueur, une matrise du code mais aussi des librairies, des fonctions, et ce, mme si les diteurs simplifient lapproche. Franois Tonic

Mai 2009 \\ PROgrammez !

13

Photo : Thomas Pintaric (Pintaric)

Intel mise plus que jamais sur la paralllisation du code

vnements \\ web

Microsoft Mix 2009 : la grand messe


du web et du Cloud computing !
Pour la quatrime anne conscutive, Microsoft organisait le Mix Las Vegas du 18 au 20 mars dernier. Cet vnement ddi aux graphistes, intgrateurs et dveloppeurs web tait cette anne orient sur le thme de linnovation par lusage et le design ! Et les annonces ont t la hauteur de nos attentes.

ette dition 2009 prenait une tournure par ticulire avec la crise conomique actuelle. Premier constat : nous nous attendions une audience moindre par rapport lan dernier, que nenni : trs forte participation ! Beaucoup semblaient chercher un souffle dinnovation et de rupture avec la crise actuelle ! La mentalit positive et constructive, typiquement amricaine, tait bien au rendez-vous ! fonctions de diagnostic CSS et surtout le SuperPreview. Il permet de tester directement son application web, son site, le rendu, le comportement, sur diffrents navigateurs via le module SuperPreview. Occasion aussi de rappeler lexistence dASP.Net MVC. Il sagit dun nouvel lment coll ASP .net avec une approche purement MVC. Ct ASP .Net, la v4 a t prsente. Elle comprendra : les web forms, une approche MVC, Ajax, JQuery, un cache distribu. Autre bonne nouvelle, Visual Studio 2010 for Web Development se complte avec une orientation code renforce, le support amlior de JavaScript, Ajax et JQuery ou encore des fonctions de publication et dploiement. Notons aussi les annonces suivantes : Web Server Extensions, Windows Web App Gallery (la boutique dapplication Microsoft) et enfin, et peut tre le plus important : Web Platform Installer. Microsoft vous permettra au travers de cet outil de rcuprer directement depuis votre propre plate-forme des applications web quelles soient en ASP .NET ou en PHP par exemple, et de les publier (dployer) directement sur votre serveur (app + db), voire sur un serveur on the cloud. Des annonces, encore des annonces avec la mise disposition de Commerce Server 2009.

Silverlight 3, ASP.Net 4, Expression 3


Mix dbuta avec une premire keynote tenue par Bill Buxton (Microsoft Research), durant de longues minutes il a rappel limportance du design et de lexprience utilisateur versus design / produits. Le tout appuy sur un rapide historique. Microsoft semble vouloir continuer pousser lexprience utilisateur avant les technologies. Une bonne chose ! Aujourdhui, 800 personnes travaillent sur le sujet. Cette exprience utilisateur passe forcment par une analyse approfondie de deux notions : Linvestissement, depuis lide jusque la capacit de lexploiter Le temps entre le brouillon et le prototype Lintervention de Scott Guthrie tait trs attendue. Scott rappela tout dabord la vision de Microsoft sur le web : media, RIA, outils, la collaboration designer dveloppeur. Et nous fmes tout de suite immergs avec la prsentation dExpression 3.0 ! Tout dabord, un important focus sur lIDE de dveloppement web : Expression Web. Il pourrait se rsumer ainsi : utilisation des standards web, multi-langage, suppor t du ftp scuris,

Windows Azure
Ct cloud computing, Microsoft a prcis de nombreux lments par rapport Azure. Ainsi nous savons dsormais que la plate-forme sera commercialise ds 2009 avec une pr-version au plus tard en octobre prochain. Sur la technologie, on disposera dsormais dun support PHP via fastCGI et surtout dun niveau de scurit plus flexible via le .Net full trust. Sur les services, on notera lapparition des bases de donnes relationnelles sur le SQL Data Services et encore plus de standards web sur le .Net Services. Scott termina enfin sur la partie BizSpark et expliqua nouveau les fondements de ce programme Microsoft ! BizSpark tant lextension lchelle mondiale du trs clbre programme, dorigine Franaise, daccompagnement des start-up par Microsoft. Enfin noublions pas une annonce importante autour dAzure : la golocalisation. Les dveloppeurs pourront spcifier la localisation des applications et des donnes afin damliorer la latence rseau. A condition daccder un Datacenter plus proche pour

14

PROgrammez ! \\ Mai 2009

vnements \\ web
son application Nous devrions en apprendre davantage lautomne, avec la prochaine PDC ! ResourceBrowser. Revenons un peu en arrire, en octobre 2008 durant la PDC 2008. Lors de cet vnement, Microsoft effectuait le lancement de la plate-forme Azure Services et plus particulirement sur la brique Live Services du Live Framework CTP comprenant un outil de navigation (une forme de Reflector pour le Cloud //Live Services) : le Live Framework Resource Model Browser. Ayant dcid de pousser nos investigations dans le domaine du S+S Azure Services Platform ds mon retour de Los Angeles, nous avons trs vite dcouvert les limites de cet outil (bien que trs intressant la base, mais prsentant certaines difficults lors de la navigation au sein des donnes stockes dans Live Mesh principalement dans sa convivialit lusage). Suite cela, nous avons dcid de dvelopper, avec Sebastien Warin, un outil visuel permettant de naviguer au sein du Resource Model du LiveFx. Nous avons abouti rapidement sur une premire version baptise Mesh Object Browser (MOB) pour enfin voluer vers le Live Framework Explorer (LFE). LFE incorpore les fonctionnalits initiales du ressource browser et prsente galement dautres fonctionnalits bien intressantes que nous avons embarques lors de son dveloppement en plus du ct interface et incorporation VS2008, voici une rapide liste des premires fonctionnalits de celui-ci : Intgration Visual Studio 2008 SP1 sous forme daddin Navigation au sein de votre ressource modle Live Services - Contacts - Profiles (informations) - Mesh - Devices - News - MeshObject Cration, mise jour, suppression de vos MeshObjects Upload et Download de vos fichiers hbergs sur le cloud (Mesh) Sauvegarde de vos settings en tant que MeshObject (particulirement intressant pour les speakers ;p) Nhsitez pas nous faire quelques retours directement sur la plate-forme CodePlex, nous permettant ainsi damliorer, voire de corriger quelques bugs qui pourraient persister au sein du Live Framework Explorer.

Silverlight 3
Nous ne nous tendrons pas ici sur Silverlight 3 prsent dans un article de ce numro. Internet Explorer 8 : disponible ! La seconde keynote fut trs oriente navigateur et tout particulirement IE 8 ! Dean Hachamovitch, IE General Manager, sest occup de prsenter aux centaines de designers et dveloppeurs la version 8 du navigateur maison ! Les axes de cette version sont : les donnes, le design. Le design de IE 8 se veut bas et orient donnes ! Et surtout Microsoft mise sur les dveloppeurs pour exploiter les nouveauts du navigateur comme le webslice. Nous y reviendrons dans un prochain numro. Parmi les nombreuses fonctions, on notera principalement : - gestion des crashs dans les onglets : IE ne tombe pas quand sur un onglet, une erreur se produit, seul longlet en cause sera tu. - Performance globale en hausse, notamment sur le javascript - Meilleure protection contre les fraudes et contenus illicites. - Disponible en 25 langues.

Conclusion du Mix 2009


Bien que venus initialement pour recevoir plus dinformations quant au futur modle conomique de Microsoft Azure Services Platform, et malgr la non information de Microsoft ce sujet, nous avons t plus que satisfaits de cet vnement compte tenu de la diversit des annonces et des technologies prsentes. Audel des keynotes et sessions, ces vnements sont un rel vecteur de rseautage en puissance au travers des soires, discussions de couloir, repas organiss par notre hte ! Et chacun sait que Microsoft a clairement la matrise de lart de recevoir ! Noublions pas le prochain objectif cl que sera la PDC 2009 de Los Angeles, Microsoft nous annoncera peut-tre enfin son modle conomique Cloud ainsi que sa vritable stratgie au travers de la multiplicit des technologies et produits comme Azure, Mesh, Web App Gallery, Grgory Renard CTO - R&I Manager Wygwam Microsoft Regional Director - Microsoft MVP (Most Valuable Professional)

Live Framework Explorer !


Nous avons eu lhonneur et le plaisir durant notre session Mix (" lighting up web and client applications with Microsoft Live Services ") de lancer personnellement le Live Framework Explorer 1.0, un add-in pour Visual Studio ! Cet outil est le fruit de travaux de notre quipe R&I Wygwam et fut trs rapidement dtect par les quipes Azure Services Platform / Live Services de Microsoft Corp en la personne de James Senior, pour ensuite nous supporter dans la finalisation de celui-ci et son lancement lors du Microsoft Mix 2009 de Las Vegas. une bien belle aventure, il faut lavouer ! Cet outil sinscrit dans la stratgie Azure Services Platform de Microsoft / Live Services. LFE est un outil dans la parfaite continuit de celui fourni par dfaut dans le SDK du Live Framework : le LiveFx-

Mai 2009 \\ PROgrammez !

15

outils \\ java

Tlchargement sur le site www.programmez.com

Dans les coulisses du projet Eclipse e4


Il y a un peu plus dun an, forts du constat que leur outil favori tait perfectible dans certains domaines (complexit de mise en uvre de certains concepts par un dveloppeur de plug-in, limitations fonctionnelles dans lIDE, ), des utilisateurs et des dveloppeurs ont commenc organiser des tables rondes pour rflchir aux fonctionnalits cls dune future version majeure dEclipse Le projet e4 tait n !
ous le savez trs certainement, Eclipse est lorigine un IDE modulaire et extensible conu pour dvelopper du Java. En 2004, il est nanmoins apparu que cet IDE, tait tant et si bien modulaire, que les briques de base le constituant pouvaient servir de socle des applications quelconques. Cest le fameux Eclipse RCP (pour Rich Client Platform), que de nombreux dveloppeurs rutilisent aujourdhui, en venant ajouter leurs " briques " (leurs plug-in) au-dessus de celles que propose le framework. Ainsi, aujourdhui Eclipse, cest non seulement une des communauts les plus larges et les plus actives du monde de lOpen Source, mais cest aussi et surtout une panoplie de technologies qui sont bien souvent devenues des rfrences dans leurs catgories respectives. Vous avez ainsi tous forcment entendu parler dOSGi et de son modle de composants (rappelons quEquinox, un sous-projet Eclipse, est limplmentation de rfrence de la norme OSGi), de RCP qui fut un des premiers cadres pour la construction de clients riches, dEMF comme support aux dmarches MDD/MDA, et bien dautres !
Fig.1

ge " Write Once, Run Everywhere " si cher Sun nest malheureusement pas toujours applicable dans le monde Eclipse. En effet, qui na jamais rv dcrire un code de prsentation parfaitement portable, et dainsi coder des IHM rendues nativement quelle que soit la cible (desktop, Web, PDA, ) ? Grce des technologies comme RAP (Rich Ajax Platform) ou eRCP (embedded Rich Client Platform), ce rve est en partie accessible, mais il reste pour linstant trs difficile de saffranchir des limites lies aux diffrences fondamentales entre les diffrentes plates-formes : avez-vous dj essay, par exemple, la programmation multithread dans une application Web crite en Javascript ?! [Fig.1]. Cest pour pallier ces limitations grandissantes que diffrents groupes de travail ont t lancs, supports par des grands comptes (IBM, encore bien prsent, mais aussi Adobe, Windriver, Freescale, ) et galement un grand nombre de dveloppeurs indpendants.

LES AXES MAJEURS DVOLUTIONS


Parmi tous les chantiers en cours, prenons le temps de nous attarder sur ceux qui vont vritablement rvolutionner le monde Eclipse.

Des limitations historiques


Ceux et celles dentre vous qui se sont dj aventurs dans le dveloppement de plug-in Eclipse ne me contrediront pas si jaffirme ici que cest une tche particulirement ardue, et quil est bien souvent difficile de savoir par quel bout commencer lorsque lon se retrouve lch dans la jungle des API Eclipse. Pour faire simple, et en ne noircissant qu peine le tableau, ces API sont en effet souvent difficiles trouver, puis matriser. La plupart du temps, il existe plusieurs faons de rsoudre le mme problme, en passant par des API diffrentes, et la meilleure des faons de faire nest pas ncessairement documente Un autre des reproches souvent mis concerne le fait quEclipse, mme dans sa dclinaison RCP est une plate-forme encore trop , connote " IDE ". Il nest en effet pas toujours ais de venir rutiliser des mcanismes Eclipse de base sans leur aspect " IDE ". Les mtaphores de " vue ", de " perspective ", d" diteur ", bien que souvent intressantes, sont parfois limitatives, voire compltement inadaptes. Enfin, malgr lincroyable modularit quapporte OSGi, et la sparation bien distincte entre le " runtime " et la couche RCP lada,

Modlisation du " workbench "


Il est bien souvent reproch la plate-forme Eclipse (et RCP en particulier), sa complexit. Non pas quil soit systmatiquement compliqu de coder des fonctionnalits utilisant lAPI Eclipse, mais plutt quil faille souvent jongler entre plusieurs manires de raliser la mme chose, dcoder certains fonctionnements obscurs, et jongler parmi des dizaines dinterfaces. En outre, larchitecture actuelle dEclipse RCP si elle respecte le paradigme MVC, est loin den faire , une implmentation cohrente et homogne, et il est ainsi loin dtre vident de porter Eclipse sur un toolkit graphique diffrent autre que SWT mme si le projet RAP y arrive plutt bien. Afin duniformiser la faon dont doit idalement sarchitecturer toute application RCP (vues, onglets, perspectives, ), un groupe de travail commenc modliser formellement le workbench Eclipse. Lobjectif est davoir un cadre plus strict pour la conception de son application RCP l o lon errait auparavant dans une jungle dAPI. , Le modle de ce quest un workbench a t crit en utilisant Ecore, le langage de modlisation propos par EMF (Eclipse Modeling Fra-

16

PROgrammez ! \\ Mai 2009

Intel Software Development Products

La Rvolution du Paralllisme
Intel Parallel Studio est un jeu doutils paralllisme pour
les dveloppeurs Visual Studio C/C++. Crez des applications parallles pour Windows optimises et innovantes et concourrez dans lindustrie du multicore grce Intel Composer, Intel Parallel Inspector et Intel Parallel Amplifier.

Intel Parallel Composer fournit des options de dveloppement


paralllisme sans prcdent. Son association de compilateurs, librairies et extension dbogueur parallle pour les dveloppeurs Microsoft Visual Studio C/C++ supporte aisment et rapidement le multithreading dapplications sries et parallles.

Intel Parallel Inspector est le meilleur outil de vrification derreurs


multithreading pour les dveloppeurs Microsoft Visual Studio C/C++. A la diffrence des autres vrificateurs derreurs, Parallel Inspector est le moyen le plus rapide et simple de pointer les erreurs mmoires et multithreading latentes.

Intel Parallel Amplifier simplifie la recherche rapide de goulots


dtranglement de performance sans avoir besoin de connatre larchitecture processeur ou le code assembl. Une analyse fine pour une performance optimale, incluant les cores est pleinement exploite.

Intel Parallel Studio: 619 HT Intel Parallel Composer: 309 HT Intel Parallel Inspector: 309 HT Intel Parallel Amplier: 309 HT

Plus dinformations sur :

Tel : 0825 07 06 07 infos@comsoft.fr

www.sosdevelopers.com/parallel-studio.htm

outils \\ java
mework) [Fig.2]. Sans dtailler par le menu tous les bnfices apports par lutilisation dEMF, indiquons simplement quil simplifie grandement lcriture de code habituellement ennuyeux crire et/ou source possible derreurs : persistance, coute des vnements de modification du modle, etc. En outre, lutilisation dEMF permettra, si ncessaire, lenrichissement du modle de workbench " officiel " sans avoir faire des " rustines " comme cest malheureusement le cas pour Eclipse 3.x }); shell.pack(); shell.open(); } } Cette nouvelle fonctionnalit est dautant plus intressante que le support du debug est dores et dj disponible. En dautres termes : vous placez des points darrts dans votre code Java, et votre programme entre en debug quand votre animation Flash arrive sur le bout de code en question ! Une autre piste douverture dEclipse au monde du Web, mme si elle est pour linstant ltat embryonnaire, est lintgration qui a t faite du projet Mozilla Bespin avec Eclipse. Bespin est un framework pour ldition de code (coloration syntaxique, autocompltion, ) depuis un navigateur Web. Un prototype disponible dans e4 0.9 M2 couple le serveur Bespin de Mozilla avec le moteur JDT dEclipse, permettant ainsi dditer du code Java dans un navigateur, tout en sollicitant JDT ct serveur pour la compilation, la remonte derreurs, etc. Lintrt dutiliser son IDE distance peu paratre un peu loufoque, mais il est pourtant intressant de se dire quun norme serveur (ou mieux, le " cloud ") pourrait utiliser sa puissance de calcul pour lancer les tests unitaires de tout le projet chaque changement de code, ou produise des mtriques habituellement non utilises, car coteuses calculer Pour vous faire votre propre opinion sur lutilit de Bespin, la procdure dcrite sur le wiki dEclipse (http://wiki.eclipse.org/E4/Bespin) vous permettra de configurer et lancer votre propre serveur. [Fig.3]

Ouverture au monde du Web


La nouveaut la plus impressionnante dEclipse 4 est trs certainement la premire version dun compilateur crois SWT vers Flex/ActionScript. claircissons tout de suite un possible malentendu : il nest absolument pas question ici denvisager, par la magie de ce compilateur, porter, sans opration supplmentaire, lintgralit dune application pense " desktop " vers le Web. Il y a en effet des diffrences fondamentales entre les modles dapplication de ces deux mondes. En revanche, la rutilisation au niveau composant (de la couche prsentation, notamment) apparat comme particulirement allchante. Ainsi, avec un des plug-in permettant la compilation de code SWT vers ActionScript installs dans votre IDE (voir notre encadr sur linstallation de4), il devient particulirement simple dcrire votre IHM (ou, plus impressionnant encore, de porter une IHM existante), en pur Java / SWT : il suffit de crer un nouveau projet Java, utilisant la JRE ddie ActionScript que vous aurez dfinie. Il faut galement rendre ce projet dpendant du projet org.eclipse.swt que vous avez import du CD-ROM. Une IHM de type " Hello World ! " ressemblerait ainsi ceci : import org.eclipse.swt.SWT; [] public class Main { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, false)); shell.setText("My shell!"); final Button b = new Button(shell, SWT.PUSH); b.setText("Push me!"); b.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { b.setText("Hello!"); }
Fig.2

Une rvolution dans le codage des IHM


Que celui qui na jamais t agac par la quantit de code (le plus souvent particulirement rbarbatif) ncessaire pour crire une IHM me jette la premire pierre Il est vrai que certains toolkits graphiques sen sortent mieux que dautres au niveau de la verbosit, et souvent dautant mieux sils sont coupls un concepteur dIHM " WYSIWYG ", mais il faut bien avouer que devoir dcortiquer des dizaines de lignes de codes pour comprendre pourquoi notre
Fig.3

Fig. 2 Modle Ecore du workbench

Fig. 3 Edition de code via Bespin

18

PROgrammez ! \\ Mai 2009

outils \\ java
bouton " OK " sobstine ne pas saligner correctement est particulirement nervant ! Afin damliorer la lisibilit, la portabilit, et la rutilisabilit des interfaces graphiques, diffrents groupes de dveloppeurs, inspirs par XAML (Microsoft), XUL (Mozilla) ou MXML (Adobe Flex), ont rflchi des approches permettant de venir (d)crire celles-ci de manire dclarative. Par exemple, grce XWT et sa syntaxe inspire du XAML de Microsoft, on peut dcrire ce genre dIHM : } <Shell xmlns="http://www.eclipse.org/xwt/presentation" xmlns:x="http://www.eclipse.org/xwt" xmlns:j="clr-namespace:com.programmez.xwt" x:Class="com.programmez.xwt.HelloWorld" text="My shell"> <Shell.layout> <GridLayout /> </Shell.layout> <Label text="Cliquez ci-dessous!" foreground="SWT.COLOR_RED" /> <Button text="Hello, world!" SelectionEvent="btnClicked" /> </Shell> Et obtenir le rsultat suivant : [Fig.4] Le code permettant de dynamiquement interprter un code source XWT est particulirement simple : public class Application { public static void main(String[] args) {
Fig.4

URL content = Application.class. getResource("HelloWorld.xwt"); try { XWT.open(content); } catch (Exception e) { e.printStackTrace(); } }

Les avantages dune approche dclarative sont multiples :


Le " code " est trs lisible, et particulirement concis. Il est compltement indpendant du toolkit graphique cible : bien que XWT soit conu dans loptique dobtenir des IHM SWT, rien dans sa syntaxe nempche de viser Swing, GTK, Qt, voire ExtJS ! Il est possible dappliquer un " look&feel " particulier en utilisant la norme CSS (oui oui, vous avez bien lu !) Lutilisation dun dialecte XML facilite la cration doutils pour la manipulation des IHMs ; XWT est dailleurs fourni avec un diteur WYSIWYG.

Ouverture aux autres langages


Parce que Java nest pas le langage idal, loin sen faut, il est des cas o lon aimerait bnficier du modle de la modularit dOSGi tout en pouvant choisir le langage le mieux adapt pour implmenter une fonctionnalit donne. Ainsi, on peut imaginer crire un plug-in Eclipse en utilisant un DSL de son cru support par Ruby ou Scala, ou bien utiliser Clojure ou Lua pour bnficier des mcanismes de mta-programmation quils proposent. Un premier prototype, bas sur JavaScript, a t dvelopp pour valider la faisabilit de ce type dintgration. En venant tendre les

Installer et utiliser e4

e build le plus rcent de4 (0.9 M2) ncessite une version intermdiaire dEclipse 3.5 (le futur Galileo, sortant fin juin), plus prcisment la M6, pour fonctionner. Il vous faut donc dans un premier temps la rcuprer, depuis le site Eclipse : http://download.eclipse.org/eclipse/. Lensemble des composants de la 0.9 M2 est disponible sous forme dun update site zipp sur notre site www.programmez.com (eclipse-e4-repo-0.9M2.zip). Une fois votre Eclipse 3.5 M6 lanc, il vous suffit de venir le rfrencer (" Help > Install New Software " puis " Add " ; choisissez un nom explicite, " e4 0.9 M2 " par exemple, et indiquez le chemin vers le ZIP (" Archive " dans le champ " Location: ". Une fois lupdate site ajout, cochez les composants suivants, puis terminez lassistant : Une fois linstallation de tous les composants effectue, et aprs avoir, comme

propos par lassistant, redmarr Eclipse, vous tes quasiment prts ! Pour faciliter votre mise en route, vous trouverez galement sur notre site plusieurs projets Eclipse quil convient dimporter dans votre workspace. Ils sont contenus dans le zip e4-programmez-projects.zip quil vous suffit dimporter (" File > Import > Existing Projects into Workspace " puis " Select archive file "). Enfin, si vous souhaitez utiliser le crosscompilateur SWT vers Flex, vous aurez besoin du SDK Flex (disponible ladresse http://opensource.adobe.com). Une fois celui-ci install, il faut rajouter la ligne Dflex.sdk=<chemin_flex_sdk> la toute fin de votre fichier eclipse.ini. La compilation croise est plutt simple mettre en uvre : il faut dfinir une nouvelle JRE (" Window > Preferences > Java > Installed JREs ") de type " ActionScript VM " dont le " JRE Home " pointe vers le dossier dins-

tallation de votre Internet Explorer ou de votre Firefox. Pour pouvoir dbugger vos futures applications Flash crites en Java, vous prendrez soin dinstaller dans le navigateur choisi le plug-in Flash dans sa version " debug ".

Mai 2009 Recevez la Newsletter www.programmez.com/inscription.php \\ PROgrammez ! 19

outils \\ java
couches trs basses dEquinox (en particulier la couche grant le cycle de vie des composants), il peut traiter de manire particulire les plug-in dont le Manifest (voir Programmez ! n115) contient lentte JavaScript-Bundle, et ainsi interprter correctement le code JavaScript quils contiennent (voir http://wiki.eclipse.org/E4/JavaScript pour plus dinformations). Si cette possibilit de mlanger plusieurs langages vous parat farfelue, dites-vous simplement que vous faites certainement cela tous les jours. Qui na jamais en effet t amen travailler sur une application a priori 100% Java, mais qui appelait en ralit un script Ruby pour traiter tel import de fichier CSV, lanait tel traitement via un script Shell, etc. ?

EclipseCon : prparer le futur


Le rassemblement annuel de la communaut Eclipse a eu lieu du 23 au 26 mars Santa Clara. Conscients des attentes autour du projet e4, les organisateurs de la confrence ont rserv une trs large place e4 dans le programme de celle-ci, et ce sont plus dune quinzaine de prsentations qui se sont tenues. Ainsi, la confrence a t loccasion dapprendre ou de confirmer quelques informations intressantes : Tout sera mis en uvre pour quEclipse 4 soit le plus possible compatible avec la version 3.x Les dveloppeurs encouragent ds maintenant les utilisateurs dmarrer des projets " rels " mettant en uvre e4 car, mme si beaucoup de choses vont voluer dans les mois venir, les grandes lignes, elles, sont bel et bien traces. Et surtout la sortie de4 en 2010 semble toujours dactualit !

Une vritable plate-forme


Historiquement, Eclipse a t conu pour tre un environnement de dveloppement de code Java facilement extensible (grce son mcanisme de plug-in, comme vous laurez bien sr devin). Toutefois, il est rapidement apparu comme une vidence que cet IDE ddi Java tait en fait tellement modulaire quil pouvait, en ralit, tre vu comme une " plate-forme tout faire ", rendant un ensemble de services allant de la simple gestion des prfrences utilisateur la cration dinterfaces graphiques bases sur les notions de vues et de perspectives bien connues des aficionados dEclipse. On voit ainsi apparatre de plus en plus dapplications construites audessus dEclipse, et il est parfois bien compliqu dexpliquer clairement pourquoi elles utilisent Eclipse alors mme quelles nont rien dun IDE Pour viter cette incomprhension parfois lgitime, un effort particulier est men afin que les technologies de " runtime " soient mieux identifies, et quelles se dmarquent plus clairement des projets plus orients " dveloppeur " (lIDE lui-mme, les outils Java, C, PHP , etc.). Cest dailleurs cela qui a conduit la cration du sous-projet RT (Runtime Project) en mars 2008. Le projet RT est au cur de la feuille de route dEclipse 4. Il sagit en effet de garantir que les technologies disponibles dans lcosystme Eclipse soient utilisables de manire compltement indpendante de lIDE Eclipse. Le projet RT hberge ainsi dj un certain nombre de sous-projets orients " runtime ". Citons par exemple ECF, lEclipse Communication Framework, qui propose un ensemble dAPI pour la gestion des communications. ECF se prsente sous la forme de bundles (plug-in) que quiconque ayant traiter des problmatiques de communication client/serveur, de transfert de fichiers, etc. peut utiliser, voire mme tendre. Le projet RT fait galement la part belle une technologie phare du moment : le Cloud Computing. Des projets comme SMILA, Gyrex, et bien sr Equinox devraient ainsi tre amens voluer dans une optique dutilisation massivement distribue, dans laquelle le modle de composant OSGi trouve tout naturellement sa place. Afin de se rapprocher au maximum de la " plate-forme idale ", il faut galement noter que, paralllement lavance des travaux sur e4, les experts du consortium OSGi travaillent une modernisation profonde de celui-ci (un " OSGi 2.0 ", en quelque sorte). En effet, pour des raisons de compatibilit avec un maximum de plates-formes (notamment dans le monde de lembarqu), le standard OSGi R4.2 dfinit des API parfois trop peu contraintes et donc souvent ambiges, en particulier car elles ne mettent pas profit les generics de Java 5.

Reprise du workspace
Paralllement aux rvolutions fonctionnelles voques prcdemment, il faut prciser que des amliorations beaucoup plus pragmatiques sont apportes du ct de lIDE, afin de venir corriger certaines limitations historiques. Parmi ces volutions, celles concernant le modle du " workspace " Eclipse est la plus aboutie. En effet, la gestion des projets, ainsi que des ressources (dossiers et fichiers) quils contiennent, nest pas toujours satisfaisante dans Eclipse 3.x. Un IDE tel que Visual Studio, permet par exemple de crer des ressources " virtuelles ", qui peuvent tre des liens symboliques vers des ressources externes, ou bien des groupes agrgeant virtuellement des ressources contenues dans un projet. Cest prcisment ce genre de fonctionnalits que proposera lIDE Eclipse 4, ouvrant ainsi la porte une meilleure gestion de projets C ou C++, trop souvent compliqus bien organiser. Cette version remanie du modle des ressources est dj bien avance, et disponible dans la 0.9 M2. Cerise sur le gteau, la notion de groupe et de ressource lie est mme rtrocompatible Eclipse 3.4 !

Rendez-vous dans un peu plus dun an


Vous laurez compris, la communaut sest fixe un objectif particulirement ambitieux, dautant plus que la sortie officielle dEclipse 4 est pour linstant programme pour 2010. Pourtant, tout porte croire que la conduite agile le fameux " Eclipse Way " qui est faite du projet (milestones rgulires, intgration continue, ), ainsi que la grande motivation des parties prenantes, vont permettre daboutir une prochaine version majeure dEclipse digne de ce nom ! Benjamin Cab Expert Eclipse Anyware Technologies http://www.anyware-tech.com http://blog.benjamin-cabe.com.

20

PROgrammez ! \\ Mai 2009

Des composants interface utilisateurs suprieurs pour Windows Forms, WPF, ASP.NET et Silverlight Pour de plus amples infos : infragistics.com
Four Platforms. One Package.
0800 667 307

grids

tree

menus

navigation

charts

& more!

Copyright 1996-2009 Infragistics, Inc. All rights reserved. Infragistics, the Infragistics logo and NetAdvantage are registered trademarks of Infragistics, Inc. All other trademarks or registered trademarks are the respective property of their owners.

outils \\ web

Silverlight 3.0 : un cran au-dessus !

Microsoft MIX 09, qui sest tenu Las Vegas a donn lieu de nombreuses annonces. Microsoft a profit du buzz mdiatique de cet vnement, ddi aux designers et dveloppeurs, pour prsenter la nouvelle mouture de Silverlight, intitule Silverlight 3.

Silverlight 3 arrive la fois sur Eclipse avec Eclipse4sl et aussi sur MacOS X pour la partie dveloppement toujours grce Eclipse !
http://go.microsoft.com/fwlink/?linkid=143433 Expression Blend 3 preview : http://www.microsoft.com/expression/tryit/blendpreview.aspx Petite astuce, Microsoft a regroup lintgralit de ces outils en un seul package dinstallation, sauf naturellement, Expression Blend. Vous retrouverez ce package ladresse suivante : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=11dc7151-dbd64e39-878f-5081863cbb5d ce package comprend aussi les Silverlight 3 Tools pour Visual Studio 2008 SP1. Pour rcapituler, il suffit dinstaller ce dernier package et vous serez fin prt dvelopper avec Silverlight 3. Attention, en installant Silverlight 3 vous supprimez le plugin Silverlight 2. En ce qui concerne les Tools pour Silverlight 2 il existe une manipulation astucieuse pour continuer dvelopper en Silverlight 2 avec du Silverlight 3 install sur sa machine. Plus dinformation sur cette manipulation : http://www.jeff.wilcox.name/2009/03/sxs-sl2-sl3-building/

ontrairement au passage de Silverlight 1 Silverlight 2, celui Silverlight 3 sera beaucoup plus ais car il ne sagit pas dun changement de technologie mais bel et bien dun ajout de nouvelles fonctionnalits. A travers cet article, nous allons tenter de dcouvrir les principales nouveauts apparues dans cette version 3 bta 1.

Installation de Silverlight 3
La version de Silverlight 3 annonce au MIX09 est la bta 1. Elle na donc pas vocation tre distribue au grand public, mais seulement aux dveloppeurs afin quils puissent commencer apprhender les nouveauts de ce plugin. En dautres termes, la version Go-Live na pas t encore annonce et il nest donc pas possible, lheure actuelle, de commercialiser des applications Silverlight 3. Si vous tes dveloppeur et impatient de dcouvrir les nouveauts de Silverlight 3, nhsitez pas installer une VPC et suivre les liens ci-dessous qui vous permettront dinstaller votre environnement de dveloppement : Le SDK de Silverlight 3 bta 1 : http://www.microsoft.com/downloads/details.aspx?FamilyID=D09B6ECF9A45-4D99-B752-2A330A937BC4&displaylang=en La documentation du framework Silverlight 3 : http://go.microsoft.com/fwlink/?LinkId=144350 Le plugin Silverlight 3 pour les dveloppeurs :
Fig.1

LES NOUVEAUTS FONCTIONNELLES


La 3D au cur de Silverlight
[Fig.1] Contrairement aux ides reues Silverlight 3 ne gre pas la 3D proprement parler, nanmoins il est capable de projeter des plans dans un contexte 3D, on parle alors de " Projection de plan ". Silverlight vient donc combler son retard vis--vis dActionScript en ce qui
Fig.2 Fig.3

22

PROgrammez ! \\ Mai 2009

outils \\ web
concerne la gestion de la 3D. [Fig.2]. Chaque contrle Silverlight, savoir un Grid, un bouton ou une TextBox est capable de se projeter dans un environnement 3D. Voyons comment cela fonctionne du ct XAML et du ct code. A nouvelle fonctionnalit, nouvelles proprits, Silverlight 3 se voit donc ajouter 12 nouvelles proprits ddies la manipulation 3D, accessibles directement depuis votre code XAML mais aussi ct code C#. Nous retrouvons donc : CenterOfRotation(X|Y|Z) pour modifier le centre de rotation suivant laxe GlobalOffset(X|Y|Z) pour modifier la focale globale LocalOffset(X|Y|Z) pour modifier la focale propre lobjet courant (UIElement) Rotation(X|Y|Z) pour effectuer une rotation de lobjet suivant laxe [Fig.3] Ct XAML, tout comme le RenderTransform, il sagit dajouter un nud de type Projection : <Canvas Background=Red x:Name=monCanvas Width=400_ Height=200_> <Canvas.Projection> <PlaneProjection RotationX=40_ RotationY=60_ Rotation Z=0_ /> </Canvas.Projection> </Canvas> Ct Code C# il suffit dutiliser les DepedencyProperty : monCanvas.Projection.GetValue(PlaneProjection.RotationXProperty); monCanvas.Projection.SetValue(PlaneProjection.RotationXProper ty, maValeur); lments Storyboard nont pas vocation tre soumis lacclration GPU. Lanimation modifiant lobjet en permanence, celui-ci serait sans cesse re-rendu et ce, au dtriment du cache. Par dfaut, une application nayant que des animations classiques et des contrles basiques naura pas besoin de lacclration GPU, il est donc inutile de lactiver si vous nen ressentez pas le besoin. Le calcul du FPS de votre application sera le meilleur moyen pour savoir si oui ou non cette fonctionnalit vous est indispensable.

Le Save File Dialog pour des scnarios encore plus riches

[Fig.4] Silverlight 3 permet prsent denregistrer des fichiers sur la machine cliente. La nouvelle classe SaveFileDialog permet via la mthode ShowDialog dafficher la fentre Enregistrer sous propre votre systme dexploitation. Cette fonctionnalit est bien entendu scurise car elle ncessite laction de lutilisateur. Voyons le fonctionnement de cette classe avec le code C# : private void btnSave_Click(object sender, RoutedEventArgs e) { SaveFileDialog mySaveDialog = new SaveFileDialog(); mySaveDialog.Filter = "Text Files (.txt)|*.txt|All Files |*.*"; bool? ret = mySaveDialog.ShowDialog(); if (ret == true) { using (Stream fs = (Stream)mySaveDialog.OpenFile()) { byte[] info = (new UTF8Encoding(true)).GetBytes (tbTest.Text); fs.Write(info, 0, info.Length); fs.Close(); } } }

Lacclration GPU au profit des performances


Lacclration GPU permet Silverlight dutiliser votre carte graphique pour soccuper du rendu de certains lments graphiques de votre interface (ceux que vous dsirez), et ce, dans le but de soulager votre processeur. Cette technologie sappuie sur DirectX pour les utilisateurs Windows, et OpenGL pour les utilisateurs Mac. Lactivation de lacclration graphique seffectue au niveau de la page HTML dans la balise <OBJECT> : <object id=silverlightObject data=data:application/x-silver light-2, type=application/x-silverlight-2_ width=100% height =100%> <param name=source value=ClientBin/SilverlightApplica tion_AccelerationGPU.xap /> <param name=EnableGPUAcceleration value=true /> </object> Une fois active au niveau du plugin vous allez pouvoir ajouter dans votre XAML : <Canvas x:Name=LayoutRoot Width=739_ Height=700_ > <Canvas.CacheMode> <BitmapCache/> </Canvas.CacheMode> </Canvas> Le CacheMode vous permet de cibler des lments spcifiques o vous souhaitez profiter de lacclration matrielle. Noter que lacclration GPU est rserve aux ressources gourmandes comme la 3D, les vidos hautes dfinitions, lanimation de Path lourd, etc. Les

Cela ouvre les portes de nouveaux scnarios. Vous allez pouvoir sauvegarder des DataGrid au format Excel, au format CSV, etc. au sein de vos applications Silverlight. En couplant cette fonctionnalit au mode dconnect de Silverlight 3, lusage de Silverlight se voit rellement enrichi.

Fig.4

Mai 2009 LACTU AU QUOTIDIEN www.programmez.com \\ PROgrammez ! 23

outils \\ web
Le Databinding dlment
Silverlight 3 vient enrichir le modle de Databinding existant de Silverlight 2, en introduisant la notion de Element Databinding, dj connue des dveloppeurs WPF. Le concept du " Element Databinding " consiste lier la valeur de la proprit dun lment avec la proprit dun autre lment. Ainsi il est possible de lier la valeur dun Slider avec la largeur dun Rectangle. <Slider x:Name=monSlider Width=200_ Minimum=0_ Maximum= 400_ Value=200_></Slider> <Rectangle Width={Binding Value, ElementName=mon Slider} Height=200_ RadiusX=5_ RadiusY=5_ Fill=Gray> </Rectangle> Lintrt de cette syntaxe est quelle ne ncessite pas lintervention dun dveloppeur. Il suffit de connatre le langage XAML ou bien dutiliser Expression Blend bon escient. De plus, cette syntaxe permet dconomiser de nombreuses lignes de code. [Fig.5] { uv.y = uv.y + (sin(uv.y*100)*0.03); return tex2D( input , uv.xy); } Ce code a pour effet dinverser limage et de londuler comme le reflet de leau. Exemple tir du trs bon blog de Jeff Prosise : http://www.wintellect.com/CS/blogs/jprosise/ [Fig.7]

Les animations prconues


Les Easing Animation. Ce sont des animations avec des dclrations, des acclrations et des changements de valeur prdfinies. En Silverlight 2 il tait ncessaire dutiliser des AnimationUsingKeyFrames et des KeySplines. A prsent il suffit de choisir un type danimation prdfini pour appliquer une animation nimporte quel objet et obtenir des effets graphiques plutt intressants. [Fig.8] <DoubleAnimation From=0_ To=300_ Duration =0:0:3_ Storyboard.TargetName=monElement Storyboard.Target Property=(Canvas.Left)> <DoubleAnimation.EasingFunction> <BackEase EasingMode=EaseOut Amplitude =1_></BackEase> </DoubleAnimation.EasingFunction> </DoubleAnimation> Chaque Easing Animation a ses propres proprits afin de pouvoir la personnaliser souhait, cependant toutes les Easing Animation ont la proprit EasingMode en commun. Elle permet de renseigner lorsque le Easing sapplique, savoir, la fin, au dbut ou la fin et au dbut de lanimation: EaseIn, EaseOut, EaseInOut. Voici les types danimation prdfinis : BackEase, BounceEase, CircleEase, CubicEase, ElasticEase, ExponentialEase, PowerEase, QuadraticEase, QuarticEase, QuinticEase, SineEase. Chacune dentre elles apporte un effet visuel diffrent et intressant. Les animations les plus impressionnantes sont bien entendu le BounceEase et lElasticEase. Tout comme les animations classiques ces animations prdfinies sont aptes animer nimporte quelle DepedencyProperty, autrement dit, vous les animations 3D !

Les filtres graphiques

[Fig.6]

TextBlock Text=Pixel shaders> <TextBlock.Effect> <DropShadowEffect BlurRadius=5_ Direction=-50_ Shadow Depth=5_ Color=Black></DropShadowEffect> </TextBlock.Effect> </TextBlock> <Button Content=Pixel shaders FontSize=30_ Margin=20_> <Button.Effect> <BlurEffect Radius=10_></BlurEffect> </Button.Effect> </Button> Comme le montre lexemple de la figure 6, les Pixel Shaders peuvent servir appliquer des effets graphiques tels que des effets de Blur et des effets dombrage Shadow. Un Pixel Shader est un objet qui transforme les pixels juste avant le rendu. Par dfaut, Silverlight proposes deux effets diffrents : BlurEffect et DropShadowEffect. Lun des gros points forts de cette nouveaut est la possibilit den crer soi-mme. Pour cela, il faut utiliser le langage High-Level Shading Language (HLSL) et le SDK de DirectX (http://msdn.microsoft.com/enus/directx/aa937788.aspx) afin de crer des fichier.FX. Voici un exemple de fichier FX : sampler2D input : register(S0); float4 main(float2 uv : TEXCOORD) : COLOR

En savoir plus
Pour aller plus loin avec les nouveauts de Silverlight 3 voici une liste de liens intressants : Program manager Silverlight : http://timheuer.com/blog/ Program manager Silverlight : http://blogs.msdn.com/jstegman/ Mike Snow et son incontournable " Tips of the Day " : http://silverlight.net/blogs/msnow/ Le blog officiel de la team Silverlight : Fig.7 http://team.silverlight.net/ Andy beaulieu : http://www.andybeaulieu.com/ Vous pourrez retrouver lintgralit des nouveauts Silverlight 3 en franais et en vido sur mon site : http://www.guillaumeandre.com/

Fig.5

Fig.6

Fig.8

Guillaume ANDRE Dveloppeur RIA - Wygwam

24

PROgrammez ! \\ Mai 2009

gros plan \\ cloud

Cloud Computing
Vos applications sur le web !
istockphoto.com/Pgiam

me si le SaaS reste modeste en parts de march, les utilisateurs et les diteurs sy mettent. Durant de nombreuses annes, le modle initi par Microsoft, Software + Services (ou S+S), soit le Logiciel + les services sera incontestablement le modle qui va tre disponible. On gardera les classiques licences ou souscriptions (dans le monde open source) et on accdera des services, des applications, complmentaires ou non, en ligne, soit sur le web. Plusieurs cueils restent plus que jamais dactualit : le manque dinteroprabilit entre les solutions et les services, limmaturit des API et SDK, des plates-formes Cloud encore en bta ou peine disponibles, un changement aussi radical dans la distribution des applications et donc du modle conomique.

Le cloud impose en effet ce que lon appelle depuis plus de 10 ans linformatique la demande. Cest--dire que lon paie ce que lon utilise rellement. On loue de lapplication, du temps serveurs, des ressources serveurs. Cest une vritable rvolution permettant, si lapplication est bien code, de pouvoir ajuster en quelques minutes peine, le nombre de serveurs ncessaires lors dun pic de charge. Comme dans le monde logiciel classique, plusieurs univers saffrontent dans le Cloud. Vous avez les partisans dun cloud computing ouvert, interoprable, reposant sur des standards, des spcifications connues et indpendantes, et des fournisseurs / diteurs privilgiant leur propre plate-forme (plus ou moins ferme) et tissant des accords bilatraux avec dautres diteurs. Il existe l un rel risque, comme nous le

connaissons sur les plates-formes RIA ou au dbut des Web Services et la profusion de spcifications. Quest-ce qui change pour le dveloppeur ? Beaucoup et peu la fois. peu, car les grands fournisseurs de plates-formes tentent de faire une transition le plus en douceur possible. Ainsi Google en incluant Java dans App Engine vite de redvelopper son application Java mme sil y a encore de nombreux manques fonctionnels. Microsoft fait de mme avec .Net naturellement, mais aussi avec des langages non .Net. Cest un gage important envers le dveloppeur. Cependant, linstabilit des API et des SDK gne le dveloppement et hormis utiliser des systmes dploys sur un Cloud hberg comme Amazon EC3, les plates-formes App Engine ou Azure restent viter pour une application en production. Trop tt. Mais cela changera rapidement ! Cependant, le Cloud impose de nouveaux rflexes dans la gestion des donnes, dans les instances serveurs et les applications, ou encore sur le fait de grer du code local et serveur ou le online et le offline. Incontestablement, le dveloppeur doit devenir peu peu un dveloppeur web dun nouveau genre. Pour ce premier grand dossier " cloud " dans Programmez !, nous avons voulu tre trs pratique et concret : architectures, Azure, Google App Engine, Amazon ! Nous reviendrons trs rgulirement sur le nuage informatique pour vous prparer et expliquer au mieux les technologies et plates-formes des diteurs. Franois Tonic

26

PROgrammez ! \\ Mai 2009

gros plan \\ cloud

Plates-formes et fonctionnement
Le terme Cloud Computing se traduit littralement par " informatique dans les nuages , ces nuages faisant rfrence Internet et au web. Pour bien comprendre cette terminologie, il faut rappeler quInternet est un rseau trs complexe et difficile apprhender, car constitu de millions de connexions utilisant des technologies trs disparates (fibre optique, cble, ADSL, etc.). Le monde de lInternet est compltement abstrait pour la plupart des utilisateurs, il na pas de ralit gographique tangible.
application de Cloud Computing que nous utilisons peut se trouver San Francisco, dans un satellite ou mme sur la Lune : cela fait finalement peu de diffrence pour nous. Les nuages du Cloud Computing font rfrence cette abstraction. Ils font aussi rfrence au fait que lon reprsente souvent Internet sous la forme dun nuage dans les schmas informatiques. Le Cloud Computing signifie donc que les applications en ligne sont utilises comme si elles taient situes dans lther, dans un espace sans ralit physique. [Fig.1]

Des architectures ddies et optimises : les applications SaaS bnficient dun environnement dexcution conu pour un usage en ligne avec une forte charge utilisateur ; elles sont lies cet environnement et ne peuvent pas tre " dmnages " simplement sur un serveur en entreprise. La mise en avant de fonctions collaboratives : les SaaS mettent laccent sur les pratiques collaboratives hrites du web 2.0 ; La fourniture dAPI ouvertes : les SaaS fournissent des API permettant de faire appel leurs fonctionnalits.

Fig.1

Que signifie SaaS ?


SaaS signifie Software as a Service, cest--dire un logiciel fourni sous la forme de service et non sous la forme de programme informatique (code binaire installer sur une machine. Les utilisateurs des applications SaaS accdent ce service via Internet. La diffrence entre SaaS et logiciel est essentielle. En effet, les SaaS proposent des logiciels oprationnels, prts lemploi, sans passer par une tape dinstallation, et sans aucune tche de maintenance. Les SaaS sont excuts sur des plates-formes mises disposition par des acteurs (comme Google ou Salesforce) que nous appellerons oprateurs SaaS, car leur mtier est plus proche de ceux des oprateurs tlcoms que de celui des diteurs de logiciels. Les SaaS sont les successeurs des ASP (Application Service Providers). Ils se distinguent de ces derniers par : Lusage dinterfaces RIA ;

Le concept de Cloud Computing englobe les concepts de Software as a Service (SaaS) et de Platform as a Service (PaaS).

Que signifie PaaS ?


PaaS signifie Platform as a Service. Ce terme dsigne une plate-forme dexcution hberge par un oprateur et accde depuis Internet. Cette plate-forme peut tre utilise pour excuter des SaaS, et peut aussi tre mise la disposition des entreprises qui souhaitent faire hberger leurs applications issues de dveloppements spcifiques. Amazon a t prcurseur dans ce domaine avec Amazon web Services (AWS). Les PaaS se distinguent des hbergeurs classiques par : Une grande abstraction de la plateforme. Lentreprise utilisatrice ne connat pas les configurations des machines qui excutent son application. Une architecture trs haute disponibilit base sur des datacenters rpartis dans le monde entier, et garantissant une grande rsisFig.2

tance aux sinistres (inondations, incendies, etc.) Les plates-formes PaaS reposent gnralement sur les composants suivants : Un ensemble de datacenters : leur nombre est toujours suprieur trois. Dans les cas de Microsoft ou

Mai 2009 \\ PROgrammez !

27

gros plan \\ cloud


de Google, les centres se comptent en dizaines. Une couche dexcution sur une machine virtuelle via un hyperviseur, ou sur un runtime de type Java, .NET... Une couche de persistance accde via HTTP sous forme de base de donnes ou de fichiers. Une couche dauthentification en local ou dlgue l annuaire de scurit de lentreprise. Une couche dintgration : une API ou un bus dintgration pour changer des donnes avec lentreprise. Une console dadministration qui permet de grer le dploiement et le versioning des applications, ainsi que le monitoring de la plate-forme. [Fig.2] machines ou disques utiliss ; en revanche, on connat toutes les couches de son architecture logicielle. SalesForce force.com Loffre force.com se dcompose en plusieurs couches : Le service dexcution de la plateforme est bas sur Apex, un langage de haut niveau qui permet de crer rapidement des applications dinformatique de gestion : il nest pas adapt la cration dautres types dapplications. Ce langage est comparable un RAD comme PowerBuilder ou Oracle Forms. Force.com Database est le service de persistance. Cest une base de donnes, accde par un langage de requtage de haut niveau : SOQL, Salesforce Object Query Langage. Force.com Connect est le service dintgration. Il propose des connecteurs natifs pour Lotus, SAP et Oracle Business ; il supporte lintgration web services, REST, JEE et .NET. La philosophie de force.com est doffrir une plate-forme de dveloppement rapide pour des applications de gestion. Laccent est donc mis sur la simplicit du dveloppement et non sur la comprhension de larchitecture sous-jacente. Force.com plaira aux matrises douvrages par sa proposition dagilit et de dlgation des tches techniques. Google App Engine Loffre Google App Engine se dcompose selon les couches : Le service dexcution de la plateforme est bas sur un runtime Python. Il semble que Google ait choisi ce langage pour permettre de crer des applications trs grande performance. Cependant, pour satisfaire aux exigences des entreprises, peu enclines se former au langage Python, Google a annonc le support prochain du langage Java. DataStore est le service de persistance. Cest une base de donnes, accde par un langage de requtage de haut niveau : GQL, Google Query Langage. En termes dintgration, la PaaS offre des API vers des fonctions de Google Apps. Mais elle ne propose pas de bus dintgration proprement parler. La philosophie de Google App Engine consiste proposer une plate-forme offrant une grande puissance de traitement et une grande capacit de stockage : il sagit de mettre les gigantesques capacits des datacenters Google la disposition des entreprises. Ces dernires pourront donc lui confier leurs applications trs forte charge ou celles qui ncessitent beaucoup despace de stockage. La contrepartie de cette promesse de puissance est une architecture assez contrainte et lusage dun langage peu utilis dans les entreprises. Mme lorsque Google proposera lusage de Java sur sa plate-forme, il est probable que larchitecture restera contrainte, afin dutiliser au mieux les ressources des datacenters Google. Microsoft Azure Services Platform Microsoft a tir les enseignements des plates-formes lances avant la sienne : lditeur de Redmond propose ainsi un modle la croise des chemins entre runtime .NET et machine virtuelle. Loffre Azure se dcompose en plusieurs couches : Le service dexcution de la plateforme est bas sur le runtime .NET : la CLR. SQL Services est le service de persistance. Cest une base de donnes non relationnelle, accde selon le style REST. .NET Services intgre le service dintgration. La philosophie dAzure avec le dveloppement .NET est de permettre aux dveloppeurs de retrouver des langages/environnements de dveloppement connus. Cependant, cette cohrence peut tre trompeuse car les applications doivent tre amnages. Azure pourra terme excuter du code natif (C++), et il sera possible de dployer ses propres machines virtuelles, selon la pratique propose par Amazon. Microsoft veut ainsi satisfaire les dveloppeurs qui souhaitent utiliser .NET, comme ceux qui prfrent dployer leur propre machine virtuelle.

Les principales plates-formes disponibles


Amazon Web Services Loffre AWS se dcompose en plusieurs couches : EC2 est le service dexcution de la plate-forme. Il est bas sur la virtualisation par hyperviseur Xen. SimpleDB et S3, Simple Storage Service, sont les services de persistance. SimpleDB est un service de base de donnes, tandis que S3 permet le stockage de fichiers. Ces services sont accds selon le style REST. SQS, Simple Queue Service est le ser vice dintgration. Il permet lchange de messages entre AWS et dautres infrastructures. La philosophie dAWS consiste donner aux quipes informatiques une matrise complte de leur architecture logicielle. Loffre est destine des profils trs techniques, qui souhaitent grer leur application bas niveau. La seule abstraction propose par AWS concerne la partie matrielle : lorsquon utilise la plate-forme, on na pas connaissance des

Cet article est ralis partir dextrait de louvrage : " Cloud Computing & SaaS : une rupture dcisive pour l'informatique d'entreprise ", Dunod, par Guillaume Plouin, Directeur programme innovation SQLI

28

PROgrammez ! \\ Mai 2009

gros plan \\ cloud

TUTORIEL sur www.programmez.com

Dveloppez en Java vos applications Google App Engine


Il y a peu prs un an, Google ouvrait l'App Engine aux dveloppeurs, il n'tait alors possible de dployer que des applications dveloppes en Python. Depuis le 7 avril, Java est disponible !

oogle App Engine (GAE) est une offre de Cloud Computing permettant aux dveloppeurs dhberger leurs applications Web sur les serveurs de Google. Les applications ainsi hberges bnficient de ce fait de la mme capacit de monte en charge que les services Google tels que Gmail ou Google Finance. Un des atouts de Google App Engine est que gratuitement un dveloppeur peut dployer une application accde raison de 5 millions de pages vues par mois, ce qui est somme toute une offre dhbergement intressante. Au-del de ces quotas, il est possible dacheter des ressources supplmentaires. Depuis quelques mois, nous pouvions voir dans la roadmap de ce projet que le support dautres langages tait un des objectifs de Google. Aujourd'hui, cest chose faite, Google ouvre son service une nouvelle communaut et contrairement leur poisson davril, ce nest pas Fortran mais bien Java qui est dsormais support. Cette nouvelle devrait donc tre accueillie avec un vif enthousiasme lorsque lon sait que le support de Java a t lune des premires volutions suggres par les dveloppeurs lors de la sortie de la premire version de lApp Engine.

Lintgration de Java
La version Java ne droge pas au qualificatif de " Simple dutilisation " qui caractrisait la version Python. En effet, il ny a pas de diffrence majeure dans lapproche quont ces deux dernires. Un atout supplmentaire de la version Java et qui a son importance, cest le fait quelle saccompagne dun plugin Eclipse. Il est ainsi possible de crer une application et de la dployer en quelques clics. De plus, lintgration avec GWT (Google Web Toolkit) est enfantine et propose par dfaut par le plugin. Lenvironnement de dveloppement App Engine Java supporte les versions Java 5 et Java 6, sachant que sur les serveurs distants cest la 6 qui est supporte. Les pr-requis au dveloppement et au dploiement dapplications sur la plate-forme sont relativement faibles : avoir install Java et le SDK de lApp Engine. Linstallation du plugin Eclipse est bien entendu un plus non ngligeable. Ladministration des applications se fait via la mme interface que pour les applications Python. Il est ainsi possible de voir la rpartition de la charge dans le temps, les requtes HTTP les plus rcurrentes, le taux dutilisation ramen aux quotas. Il est galement possible de consulter les logs. Enfin, une page permet daccder aux donnes stockes dans le Datastore. Etudions de plus prs larchitecture dun projet et lutilisation des API

gin Eclipse, vous obtiendrez une structuration semblable celle de la figure ci-dessous : Cette arborescence de projet ne prsente pas de spcificit particulire, on notera la prsence dun fichier web.xml permettant dassurer le mapping entre les URL et les classes des Servlets. Lorsque vous dployez une application sur Google App Engine, une association sopre entre les fichiers que vous transfrez sur les serveurs de Google et les applications que vous tes en mesure dadministrer. Cette association est possible grce un identifiant que vous vous devez de retranscrire dans le fichier appengine-web.xml. Ce fichier est lquivalent du fichier app.yaml de la version Python de lApp Engine. Les Servlets sont tout fait communes et ne diffrent pas de celles que lon peut dvelopper dans une application traditionnelle. La Servlet dun HelloWorld pourrait donc se prsenter ainsi : package com.sfeir.demo; import java.io.IOException; import javax.servlet.http.*; public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServlet Response resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Hello, world"); } } Intressons nous maintenant aux API spcifiques de Google App Engine.

Utiliser les API


Authentification Ajouter un systme dauthentification des utilisateurs se fait tout aussi facilement quavec la version Python : package com.sfeir.demo; import java.io.IOException;

Passons la pratique
Les applications Google App Engine doivent tre structures en respectant larborescence WAR, ainsi, si vous crez un projet via le plu-

30

PROgrammez ! \\ Mai 2009

gros plan \\ cloud


import import import import javax.servlet.http.*; com.google.appengine.api.users.User; com.google.appengine.api.users.UserService; com.google.appengine.api.users.UserServiceFactory; import javax.jdo.annotations.PrimaryKey; import com.google.appengine.api.users.User; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Comment { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private User author; @Persistent private String content; @Persistent private Date date; public Comment(User author, String content, Date date) { this.author = author; this.content = content; this.date = date; } } Il est ensuite trs simple de manipuler cet objet au travers de lAPI. Ainsi, pour persister une instance de cet objet, on peut utiliser le PersistenceManager de la manire suivante : Comment comment = new Comment(user.getNickName(), content, new Date()) ; PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactionsoptional"); PersistenceManager pm = pmfInstance.get().getPersistence Manager(); try { pm.makePersistent(comment); } finally { pm.close(); } Au mme titre quil tait possible dinterroger la base au travers du GQL dans la version Python, il est ici possible dutiliser un langage de requte proche de SQL pour rcuprer des donnes, il sagit de JDOQL. On pourrait rcuprer la liste de nos commentaires ainsi : PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactionsoptional"); PersistenceManager Manager(); pm = pmfInstance.get().getPersistence

public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServlet Response resp) throws IOException { UserService userService = UserServiceFactory.getUser Service(); User user = userService.getCurrentUser(); if (user != null) { resp.setContentType("text/plain"); resp.getWriter().println("Hello, " + user.getNick name()); } else { resp.sendRedirect(userService.createLoginURL(req. getRequestURI())); } } } Ici, on utilise le UserService pour rcuprer lutilisateur actuellement connect lapplication. Sil y a bel et bien un utilisateur authentifi, nous lui affichons un message de bienvenue et si ce nest pas le cas, lAPI nous permet de le rediriger vers une page de login. Lorsque vous travaillez en " local ", le systme dauthentification est mul, il ny a pas de vrification, proprement parler, de lexistence des utilisateurs. Lorsque vous dployez votre application, le UserService se base sur les Google Accounts pour vrifier lexistence des utilisateurs. Persistance Attention, comme pour la version Python de Google App Engine, le stockage des donnes ne seffectue pas dans une base de donnes relationnelle. Google dispose de son propre formalisme de stockage des donnes qui sapparente une Map multidimensionnelle partage. Le dveloppeur dispose de trois solutions distinctes pour persister ses donnes, en effet, Google App Engine Java implmente JDO (Java Data Object), JPA (Java Persitance API) et met galement disposition une API de plus bas niveau (Datastore API). Dans cette version de Google App Engine, Google pousse un Framework de persistance : DataNucleus. Sa configuration se fait trs simplement (voir doc pour plus de dtails) Voici un exemple utilisant JDO, la dfinition des donnes persister se fait par annotation. Ci-dessous, lobjet Comment est dfini comme pouvant tre persist, en le sauvant, les lments annots comme @Persistent feront partie de la sauvegarde. package com.sfeir.demo; import import import import import java.util.Date; javax.jdo.annotations.IdGeneratorStrategy; javax.jdo.annotations.IdentityType; javax.jdo.annotations.PersistenceCapable; javax.jdo.annotations.Persistent;

String query = "select from " + Comment.class.getName(); List<Comment> comments = (List<Comment>) pm.newQuery(query) .execute() ;

Mai 2009 \\ NOUVEAU : donnez votre avis sur ce numro www.programmez.comPROgrammez ! 31

gros plan \\ cloud


Gestion d'un cache mmoire Afin de ne pas surcharger le Datastore avec des requtes rcurrentes, il peut tre intressant de stocker un certain nombre dinformations dans un cache mmoire. Cela peut se faire trs simplement au travers de lutilisation de la Memcache API. cache = CacheManager.getInstance().getCacheFactory().create Cache(Collections.emptyMap()); cache.put(cachedInteger, 25) ; Integer cachedValue = (Integer) cache.get(cachedInteger); Dans lexemple ci-dessus, aprs avoir rcupr linstance du cache mmoire, on y insre un entier la clef " cachedInteger " au travers dun put. Un simple get avec la clef nous permet de rcuprer la donne que nous avions mise en cache. Le cache est utilis pour cet exemple de manire trs simpliste mais on pourrait imaginer lutiliser pour retourner des informations ayant plus de valeur, comme le contenu RSS de lapplication ou encore une page frquemment requte. Cette API de cache propose dautres fonctionnalits intressantes comme la possibilit de dfinir une priode de validit pendant laquelle les donnes peuvent tre considres comme " fraches ". Diffrentes politiques de gestion sont galement applicables, ainsi il est possible de najouter la donne que si celle-ci est dj prsente ou rciproquement. Envoi de mail L'envoi de mail fait partie des fonctionnalits intgres Google App Engine et relativement simples mettre en place au sein d'un projet. Dans cette version Java, l'API implmente l'interface JavaMail, pour des raisons de scurit, seules les adresses dun administrateur de lapplication ou celle de lutilisateur couramment authentifi peuvent tre spcifies comme adresses de lmetteur. Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); String msgBody = "Contenu du mail"; ... Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress("admin@mondomaine.com")); msg.addRecipient(Message.RecipientType.TO,new Internet Address("destinataire@sondomaine.com", "Destinataire")); msg.setSubject("Email envoy par Google App Engine"); msg.setText(msgBody); Transport.send(msg); Lexemple ci-dessus montre lenvoi dun mail basic, sachez quil est galement possible dajouter des pices jointes (voir types MIME autoriss) avec la contrainte toutefois que le-mail ne dpasse pas les un mo. Comme pour la version Python, il est galement mis la disposition des dveloppeurs une API permettant dinterroger des htes distants (via lAPI URL FETCH) et une autre permettant de manipuler des images. Cette version de Google App Engine tant toute rcente, il va tre intressant de suivre ladhsion des dveloppeurs de la communaut Java ce service. Dune part, elle offre une grande Quoi quil en soit, la sortie de la version Java est une nouveaut que nous nous devons de suivre et que je vous invite tester en dveloppant et en dployant vous-mme votre propre application. Rfrences Pour sinscrire : http://appengine.google.com/promo/java_runtime Lannonce officielle : http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html Le Cloud Computing : http://fr.wikipedia.org/wiki/Cloud_computing Tout sur Google App Engine : http://code.google.com/intl/fr/appengine WolfEngine : http://code.google.com/p/wolfengine DataNucleus : http://www.datanucleus.org Dcouvrir GWT : http://code.google.com/intl/fr/webtoolkit En savoir plus sur GUICE : http://code.google.com/p/google-guice Amazon Web Services : http://aws.amazon.com Windows Azure : http://www.microsoft.com/azure/windowsazure.mspx Vincent Bostoen Ingnieur dveloppement chez SFEIR facilit de dveloppement et de ce fait un gain de temps dans llaboration dapplications, ce qui devrait en attirer plus dun. Dautre part, tout comme pour la version Python un certain nombre de quotas et de restrictions sont prendre en compte lors de lutilisation de ce service, ce qui exclut certains types dapplications de cette offre dhbergement. Cette nouvelle version est galement un beau coup de pouce donn GWT, en effet le plugin Eclipse permet de crer en quelques clics une application GWT pour Google App Engine et devrait donc amener davantage de dveloppeurs adopter ce Framework Web. Google Guice sera peut tre un autre des bnficiaires de cette version Java, bien quil ne soit pas pouss outre mesure par Google pour tre associ Google App Engine, sa lgret et sa simplicit dutilisation devraient lui permettre de sintgrer facilement aux applications dployes sur la plate-forme. La mise en place de Google App Engine, GWT et Google GUICE (framework dinjection de dpendance) au sein dun seul mme projet est dj chose faite. En effet, afin de prendre en main la version Java de GAE, nous avons dvelopp un Blog. La plate-forme dhbergement est Google App Engine, ladministration de lapplication seffectue au travers dune interface GWT et linjection de dpendances est assure par GUICE. Nous en avons fait un projet open source que vous pouvez retrouver sur Google Code, son nom est WolfEngine.

32

PROgrammez ! \\ Mai 2009

gros plan \\ cloud

Manipuler les files de messages de Windows Azure Storage depuis Java


La plate-forme Cloud de Microsoft, Windows Azure, saccompagne de diffrents services tels les Windows Azure Storage. Dans ces services, on retrouve un espace de stockage des Blobs, structur (Table) et un service de queue de messages (Windows Azure Queue). Bien quintgr lenvironnement Windows Azure, Windows Azure Storage est accessible depuis le Web en exposant une interface REST, on peut alors bnficier de ces services dans un environnement externe Azure. Je vous propose dans cet article, de manipuler les Windows Azure Queue dans les nuages, depuis une application Java.
Pr-requis
Vous devez disposer dun compte Windows Azure et avoir cr un projet de type Storage Account depuis votre compte Azure https://lx.azure.microsoft.com. Notez alors le nom du compte associ ainsi que la Primary Access Key. Ils vous seront utiles pour vous authentifier lors des accs Windows Azure Storage depuis Java : [Fig.1] Installez la Development Version de Restlet : [Fig.2] http://www.restlet.org/downloads/snapshot.exe Installez JDom pour extraire la rponse XML : http://www.jdom.org Il ne vous reste qu lancer votre environnement de dveloppement Java prfr (Eclipse pour ma part) et cest parti !

A propos des Windows Azure Queue


Il faut savoir que vous rcuprez un flux XML lorsque vous dsirez rcuprer des messages dune file de messages. Ce flux est structur de la manire suivante : <?xml version="1.0" encoding="utf-8"?> <QueueMessagesList> <QueueMessage> <MessageId>0b911c25-e047-494e-971a-a7fb6f5cde63</MessageId> <InsertionTime>Sun, 22 Mar 2009 13:47:01 GMT</Insertion Time> <ExpirationTime>Sun, 29 Mar 2009 13:43:44 GMT</Expiration Time> <PopReceipt>AQAAAI84fq30qskB</PopReceipt> <TimeNextVisible>Sun, 22 Mar 2009 13:47:31 GMT</TimeNext Visible> <MessageText>hello programmez!</MessageText> </QueueMessage> </QueueMessagesList> Notez quun message possde un identifiant unique (MessageId), une date dinsertion dans la file une date dexpiration (un message est valable une semaine environ), un accus rception (PopReceipt) qui est valable jusquau retour du message dans la file, une date laquelle le message sera de nouveau visible dans la file de messages (un pop dun message ne le dtruit pas de la file) et enfin le message

Configuration de lenvironnement
Ajouter les jars suivantes au projet : jdom.jar org.restlet.jar org.restlet.ext.httpclient.jar org.apache.commons.httpclient.jar org.apache.commons.logging.jar org.apache.commons.codec.jar
Fig.1

Fig.2

Interoprer avec Windows Azure Queue


MessageQueue
Nous allons dabord crer une classe QueueMessage qui va parser le flux xml. Nous aurons principalement besoin des valeurs MessageId, PopReceipt et bien entendu MessageText. public class QueueMessage { public String text; public String popReceipt; public String id; public QueueMessage(String xml) throws JDOMException, IOException{ Mai 2009 \\ PROgrammez !

33

gros plan \\ cloud


ParseXml(xml); } } public QueueMessage(Response response) throws JDOMException, IOException{ StringWriter writer = new StringWriter(); response.getEntity().write(writer); ParseXml(writer.toString()); } public void ParseXml(String xml) throws JDOMException, IOException{ Matcher junkMatcher = (Pattern.compile("^([\\W]+)<")).matcher(xml.trim()); xml = junkMatcher.replaceFirst("<"); StringReader reader = new StringReader(xml); SAXBuilder sxb = new SAXBuilder(); Document document = null; document = sxb.build(reader); Element element = document.getRootElement().getChild("Queue Message"); id = element.getChild("MessageId").getValue(); popReceipt = element.getChild("PopReceipt").getValue(); text = element.getChild("MessageText").getValue(); } } La mthode ParseXml limine dabord des bits qui peuvent sinsrer avant le flux XML, ce qui cause alors des erreurs lors du parsing. public static Response DeleteQueue(String queue){ String uri = "http://javazure.queue.core.windows.net/"+queue; Request request = new Request(Method.DELETE,uri); return ProcessRequest(request); } Envoyer un message Pour envoyer un message, il faut que celui-ci soit encapsul dans un flux XML et le joindre une requte de type : POST : http://<myaccount>.queue.core.windows.net/<queueName>/messages Exemple de flux XML : <QueueMessage> <MessageText>Hello Programmez!</MessageText> </QueueMessage> Le code rsultant : public static Response PutMessage(String queue,String message){ String queueMessage = "<QueueMessage><MessageText>"+message+ "</MessageText></QueueMessage>"; StringRepresentation rep = new StringRepresentation(queue Message); String uri = "http://javazure.queue.core.windows.net/"+queue +"/messages"; Request request = new Request(Method.POST,uri,rep); return ProcessRequest(request); } Rcuprer un message Pour rcuprer un message dune file, il faut envoyer un ordre GET Maintenant toutes les requtes que lon va construire vont tre authentifies puis excutes par lappel de ProcessRequest Client client = new Client(Protocol.HTTP); return client.handle(request);

Windows Azure Queue et REST


Crer une file de messages Pour crer une nouvelle file de messages, il faut envoyer un ordre PUT sur lurl suivante PUT : http://<myaccount>.queue.core.windows.net/<queueName> Cela se traduit simplement via Restlet par : public static Response CreateQueue(String queue){ String uri = "http://javazure.queue.core.windows.net/"+queue; Request request = new Request(Method.PUT,uri); return ProcessRequest(request); } Dans ce cas, jai utilis mon compte " javazure ". Il est possible de crer un grand nombre de files de messages par compte. Supprimer une file de messages Pour supprimer une file de messages, il faut envoyer un ordre DELETE sur lurl de votre file : DELETE : http://<myaccount>.queue.core.windows.net/<queueName>

Lapplication
Dans lapplication principale (Main), on va : Crer une file de messages Supprimer une file de messages Ajouter un message dans une file Rcuprer un message dune file Supprimer un message dune file Supprimer tous les messages dune file

Authentification
Toutes les requtes doivent tre authentifies suivant le schma dauthentification de Windows Azure : http://msdn.microsoft.com/enus/library/dd179428.aspx, la Development Version de Restlet supporte ce schma dauthentification (ChallengeScheme.HTTP_MS_SHAREDKEY), les appels sont alors rendus plus faciles, il suffit de spcifier le nom du compte Storage Account ainsi que la Primary Key associe : public static Response ProcessRequest(Request request) { ChallengeScheme scheme = ChallengeScheme.HTTP_MS_SHAREDKEY; // Identifiant d'acces aux services SDS ChallengeResponse authentication = new ChallengeResponse(scheme,<ACCOUNT_NAME>,<PRIMARY_ACCESS _KEY>); request.setChallengeResponse(authentication); // Ask to the HTTP client connector to handle the call

34

PROgrammez ! \\ Mai 2009

gros plan \\ cloud


sur votre file de messages lurl suivante : GET : http://<myaccount>.queue.core.windows.net/<queueName>/messages public static Response GetMessage(String queue){ String uri = "http://bitc.queue.core.windows.net/"+queue+"/ messages"; Request request = new Request(Method.GET,uri); return ProcessRequest(request); } Vous pouvez ensuite parser la rponse afin de rcuprer le message en utilisant QueueMessage dfini plus tt : public static void main(String[] args) throws DOMException, IOException, JDOMException { Response response = GetMessage("restletqueue"); QueueMessage msg = new QueueMessage(response); System.out.println(msg.text); } Supprimer un message Comme dit prcdemment, le fait de rcuprer un message dune file ne le supprime pas, le message sera disponible nouveau dans la file aprs un certain temps. Pour pouvoir supprimer un message, il faut connatre son identifiant et la valeur du popreceipt, ce qui implique quil faille au pralable rcuprer ce message. Il faut ensuite envoyer un ordre DELETE lurl suivante tant que le popreceipt est valable (il devient obsolte au retour du message dans la file) : DELETE : http://<myaccount>.queue.core.windows.net/<queueName>/messages/<messageid>?popreceipt=<string-value> public static Response DeleteMessage(String queue,QueueMessage msg) throws IOException, JDOMException{ String uri = "http://javazure.queue.core.windows.net/"+queue +"/messages/"+msg.id+"?popreceipt="+msg.popReceipt; Request request = new Request(Method.DELETE,uri); return ProcessRequest(request); } Exemple dutilisation : public static QueueMessage Pop(String queue) throws JDOM Exception, IOException{ Response response = GetMessage(queue); QueueMessage msg = new QueueMessage(response); DeleteMessage(queue, msg); return msg; } Effacer tous les messages dune file Le service donne la possibilit deffacer tous les messages prsents dans une file de messages. Pour cela, il faut envoyer lordre suivant : DELETE : http://<myaccount>.queue.core.windows.net/<queueName>/messages public static Response ClearMessages(String queue){ String uri = "http://javazure.queue.core.windows.net/"+queue +"/messages"; Request request = new Request(Method.DELETE,uri); return ProcessRequest(request); } Pour aller plus loin Je vous ai montr dans cet article, des actions de base quil est possible deffectuer sur Windows Azure Queue. La documentation MSDN montre aussi comment il est possible de modifier certains paramtres lis aux messages, comment rcuprer un plus grand nombre de messages en une requte, etc. Pour approfondir le sujet, une adresse : http://msdn.microsoft.com/en-us/library/dd179353.aspx

Conclusion
En exposant une architecture REST, Windows Azure tend la cible des applications au-del de la technologie .NET. Restlet facilite lintgration de la plate-forme avec le monde Java. Vous aurez sans doute remarqu la simplicit de la manipulation des Azure Queue, mettre une opration se rsume savoir quel verbe HTTP envoyer et sur quelle URL avec ventuellement quelle donne. Vos applications Java peuvent maintenant bnficier dun service de Message Queuing dans les nuages !

Ronny Kwon Etudiant CSII3 lEPSI de Montpellier http://blogs.developpeur.org/ronnyk

Linformation permanente
Lactu de Programmez.com : le fil dinfo quotidien La newsletter hebdo : la synthse des informations indispensables.

www.programmez.com
36
PROgrammez ! \\ Mai 2009

Abonnez-vous, cest gratuit !

gros plan \\ cloud

Comprendre loffre et larchitecture Amazon Web Services


Depuis la premire offre dAmazon Web Services, AWS (http://aws.amazon.com) lance en mars 2006 avec le service Simple Storage Service (S3), dautres services dinfrastructures sont apparus et rendent possible lutilisation de mmoire et CPU de serveurs externes.
ans loffre dAmazon, on trouve des services dinfrastructures (matriels et logiciels), de recherche dinformations et autres (paiements, services non informatique, sous-traitance et commerce avec Associates Web Service anciennement E-Commerce Service). Cet article rsume les services relatifs aux infrastructures. Pour chacun deux, vous trouverez sur le site dAmazon le contrat sous la forme dun fichier au format WSDL. En utilisant un service dinfrastructures, lutilisateur nest plus propritaire mais accde aux ressources sans les grer. Les arguments quAmazon met en avant sont les suivants : conomique : peu dinvestissement, aucun engagement long terme, facturation des ressources effectivement utilises, frais dgressifs en fonction du volume. Les prix sont publis. Qualit : les services bnficient dune infrastructure solide. Flexibilit : les services sont indpendants des systmes et langages ou proposent des solutions cl en main. Facilit dutilisation : lutilisateur ne dmarre pas de rien, il a la possibilit dinclure dans ses applications des briques existantes (du SGBD au moyen de paiements par exemple). Aucune charge de gestion, doptimisation ou dinstallation.

Elastic Computer Cloud (EC2)


EC2 fournit des environnements virtuels dinstances de diffrents OS (cluster de serveurs) incluant la ges-

tion du rseau. Vous pouvez, travers les API du Web Service, ou via des outils fournis : crer une (ou plusieurs) image(s) (Amazon Machine Image : AMI) hbergeant vos applicatifs et donnes (AWS appelle Elastic Block Store sa fonctionnalit de persistance) ou utiliser une instance prconfigure. Toute image est stocke dans un fichier crypt (dans lenvironnement S3) charger votre instance dans un environnement scuris et fiable via le service S3. configurer des aspects scuritaires ainsi que laccs rseau votre (vos) instance(s). Ainsi, une instance peut se manipuler distance et en tout lieu via le mcanisme Elastic IP adresse IP statique attribue , un compte client et non une instance en particulier. Les instances (vendues de 1 20 units EC2, une unit correspondant un processeur de 1,2 GHz Opteron 2007 ou Xeon 2007) conviennent pour toute application, de la plus modeste la plus gourmande. Tous les principaux systmes du march sont disponibles. On retrouve aussi les habituels SGBD, serveurs Web et dapplication et vido. Aprs enregistrement auprs des services S3 et EC2 (si vous tes dj client dAmazon, vous navez quun clic faire au niveau de votre carte bleue), il faut se munir de diffrents codes et certificats (account ID, access key ID, secret access key, private key file et X.509 certificate file). Le processus de gestion dinstances est le suivant :

Crer une image partir de rien (pour Linux/UNIX) ou base sur une instance existante prconfigure (image publique) ; Installer ventuellement des logiciels additionnels votre image (bundle) puis obtenir un nouvel AMI ID ; Lancer autant dinstances de vos images que ncessaire ; Administrer et utiliser vos instances. Les tapes pour manipuler une image publique sont de slectionner une AMI, gnrer une paire de cls, lancer linstance, autoriser les accs rseau, se connecter linstance puis charger (ct instance) le certificat ainsi quune cl. La liste des images est disponible sur le site dAmazon et lutilitaire EC2 AMI recense les plus courantes. La commande ec2-describe-images -a retourne les identifiants de toutes les images publiques (cette commande ma retourn le dtail de 1215 images dj recenses !). Une description de ces machines peut tre obtenue via le site communautaire dAmazon. Afin de grer vos images, vous pouvez opter pour une interface en ligne de commandes ou par le navigateur Firefox. Lutilitaire EC2 AMI Tool, crit en Java, inclut des scripts sadaptant Windows 2000/XP,

Infrastructure

Recherche dinformations Autres


Flexible Payments Service DevPay Mechanical Turk Fulfillment & Associates Associates Web Service Alexa Web Information Service Alexa Top Sites Alexa Site Thumbnail

Elastic Compute Cloud (EC2) Alexa Web Search Simple Storage Service SimpleDB CloudFront Simple Queue Service

Mai 2009 \\ PROgrammez !

37

gros plan \\ cloud


Linux/UNIX et Mac OSX. Aucune installation nest requise, il suffit de dzipper le fichier tlcharg. Plusieurs variables denvironnement sont paramtrer ( J AVA _ H O M E , EC2_HOME, EC2_PRIVATE_KEY et EC2_CERT) et le mode opratoire est assez complexe. En passant, je visite le forum qui nest pas utilis depuis plusieurs mois Pour ceux qui prfrent une interface plus intuitive, lextension Elastifox vous permettra de manipuler vos instances. Concernant la persistance de vos donnes sur linstance, il faut utiliser la technologie EBS (Elastic Block Store) pour crer des volumes, monts comme des units de disque. Il est possible de crer jusqu 20 volumes (dun Go un To). Chaque volume peut tre attach toute instance (dtach aussi la demande). Des clichs (snapshots) peuvent tre dfinis pour sinterfacer avec loffre S3 (davantage spcialise sur le stockage en ligne). contenu multimdia (vido, images, logiciels ou musique) via HTTP grce 14 datacenters (dont 4 en Europe et 2 en Asie). Il est possible dutiliser cette offre couple une instance EC2. Les objets sont placs dans un emplacement de S3 (bucket) qui est enregistr et qui est associ un nom de domaine. Playfish utilise CloudFront pour la distribution de ses jeux. Cette socit compte plus de 25 millions dinscrits et dessert plus de 2 milliards de minutes de jeu chaque mois.

Simple Storage Service (S3)


Le service S3 permet de stocker (et de restituer) des donnes composes d'objets (de taille variant dun octet 5 Go), les moyens dy accder sont volontairement limits et simples (REST et SOAP). Le modle de stockage est " plat " (fichiers) o chaque objet sont associs une cl et des droits daccs. Laccs par BitTorrent le protocol peer-to-peer est aussi possible. Plus de 29 milliards dobjets seraient, ce jour, stocks sur Amazon S3. Par ailleurs, laide du module Secure Backup Cloud, les clients peuvent utiliser S3 pour raliser une sauvegarde de base de donnes Oracle.

Pour les transferts, 7 centimes par Go en entre et 12 centimes en sortie seront facturs (tarifs dgressifs par la suite). Comptez environ 9 centimes pour 1000 requtes.

Simple Queue Service (SQS)


SQS est une file dattente pour stocker des messages entre serveurs. On y trouve trois acteurs : les composants du systme distribu, la file dattente et les messages (illustrs de A E sur le schma). Une simple file peut tre sauvegarde sur diffrentes machines en incluant volontairement des redondances. Lors de la restitution des messages, SQS slectionne un chantillon de serveurs et ne retourne pas forcment la totalit des messages (ils le seront lors dune requte ultrieure).

SimpleDB
Ce service permet dexcuter des requtes sur des donnes (stockes dans S3) et hberges sur une instance EC2. Lditeur affirme quaucun schma nest dfinir, que les donnes sont automatiquement indexes, que lAPI est simple. Le but serait de rduire les tches dadministration, de modlisation et doptimisation. Que de louables objectifs ! Ne rvez pas, ce service ne peut en aucun cas remplacer un SGBD mme sous-utilis. Le premier exemple quAmazon produit concerne une structure de table relationnelle qui nest pas en premire forme normale !

glossaire
API REST / SOAP : moyens daccs des mthodes distantes (groupes sous la dnomination Web Service), le premier bas sur le protocole http (le plus souvent envoi dune requte GET), le second ncessite de composer des messages XML au format normalis et dcrit dans un contrat de type WSDL, puis de dcoder le retour dans le mme format. Cloud computing : concept faisant rfrence lutilisation de ressources dordinateurs distants (un peu analogue au grid computing) situs dans un nuage (lInternet). Lutilisateur nest plus propritaire de son serveur mais y accde de manire volutive sans avoir grer linfrastructure. Elastifox : Extension de Firefox permettant une gestion dimages (choix, dmarrage, arrt, accs rseau, etc.). Image : configuration logique (type de processeur, RAM et disque, systme dexploitation et logiciels hbergs) choisie par lutilisateur distant. Instance : machine physique respectant la configuration logique choisie par lutilisateur distant. Web Service : technologie rpartie base sur la publication dun ensemble doprations dcrites dune manire plus ou moins normalise au sein dun contrat (interface) et invocables distance via tout langage. Les messages dappel et de retour sont majoritairement bass sur XML et transports par les protocoles du Web (http, smtp, https, etc.).

Conclusion
Malgr ces fonctionnalits allchantes, bon nombre dentreprises doivent se mfier de ces technologies. Amazon tente de les rassurer en leur proposant des contrats de niveau de service pour S3 et EC2 (taux de disponibilit 99,9 % et 99,95 %) et en rapprochant physiquement les services des clients. Des alliances ont dj vu le jour avec Capgemini et Salesforce. Dautres alliances sont aussi passes avec les plus grands diteurs comme Red Hat ou Oracle qui facilite lutilisation de 11g sur EC2. Aprs la mise en place de loffre de diffusion de contenu, Amazon prvoit de crer des nouvelles fonctionnalits pour EC2 (quilibrage de charge entre serveurs, console de gestion avec gestion dinstances en mode drag and drop et prsentation dinformations en temps rel sur ltat des systmes). Il est galement prvu une fonction daide au dimensionnement dinstances (autoscaling) en fonction des besoins rels. Christian Soutou

Laccs se fait via REST ou SOAP . LAPI propose diffrentes mthodes (CREATE pour les domaines de donnes, GET, PUT et DELETE pour les attributs lies un domaine, QUERY assorti de quelques options pour simuler un peu SQL).

CloudFront
CloudFront est une offre concurrente dAkamai, elle permet de diffuser du

38

PROgrammez ! \\ Mai 2009

Dveloppez 10 fois plus vite

Nouvelle version

PLATEFORME PROFESSIONNELLE DE DVELOPPEMENT (AGL) Pocket PC, Smartphone, Terminal Windows CE, Windows Mobile

Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation. . WINDEV, WEBDEV et WINDEV Mobile sont compatibles.

DVELOPPEZ VOS APPLICATIONS POUR POCKET PC, TLPHONE, TERMINAL MOBILE


WINDEV Mobile 14 est lenvironnement de
dveloppement professionnel qui permet de dvelopper jusqu 10 fois plus vite les applications sur mobile dont votre entreprise et vos clients ont besoin: gestion de stock, force commerciale, golocalisation, saisies mdicales, expertises, relevs de terrain, prise de commande temps rel, rglage de chane de production, ... La puissance et la facilit de dveloppement de WINDEV Mobile 14 permettent un dveloppement complet en quelques journes. Lenvironnement est livr complet, le dploiement des applications ralises est gratuit sans redevances (base de donnes incluse). Toutes les fonctionnalits dun AGL professionnel sont offertes. Tous les aspects de la mobilit sont grs: accs direct, rplication, WiFi, Bluetooth, 3G, Internet, socket, ActiveSync, rseau, J2EE, SMS, RFID, lien avec votre S.I., codesbarres automatiques...

VERSION EXPRESS GRATUITE


Tlchargez-la !

Un tableau de bord en temps rel sur son tlphone? Facile !

Vous aussi ralisez vos applications mobiles 10 fois plus vite... avec WINDEV Mobile 14.
(Logiciel professionnel)

Logiciel professionnel

DEMANDEZ LE DOSSIER GRATUIT


252 pages + DVD + Version Express incluse + 112 Tmoignages. Tl: 04.67.032.032 ou 01.48.01.48.88 info@pcsoft.fr

UN CODE MULTI-PLATEFORME : Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, SmartPhone, Client riche ...

Fournisseur Officiel de la Prparation Olympique

www.pcsoft.fr

dossier \\ coding4fun

Coding4fun

Coder pour le
Le dveloppeur est aussi un grand enfant ! Non, la programmation nest pas ennuyeuse, rptitive ! La programmation demeure un jeu, un plaisir. Le dveloppeur aime chercher de nouvelles technologies, des gadgets, bref, coder pour samuser, rveiller son ct geek ! Dans notre dossier, nous allons dvoiler quelques ides de coding4fun : dtourner lusage de votre Wii remote (vous savez la fameuse manette de jeux de la console Wii de Nintendo), transformer votre tlphone Android en dictaphone, ou encore comment crer un gadget pour son Skype (si, si, on peut le faire). Dans la mme veine, on dcouvrira la conception dun widget en PHP avec les librairies Yahoo !, fonctionnant quasiment partout ! Autre ct fun, lutilisation dun zoom infini et surpuissant sur son site web avec la technologie DeepZoom de Silverlight, malheureusement encore peu utilise. Et enfin, nous dcouvrirons un petit langage qui, mine de rien, rconcilie tout le monde avec la programmation : le projet Smallbasic. Ce nest pas un hasard si Microsoft promotionne fortement le coding4fun avec un site bourr dides : http://blogs.msdn.com/coding4fun/ Google et bien dautres ne disent pas autre chose ! Avec le Coding4fun , nous allons nous divertir, programmer autre chose, prendre ou reprendre du plaisir dvelopper, concevoir un site, un logiciel sans nous prendre au srieux. Les neurones ont aussi besoin de se reposer et de jouer un peu. If geek Coding4fun = francoistonic endif

FUN

40

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun

Wiimote, XNA et C#
La Nintendo Wii a connu un norme succs ds sa sortie malgr les deux grandes concurrentes que sont la Xbox 360 et la Playstation 3. Cest parce que la Wii a apport quelque chose dinnovant dans le Gameplay : une autre manire de jouer !

intendo a toujours domin le march des consoles portables mais a eu du mal survivre sur le march des consoles de salon lorsque Sony a dbarqu avec sa Playstation et que Microsoft en a " rajout une couche " avec la Xbox 360. Mais Big-N a russi survivre en sadressant une nouvelle cible de joueurs : les joueurs occasionnels. Ce nest pas tant au niveau des graphismes que la Wii sort du commun mais plutt grce sa manette, la Wiimote. Facile prendre en main et facile comprendre par la plupart des joueurs. Cette manette permet de dtecter les mouvements et de les retranscrire dans le jeu. " pourquoi est-ce que je vous raconte tout a ?", me direz-vous. Si vous lisez cet article cest que vous tes un minimum intress par le monde du dveloppement des jeux vido et savoir comment programmer les jeux les plus addictifs ? Pourquoi ne pas rutiliser llment le plus intressant de la Wii dans vos jeux : la Wiimote. Ou, autrement dit, comment utiliser la Wiimote dans vos jeux dvelopps en XNA ? Cest bien le but de cet article ! Alors Bonne lecture !

contrle utilisateur : MultipleWiimoteForm.cs SingleWiimoteForm.cs WiimoteInfo.cs Dans la premire fentre le programme va rechercher les diffrentes Wiimote disponibles et crer une tabulation dans notre fentre pour chaque Wii dcouverte : mWC = new WiimoteCollection(); int index = 1; try { mWC.FindAllWiimotes(); } catch(WiimoteNotFoundException ex) { MessageBox.Show(ex.Message, "Wiimote not found error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch(WiimoteException ex) { MessageBox.Show(ex.Message, "Wiimote error", MessageBox Buttons.OK, MessageBoxIcon.Error); } catch(Exception ex) { MessageBox.Show(ex.Message, "Unknown error", MessageBox Buttons.OK, MessageBoxIcon.Error); } foreach(Wiimote wm in mWC) { // create a new tab TabPage tp = new TabPage("Wiimote " + index); tabWiimotes.TabPages.Add(tp); } Dans ces tabulations se trouvera une instance du contrle utilisateur (WiimoteInfo.cs). Il ne vous reste plus qu dtecter les changements de la Wiimote. Pour cela, nous devons intercepter deux vnements : WiimoteChanged pour intercepter les vnements de base de la Wiimote.

Ce quil faut savoir avant de commencer


XNA est la technologie qui permet de crer des jeux Xbox ou PC. Tout cela est bas sur la plate-forme .NET que vous connaissez bien si vous tes habitu travailler sur un environnement Windows. Seul petit hic lorsquon veut faire du XNA : il faut mettre Visual Studio 2008 au placard (ou suivre ce tutoriel http://www.codeproject.com/KB/game/xna2.0vs2k8.aspx). Que devons-nous utiliser dans ce cas ? Et bien je vous conseille dinstaller Visual Studio 2005 Express ou Visual Studio 2005 (ce nest pas facile, je sais, mais si vous tes abonns MSDN vous pourrez le trouver dans votre centre de ressource). Lorsque vous avez termin dinstaller Visual Studio 2005 ou sa version Express, vous pouvez tlcharger et installer Microsoft XNA Game Studio 3.0 cette adresse : http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED1EDD-4852-9883-9A33C0AD8FEE&displaylang=en. Il vous manque encore la librairie permettant de contrler la Wiim o t e . Vo u s p o u v e z l a t r o u v e r l a d r e s s e s u i v a n t e : http://www.brianpeek.com/blog/pages/wiimotelib.aspx. Vous voil maintenant fin prt commencer !

Exploration des possibilits de la librairie Wiimote


Cette librairie a t conue par Brian Peek. Lorsque vous aurez dcompress le fichier, vous trouverez dedans deux exemples dutilisation (C# / VB.NET). Nous allons explorer un peu plus lun de ces deux exemples pour que vous ne perdiez pas de temps comprendre comment cela fonctionne. Ce petit programme permet de se rendre compte de linteractivit quon peut attendre de cette librairie. Si vous ouvrez le projet, vous aurez deux fentres et un

Mai 2009 \\ PROgrammez !

41

D.R.

dossier \\ coding4fun
WiimoteExtensionChanged pour intercepter des extensions comme celle de Guitar Heroes. wm.WiimoteChanged += wm_WiimoteChanged; wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged; void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs e) { WiimoteInfo wi = mWiimoteMap[((Wiimote)sender).ID]; wi.UpdateState(e); } void wm_WiimoteExtensionChanged(object sender, WiimoteExten sionChangedEventArgs e) { // find the control for this Wiimote WiimoteInfo wi = mWiimoteMap[((Wiimote)sender).ID]; wi.UpdateExtension(e); if(e.Inserted) ((Wiimote)sender).SetReportType(InputReport.IRExtension Accel, true); else ((Wiimote)sender).SetReportType(InputReport.IRAccel, true); } Les diffrents contrles utilisateurs ont t sauvs dans un tableau, ce qui nous permet dappeler une mthode du contrle utilisateur. Ces mthodes vont lancer un delegate qui mettra jour linterface utilisateur. Par exemple pour savoir quel bouton a t press : private void UpdateWiimoteChanged(WiimoteChangedEventArgs args) { WiimoteState ws = args.WiimoteState; clbButtons.SetItemChecked(0, ws.ButtonState.A); clbButtons.SetItemChecked(1, ws.ButtonState.B); clbButtons.SetItemChecked(2, ws.ButtonState.Minus); clbButtons.SetItemChecked(3, ws.ButtonState.Home); clbButtons.SetItemChecked(4, ws.ButtonState.Plus); clbButtons.SetItemChecked(5, ws.ButtonState.One); clbButtons.SetItemChecked(6, ws.ButtonState.Two); clbButtons.SetItemChecked(7, ws.ButtonState.Up); clbButtons.SetItemChecked(8, ws.ButtonState.Down); clbButtons.SetItemChecked(9, ws.ButtonState.Left); clbButtons.SetItemChecked(10, ws.ButtonState.Right); Je ne peux que vous conseiller de regarder et de tester plus en dtail les applications dexemples fournis avec la librairie pour vous donner une meilleure ide des possibilits.
Fig.1

La premire chose faire est de crer notre projet. Pour cela, ouvrez Visual Studio 2008 et crez un projet XNA Game Studio 3.0 : [Fig.2]. Une fois le projet cr, nous devons ajouter notre rfrence la DLL Wiimote. Game1.cs est la classe principale de notre programme. Program.cs va lancer cette classe comme nous en avons lhabitude dans nos dveloppements Winform. Game1 drive de Microsoft.Xna.Framework.Game qui, comme on peut le voir, est une classe du framework XNA. Dans notre classe, nous allons redfinir plusieurs mthodes : Initialize LoadContent UnloadContent Update Draw Dans la mthode Initialize, nous allons connecter la Wiimote et placer notre pointeur une position de base. Nous ne grons dans ce petit jeu quune seule Wiimote pour plus de facilit : protected override void Initialize() { wiimote.Connect(); wiimote.SetReportType(InputReport.IRAccel, true); wiimote.SetLEDs(false, true, true, false); position_pointer.Width = 31; position_pointer.Height = 31; position_pointer.X = this.Window.ClientBounds.Width / 2; position_pointer.Y = this.Window.ClientBounds.Height - 40; base.Initialize(); } Le contenu de notre application nest pas bien gros mais il ne faut pas oublier de lajouter notre solution dans Content. La mthode LoadContent va permettre de charger ces lments dans notre jeu : protected override void LoadContent() { pointer = Content.Load<Texture2D>("pointer"); // 31x31

Cration dun petit jeu de tir


Nous allons maintenant crer un simple jeu de tir. Pour cela, nous avons besoin dun pointeur, dune cible et dun fond dcran : [Fig.1] Comme vous le voyez, lapplication se veut trs simple et focalise sur lutilisation de la Wii.

42

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
Fig.2

target = Content.Load<Texture2D>("target"); // 100x100 } La Mthode UnloadContent na pas beaucoup dintrt, nous dconnectons simplement la Wiimote laide de la mthode Disconnect(). Cest dans la mthode Update que va se retrouver toute notre logique de gestion de la Wiimote. Nous devons rcuprer dans cette mthode la position de notre pointeur : position_pointer.X = wiimote.WiimoteState.IRState.IRSensors [0].RawPosition.X; position_pointer.Y = wiimote.WiimoteState.IRState.IRSensors [0].RawPosition.Y; On ajoute ensuite quelques cibles :

if (wiimote.WiimoteState.ButtonState.A) { wiimote.SetRumble(true); for (int i = 0; i < position_target.Count; i++) { if ((position_pointer.X + position_pointer.Width / 2) > position_target[i].position.X && (position_pointer.X + position_pointer.Width / 2) < position_target[i].position.X + position_target[i].position.Width && (position_pointer.Y + position_pointer.Height / 2) > position_target[i].position.Y && (position_pointer.Y + position_pointer.Height / 2) < position_target[i].position.Y + position_target[i].position.Height) { position_target.RemoveAt(i); } } } La mthode SetRumble est une mthode de la librairie de la Wiimote qui permet de la faire vibrer. Si le bouton nest pas press, on passe false comme argument la mthode SetRumble : else { wiimote.SetRumble(false); }

if (rnd.Next(100) == 1) { Random r = new Random(); int x = r.Next(100, this.Window.ClientBounds.Width-100); int y = r.Next(100, this.Window.ClientBounds.Height-100); position_target.Add(new Target(new Rectangle(x,y,100, 100), 0)); } position_target est une liste de Target, un objet que nous avons cr dans le projet : class Target { public Rectangle position; public double timer { get; set; } public Target(Rectangle r, double t) { position = r; timer = t; } } Pour vrifier si le joueur a tir, nous vrifions si le bouton A de la Wiimote a t press.Si oui, nous vrifions si nous avons bien vis une cible et dans ce cas nous supprimons cette cible :

Si la position de la cible est la mme depuis trop longtemps, nous la dplaons pour rendre le temps un peu plus compliqu : for (int i = 0; i < position_target.Count; i++) { position_target[i].timer += gameTime.ElapsedGameTime. TotalMilliseconds; if (position_target[i].timer > 1000*3) { position_target.RemoveAt(i); } } Nous devons enfin appeler la mthode de la classe de base : base.Update(gameTime); Voil qui termine notre petit jeu. A peu de choses prs (des oiseaux, et un petit dcor et plusieurs niveaux), cela ne vous rappellerait pas un petit jeu sur Super Nintendo ?

Loc Bar Caroline Lomba Heode Sprl www.heode.com

Mai 2009 \\ PROgrammez !

43

dossier \\ coding4fun

DeepZoom : un zoom infini pour le web !


DeepZoom est une technologie encore mconnue, bien que de plus en plus utilise dans les sites vitrines en Silverlight, comme celui de la Laguna Coup de Renault (http://www.lagunacoupe.com). DeepZoom est intgr Silverlight depuis sa version 2.0, sortie en octobre dernier.
histoire de DeepZoom a commenc en 2006 avec le rachat par Microsoft dune socit nomme Seadragon. Cette dernire avait dvelopp une technologie, elle-mme nomme Seadragon, qui permettait de zoomer sur des images, en utilisant JavaScript. Dvelopp par la mme quipe dans le cadre des Microsoft Live Labs, DeepZoom permet, comme Seadragon, dafficher dans une application Silverlight, une ou plusieurs images tout en pouvant " zoomer " linfini.

Pourquoi utiliser DeepZoom ?


Quest ce que DeepZoom peut apporter vos applications ? Prcisment ce pourquoi elle a t faite : afficher un grand nombre dimages lcran, sans aucune limite de taille. De plus, comme nous le verrons plus tard, le format de fichier utilis par DeepZoom, appel " image pyramide ", permet un chargement des images optimis. Tout dabord je prsenterai le fonctionnement interne de DeepZoom, puis comment utiliser loutil DeepZoom Composer, absolument indispensable tout dveloppeur dapplication DeepZoom. Enfin, nous terminerons avec la ralisation dune application Silverlight intgrant des lments DeepZoom.

dans cette optique qua t cr le logiciel DeepZoom Composer que nous allons maintenant utiliser.

DEEPZOOM COMPOSER
Comment utiliser DeepZoom composer
DeepZoom Composer est un logiciel gratuit propos par Microsoft comme un outil de sa gamme Expression, permettant la cration des fichiers " images pyramides " de faon simple et rapide. DeepZoom Composer peut tre tlcharg sur le centre de tlchargement Microsoft. A linstar des autres logiciels de la suite Expression, DeepZoom Composer travaille avec des fichiers de projets (*.dzprj). En sortie, DeepZoom permet de sauvegarder les produits en diffrents formats tels quImages, Seadragon ou Silverlight. Cette dernire permet de gnrer directement une solution Silverlight pour Visual Studio 2008, cependant nous choisirons loption Images pour voir prcisment comment intgrer par nous-mmes les images pyramides dans Silverlight. En revanche, pour faire rapidement une simple application DeepZoom, cela pourrait vous tre utile. Une fois le projet cr, la composition dimages DeepZoom se fait en trois tapes : Import : vous pouvez importer dans le projet autant de fichiers images que voulu, afin de les intgrer ensuite dans limage finale. Composition : vous pouvez maintenant utiliser les images que vous avez prcdemment importes et les disposer comme bon vous semble dans lespace. Cet espace na dailleurs pas de limite de taille. Vous pouvez donc mettre un nombre arbitraire dimages. Export : il est maintenant temps dexporter le projet en vritable fichier pyramide afin de lexploiter dans Silverlight. Dans ce but, choisissez loption de sortie " Image ", donnez un nom, et choisissez lune des deux options dexport : Composition dimages

Comment DeepZoom fonctionne-t-il ?


DeepZoom utilise un format de fichier spcifique, mis en place pour que le chargement de limage entire soit trs rapide et que les zooms se fassent avec la plus grande fluidit. Pour cela, deux composants sont essentiels : le premier est un fichier XML de description contenant des informations sur les diffrentes images qui composent la scne ; par exemple leur taille, leur position, etc. Le second est videmment limage elle-mme, non pas en un mais en plusieurs exemplaires. Elle est en effet recopie dans plusieurs rsolutions, de la plus basse visible la plus haute supporte par le fichier. Ainsi quel que soit le niveau de zoom de lapplication DeepZoom, Silverlight sait comment afficher limage. Ce nest pas tout, pour les niveaux de zoom avancs, limage est fractionne en plusieurs parties. En consquence, quand lutilisateur zoome dessus, Silverlight charge la vole la bonne partie de limage ; cela minimise les donnes transfrer. Au cours du chargement, elle est lgrement floute, afin que lon ne remarque mme pas le changement de rsolution. Lefficacit de DeepZoom est donc due la segmentation des images en plus petites images. La cration de fichiers lisibles par une application DeepZoom est par consquent un procd laborieux quon prfrera automatiser ou du moins simplifier. Cest

44

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
signifie que lassemblage dimages sera considr comme tant une seule grande image, alors que Collection dimages signifie au contraire que les images sont distinctes. Ca y est, vous avez cr votre premire image pyramide, il va falloir prsent crer le projet Silverlight et importer les fichiers gnrs par DeepZoom. Changeons doutil et ouvrons prsent Visual Studio 2008 ! ZIndex Comme les images peuvent maintenant se dplacer, il peut tre utile de changer leur ZIndex pour dcider quelle image sera visible si deux images se chevauchent.

PREMIERS PAS AVEC DEEPZOOM


En supposant que vous ayiez un dossier nomm GeneratedImages dans votre solution Silverlight dans lequel vous avez dispos votre image pyramide, vous pouvez maintenant ajouter dans votre fichier Page.xaml les lignes suivantes : <UserControl x:Class="Landscape.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinWidth="400" MinHeight="300"> <Grid x:Name="LayoutRoot" Background="White"> <MultiScaleImage Name="msi" Source="dzc_output.xml" /> </Grid> </UserControl> Cest aussi simple que cela. Maintenant, lancez votre application Silverlight et vous verrez apparatre limage pyramide que vous avez conue dans DeepZoom Composer ! Cependant, vous ne pouvez pas encore zoomer (un comble !). En effet, le MultiScaleImage possde plusieurs vnements mais cest au dveloppeur de les grer afin dobtenir le comportement quil dsire. Voyons maintenant comment grer par nous-mmes chacun des vnements pour obtenir le comportement classique de DeepZoom.

INTEGRATION DANS SILVERLIGHT


Les composants Silverlight
DeepZoom fait partie intgrante de Silverlight 2.0. Cela se caractrise par un ensemble de contrles spcifiques Silverlight permettant de grer DeepZoom. La premire classe laquelle nous allons nous intresser est la classe MultiScaleImage qui permet de faire apparatre dans Silverlight notre image cre avec DeepZoom Composer. Que vous ayiez choisi une collection ou une composition, vous pourrez utiliser le MultiScaleImage pour afficher limage, en mettant dans sa proprit " Source " ladresse de votre fichier XML gnr. La classe MultiScaleImage possde un petit nombre de proprits et de mthodes qui nous seront trs utiles :

PROPRIETES DU MULTISCALEIMAGE :
Source SubImages Comme nous venons de le voir, la source permet de donner ladresse du fichier de sortie XML. SubImages est une liste dlments MultiScaleSubImage permettant dobtenir toutes les images dune collection. Dans le cas dune composition la liste sera toujours vide. Le viewport dfinit ce que voit lutilisateur un instant donn. Lorigine du viewport est donc le point vue en haut gauche par rapport toute limage. Modifier ce point permet de se dplacer par programme dans le DeepZoom. La taille du Viewport donne la largeur de la partie vue par lutilisateur par rapport toute limage. Modifier cette valeur permet de changer la valeur de zoom par programme.

ViewportOrigin

GESTION DES EVENEMENTS


Dans un cas simple nous aurions pu demander DeepZoom Composer de nous crer le projet Silverlight, ce qui aurait permis de grer par dfaut tous les vnements. Ici nous allons faire nousmmes ces traitements pour personnaliser le comportement de notre application. Pour cela, commenons par ajouter un Zoom lors du clic dun bouton. Il faut avant tout ajouter un vnement MouseLeftButtonDown comme suit : <MultiScaleImage Name="msi" Source="dzc_output.xml" MouseLeftButtonDown="MultiScaleImage_MouseLeftButtonDown" /> Puis dans votre fichier Page.xaml.cs, ajoutez les lignes suivantes : private void Zoom(float zoomRation, Point elementPoint) { Point p = msi.ElementToLogicalPoint(elementPoint); msi.ZoomAboutLogicalPoint(zoomRation, p.X, p.Y); } private void MultiScaleImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Zoom(1.3f, e.GetPosition(msi)); } Le code prcdent permet de zoomer sur limage avec un ratio de 130%. On appelle pour cela la mthode ZoomAboutLogicalPoint.

ViewportWidth

METHODES DU MULTISCALEIMAGE :
ZoomAboutLogicalPoint Permet de zoomer dans le MultiScaleImage. Comme vous vous en doutez srement, la seconde classe qui nous sera utile dans le cas dune collection est la classe MultiScaleSubImage. On pourra manipuler toutes les images dune collection en utilisant la proprit SubImages de notre MultiScaleImage. Cette classe permet galement un certain nombre de traitements via ses proprits :

PROPRIETES DU MULTISCALESUBIMAGE :
Opacity On pourra manipuler lopacit de chacune des images sparment, ce qui peut tre particulirement utile dans le cas du filtrage des images. De mme que pour le MultiScaleImage, on peut changer lorigine du Viewport attach limage. Cependant dans ce cas, cest limage seule qui va se dplacer. Cela servira si lon veut dplacer les images sans changer la vue. On peut galement changer la taille du Viewport attach limage. Limage vise verra ainsi sa taille augmenter ou diminuer.

ViewportOrigin

ViewportWidth

Mai 2009 \\ PROgrammez !

45

dossier \\ coding4fun
Excutez votre application Silverlight, vous pourrez maintenant zoomer sur limage volont. En revanche, vous ne pouvez pas encore revenir en arrire dans limage. Deux solutions soffrent alors nous : ajouter un bouton pour faire un zoom en arrire, en utilisant la mme mthode que prcdemment ou bien utiliser la classe MouseWheelHelper. Cette classe, qui nest pas une classe standard de Silverlight (mais elle peut tre trouve ladresse suivante : http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs) permet en effet dutiliser la molette de la souris pour zoomer et d-zoomer. Essayons de mettre en place cette seconde solution. Pour cela, nous devons avant tout garder dans une variable la dernire position de la souris. Dans ce but nous allons ajouter un gestionnaire pour l'vnement MouseMove, comme le montre lexemple suivant : <MultiScaleImage Name="msi" Source="dzc_output.xml" MouseLeftButtonDown="MultiScaleImage_MouseLeftButtonDown" MouseMove="MultiScaleImage_MouseMove"/> protected Point _lastMousePosition; private void MultiScaleImage_MouseMove(object sender, Mouse EventArgs e) { _lastMousePosition = e.GetPosition(msi); } Ajoutons maintenant linstance du MouseWheelHelper, puis un gestionnaire l'vnement Moved, tout cela dans le constructeur de Page : public Page() { InitializeComponent(); new MouseWheelHelper(msi).Moved += new EventHandler<MouseWheelEventArgs>(Page_Moved); } private void Page_Moved(object sender, MouseWheelEventArgs e) { if (e.Delta > 0) { Zoom(1.3f, _lastMousePosition); } else { Zoom(1 / 1.3f, _lastMousePosition); } } Vous pouvez prsent zoomer volont dans votre application DeepZoom. On pourrait galement garder dans une variable le coefficient de zoom, afin de pouvoir par exemple grer un zoom maximal. Enfin, nous allons voir comment nous dplacer dans le viewport, en faisant un glisser / dposer avec la souris. Pour cela il nous faut dabord ajouter deux variables supplmentaires, qui garderont la dernire position du viewport et dfiniront si lutilisateur est en train de dplacer la scne. protected Point _lastDragViewportOrigin; protected bool _isDragging = false; Changeons maintenant les actions dclenches lors du mouvement et du clic sur le MultiScaleImage afin de pouvoir changer la proprit ViewportOrigin lors du mouvement de la souris, si lon a auparavant dbut un drag, puis nous ajouterons le gestionnaire d'vnement MouseLeftButtonUp pour librer ce drag : private void MultiScaleImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (!_isDragging) { this._lastDragViewportOrigin = msi.ViewportOrigin; this._lastMousePosition = e.GetPosition(msi); this._isDragging = true; } } private void MultiScaleImage_MouseMove(object sender, Mouse EventArgs e) { if (_isDragging) { Point newViewport = _lastDragViewportOrigin; Point currentMousePosition = e.GetPosition(msi); newViewport.X += (_lastMousePosition.X - currentMouse Position.X) / this.msi.ActualWidth * this.msi.ViewportWidth; newViewport.Y += (_lastMousePosition.Y - currentMouse Position.Y) / this.msi.ActualWidth * this.msi.ViewportWidth; msi.ViewportOrigin = newViewport; _lastDragViewportOrigin = newViewport; } _lastMousePosition = e.GetPosition(msi); } private void MultiScaleImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this._isDragging = false; } Et voil, votre premire application DeepZoom est maintenant pleinement fonctionnelle !

POUR CONCLURE
Avec les outils que nous avons vus, vous pouvez faire nimporte quelle application DeepZoom. Les classes que nous avons rencontres sont simples et puissantes la fois et offrent beaucoup de libert. Si vous voulez manipuler de grandes photos ou faire une galerie dimages originale, nhsitez plus, DeepZoom est fait pour cela !

Sbastien Mornas sebastienmornas@gmail.com tudiant lEPITA au sein de la spcialisation Multimdia et Technologies de lInformation, Sbastien est passionn des technologies Microsoft.

46

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun

Dvelopper un dictaphone pour Android


Android est un systme dexploitation destin aux appareils mobiles. Ce systme est bas sur un noyau Linux et compos dun middleware applicatif et dune pile logicielle (services Google principalement). Le middleware applicatif repose sur un ensemble de bibliothques Java et sera votre point daccs pour lensemble de vos dveloppements applicatifs.
Android en quelques points cls : - Une machine virtuelle optimise pour les mobiles (La DalvikVM, base sur des registres et non sur une pile comme les VM classiques) - Un Framework applicatif exploitable en Java, - Des API graphiques 2D et 3D (OpenGL ES 1.0) - Une base de donnes SQL lite pour le stockage dinformations, - Le support multimdia des formats dimages (JPEG, PNG, GIF), des formats audio (MP3) et vido (MPEG4) les plus communs. - Des fonctionnalits tlphonie ; bluetooth, EDGE, 3G, Wifi, GPS, photo, acclromtre etc., le tout dpendant quand mme du matriel sur lequel Android sexcute. - Et enfin un environnement de dveloppement fourni avec un mulateur, des outils de dbogage et de profilage et surtout un plug-in pour lIDE Eclipse. [Fig.1] Nous allons nous intresser trois des grands composants dapplications possibles sur la plate-forme Android : Activity Broadcast receiver Service Notez quil existe un autre type de composants, le ContentProvider, qui permet dexposer les donnes dune application aux autres applications (par exemple, vous voulez exposer les photos ou les vidos prises par votre application aux autres applications). new Intent(android.content.Intent.VIEW_ACTION, ContentURI.create ("http://www.programmez.com")); Evidemment, toutes les applications ne peuvent rpondre tous les Intents lancs par le systme ou les autres applications. Sachez quil existe une classe appele IntentFilter pour spcifier quels Intents une activit (ou un broadcast receiver) est capable de grer. Par exemple, une activit qui afficherait les numros de tlphone dun contact publiera un IntentFiler de manire grer laction VIEW applique aux donnes reprsentant un contact. La navigation dcran en cran est ralise grce aux intents. Les activits publient leur exposition aux Intents grce un lment IntentFilter dans le fichier AndroidManifest.xml que nous aborderons un peu plus loin.

Broadcast receiver
Plus puissant que le concept de Push registry disponible sous les profils MIDP 2.0 de Java ME, les Broadcast receivers (ou Intent Receiver) peuvent tre utiliss pour que du code ragisse un vnement extrieur comme une heure prcise, un appel entrant, Les broadcast receivers ne sont pas destins afficher une interface graphique bien quils puissent prsenter des Nofications pour alerter lutilisateur. Ils sont galement enregistrs par le biais du fichier AndroidManifest.xml, mais ils peuvent galement senregistrer programmaticalement au lancement de lapplication. A noter que tout comme le Push registry de MIDP une application , na pas besoin de tourner pour que ses intent receiver soient appels, lapplication sera dmarre si besoin est.

Activit
Lactivit est le composant le plus utilis dans une application, chacune reprsentant un cran de lapplication. Une application multicran - soit la plupart des applications - sera donc compose de plusieurs activits qui seront dmarres en fonction des actions utilisateur ou de la logique de votre programme. Chaque activit est implmente sous la forme dune classe qui hrite de la classe Activity. Chaque nouvelle activit est ajoute la pile dactivits de lapplication pour composer ce que lon appellera une tche. A chaque nouvelle activit au dessus de la pile, lactivit prcdente est conserve en pause pour tre affiche de nouveau lorsque lactivit du dessus de la pile sera retire. Intent et IntentFilter Android utilise le concept dIntent pour naviguer dun cran un autre, ou plutt dune activit une autre. Un Intent dcrit ce quune application veut raliser et on pourra associer le concept dIntent celui dun vnement dans la programmation vnementielle. Les deux parties importantes de la structure de donnes dun Intent sont laction et la donne sur laquelle on souhaite agir (exprime sous forme dURI). Par exemple, pour visualiser une page internet sur le navigateur, on crera en Java un Intent avec laction VIEW et lURI du site web :

Service
Un service correspond du code fonctionnant en tche de fond qui ne ncessite pas dinterface graphique. Si on prend lexemple dune application multimdia, une interface graphique peut tre ncessaire pour choisir un morceau de musique diffuser, mais lutilisateur peut lgitimement sattendre ce que la musique continue malgr lutilisation dautres activits.

Le fichier androidManifest.xml
Ce fichier, situ la racine de votre projet, est le fichier de description de votre application. Il est charg de dfinir l'application, son point d'entre, les permissions ncessaires pour le bon droulement de l'application, les librairies utilises, les Intents pour lesquels elle doit ragir, ... Il est indispensable au bon fonctionnement de l'application. La classe R.java Il s'agit d'une classe permettant d'accder l'ensemble des ressources de votre application. Toutes les ressources images, sons,

48

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
texte internationalis sont situes dans le rpertoire /res mais ne devront tre accdes qu' l'aide de cette classe R. Cette classe est gnre automatiquement par le plugin Eclipse. tion des fichiers XML est conseiller dans vos projets pour permettre des applications plus souples et une gestion plus simple et pratique des id des contrles. Nous allons tudier ces deux possibilits en crant deux " Hello world ". Cration dun nouveau projet Pour crer un projet Android, choisir File->New->Other, puis choisir Android Project. Dans lassistant de cration, voici les valeurs que je suggre, reste cliquer sur Finish. [Fig.2] Voici la structure cre automatiquement par Eclipse pour votre projet : [Fig.3] Avant de lancer le projet, quelques explications sont ncessaires, notamment concernant lactivit HelloWorld gnre. Activit Voici le code de lactivit : package com.programmez.android.helloworld; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Grce cet extrait de code, on devine quune activit possde un tat et un cycle de vie linstar dune MIDlet Java ME. Les trois tats essentiels sont : active / running, quand elle est en premier plan lcran. paused, elle a perdu le focus, une autre activit est par-dessus avec de la transparence ou ne la recouvre pas totalement, elle est toujours visible par lutilisateur. stopped, elle est compltement masque par une autre activit et peut tre dtruite par le systme si besoin. Le cycle de vie complet dune activit est illustr dans le graphique et on remarque bien notre mthode onCreate, hrite de la classe Activity, que nous nimplmentons pas par hasard : [Fig.4]
Fig.2 Fig.3

Installation du SDK Android pour une utilisation avec Eclipse


Linstallation de lenvironnement de dveloppement Android est trs simple et galement entirement gratuite grce lutilisation de Eclipse. Voici les tapes que vous devrez suivre pour dployer votre environnement de dveloppement : Installation de l'environnement de dveloppement Eclipse, Installation du SDK Android en dcompressant larchive ZIP l'endroit de votre choix sur votre ordinateur. Au moment de la rdaction de cet article, il sagit de la version 1.1 R1. Ajoutez ensuite le chemin dinstallation du SDK dans la variable PATH (Chemin de recherche des programmes excutables) de votre systme. Dans Eclipse Ganymede, configurez l'environnement de dveloppement Android comme suit : - Lancer le logiciel Eclipse et aller dans le menu Help > Software Updates... - Dans la bote de dialogue qui apparat cliquer sur l'onglet Available Software - Cliquer sur Add Site... - Entrer l'adresse suivante : http://dl-ssl.google.com/android/eclipse/ puis cliquer sur OK - Revenir dans l'onglet Available Software - Slectionner la case cocher Developer Tools qui apparat en cliquant sur la croix correspondant lurl ajoute. Puis cliquer sur Install - Accepter le "license agreement" puis cliquer sur Finish. Le plug-in est install, il vous faut maintenant redmarrer Eclipse. - Aprs le redmarrage dEclipse vous devez spcifier lemplacement du SDK Android. Allez dans le menu Window > Preferences et Choisissez Android dans le menu de gauche. Cliquez sur Browse et pointez sur le rpertoire o vous avez install le SDK dans la premire tape.

Hello world is back !


Il est possible de concevoir la disposition des contrles dun cran dune application de deux manires diffrentes : soit l'aide de fichiers XML qui seront interprts pour obtenir la vue, soit programmaticalement en Java. Si l'utilisation du Java pour raliser les interfaces est plus simple pour des projets de petite taille, l'utilisaFig.1

Principes de base pour crer une application android

Mai 2009 \\ PROgrammez !

49

dossier \\ coding4fun
XML-Layout (main.xml) Si lon fait une analogie avec la programmation Swing, lactivit est un container qui est organis pour prsenter une mise en page, que lon appelle aussi un layout. La ligne setContentView (R.layout.main) nous permet dutiliser le fichier main.xml grce la fameuse classe R que nous avons voque plus haut et donc dattribuer la mise en page du fichier main.xml notre activit. Voici le contenu de ce fichier : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk /res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> Ce fichier nous permet dobtenir une mise en page linaire verticale plein cran qui ne contient quun TextView affichant une chane de caractres. On aurait pu utiliser dautres layout disponibles comme le TableLayout (tableau), lAbsoluteLayout (placement en x,y). Pour afficher quelque chose lcran, une activit va travailler avec des objets View et ViewGroup. En effet, chaque activit nest quun conteneur qui contiendra des contrles (image, texte, etc.) qui porte le nom de vue dans Android. Une vue est une structure qui contient la mise en page dune surface rectangulaire de lcran et qui gre son affichage, linteraction avec les touches sur laire quil reprsente. La classe View est la classe de base pour tous les widgets graphiques - les contrles -comme le TextView, le RadioButton, Un groupe de vues a pour objectif de contenir et grer un ensemble de vues et/ou de groupes de vues.[Fig.5] Avec Android, on dfinit donc linterface graphique dune activit grce un arbre de vues et de groupes de vues. La mthode setContentView() permet dattacher cet arbre lactivit cre. Au moment de dessiner, chaque groupe sera ainsi responsable du dessin et de la disposition de ses enfants. Tout cela nous rappelle un peu lAPI Swing.
Fig.4

AndroidManifest.xml
Voici un exemple de manifest Android qui dcrit une application : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res /android" package="com.programmez.android.helloworld" android:versionCode="1" android:versionName="1.0.0"> <application android:icon="@drawable/icon" android:label ="@string/app_name"> <activity android:name=".HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action .MAIN" /> <category android:name="android.intent.category .LAUNCHER" /> </intent-filter> </activity> </application> </manifest> A retenir dans ce manifeste, part le namespace et la structure globale que nous retrouverons chaque fois, la prsence du tag <application> qui contient la dclaration de tous les lments de lapplication. On retrouve licne de lapplication, le nom de lapplication et le tag <intent-filter> qui nous permet avec ces rglages de lancer lapplication via licne prsente dans lmulateur. Pour vrifier tout cela, il suffit de lancer lmulateur sparment grce lexcutable emulator.exe disponible dans le rpertoire /tools du SDK : [Fig.6]

Lancement de notre application !


Si on dcide de lancer notre application (Menu Run ou Ctrl+F11), on obtient lcran suivant qui affiche Hello World, chane contenue dans le fichier strings.xml et intgre notre vue ! [Fig.7]

Transformer lapplication pour ne plus utiliser le fichier de layout XML


Il ny a quun pas pour nous passer sur cet exemple simple du fichier de layout XML. package com.programmez.android.helloworld;
Fig.5 Fig.6

50

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
ligne suivante pour pouvoir accder au micro : import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* On a besoin d'une vue de type TextView pour afficher un texte */ TextView textViewInstance = new TextView(this); /* Put some text to the newly created TextView */ textViewInstance.setText("Hello world Programmez!"); /* Au lieu de passer un identifiant de ressource, on passe notre vue*/ this.setContentView(textViewInstance); } } <uses-permission _AUDIO" /> android:name="android.permission.RECORD

Le tour est jou ! Il ne nous reste qu simuler une carte SD. Tout dabord en la crant sous forme dimage de 256Mo par exemple : C:\android-sdk-1.1_r1\tools\mksdcard -l SD256M 256M C:\android -sdk-1.1_r1\card

Fig.7

Fig.8

Et si on ralisait une bote ides vocale (un dictaphone) ?


Voici le fichier main.xml qui contient la mise en page. Il sagit de mettre deux boutons, un pour commencer lenregistrement, lautre pour larrter. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk /res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Je parle l-dedans" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/debutEnregistrement" android:text="Enregistrer !" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/finEnregistrement" android:text="Stop a suffit !" /> </LinearLayout> Le programme, qui va crer un fichier sur la carte SD que nous allons simuler un peu plus tard. Tout ce qui sera dit au micro sera enregistr ! Pour cela, il suffit de crer un nouveau projet avec une activit qui sappellera Dictaphone. (Voir le code complet sur notre site). Dernire tape cruciale, les permissions. Il faut rajouter la

Puis en ajoutant, dans les paramtres de lancement de lmulateur (ligne de commande ou alors dans les Run Configuration, Targets dEclipse) : -sdcard C:\android-sdk-1.1_r1\card [Fig.7] On aurait pu le faire grce une portion de code, mais pour simplifier les choses, scannons ensuite tous les fichiers multimdia de lappareil afin quils apparaissent dans notre playlist. Pour cela, il faut aller dans lapplication Dev Tools, Media Scanner, puis dans lapplication musique, menu songs pour couter notre enregistrement : [Fig.8]

Conclusion
Nous avons vu quAndroid est une plate-forme relativement accessible nimporte quel dveloppeur Java. Evidemment, nous navons pas pu prsenter tous les concepts en dtail dans cet article, ni toutes les subtilits du SDK. Nanmoins, la documentation fournie par Google est trs dtaille et vous y trouverez tous les lments pour dmarrer srieusement vos projets Android. Les appareils Android arrivent en France, les outils sont dj disposition, il ne vous manque que les ides pour offrir vos applications la communaut Android ! Rfrence Open Handset Alliance : http://www.openhandsetalliance.com/ Push registry : http://developers.sun.com/mobility/midp/articles/pushreg/ SDK Android : http://developer.android.com/sdk Eclipse : http://www.eclipse.org/

Damien Guignard (http://domdidom.eu) Julien Chable (http://julien.chable.net)

52

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun

Un gadget Skype pour SideShow


Parmi les familles de gadgets disponibles sur Vista, il en existe une qui cible les priphriques auxiliaires faible consommation lectrique : ce sont les gadgets SideShow. Ces petites applications vous permettront dinteragir tout moment partir de priphriques parfois trs exotiques. Un nouveau champ dapplications pour les dveloppeurs .NET depuis la disponibilit des API SideShow pour .NET Framework 2.0.
Windows SideShow est apparu avec Windows Vista et permet de grer des priphriques daffichage connects au PC. Linnovation rside dans le fait que ces priphriques daffichage peuvent tre de toutes sortes (un petit cran de 4 lignes daffichage, un cran auxiliaire incorpor au PC ou encore un PDA, etc.) et utilisent le .NET MicroFramework pour fonctionner. Lun des plus connus est celui que lon retrouve sur des machines telles que le portable ASUS W5Fe. [Fig.1] Mais il existe beaucoup dautres applications de cette technologie embarque comme un cadre lectronique de photos, une commande TV, un tlphone mobile, etc. Pour dvelopper un gadget SideShow, nous avons le choix entre : Lutilisation des API COM Windows SideShow COM APIs depuis C++, Lutilisation des API .NET Windows SideShow depuis du code manag (C#, VB.NET, ), Ou enfin limplmentation dans un gadget Windows Sidebar en utilisant le modle objet javascript Windows SideShow. Pour dmarrer avec Windows SideShow, vous aurez besoin de : Windows Vista Home Premium / Business / Enterprise / Ultimate ou Windows Server 2008 Microsoft Visual Studio 2005 ou 2008 Microsoft .NET Framework 2.0 Si vous avez dj un matriel auxiliaire compatible SideShow vous tes alors prt crer vos gadgets. Dans le cas contraire, Microsoft fournit un simulateur quil vous faut installer et enregistrer avant de commencer dvelopper. Nous utiliserons le simulateur dans cet article pour implmenter un gadget SideShow coupl Skype. http://www.microsoft.com/downloads/details.aspx?FamilyID=4377f86dc913-4b5c-b87e-ef72e5b4e065&displaylang=en pour le setup Web ou http://www.microsoft.com/downloads/details.aspx?familyid=FF6467E65BBA-4BF5-B562-9199BE864D29&displaylang=en pour lISO complte 1180.1 MB). Le simulateur est aussi tlchargeable seul sur le site MSDN (Device Simulator for Windows SideShow). Windows SideShow Managed API 1.0 SDK : Les API et la documentation pour dvelopper des gadgets SideShow base de code manag en .NET Framework 2.0. (Lien : http://www.microsoft.com/ downloads/details.aspx?FamilyID=42f2f862-9987-406c-92a36523cf0eb3b3 &displaylang=en). Le SDK installe aussi les templates de projet SideShow en C# et VB.NET pour Visual Studio 2005 et 2008. Windows SideShow Managed Runtime 1.0 : Le runtime pour excuter des gadgets SideShow base de code manag .NET Framework 2.0. (Lien : http://www.microsoft.com/downloads/details. aspx? Fa milyID=ca8e9272-68e8-4c0c-a239-560c21b66fca&displaylang =en) Aprs le tlchargement et l installation du SDK Windows, ouvrez une console en mode Administrateur (Cliquez sur Start | Programs | Accessories | Command Prompt, et cliquez avec le bouton droit, puis slectionnez " Run as Administrator "). Dplacez-vous dans le rpertoire C:\Program Files\Microsoft SDKs\Windows\ v6.0\Bin puis entrez la commande suivante pour enregistrer le simulateur (cette procdure nest excute quune seule fois) : WindowsSideShowVirtualDevice.exe /regserver Vous pouvez ensuite excuter le simulateur avec la commande suivante dans le mme rpertoire : VirtualSideShow.exe Vous devez voir apparatre lcran ci-dessous. [Fig.2] Vous aurez remarqu que le simulateur ressemble trs fortement au priphrique auxiliaire de la photo du portable ASUS. Un priphrique compatible Windows SideShow est gnralement compos des contrles suivants : Un bouton Back/Retour qui permet de revenir lcran prcdent, Un bouton MENU qui permet dafficher les menus contextuels,

LE SIMULATEUR WINDOWS SIDESHOW


Pour dvelopper et excuter des gadgets SideShow en code manag, nous aurons besoin dinstaller les lments suivants : Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components : le SDK complet qui vous permet dobtenir le simulateur (Lien:

Figure 1 - Portable ASUS W5Fe

Figure 2 - Le simulateur Windows SideShow

Figure 3 - Windows SideShow dans le panneau de configuration

Mai 2009 \\ PROgrammez !

53

dossier \\ coding4fun
Des flches de dplacement en vertical / horizontal, Un bouton OK pour valider la slection courante. Ce mode de navigation et daffichage est important car nous le retrouverons dans la logique de conception de notre gadget SideShow. Les applications disponibles par dfaut sont un gadget daccueil et 2 jeux : Reversi et Columns (sorte de Tetris). Vous pouvez avoir un gadget Outlook 2007 si ce dernier est install. Ajoutez une rfrence lassembly Microsoft.SideShow.dll [Fig.9] Ajoutez une icne au projet en prenant soin de prciser les tailles 16x16, 32x32 et 48x48 en 32, 8 et 4 bits. Toutes les spcifications des gadgets SideShow en termes dexprience utilisateur et dergonomie sont donnes sur le site web MSDN : http://msdn.microsoft.com/en-us/library/aa970173(VS.85).aspx. Modifiez les paramtres du projet pour prciser que votre icne est celle utiliser par dfaut (Project | Properties | Application | Icon). [Fig.10] Modifiez Program.cs pour prciser les espaces de nommage utiliser : using using using using System.Threading; Microsoft.SideShow; Microsoft.SideShow.SimpleContentFormat; System.Reflection;

CONFIGURATION ET FONCTIONNEMENT DE WINDOWS SIDESHOW


Maintenant que notre simulateur SideShow fonctionne, nous allons dcouvrir comment configurer les gadgets excuts et le priphrique SideShow. Allez dans le panneau de configuration (Start | Control Panel) et double-cliquez sur Windows SideShow. [Fig.3] et [Fig.4]. Nous voyons les gadgets slectionns pour sexcuter sur un priphrique SideShow. Vous pouvez modifier lordre dapparition des gadgets dans le simulateur, configurer la stratgie de " rveil " de votre ordinateur et tlcharger de nouveaux gadgets depuis la galerie en ligne des gadgets sur Live.com. En cliquant sur licne intitule " Windows SideShow Simulator 1.0 ", vous obtenez lcran de configuration de votre priphrique auxiliaire. [Fig.5] Pour activer un gadget, il suffit de le slectionner (cocher la case de slection) dans la fentre de configuration de Windows SideShow. Faites le test avec Windows Media Player et vous verrez apparatre automatiquement un nouveau gadget dans le simulateur : Pour lafficher, dplacez la slection dans le simulateur SideShow laide des flches et cliquez sur le bouton OK pour valider votre slection. Naviguez ensuite dans les crans et revenez en arrire (cran prcdent) laide du bouton < (BACK). [Fig.6]

Puis, ajoutez le code denregistrement du gadget et de dsenregistrement dans le fichier Program.cs, ainsi que la partie de code qui vrifie que le gadget nest charg quune seule fois par le Gadget Manager. Ce code est le mme que celui gnr par dfaut dans le template de projet Gadget SideShow. static void Main(string[] args) { if (args.Length > 0) { Guid GadgetId = new Guid("{A0B00F4E-BDF8-4af7-A430-A 67176F03E75}"); switch (args[0].ToUpperInvariant()) { case "-R": GadgetRegistration.Register(false, GadgetId, ScfSideShowGadget.ScfEndpointId, "Skype", "\"" + Assembly.GetEntryAssembly() .Location + "\"", string.Format("\"{0}\",{1}", Assembly.GetEntryAssembly().Location, GadgetRegistration.DefaultIconResourceId), false, GadgetCachePolicies.KeepNewest, null); return; case "-U": GadgetRegistration.Unregister(false, GadgetId);

COMMENT DVELOPPER UN GADGET SIDESHOW EN .NET ?


[Fig.7] Pour dvelopper le gadget Skype, nous avons install la dernire version des API .NET dites par SharpLogic et disponible en tlchargement sur leur site (lien : http://www.sharplogic.com/ blogs/ed/ct.ashx?id=d82b7ea4-7584-4ff1-8092-430f53bf6cc6&url=http %3a%2f%2fwww.sharplogic.com%2fblogs%2fed%2fcontent%2fbinary%2fSharp Logic.Skype.zip). A noter que Microsoft proposer un starter kit permettant de dvelopper des applications pour Skype (Chercher " Skype Wrapper for .NET " sur le site MSDN).

CRATION DU PROJET
Excutez Visual Studio et crez un projet de type Windows Forms en .NET Framework 2.0. [Fig.8]

Figure 4 - Configuration de Windows SideShow

Figure 6 - Exemple de navigation dans le gadget Figure 5 - Configuration du priphrique auxiliaire SideShow SideShow Windows Media Player

54

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
return; } } bool firstInstance = false; using (Mutex mutex = new Mutex(true, "A0B00F4E-BDF8-4af7A430-A67176F03E75", out firstInstance)) { if (firstInstance) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } La premire partie du code concerne lenregistrement (switch " -R ") du gadget et son " dsenregistrement " (switch " -U "). La seconde partie du code vrifie quil nexiste quune seule instance du gadget charge par le gadget manag. Modifiez la variable GadgetId pour prciser un identifiant unique pour votre gadget (utilisez pour cela lutilitaire fourni avec Visual Studio via le menu Tools | Create Guid). Lenregistrement dun gadget cre une cl dans la base des registres base sur lidentifiant du gadget (GadgetId) : HKEY_CURRENT_USER\Software\Microsoft\SideShow\Gadgets\... Vous pouvez " dsenregistrer " un gadget manuellement en supprimant la cl correspondant lidentifiant de votre gadget. Pour faciliter le processus denregistrement pendant la phase de dveloppement, modifiez les paramtres de post-compilation de votre projet (Project | Properties | Build Events | Post-build event command line) pour indiquer la commande suivante : "$(TargetPath)" R

AFFICHAGE DU GADGET DANS LE SIMULATEUR


Laffichage dun gadget dans un priphrique compatible SideShow utilise un format appel Simple Content Format SCF. Cest un ensemble dlments et dattributs XML permettant de spcifier les messages, menu et contenus aux priphriques SideShow supportant ce type de format. Ci-dessous un exemple de contenu SCF : <body> <content id="200" title="Now Playing" bg="50" bgfit="s" menuid="1000"> <txt align="c" wrap="0"><em>Song Title</em></txt> <br/> <txt align="c" wrap="0">Song Artist</txt> <br/> <txt align="c" wrap="0">00:00:00</txt> <br/> <img align="l" id="16" alt="[Album Cover]" /> </content> </body> LAPI .NET nous permet dutiliser des classes dans le code manag pour gnrer ce format. Pour afficher votre gadget dans le simulateur, modifiez le code de Form1 de la manire suivante : public partial class Form1 : Form { private const string WelcomeMessage = "Bienvenue sur Skype!"; private readonly Guid gadgetId = new Guid("{A0B00F4E-BD F8-4af7-A430-A67176F03E75}"); private ScfSideShowGadget _scfGadget;

Figure 8 - Cration d'un projet Windows Forms en .NET 2.0 ( noter le template de projet SideShow Gadget install avec le SDK)

Figure 7 - Skype versus Live Call

Figure 9 - Ajout de la rfrence l'assembly Microsoft.SideShow.dll

Mai 2009 \\ PROgrammez !

55

dossier \\ coding4fun
public Form1() { // Cacher l'application Windows Forms WindowState = FormWindowState.Minimized; ShowInTaskbar = false; FormBorderStyle = FormBorderStyle.None; InitializeComponent(); // Initialiser SideShow InitializeSideShowPlatform(); } private void InitializeSideShowPlatform() { _scfGadget = new ScfSideShowGadget(gadgetId); #region Gestionnaires d'vnements SideShow _scfGadget.AllDevicesRemoved += new EventHandler (_scfGadget_AllDevicesRemoved); // TODO: ajouter les autres gestionnaires #endregion // Afficher un message d'accueil _scfGadget.AddGlanceContent(WelcomeMessage); } private void Form1_Load(object sender, EventArgs e) { // Cacher la fentre. this.Visible = false; UpdateContent(); } void _scfGadget_GadgetEnter(object sender, EventArgs e) { UpdateContent(); } private void UpdateContent() { // TODO: Constuire l'interface du Gadget. } Enfin lajout du code suivant permettra de terminer " proprement " le processus : void _scfGadget_AllDevicesRemoved(object sender, EventArgs e) { Application.Exit(); } Vous pouvez faire un premier test de votre gadget en le compilant. Noubliez pas denregistrer le gadget si cela nest pas fait automatiquement comme dcrit. Ouvrez ensuite le panneau de configuration pour Windows SideShow et votre gadget devrait apparatre. [Fig.11]. Slectionnez-le pour le charger dans le simulateur : [Fig.12]

INTGRATION AVEC SKYPE


Dans cette partie, nous intgrons Skype notre gadget pour illustrer le dveloppement de linterface visuelle mais vous pouvez implmenter linterface que vous souhaitez en vous basant sur lexemple. Ajoutez la rfrence lassembly SharpLogic.Skype.dll et prciser lespace de nommage suivant dans Form1.cs : using SharpLogic.Skype; Dclarez une variable membre prive private SkypeManager _skype; Et instanciez la variable dans le constructeur Form1 : _skype = new SkypeManager(); Vous pouvez aussi modifier le message de bienvenue pour montrer le statut de lutilisateur : // Afficher un message d'accueil _scfGadget.AddGlanceContent(string.Format("Vous _skype .UserStatus.ToString()));

tes

{0}.",

Nous allons modifier le code de la mthode UpdateContent pour afficher linterface de notre gadget. Cest ici que la comprhension du modle XML de SCF nous permet de construire des pages : private void UpdateContent() { string skypeUserStatus = string.Empty; try { skypeUserStatus = _skype.UserStatus.ToString(); }

Figure 10 - Paramtrer l'icne par dfaut de l'application.

Figure 11 - Premire excution du gadget SideShow

Figure 12 - Premire excution du gadget dans le simulateur

56

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun
catch { skypeUserStatus = "Inconnu"; } ScfElement userStatus = Scf.Txt(ScfAlign.Left, true, Color. White, string.Format("Votre statut: {0}", skypUser Status)); ScfElement content = Scf.Content(PageIDs.MainPage, PageTitles.MainPage, userStatus); _scfGadget.AddContent(content); } Ci-dessous la dclaration des classes statiques prives pour les identifiants des pages et les titres : private static class PageIDs { public const Int32 MainPage = ScfSideShowGadget.HomePage ContentId; } private static class PageTitles { public const string MainPage = "Informations"; } En ajoutant la rception dappel notre code (vnement IncomingCall de la classe SkypeManager), nous sommes maintenant capables dafficher le nom dune personne qui cherche nous joindre. void _skype_IncomingCall(object sender, IncomingCallEventArgs e) { _hasIncomingCall = true; _caller = e.Call.PartnerDisplayName; UpdateContent(); } Et la mthode UpdateContent devient alors : ScfElement caller = Scf.Txt(ScfAlign.Left, true, Color.White, "Pas d'appel entrant"); if (_hasIncomingCall) { caller = Scf.Txt(ScfAlign.Left, true, Color.White, string.Format("Appel entrant de: {0}", _caller)); } ScfElement content = Scf.Content(PageIDs.MainPage, PageTitles.MainPage, userStatus, Scf.Br(), caller); Compilez votre gadget, slectionnez-le ensuite dans le panneau de configuration pour Windows SideShow et utilisez le simulateur pour interagir avec. Dans notre exemple, le rsultat du code est le suivant : [Fig.13]

Note : Lors de lactivation du gadget SideShow, Skype alerte lutilisateur pour demander lautorisation dexcuter un programme externe. Il faut valider et autoriser lexcution du programme externe dans Skype comme le montre la fentre suivante : [Fig.14]

CONCLUSION
Dans cet article, nous avons prsent Windows SideShow et montr comment dvelopper et excuter un gadget grce au simulateur SideShow. Lutilisation des API .NET pour SideShow nous a permis de construire une interface simple en .NET Framework 2.0 grce au format SCF. Le dveloppeur peut choisir C++ ou Javascript pour implmenter ses gadgets SideShow. Il peut mme dvelopper et publier sur la galerie en ligne un gadget pour la Sidebar de Vista et driver ce gadget pour le rendre compatible avec un priphrique auxiliaire supportant SideShow. Pour aller encore plus loin, la documentation fournie avec le SDK est un trs bon support notamment pour toute la partie packaging et dploiement. Enfin, lexemple de cet article nous a aussi permis de prsenter trs succinctement les possibilits offertes par Skype pour le dveloppeur .NET au travers des API manages fournies par SharpLogic. Toujours plus de " code " moudre pour les dveloppeurs .NET passionns que nous sommes !

Figure 13 - Rception d'un appel dans Skype et mise jour des informations de notre gadget SideShow

Frdric QUEUDRET

CTO de la socit Mpoware, acclrateur dinnovation. Socit franaise ddition de logiciels et de prestations de services sur la cration doutils de productivit pour les dveloppeurs Visual Studio. http://www.mpoware.com/ Figure 14 - Autorisation d'excution du gadget SideShow pour Skype

Mai 2009 \\ PROgrammez !

57

dossier \\ coding4fun

Raliser votre widget avec Yahoo!Blueprint


Yahoo! Propose une plate-forme ouverte tous les dveloppeurs : Yahoo!Blueprint, compatible avec l'ensemble des plates-formes mobiles du march (Nokia, Sony Ericsson, Blackberry, iPhone, etc.) et offre des applications pour les mobiles, les sites et les widgets.

vec la version 3 de Yahoo! Go, vous pouvez utiliser Yahoo!Blueprint pour crer toutes sortes d'applications pour les plates-formes Java, Symbian, Windows Mobile et aussi Yahoo! Go. Yahoo! Blueprint est un SDK et comme l'ensemble des outils Yahoo, ouvert, permettant ainsi d'tendre les possibilits vers le Web. Pour utiliser celui-ci, la meilleure faon de s'en servir concerne l'adoption et l'utilisation du langage PHP . Avec Yahoo! Blueprint vous allez pouvoir construire des applications riches et trs puissantes pour les tlphones mobiles, des sites et des widgets. La suite de cet article va sintresser la ralisation de ce dernier point : les widgets.

Ralisation
L'exemple utilis pour la partie thorique est tir de celui fourni par le SDK Yahoo! Blueprint et vous allez voir l'utilisation dun " Hello World ". Il se dcompose en deux parties, ce qui vous donne les bonnes pratiques pour voluer. Vous verrez aussi comment communiquer avec une API trs rpandue.

1 Configuration
Lorsque vous dsirez mettre en ligne un widget, vous devez crer un projet et soumettre un dossier " submission.zip ". Le contenu de ce dossier est reprsent par l'illustration 2 Dans ce dossier, 2 fichiers sont modifier : Le fichier " config.xml " contient les informations de votre projet : le titre, la description, l'icne utiliser, les renseignements concernant l'auteur, et l'emplacement de votre widget. La ligne la plus impor tante modifier concerne <widget base="http://votresite/widget"> car elle contient le chemin exact o se trouve la page " index " afficher. Le fichier " gallery.xml " contient les mtadonnes utilises par le Widget Gallery et permet de classer votre widget. Le dossier " ressources " contient les diffrentes icnes ncessaires pour que votre application puisse tre lue par tous les mobiles. Pour valider votre projet et le mettre en production, vous devez l'uploader sur votre compte l'adresse suivante : http://mobile.yahoo.com/devcenter/test/upload Si vous avez respect l'ensemble des rgles, vous obtenez un message de succs, sinon vous devez recommencer.

Principe
Avant de commencer, un petit rappel concernant les widgets. Ils intgrent un balisage XML et communiquent avec un serveur web externe. Votre widget peut se composer d'une ou plusieurs pages et les relier ensemble ou sparment (par exemple un formulaire de saisie et un retour d'informations par rapport la saisie). Un Widget suit une route entre la demande de votre visiteur et son affichage, comme le montre l'illustration 1.

Installation
Pour utiliser Yahoo! Blueprint, vous devez avoir dans votre microordinateur au moins les lments suivants : Yahoo! Blueprint SDK disponible http://mobile.yahoo.com/devcenter/ downloads PHP 5.2 Possder un compte Yahoo pour effectuer les tests de validation Yahoo! Blueprint est le point central de son utilisation, puisque ce SDK possde sa propre librairie et se trouve tre une plate-forme de dveloppement pour la cration d'applications mobiles. Lorsque vous aurez tlcharg la dernire version (actuellement la version 1.1), vous devrez le dcompresser dans le rpertoire de votre choix pour l'utiliser. Le contenu de ce fichier est trs vaste car il contient la librairie, les sources, les schmas d'utilisation et aussi les templates.
Fig.1

2 votre page index.php


Maintenant que votre projet Yahoo! Blueprint se trouve correctement configur, vous devez prparer votre page widget en utilisant le langage PHP Le fichier devra se dcomposer de la . manire suivante : Dclaration des en-ttes (header) Appel la librairie Blueprint
Fig.2 Fig.3

58

PROgrammez ! \\ Mai 2009

Les outils de la Direction Informatique


Vous avez besoin dinfo sur des sujets dadministration, de scurit, de progiciel, de projets ? Accdez directement linformation cible.

LINFORMATION SUR MESURE


Actu trie par secteur Cas clients Avis dExperts

Etudes & Statistiques

Infos des SSII Vidos Actus Evnements Newsletter

LINFORMATION EN CONTINU

www.solutions-logiciels.com

dossier \\ coding4fun
Fig.4

$writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent( true ); $writer->startDocument('1.0','UTF-8'); //-----------------------------$page = new Blueprint_Page("Exemple Widget Flick R"); $module = new Blueprint_Module(); $page->addContent($module); //---- Definition chemin et communication $params = array( 'api_key' => 'VOTRE_CLEF', 'method'=> 'flickr.photos.getInfo', 'photo_id' => '2465397186', // numero de la photo 'format'=> 'php_serial', ); $encoded_params = array(); foreach ($params as $k => $v) { $encoded_params[] = urlencode($k).'='.urlencode($v); } $url = "http://api.flickr.com/services/rest/?".implode('&', $en coded_params); $chemin = curl_init($url); curl_setopt($chemin, CURLOPT_RETURNTRANSFER, true); curl_setopt($chemin, CURLOPT_HEADER, 0); $view = curl_exec($chemin); curl_close($chemin); //------Affiche le rsultat--$val = unserialize($view); if ($val['stat'] == 'ok') { $photo_title = $val['photo']['title']['_content']; $photo_url = "http://farm" . $val['photo']['farm'] . ".static.flickr.com/" . $val['photo']['server'] . "/" . $val['photo']['id'] . "_" . $val['photo']['secret'] . ".jpg"; $placard = new Blueprint_Placard("simple", $photo_title, $photo_url); $module->addContent($placard); }else{ $module->addContent("Call failed!"); } $page->Emit( $writer ); echo ( $writer->outputMemory() ); ?> Christophe Villeneuve Auteur du livre PHP & MySQL-MySQLi-PDO, Construisez votre application, aux Editions ENI. Trsorier de l'AFUP (Association des Utilisateurs de PHP), membre du LeMug.fr et contributeur de nombreux sites touchant PHP dont Nexen, PHP Team, PHPTV... , Contacter l'auteur : http://www.hello-design.fr

Crer un XML writer Cration de la page Envoyer des informations en-ttes de pages Ajouter le contenu Afficher Librer la mmoire Sur votre site, vous devez trouver au moins plusieurs fichiers comme le montre l'illustration 3

3 Mise en ligne
Ya h o o ! P r o p o s e l o r s d e l a v a l i d a t i o n d e v o t r e f i c h i e r " submission.zip ", un simulateur de mobile, vous permettant ainsi de voir le rsultat. Si tout a t valid, vous pouvez le dployer en spcifiant bien que votre visiteur doit possder un compte Yahoo pour l'utiliser. Avec la dcomposition de ces deux parties, vous avez les bases pour raliser votre propre Widget.

Cas pratique
Pour retenir la bonne API permettant d'tre utilise avec les Widgets, Yahoo! Propose un ensemble de choix tels que : afficher la mto, se positionner sur une carte, communiquer avec les rseaux sociaux...etc. L'auteur de l'article a retenu la communication avec l'API flickR permettant ainsi d'afficher une image en miniature dont le source PHP est fourni et le rsultat aussi (illustration 4). Pour dcrire le code source en PHP vous utiliserez la mme , mthode que prcdemment. Cependant lors de l'excution de la page en PHP vous utiliserez la mthode cURL vous permettant , ainsi de communiquer facilement avec une application ne vous appartenant pas. L'exemple qui est affich montre un titre d'illustration du Widget et dans le corps, la photo en miniature et le titre de la photo. <?php // index.php //------ Dclaration ----header( "Content-Type: application/x-ywidget+xml" ); header( "Cache-Control: no-cache" ); require_once( "lib/blueprint.php" ); blueprintSetErrorHandler(); //------- Preparation format XML

60

PROgrammez ! \\ Mai 2009

dossier \\ coding4fun

SmallBasic : le langage de 7 77 ans

eaucoup dentre nous sont passs par les mthodologies classiques pour apprendre la programmation. Les notions de base de lalgorithmie, les premiers programmes rdigs sur des feuilles papiers, les notions de liste, pile, boucle, etc. Ah, que de souvenirs ! Puis nous avons toutes et tous commenc rdiger notre premier programme dans un langage : du C pour certains, C++ pour dautres, et pour certains chanceux du C#, Java.

Commenons par crire un premier programme


Nous souhaitons afficher, Bienvenue sur Programmez. Si nous donnions linstruction tre humain, nous lui dirions : Dans une nouvelle fentre, cris-moi Bienvenue sur Programmez . En anglais a nous donnerait : In a text window write me Bienvenue sur Coding for fun. Ainsi sous Small Basic, nous devrions rentrer : TextWindow.WriteLine("Bienvenue sur Programmez") Cest ainsi quen tapant F5, le rsultat saffiche.

Quest ce quun programme ?


Si nous devions lexpliquer un enfant, la programmation consiste en un ensemble dinstructions pour lordinateur. Ces instructions donnent une feuille de route lordinateur, afin quil russisse la tche que nous lui avons attribu. Pour tre comprises, et excutes correctement, ces instructions doivent tre rdiges au travers dun langage comprhensible par lordinateur. Tout comme nous parlons le Franais, lordinateur a besoin dun langage logique comprhensible et intelligible. Ce sont les langages de programmation. Avec lvolution des technologies, le nombre de langages de programmation a augment de manire considrable, et la complexit en dcoulant quelque peu frein les ardeurs de certains. Lors de la dernire PDC (Professional Developer Conference), les quipes de Microsoft Research nous ont dvoil un nouvel outil pour dbuter plus aisment dans le monde de la programmation, son nom : Small Basic !

Un second programme
A prsent, allons plus loin et faisons un peu de code pour samuser. Jaimerai pouvoir crer une galerie anime de photos issues de Flickr. Le principe consiste utiliser les mots cls (TAG) afin de gnrer une galerie photo. TextWindow.WriteLine("Bienvenue sur Programmez!") TextWindow.WriteLine("Merci de patienter quelques instants ") tag = "paris" // je choisis le TAG que jutiliserai pour flickr For i = 1 To 5 x = Math.GetRandomNumber(250) y = Math.GetRandomNumber(250) picName = Flickr.GetRandomPicture(tag) GraphicsWindow.DrawResizedImage(picName, x, y, 200, 200) EndFor Et voici le rsultat : [Fig.2] Avec Smallbasic, on peut tout faire ou presque avec un niveau de complexit variable. Ainsi, je peux trs bien crer un programme pour composer de la musique, crer mon jeu Tetris, ou rcuprer des donnes en ligne sur Flickr Voici quelques exemples que vous pourrez retrouver en ligne 1. Jouer de la musique sur SmallBasic : Voici une extension intressante permettant de faire de la musique avec SmallBasic : a. http://code.msdn.microsoft.com/ExtToneGenerator 2. Tetris by Kenny Kasajian : [Fig.3] Code source en ligne sur: http://cohendavid.net/archive/2009/04/07/ tetris-sous-smallbasic.aspx David Cohen - Responsable des Expriences numriques cohendavid.net
Fig.2 Fig.3

Les programmes en Small Basic


Un programme en Small Basic typique consiste en un ensemble de commandes. Chaque ligne du programme reprsente une commande et chaque commande correspond un ensemble dinstructions excutables par lordinateur. Quand on demande lordinateur dexcuter un programme en Small Basic, il prend le programme et lit la premire commande. Il comprend ce que nous essayons de dire et excute nos commandes. Une fois quil a excut la premire, il revient au programme, lit et excute la seconde ligne. Il continue ainsi jusqu ce quil atteigne la fin du programme. Cest l que se termine notre programme. [Fig.1] Small Basic se dcompose en trois parties: 1. Lditeur: pour y taper son programme 2. La Toolbar: la barre de tche comportant toutes les fonctions ncessaires 3. La surface: o nous pouvons retrouver plusieurs diteurs ouverts simultanment
Fig.1

Mai 2009 \\ PROgrammez !

61

carrire \\ globetrotter

Ils font carrire ltranger !


La plupart des dveloppeurs forms aujourdhui ont pass au moins quelques mois de leur cursus ltranger. Et nombreuses sont les entreprises nationales ou multinationales qui font appel des dveloppeurs trangers.
la prsence de Chinois et dAmricains se justifie pour des raisons commerciales : " La socit veut toucher des clients dans ces pays, pour des raisons de cot (pour la Chine), mais aussi lorsquil sagit dquipes support, afin davoir une prsence 24 heures sur 24 ", commente Cdric Carbone, directeur technique de Talend. Chez Talend, les comptences utilises diffrent selon les continents : " La Roadmap est labore en France et les dveloppements sont faits en Chine ", commente Cdric Carbone. " Les dveloppeurs nayant pas tous le mme profil, ils sont affects des parties de logiciel distinctes ", prcise Benjamin Mestrallet. " Les Ukrainiens sont plus scientifiques, ils dveloppent de prfrence les couches basses, plus standard, du logiciel. Aux Vietnamiens, on confie plutt les aspects IHM, ergonomie, web design : ils aiment les grandes marques et la scurit qui en dcoule, contrairement aux Franais qui nhsitent pas travailler dans de petites structures innovantes. " En Ukraine, en Russie, comme au Vietnam, les dveloppeurs sont rputs pour leur niveau de comptence trs lev. Le Roumain Valy Greavu, ancien finaliste du concours ImagineCup de Microsoft, a choisi, aprs avoir pass son diplme dinformatique, de se consacrer lenseignement : " Cest une passion plus quun job, qui me permet de rencontrer des tudiants en nouvelles technologies, davoir accs aux ordinateurs pour tester des programmes et apprendre par soi-mme. " Michel Mouyssinat, chercheur en informatique (CNRS) et ancien directeur de lISI (Institut Francophone dInformatique) Hano, a eu loccasion dapprcier les qualits des informaticiens vietnamiens : " Jai recrut des tudiants brillants, qui ont par la suite

Linh Le Trong, ancien de lEPSI, dans le mtro de Tokyo

out ce qui est externalisable peut tre ralis ltranger : dveloppement dapplications, paramtrage, maintenance, test, hotline, support technique Les diteurs de logiciels open source font souvent appel des dveloppeurs trangers. Pour les SSII, travailler avec des trangers permet de faire des conomies, les salaires tant souvent bien infrieurs ceux qui sont pratiqus ici. Cest le cas en Chine, en Inde, au Maghreb, Madagascar ou dans lIle Maurice. Les pays les plus divers sont cits : lEurope de lEst pour la proximit, mais aussi des contres plus exotiques, comme le Sri Lanka, o par exemple lditeur de PGI (progiciel de gestion intgr) IFS a recrut 635 dveloppeurs en 2007, dans le cadre dun programme de responsabilit sociale. " Nous avons t amens regarder au-del des frontires de lEurope et des EtatsUnis pour trouver les talents ncessaires, tant sur les plans quantitatifs que qualitatifs ", indique lditeur. La SSII franaise Osiatis cite le Cambodgien Hakara Tea, ancien lve de lEcole Polytechnique, diplm de Tlcom ParisTech et titulaire dun MS en tlcoms de luniversit de Stanford, qui a lanc le CIST (Center for Information Systems Training) au Cambodge en 2005 : " La mission que sest

donne le CIST est doffrir de jeunes Cambodgiens dfavoriss une formation suprieure de qualit, qui les mne un emploi qualifi ", expose Hakara Tea. " Le Centre vise former des techniciens capables de grer de petits rseaux de 20 30 postes, pour lesquels il y a un vrai besoin dans le pays. "

Comptences et motivation
Pour faire face sa croissance et pour pallier le manque de main duvre qualifie en France, Avanade, intgrateur spcialis sur les technologies Microsoft, fait appel des ressources au Maroc, en Inde, en Malaisie et aux Philippines (Centres de Delivery near-shore et offshore). " Nous travaillons surtout sur des grands programmes de dimension internationale en Inde et aux Philippines, plutt en dveloppement pour lInde et en maintenance pour les Philippines ; et sur des projets francophones de plus petite taille, pouvant demander plus de souplesse, au Maroc ", explique Nicolas Marry, viceprsident Avanade France. Chez eXo Platform, 95 personnes sont rparties sur quatre pays : France, Ukraine, Vietnam, Etats-Unis, ce qui sexplique par le fait que deux des cofondateurs sont dorigine trangre : un Ukrainien, et un Vietnamien. Chez Talend,

62

PROgrammez ! \\ Mai 2009

reportage \\ globetrotter
russi en France et au Canada, notamment ", raconte-t-il. " Le gouvernement du Vietnam encourage activement la formation. Il y a des universits de trs haut niveau. " Les tudiants issus de ces filires sont gnralement dous en informatique, trs travailleurs, fortement motivs, et habitus trs tt " bidouiller " le matriel et le logiciel. Revers de la mdaille : ils travaillent surtout individuellement. " Ils sont trs motivs pour les mathmatiques et linformatique, ce que le gouvernement encourage en organisant des concours ds le lyce, do une dmarche plus individuelle ", explique Michel Mouyssinat. Daprs les responsables de stages dans les SSII dans lesquels ils vont travailler, " ils doivent sadapter, en particulier apprendre matriser la langue, mais ils deviennent trs vite autonomes et dveloppent beaucoup plus vite que les autres. " En Thalande, " on commence linformatique vers 15-16 ans au lyce ", rappelle le chef du projet Windows Light prsent par lquipe SKE ImagineCup 2008. Les Chinois de HongKong qui prsentaient le projet MEN Mobile ce concours avaient tous les quatre 17 ans et taient encore lycens. En Inde, les membres de lquipe JAL se sont initis linformatique ds ladolescence et lun deux a commenc coder 16 ans. Michel Brocq, grant de MB Conseil (www.mb-conseil.com), insiste sur les qualits des dveloppeurs malgaches et mauriciens avec lesquels travaille sa socit : " Les formations sont sensiblement identiques quen France, avec un cadre linguistique et culturel proche du franais, donc il ny a pas de problme de comprhension. Mais lenvironnement conomique fait quils ne bnficient pas des mmes structures dencadrement et de mthodologie ; il leur manque une comprhension globale de ce quest un projet, de la place du dveloppement dans un projet et de gestion dune quipe projet. Ils ont donc besoin dun encadrement cohrent. " Si le march local de lIle Maurice et Madagascar est peu demandeur, ces informaticiens peuvent fort bien travailler avec les PME franaises, soit directement, soit via des SSII locales, soit encore via des socits pivot, comme MB Conseil. " Gnralement capables dune bonne rflexion en mathmatiques et informatique, ils sont trs travailleurs, respectueux, savent sengager et ont envie de progresser ", ajoute Michel Brocq, qui se flicite aussi du turn-over relativement faible mme si, du fait de la tradition, la famille et les problmes personnels peuvent primer sur lassiduit professionnelle.

Des Franais ltranger


Beaucoup dcoles dinformatique sinstallent ltranger ou favorisent des partenariats. Cest le cas de lEpitech, de Supinfo ou de lEPSI (Ecole Prive des Sciences Informatiques). " Au Japon, les techniques de travail sont peu prs les mmes quen France. Ce qui diffre, cest notamment la notion de politesse : parfois, mme en matrisant correctement la langue, il nest pas facile dutiliser les bonnes formes de politesse, mme si les japonais sont trs tolrants et restent souvent impressionns du fait quun occidental parle leur langue ", rapporte Linh Le Trong, ancien lve de lEPSI Paris (promo 2006), qui a t embauch par la SSII japonaise Plus Denshi (www.pden.com.jp). Cet amateur de mangas a not que lEPSI proposait des cours de japonais : " Je my suis mis et cette langue ma plu tout de suite ! Un vritable coup de foudre ! " Avec plus de 2 heures dtude par semaine pendant 5 ans, il matrise aujourdhui le japonais couramment. Son diplme de lEPSI en poche, Linh est donc parti Tokyo en fvrier 2006 pour un stage, puis en CDI. Ses premires missions au pays du Soleil Levant : grer la mise en place dune pointeuse sur Internet, et travailler sur la reconnaissance des caractres japonais par les diffrents systmes. En effet, beaucoup de difficults sont rencontres concernant lutilisation des caractres asiatiques dans les systmes

de stockage de donnes et dchanges dinformations inter linguistiques. La mission de Linh a donc consist dvelopper une application facilitant ces types de transferts et de traductions. Aprs un BTS en Informatique de gestion, Sbastien Farges, entre en Cycle Suprieur d'Ingnierie Informatique lEPSI et enrichit ses comptences techniques et en gestion. Il y rencontre un " epsien " sri lankais qui a dcid de monter une bote spcialise en dveloppement industriel, dont le secteur technique se situerait en Inde, et la partie commerciale en Europe. Hightechlead (www.hightechlead.com) est ainsi cre en juillet 2006 Chiennai, sur la cte est du pays, 150 km au nord de Pondichry, et Sbastien part en Inde pour la rejoindre en mars 2007. Son rle au sein de cette entreprise, qui dveloppe des logiciels de gestion sur mesure pour de petites structures, consiste faire lintermdiaire entre les dveloppeurs, indiens, et les clients, europens et notamment franais. " Les Indiens ont des coles en informatique de haut niveau, ils savent tout faire, mais nont pas de mthodologie ", a-t-il constat. " Sils sont bons techniquement, ils ont un gros problme de communication : la notion de contrat na gure de sens pour eux, ils ne comprennent pas ce qui est attendu et, sils ont besoin dexplication, ne prennent pas linitiative de demander. Les relations sont dordre affectif. Le turn-over est trs important. " Pour amliorer le fonctionnement de lquipe, Sbastien Farges a mis en place un modle avec une personne charge de faire le lien entre lquipe et le client. Claire Rmy

Deux Franais, issus de lEPSI, en Inde : Sbastien Farges, avec une marque rouge sur le front (symbole hindou), et Paul Mayer, stagiaire. En bas gauche, Ramesh Chelliah, fondateur de la socit Hightechlead et ancien lve de lEPSI.

Nouvelle rubrique :

3000 offres demploi

Mai 2009 \\ PROgrammez ! 63 www.programmez.com

technique \\ multicore

Intel Parallel Studio

Vous ne reconnatrez plus votre C++


Dans les deux prcdents articles sur Intel Parallel Studio, nous nous sommes intresss aux outils Inspector et Amplifier qui permettent respectivement de corriger et acclrer vos logiciels parallles. Mais nous n'avons pas encore abord Composer, qui est le compilateur associ diverses librairies comme Intel Threading Building Blocks et Intel Performance Primitives (TBB et IPP).

e nos jours, un compilateur ne peut se contenter de produire un binaire minimaliste, mme optimis. Il doit vous aider adopter une syntaxe plus claire, apporter un clairage nouveau sur votre code et surtout aider parallliser votre logiciel simplement. Un dveloppeur n'est jamais trop exigeant avec son compilateur. Une fois Parallel Studio install, pour utiliser le compilateur Intel il suffit de cliquer droit sur votre solution et demander sa conversion (la procdure est rversible). Il est important de noter que le compilateur et les librairies sont disponibles sur dautres plates-formes, et que les performances sont bonnes sur dautres processeurs que ceux dIntel, portabilit avant tout ! Parmi toutes les fonctionnalits de Parallel Composer, parlons donc des diffrentes manires de parallliser votre code, des extensions C++ d'Intel et des fonctions lambda.

OPENMP
OpenMP est un standard qui permet de parallliser rapidement un code avec un minimum de changements par rapport la version srielle. Le standard existe depuis plus de 10 ans, il a prouv son utilit dans le calcul scientifique et bnficie d'un soutien sans faille de l'industrie ; vous pouvez donc l'utiliser en production sans crainte. Historiquement OpenMP a commenc par l'ajout de pragmas simples, ces commentaires trs spciaux lus par certains compi-

lateurs. Par exemple une ligne "#pragma omp parallel for" place juste avant une boucle for permet de la parallliser. Diffrentes itrations de la boucle seront alors envoyes diffrents threads (crs automatiquement par OpenMP), et ce de manire totalement transparente et dynamique lors de l'excution. Vous pouvez mme spcifier quel algorithme de distribution vous souhaitez, tout cela sans changer une seule ligne de code. Vous pouvez certes programmer des threads en bas niveau avec C/C++, mais pourquoi ne pas laisser faire la machine virtuelle OpenMP ? Connatre OpenMP c'est l'adorer ! Si votre compilateur ne comprend pas OpenMP votre code sera compil , en sriel, donc aucun risque. Pour appliquer les instructions, il doit savoir mettre en place un cadre de calcul parallle dynamique lors de l'excution autour de votre code et de vos donnes, toute la complexit est donc reporte du dveloppeur vers le compilateur. Tche d'autant plus complexe que le standard, au dbut limit de simples fonctions, permet maintenant la paralllisation de cas beaucoup plus complexes. Le support d'OpenMP dans sa version rcente 3.0 devient donc un critre important lors du choix d'un compilateur. Dans sa mouture 3.0, OpenMP apporte notamment des amliorations dans la rcursivit. Il n'est pas simple de parallliser une liste de tches dont on ne connat pas l'tendue lavance, ou qui ont des dpen-

dances entre elles, deux caractristiques de bien des algorithmes rcursifs. Le nouveau concept de "Task" mettra une partie de votre code dans la liste d'attente des tches calculer en parallle (que vous n'avez pas grer), quels que soient le nombre et la complexit des tches ou la nature rcursive de leurs appels.

EXTENSIONS INTEL C++


Le concept d'OpenMP rside dans l'usage de pragmas, annotations certes intelligentes et transparentes de votre code mais pas trs respectueuses d'un style d'criture "naturel" en C++. C'est pour cela qu'Intel propose l'emploi de nouvelles extensions C++ : vous pouvez crire "__par" au lieu de "#pragma omp parallel for". Si le concept vous plat, n'hsitez pas le dire sur les forums de software.intel.com et nous tendrons ce type de mots cls a l'avenir.

VECTORISATION ET OOO
Nous parlons souvent de paralllisation au niveau logiciel dans le but d'utiliser diffrents curs, mais la paralllisation peut aussi se faire au niveau matriel dans l'utilisation simultane de diffrentes units de calcul d'un mme cur. Soit vous utilisez ces units pour effectuer des calculs diffrents et indpendants, et c'est que vous avez un processeur "Out Of Order" (sans ordre dtermin). Soit vous les utilisez pour des calculs similaires sur des donnes diffrentes,

64

PROgrammez ! \\ Mai 2009

technique \\ multicore
nous parlons alors de vectorisation. Le calcul Out Of Order est une proprit de certains processeurs (dont les Core2 d'Intel) ou tout est gr automatiquement et de manire transparente, le compilateur intervient peu dans ce mcanisme. Par contre, la vectorisation ncessite l'emploi d'un jeu d'instructions spcifiques, les SSE (Streaming SIMD Extensions), LRBni (Larrabee New Instructions) ou futures Intel AVX (Advanced Vector eXtensions). Ces instructions sont gnralement ajoutes par le compilateur si votre code le permet mais il vous faut lui en faire la demande par des arguments lors de la compilation (ces arguments peuvent tre changs par des menus interactifs dans Visual Studio). Des exemples d'acclrations intressantes concernent les oprations arithmtiques simples, ou l'emploi de "valarray". que le sujet de discussion drive rapidement vers les fonctions lambda. Probable aussi que la discussion soit quelque peu thorique, faute d'avoir un compilateur capable de les comprendre jusqu' prsent et une exprience pratique de ces fonctions. Pour rsumer, une fonction lambda est une fonction dclare la vole lors de l'appel et dont la syntaxe est simplifie. Si vous n'avez besoin dune fonction qu'une seule fois, pourquoi la dclarer compltement et ne pas se concentrer sur son code utile la place ? Prsentes sous cet angle les fonctions lambda peuvent apparatre comme un lger raccourci syntaxique sans consquences. Elles sont en fait une rvolution dans le monde du C++ : elles marquent le passage d'une programmation procdurale vers une programmation fonctionnelle (en simplifiant). Ce n'est peut tre pas tout fait un hasard si Intel s'y intresse de si prs. Le support des fonctions lambda est demand par nombre de dveloppeurs et Intel se doit donc de l'incorporer dans le compilateur, mais plus gnralement, la programmation fonctionnelle devrait long terme permettre de tirer parti au mieux d'une architecture largement parallle, et ce avec un code simple et naturel. La programmation fonctionnelle n'entre pas en concurrence avec des technologies de calcul parallle comme OpenMP ou TBB (qui utilisent parfois des principes de programmation fonctionnelle), les deux approches sont complmentaires. cing ainsi que des fonctions plus bas niveau de traitement de signal. Pour le traitement d'image par exemple, profitez du Deffered Mode Image Processing. Le DMIP vous propose de dfinir tous les filtres et oprations que vous souhaitez sur une image comme un pipeline avant de l'excuter en optimisant l'utilisation du cache processeur. Utiliser un codec vido IPP dans votre logiciel offre une performance et une portabilit optimale assez simplement. Par contre, utiliser certaines fonctions de traitement de signal pour faire de la reconnaissance faciale est plus ardu. (Mais si ce sujet vous intresse, la librairie Open Computer Vision est trs amusante, plus facile utiliser et disponible sous licence BSD). Si vous suivez l'actualit des processeurs de trs prs, vous avez peut tre vu que le Core i7 "Nehalem" est sorti depuis peu et qu'il intgre un nouveau jeu d'instructions "STTNI" spcialis dans le traitement de chanes. Si vous travaillez dans la fouille de donnes profitez en ds maintenant avec des fonctions IPP comme "ippsFind*Any()". N'hsitez pas regarder la documentation d'IPP vous trouverez probable, ment des ides pour acclrer ou amliorer des parties de votre logiciel.

DIAGNOSTIC
Par dfaut, le compilateur Intel vous affichera un niveau de diagnostic comparable celui de Visual Studio. Mais il est souvent trs instructif de demander un affichage plus dtaill. Pour commencer, l'option "diagenable:level1" pourra dceler des incohrences comme des arguments incorrects ou des tests logiques inutiles. L'option "vec-report3" vous informera, elle, de la faon dont l'unit de vectorisation automatique du compilateur peroit votre code, pas seulement le rsultat de l'optimisation mais les raisons d'une non optimisation. Lorsque le compilateur ne peut dterminer avec certitude que deux donnes sont indpendantes, il suppose quelles sont dpendantes et empche de vectoriser une boucle ou elles sont prsentes. Bien souvent, de simples redfinitions de variables temporaires permettent de prouver lindpendance et de vectoriser. Et comme Parallel Composer est intgr Visual Studio vous verrez les messages de log lis votre code.

ET BIEN PLUS
Le compilateur Intel est dj trs complet et utile dans sa configuration actuelle avec OpenMP IPP et TBB , mais il le sera encore plus lavenir. Lorsque vous souhaiterez utiliser les ressources d'un acclrateur graphique comme Larrabee de manire transparente pour des simulations physiques ou une intelligence artificielle, il est fort possible que le compilateur joue un rle central. Si vous voulez programmer en parallle, en fonctionnel ou tout simplement crer des binaires plus rapides je vous encourage donc tester Intel Parallel Composer et donner votre avis sur les forums de software.intel.com. Paul Guermonprez Ingnieur logiciel Intel

IPP
Lorsque vous voulez optimiser l'utilisation matrielle de votre logiciel, la premire action prendre est souvent de remplacer vos librairies par des librairies optimises, parallles et "thread safe" (dont le comportement en mode parallle est garanti par le vendeur). Parallel Composer inclut la librairie Intel Performance Primitives ou IPP qui peut tre distribue gratuitement avec votre logiciel, ne vous privez donc pas de l'utiliser. IPP offre un panel de fonctions trs large : codecs vido, traitement d'image, reconnaissance faciale et vocale, compression, cryptographie, ray tra-

FONCTIONS LAMBDA
Si deux dveloppeurs C++ se croisent ces derniers temps, il est probable

Mai 2009 \\ PROgrammez !

65

code \\ ajax

Ajax et framework PHP


On ne compte plus les frameworks applicatifs. Trs LANGAGE : PHP souvent lorsquon commence regarder Ajax, on se DIFFICULTE SOURCE : NON MOYENNE demande un peu comment marier ces deux mondes qui ont tout pour vivre ensemble mais dont il reste assurer la rencontre. Issu dun grand groupe, je suis amen dvelopper des applications denvergure non ngligeable et la rigueur dans le dveloppement est un aspect primordial pour la viabilit de celles-ci. Comme pour beaucoup, larrive dAjax sest faite en ajoutant quelques petits goodies dans mes interfaces. Mais le potentiel dAjax tait largement sousexploit. Je vous propose donc de voir dans cet article comment structurer une application Ajax base sur Extjs et Zend Framework. Extjs est une librairie plutt complte qui en vaut une autre et que japprcie pour son approche dclarative, par opposition aux approches fonctionnelles. Et Zend Framework (ZF) car cest le Framework PHP que jutilise habituellement.

1re partie

Il existe une multitude de librairies Ajax. Mais trs peu de cadres bien dfinis pour les utiliser. Ct serveur les choses se sont structures avec le temps.
APPLICATION : WEB
rie de gnration de flux html verront cette partie passablement inexploite. Une autre question qui vient rapidement lesprit est celle des performances. L effectivement il y a des choses qui penchent en faveur des deux approches. Sans Ajax les transferts entre le serveur et le navigateur sont alourdis par la dcoration HTML, et en Ajax, les codes clients sont lourds et longs charger. Je dois avouer que cette question est reste en suspens pendant longtemps et t pour moi un frein ladoption dAjax. Jai expriment de nombreux exemples de la littrature et dinternet et tout cela ntait pas en faveur dAjax. La documentation dExtjs est particulirement lente se charger et cela ne donne pas envie dutiliser la librairie. En fait, moyennant quelques prcautions, la situation devient trs vite acceptable. La toute premire est devenue pour moi une rgle dor : Ne jamais produire de JavaScript dynamiquement. En clair, aucun script JavaScript nest le rsultat dun traitement PHP La raison est trs simple. . JavaScript sexcute sur une machine virtuelle. Celle-ci lit un code source, le compile et lutilise. Lorsquon lui fournit deux fois le mme script, il nest lu et compil quune fois. Sauf lorsque ce code source est dynamique, auquel cas il est relu et recompil. Ceci implique quil est aussi transfr plusieurs fois. Cela peut paratre une limitation forte mais il nen est rien. Lide dAjax tait la base de ne transfrer que le ncessaire. Cette rgle nous aidera lappliquer jusquau bout. Il est tout de mme ncessaire de constater quune application Ajax vue du client met un certain temps dmarrer. Ct architecture de lapplication, nous avons un mode client/serveur. Avec un serveur en php bas sur un framework MVC, et un client en JavaScript qui sappuie sur une librairie JS. Jai cherch un vritable framework JavaScript. Vous allez trouver des librairies souvent bien faites, qui proposent une large palette de composants et un modle de programmation, mais pas un cadre de travail, ni un modle de conception. Je suis un adepte de MVC depuis trs longtemps et je me suis demand si son adoption dans ce cadre tait une bonne approche. Tout dabord dans la majorit des implmentations de MVC on trouve un master-controller ou front-controller et un dispatcher. Dans notre contexte, le cur mme de JavaScript contient lembryon dun tel contrleur. Les librairies comme Extjs lamliorent et vont mme jusqu limplmenter. La diffrence avec une implmentation MVC tant que ce cur va lui-mme grer tous les composants au lieu de dlguer le travail un contrleur. De plus, laccs la couche mtier nest pas spar et se trouve perdu dans le code des composants.

1. LARCHITECTURE
Avec ZF je suis habitu produire des web applications classiques. Les premires questions que je suis en droit de me poser sont : Lintroduction dAjax va-t-elle remettre en question larchitecture de mes applications ? Le modle MVC est-il remis en cause ? En effet, on sent bien que le fonctionnement dune application Ajax nest pas bas comme une webapp sur un enchanement de pages. Et effectivement une application Ajax est plus proche du mode client/serveur en vogue dans les annes 90 que de la webapp. La diffrence avec une application client/serveur est essentiellement que la relation entre les deux parties de lapplication se fait sur http et est donc commune toutes les applications Ajax. Lautre diffrence fondamentale est que la partie client sexcute dans un simple navigateur. Ce qui lve les deux plus gros inconvnients dans les applications client serveur. Ai-je encore intrt utiliser un framework destin faire des webapp dans ce contexte ? De par ma propre exprience je dirais oui. Mais le dbat reste ouvert. On bnficie ainsi de toutes les capacits du serveur grer le dialogue http. De plus, le framework apporte nombre de composants qui restent utiles dans ce cadre. Le modle MVC nest pas remis en cause. Dans une webapp, le navigateur demande une ressource (une url), le serveur lanalyse, donne la main un contrleur qui va invoquer le mtier et enfin retourne une vue. Dans notre contexte, ce nest pas le navigateur mais le client Ajax qui demande la ressource et la vue quil attend nest pas une page web mais un flux de donnes, lequel nest quune vue comme une autre. Effectivement les frameworks possdant une puissante librai-

2. AU CUR DE LACTION
Je vous propose donc de crer une petite application Ajax de gestion de contact. Un contact tant un nom, un prnom, un n de tlphone, et un genre. Les contacts sont placs dans des groupes (un nom de groupe). Notre application va prsenter lutilisateur une liste des contacts et la possibilit dajouter, modifier, supprimer

66

PROgrammez ! \\ Mai 2009

code \\ ajax
un contact. Jai donc dcid de dcouper mon application en composants. Le " ContactList " charg de la liste des contacts et " Contact " charg de ldition de contact, et " Core " le cur de lapplication charg du dmarrage et de quelques fonctionnalit gnrales. Voil pour le client. Ct serveur, jai dcoup mon application par domaine fonctionnel. Un ensemble " Contact " charg de la gestion des contacts et " Group " charg de la gestion des groupes. On voit immdiatement que les deux ne sont pas en bijection. Cela na aucune importance. <title>SimpleContact 2.0</title> <link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/public/scripts/ext/resources/css/ext-all.css" type="text/css"> <link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/public/scripts/ext/resources/css/xtheme-gray.css" type= "text/css"> <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl; ?>/public/styles/application/app.css" /> <link rel="shortcut icon" href="<?php echo $this->base Url; ?>/favicon.ico" /> <link rel="icon" href="<?php echo $this->baseUrl; ?>/ favicon.ico" /> </head> <body scroll="no"> <div id="loading-mask"> <div id="loading-msg"> <div id="loading"> <img src="<?php echo $this->baseUrl; ?> /public/scripts/ext/resources/images/default/shared/large-loa ding.gif" width="32" height="32" align="bottom"/> Loading... </div> </div> </div> <!-- Ext library --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/ext/ext-base.js"></script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/ext/ext-all-debug.js"></script> <!-- Ext addons --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/ext/CookieProvider. js"></script> <!-- App Components --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/ContactList.js"></ script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/Contact.js"></script> <script type="text/javascript"> Ext.app.baseUrl = '<?php echo $this->baseUrl; ?>/'; </script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/core.js"></script> </body> </html> Notez aussi le passage de la valeur de baseUrl de php Extjs. Cela permet ensuite dans tout le code client de ne faire rfrence qu Ext.app.baseUrl et donc de pouvoir installer lapplication nimporte quel niveau hirarchique du site. Nous verrons dans la 2e partie le ct client. Jean-Yves Terrien

Le premier contrleur
La premire chose faire est davoir un espace Zend_Framework en tat de marche. Cela nest pas le propos de cet article et je supposerais donc que cest le cas. Reportez vous la doc de ZF ou demandez de laide sur z-f.fr. Pour lancer notre application, il faut ouvrir une page web. Deux solutions se prsentent, une page purement statique, ou une vue dune action ZF. Jai choisi la deuxime solution car elle permet dinitier le dialogue entre le client et le serveur et utilise laction par dfaut. Ouvrez donc votre contrleur index ou crez-le. Laction index est celle qui nous intresse. JavaScript tant plus simple utiliser en UTF8, nous allons produire une vue dans cet encodage. Tous les changes entre le client et le serveur se feront en UTF8. class IndexController extends Application_Controllers_Action { public function indexAction() { // cette action affiche toute l'IHM (ajax) de l'application $this->_response->setHeader('Content-Type', 'text/html; charset=UTF-8', true); $this->view->baseUrl = $this->_request->getBaseUrl(); } } Dans notre exemple, ce code est minimal. Il dfinit lencodage et passe le baseUrl au client. Dans ZF, baseUrl est un paramtre qui dfinit le chemin de votre application par rapport la racine du site. Cest dans la vue que nous allons placer le ncessaire pour dmarrer le client. La vue est en gros la page HTML qui sera affiche. Nous allons y placer le chargement des feuilles de styles et les scripts de chargement du client. Dans le cas dune application Ajax, linterface est gnre par le JavaScript. Le code HTML est donc rduit sa plus simple expression autrement dit : dfinir le document, et les en-ttes. Nous avons l le strict ncessaire. Si nous faisons cela lors du dmarrage, lutilisateur et particulirement le premier aura une page blanche le temps que le JavaScript cre toute linterface. Nous allons donc placer un petit cran de bienvenue. Lors de son lancement, le JavaScript masquera cet cran pour laisser apparatre lapplication. Nous devons donc placer ces lments avant le JavaScript pour quils apparaissent immdiatement. <html xmlns:ext="http://extjs.com/docs"> <head> <meta http-equiv="content-type" content="text/html; char set=utf-8">

FORUM

Mai 2009 dialogue et assistance www.programmez.com \\ PROgrammez ! 67

code \\ serveur

Installer et utiliser LAMP / WAMP


Dans cet article, nous verrons linstallation dun univers LAMP puis de WAMP et enfin lexemple , dune petite application fonctionnant avec LAMP alliant le PHP et MySQL. Ces installations vous , permettront, entre autres, de crer des applications web directement sur votre machine.
INSTALLATION DE LAMP (LINUX)
Le " L " de LAMP signifiant APPLICATION : SERVEUR Linux il faut installer un univers Linux (que les utilisaLANGAGE : teurs de Windows se DIFFICULTE SOURCE : NON rassurent la version WinMOYENNE dows WAMP est prsente plus aval). Personnellement, je suis adepte dUbuntu, mais linstallation peut se faire sur une Fedora, une SUSE, etc. Pour tlcharger un de ces systmes dexploitation allez sur leur site internet. Une fois votre machine installe et configure, nous pouvons passer linstallation dApache. Mais quest ce quApache ? Il sagit dun logiciel de serveur HTTP qui permet dinterprter les requtes respectant le protocole de communication client-serveur. Cest le pilier du systme LAMP et aussi le serveur Web le plus populaire. De plus, il est multi-plate-forme (Windows, Linux et les autres). Pour installer Apache, il suffit daller sur le site et de choisir le type de fichier que lon souhaite tlcharger (tar, zip, msi pour Windows, ). Voici ladresse vous menant directement aux liens de tlchargement : http://httpd.apache.org/download.cgi. Pour les personnes utilisant des Debian ou Ubuntu, vous retrouverez apache2 dans le gestionnaire de paquet (" sudo apt-get install apache2 ") et pour les Fedora, apache2 sappelle " httpd " (" yum install httpd "). Les fichiers de configuration se situent dans /etc/apache2 avec cette installation. Pour les autres, ouvrez le fichier compress (zip ou tar) et lisez le fichier INSTALL qui dtaille la marche suivre. Continuons linstallation, nous reviendrons sur la configuration plus tard. Vient le tour de MySQL. Il sagit dun systme de gestion de base de donnes (SGBD). MySQL est venu au monde en 1995 tout comme Apache. Aujourdhui en version 5.1, il fait partie des SGBD les plus utiliss dans le monde. Pour tlcharger MySQL, je conseille de choisir la version souhaite ainsi que le type de paquet directement sur le site (http://dev.mysql.com/downloads/mysql/5.1.html) mais il est possible dinstaller MySQL directement avec aptget pour Debian/Ubuntu (" sudo apt-get install mysql-server ") et YUM pour Fedora (" yum install mysql-server "). Ceci tant fait, nous pouvons maintenant installer PHP ainsi que , ses modules pour Apache et MySQL. Pour linstallation, toujours avec Ubuntu, rien de plus simple grce au gestionnaire de paquet : " sudo aptget install php5 libapache2-mod-php5 php5-mysql ". Pour les autres : http://fr.php.net/downloads.php. Une fois le tout install, il faut redmarrer le service " apache2 " ou du moins recharger la configuration. Voici les commandes excuter pour Ubuntu et Fedora : - sudo /etc/init.d/apache2 reload (ou restart) - service apache2 reload (ou restart) Nous allons vrifier le bon fonctionnement dApache et de notre installation. Pour cela, il suffit douvrir un navigateur web et daller lURL http://localhost/ ou http://127.0.0.1/, et si la page souvre correctement, notre installation fonctionne ! Nous allons maintenant vrifier le bon fonctionnement de PHP5. Pour cela, il suffit de crer un fichier PHP " mapage.php " dans /var/www/ et dy insrer le petit code suivant : <?php phpinfo(); ?> Ensuite, on ouvre un navigateur internet et on teste la page en tapant : http://localhost/mapage.php. Si votre navigateur vous propose de tlcharger le fichier, cest que le module est mal charg. Il faut activer le module (" sudo a2enmod php5 " pour Ubuntu), puis il faut redmarrer le service apache2 comme nonc prcdemment. Une dernire petite installation que je conseille pour administrer sa base de donnes : phpMyAdmin. Ce logiciel permet de grer sa base de donnes en mode graphique. Les fichiers dinstallation se trouvent sur le site de phpMyAdmin (http://www.phpmyadmin. net/home_page/downloads.php) sous diffrents types de compression. Afin de vrifier le bon fonctionnement de phpMyAdmin, ouvrez un navigateur et entrez lURL http://localhost/phpmyadmin/. Si une erreur apparat, cest que votre lien symbolique na pas t cr. Pour cela, tapez la commande suivante : " ln s /usr/share/phpmyadmin/ /var/www/phpmyadmin/ "

Note : Il se peut que vous ayez des erreurs de permissions sur les dossiers, veillez les corriger.

68

PROgrammez ! \\ Mai 2009

code \\ serveur
Voil, vous avez un univers vous permettant de crer et de faire tourner une application web. Vous pouvez toujours amliorer la configuration de votre LAMP en parcourant les serveurs HTTP . Il faut inclure cette connexion en haut de page. Et ne pas oublier de mettre un mysql_close() la fin du code pour fermer cet accs la base de donnes. Sur notre page PHP nous commenons par tes, ter si un message est envoy avec la fonction " isset() " native de PHP Si elle nous retourne " true " cest que lon peut insrer le mes. sage dans la base de donnes. Il faut maintenant procder une vrification du message. Afin dviter tout injection SQL ou autre, nous allons utiliser deux petites fonctions : " htmlspecialchars " (ou " htmlentities ") ainsi que " mysql_real_escape_string ". En plus de cela, nous pouvons utiliser " nl2br " sur le message, afin de retrouver les sauts de ligne que lutilisateur a pu effectuer dans le textarea. On procde ensuite linsertion avec mysql_db_query(" base ", " requete ") dans notre base de donnes. La requte doit bien videmment tre en SQL. Ensuite, on passe laffichage des messages laisss. On doit donc parcourir la table de la base de donnes. Il faut effectuer une requte, puis parcourir le retour de celle-ci avec un " mysql_fetch_array() ". On peut alors afficher le nom de lutilisateur et son message. Voici un morceau de code permettant de faire ce qui a t expliqu prcdemment : <?php mysql_connect("localhost", "flo", "password"); if (isset($_POST['nom']) AND isset($_POST['message'])){ $nom_utilisateur = mysql_real_escape_string(htmlspecialchars ($_POST['nom'])); $message = mysql_real_escape_string(htmlspecialchars($_POST ['message'])); $message = nl2br($message); mysql_db_query("tuto","INSERT INTO livredor VALUES('', '".$ nom_utilisateur."', '".$message."')"); } //Vous pouvez insrer votre formulaire ici $reponse = mysql_db_query("tuto","SELECT nom, message FROM livre dor ORDER BY id DESC"); while ($donnees = mysql_fetch_array($reponse)){ echo '<p><strong>'.$donnees['nom'].'</strong> a crit :<br />'; echo $donnees['message'].'</p>'; } mysql_close(); ?> Vous pouvez bien videmment amliorer ce script. Ce nest quun exemple pour montrer le bon fonctionnement de notre univers LAMP Je conseille de connatre le HTML et le PHP pour utiliser cet . univers. Des cours sont disponibles sur internet et beaucoup de forums et sites proposent des scripts dj cods et fiables. Liens utiles : http://httpd.apache.org/ http://www.mysql.fr/ - http://fr.php.net/ http://www.siteduzero.com/ - http://www.solinux.fr/ Florian Dupuis - florian.dupuis@solinux.fr Dveloppeur web pour Solinux, une socit du groupe AlterWay.

INSTALLATION DE WAMP (WINDOWS)


Aprs avoir expliqu linstallation pour les amateurs du Libre, passons aux enfants de " Billou ". Malgr le fait quApache, MySQL et PHP soient surtout orients Linux, vous pouvez installer cette suite de logiciels sur Windows. En effet, une variante de LAMP nomme , WAMP permet de faire tourner une application web sur Windows. Mais pour cela, il faut passer par linstallation dun logiciel. Il existe plusieurs logiciels permettant de faire tourner un Apache sous Windows, le meilleur est WampServer, un bijou de la communaut franaise mene par Anaska, une socit du groupe AlterWay. Quest ce que WampServer ? Il sagit dune plate-forme de dveloppement web sous Windows qui sinstalle et se configure facilement. Il reproduit fidlement un serveur de production et permet de pouvoir tester plusieurs versions dApache, MySQL et PHP . Pour linstallation, il faut tout dabord procder au tlchargement du binaire la page http://www.wampserver.com/download.php puis lexcuter. Linstallation se fait comme tout binaire, vous cliquez sur suivant et slectionnez vos options. Une fois tout install, le service dmarrera. Il se peut que Windows Vista bloque WampServer au dmarrage, il suffit de lui demander dtre un peu moins restrictif et de laisser dmarrer le service. Une fois install, vous navez qu placer votre dossier contenant votre dveloppement dans le dossier C:\Program Files\WAMP Server\www\ et vous pourrez y accder en allant lURL http://localhost/ dans votre navigateur prfr. De l, un menu vous prsentera votre dossier prcdemment dplac ainsi que les modules PHP pouvant tre activs (ou dsactivs). [Fig.1] Lavantage de WampServer cest quil vous permet de tlcharger des addon (sur le site wampserver) et davoir ainsi diffrentes versions du modle WAMP . Pour changer les paramtres de WampServer, vous effectuez un clic droit sur licne dans la barre des tches et un menu contextuel vous proposera diffrentes configurations.

EXEMPLE DAPPLICATION PHP / MYSQL


Aprs avoir correctement install LAMP (ou WAMP), nous pouvons procder au dveloppement dapplications. Ici, je vous propose un trs court tutoriel pour crer un livre dor. Cet exemple est trs frquemment utilis pour les cours de PHP . Pour cela, il vous faut videmment des pr-requis. Dans un premier temps, il faut savoir crer, lire et crire dans une table MySQL. Il vous faut aussi connatre un minimum le HTML et le PHP (surtout les formulaires). Donc admettons quil faille une table contenant les messages posts sur le livre. Nous allons lappeler " livredor ". Celle-ci va contenir un identifiant (en auto_increment), le nom de la personne et le message. Nous laborons un formulaire demandant le nom et le message. Noublions pas un bouton pour envoyer le formulaire. La mthode denvoi se fait par un POST et laction peut se faire sur la mme page. Afin de discuter avec la base de donnes, il faut effectuer la connexion. Pour cela il existe une fonction dont la syntaxe est la suivante : mysql_connect(" adresse de la base ", " nom utilisateur ", " mot de passe "); par exemple : mysql_connect(" localhost ", " flo ", " password ");

Mai 2009 \\ PROgrammez !

69

code \\ patron

Comprendre le Design Pattern Etat


Si vous ne voulez pas qu'un jour des modifications de code spaghetti vous mettent dans tous vos tats, le Design Pattern State est ce qu'il vous faut.
La programmation oriente objet, ou POO, est un paradigme trs puissant. En LANGAGE : JAVA thorie elle prsente beauDIFFICULTE SOURCE : OUI coup d'avantages: un dveFACILE loppement plus facile, moins coteux, un code plus clair, facile maintenir et comportant peu de bugs. En pratique il n'en va pas toujours ainsi, car utilise maladroitement la POO peut gnrer elle-mme les problmes qu'elle est cense luder. C'est ici qu'interviennent les Design Pattern, ou patron de conception. Les Design Pattern ne sont rien d'autre qu'un ensemble de bonnes pratiques issues de l'exprience de programmeurs habiles qui devaient rsoudre des problmes rcurrents. Les Design Pattern ce n'est que cela, mais il est impossible de s'en passer si l'on veut viter les cueils de la conception logicielle. Les Design Pattern sont au nombre de 23, classs en 3 catgories: Cration d'objets, structuration et comportement. Programmez! vous a dj prsent quelques patterns de la catgorie comportement. En voici un autre, le pattern State ou Etat, qui n'est pas sans similitude avec le Pattern Stratgie vu dans Programmez 94. Etudions-le avec le langage Java, langage acadmique qui convient bien notre propos.

APPLICATION : TOUTES

public class BadPhotomaton { private private private private private private final static int HORS_SERVICE = 1; final static int MONNAYEUR_VIDE = 2; final static int MONNAYEUR_PLEIN = 3; final static int DEVELOPPEMENT = 4; int etat = HORS_SERVICE; int photos = 0;

BadPhotomaton(int nb) { photos = nb; if (photos > 0) { etat = MONNAYEUR_VIDE; System.out.println( "Inserez une piece"); } } public void insererPiece() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service, reprennez votre piece"); } else if (etat == MONNAYEUR_PLEIN) { System.out.println( "Vous avez deja paye, reprennez votre piece"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); System.out.println( "Reprennez votre piece"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Selectionnez une photo"); etat = MONNAYEUR_PLEIN; } } public void boutonRecupererPiece() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { libererPiece(); etat = MONNAYEUR_VIDE; }

1UNE MACHINE TATS


Tout appareil pilot par un logiciel sera une machine tat. Notre monde pullule d'exemples. A ses dbuts Java devait piloter un grillepain, il pilote maintenant des tlphones mobiles. Voil deux exemples de machines tat. Cependant, ce serait une erreur de rserver le Pattern aux appareils physiques. Un logiciel pur peut trs bien tre vu comme une machine tat. Deux tats qui peuvent tre l'un l'tat "version normale" et l'autre l'tat "version d'essai" qui exposera seulement un nombre limit de fonctionnalits. Dans un tel cas, le Pattern Etat fera merveille. Ceci prcis, prenons comme exemple un appareil type Photomaton. Imaginons qu'il comporte un cran pour l'affichage de messages l'intention de l'utilisateur, un monnayeur qui rejette automatiquement la pice insre s'il est dj plein, et trois boutons. Un bouton, sur le monnayeur qui permet de rcuprer la pice manuellement, un bouton pour dclencher la prise de photos d'identit et un bouton pour dclencher la prise d'une photo portrait. Ds qu'il n'y a plus de papier pour tirer les photos, l'appareil se met hors service.

2 CODAGE SANS PATTERN


Si nous ne connaissons pas le Pattern Etat, notre code, immanquablement, dfinira des tats et non moins immanquablement l'tat courant sera test chaque action utilisateur telle que l'insertion d'une pice ou l'appui sur un bouton. Voici ce que cela donne : package statepattern;

70

PROgrammez ! \\ Mai 2009

code \\ patron
} } public void boutonIdentite() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { etat = DEVELOPPEMENT; fairePhotoIdentite(); photos--; if (photos > 0) { etat = MONNAYEUR_VIDE; } else { etat = HORS_SERVICE; } } } public void boutonPortrait() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { etat = DEVELOPPEMENT; fairePhotoPortrait(); photos--; if (photos > 0) { etat = MONNAYEUR_VIDE; } else { etat = HORS_SERVICE } } } private void fairePhotoIdentite() { System.out.println( "Prenez votre photo identite"); } private void fairePhotoPortrait() { System.out.println( "Prenez votre photo portrait"); } private void libererPiece() { System.out.println( @Override public String toString() { return "Capacite photos: " + photos; } } Chaque tat est dfini par une constante. Une variable se voit affecte une de ces constantes selon la situation. On remarque que les morceaux de code correspondant une action de l'utilisateur (appui sur un bouton) sont tous similaires et peu lgants. Dans chaque cas l'tat courant est test, ce qui implique que le code est une suite d'instructions conditionnelles. Dans un cas aussi simple que celui-ci, cela fonctionne trs bien. Le lecteur trouvera sur notre site la classe TestBadPhotomaton pour s'en convaincre. Si cela fonctionne trs bien, quel est donc le problme ? Dans un cas aussi simple il n'y en pas forcment. Toutes les instructions conditionnelles rsident dans les mthodes d'une seule classe. Si nous reprenons l'exemple du logiciel deux tats, en supposant que celui-ci soit un petit peu labor, ce ne sera probablement pas aussi facile. Trs vraisemblablement constitu d'un grand nombre de classes, il est craindre que les instructions de tests soient dissmines "un peu partout". Dj cette dissmination est un problme, car elle compliquera coup sr un travail de dveloppement en quipe. Mais admettons la limite. Il est malheureusement certain que le bt blessera cruellement la premire intervention de l'un des deux ennemis jurs du dveloppeur: le chef de projet et le client :) L'un deux, si ce n'est les deux viendront tt ou tard (mais toujours au plus mauvais moment... ;) demander une modification du code. Et c'est l que rien ne va plus. Rechercher dans un code volumineux des instructions dissmines, les modifier en se heurtant des situations contradictoires prendra dans le meilleur des cas beaucoup de temps, et en gnral introduira des bugs: un test oubli ici, un conflit l... "Recuperez votre piece");

3LE PATTERN ETAT


Le pattern Etat permet un objet d'adapter son comportement son tat interne. Appliquer le pattern Etat consiste encapsuler chaque tat interne dans une classe. Une machine tat dtient toujours une instance sur une de ces classes, celle qui reprsente l'tat courant. La machine tat dlgue alors les traitements cette classe. Appliquons ceci notre Photomaton. Que sont les traitements ? Ce sont les codes rpondant une action utilisateur. Dans l'exemple prcdent nous avons vu que chaque traitement devait s'enqurir de chaque tat. Rciproquement chaque tat doit savoir effectuer chaque traitement, donc pour notre pattern, chaque tat devra comporter toutes les mthodes de traitements. Cet ensemble de fonctionnalits communes suggre trs fortement la dfinition d'une interface : interface EtatPhotomaton { public void insererPiece(); public void boutonRecupererPiece(); public void boutonIdentite(); public void boutonPortait(); }

Mai Les TUTORIELS sur www.programmez.com 2009 \\ PROgrammez ! 71

code \\ patron
L'interface est un bon choix, mais pas ncessairement un choix unique ni mme le meilleur. Il est important de toujours garder l'esprit qu'un Design Pattern est une dmarche, une faon d'approcher un problme. Sa mise en oeuvre peut varier selon les situations et le talent du programmeur. Par exemple une classe abstraite pourrait tre plus pertinente s'il existe du code commun tous les tats. Nous reprenons ensuite le code de notre Photomaton. La classe se voit enrichie d'accesseurs pour chacun des tats. Dans la classe, le corps de chaque mthode de traitement se voit rduit l'invocation de la mthode correspondante de l'tat courant : public class GoodPhotomaton { EtatMonnayeurPlein etatMonnayeurPlein = new EtatMonnayeurPlein(this); EtatMonnayeurPleinPromo etatMonnayeurPleinPromo = new EtatMonnayeurPleinPromo(this); EtatMonnayeurVide etatMonnayeurVide = new EtatMonnayeurVide(this); EtatHorsService etatHorsService = new EtatHorsService(this); EtatDeveloppement etatDeveloppement = new EtatDeveloppement(this); EtatPhotomaton etat; int photos = 0; GoodPhotomaton(int nb) { photos = nb; if (photos > 0) { setEtat(etatMonnayeurVide); System.out.println( "Inserez une piece"); } } } void insererPiece() { etat.insererPiece(); } void boutonRecupererPiece() { etat.boutonRecupererPiece(); } void boutonIdentite() { etat.boutonIdentite(); } void boutonPortrait() { etat.boutonPortait(); } void fairePhotoIdentite() { System.out.println("Prenez votre photo identite"); } void fairePhotoPortrait() { System.out.println("Prenez votre photo portrait"); } Regardons maintenant l'implmentation d'un tat. L'implmentation des autres tats est similaire. Nous renvoyons le lecteur au code complet sur notre site. Dans le code ci-dessous on remarquera que l'tat conserve une rfrence sur son contexte (l'objet Photomaton autrement dit) et qu'il se charge de basculer le contexte sur un autre tat : class EtatMonnayeurVide implements EtatPhotomaton { GoodPhotomaton gp; String msg_vide = "Pas de piece dans le monnayeur"; EtatMonnayeurVide(GoodPhotomaton gp) { this.gp = gp; } public void insererPiece() { System.out.println( "Selectionnez une photo"); gp.setEtat(gp.getEtatMonnayeurPlein()); } void libererPiece() { System.out.println( "Recuperez votre piece"); } void setEtat(EtatPhotomaton nouveau) { etat = nouveau; } EtatPhotomaton getEtatMonnayeurVide() { return etatMonnayeurVide; } EtatPhotomaton getEtatMonnayeurPlein() { return etatMonnayeurPlein; } EtatPhotomaton getEtatHorsService() { return etatHorsService; } EtatPhotomaton getEtatDeveloppement() { return etatDeveloppement; } EtatPhotomaton getEtatMonnayeurPleinPromo() { return etatMonnayeurPleinPromo; } @Override public String toString() { return "Capacite photos: " + photos; }

72

PROgrammez ! \\ Mai 2009

public void boutonRecupererPiece() { System.out.println(msg_vide); } public void boutonIdentite() { System.out.println(msg_vide); } public void boutonPortait() { System.out.println(msg_vide); } } L'ensemble du code prsente une bien meilleure organisation et lisibilit. En revanche, chaque mdaille ayant son revers, il est beaucoup plus verbeux que le premier exemple. Presque deux fois plus volumineux, ce qui peut sembler norme. En outre les tats ne sont pas totalement dcoupls les uns des autres. Avons-nous finalement fait une bonne opration ?

4DES MODIFICATIONS AISES


La rponse est clairement oui. Le bnfice s'apprcie ds qu'il faut modifier le code. Imaginons que le fabricant de notre appareil souhaite le doter d'un "tat promotionnel" dans lequel l'achat d'un type de photo donne l'autre gratuitement. Pour simplifier l'exemple, la promotion est dtermine alatoirement au moment de l'insertion d'une pice. Comme nous avons dfini un nouvel tat, sa mise en oeuvre dans le premier exemple conduit modifier le code, dj peu clair de toutes les mthodes de traitement. Avec le pattern il suffit de dfinir une classe encapsulant le nouvel tat et de modifier une seule mthode de l'tat MonnayeurVide (ainsi qu'ajouter un accesseur au contexte) : public void insererPiece() { System.out.println( "Selectionnez une photo"); //gp.setEtat(gp.getEtatMonnayeurPlein()); Random random = new Random(); int test = random.nextInt(2); if (test % 2 == 0 && gp.photos > 1) { gp.setEtat(gp.getEtatMonnayeurPleinPromo()); System.out.println("PROMO !!"); } else { gp.setEtat(gp.getEtatMonnayeurPlein()); } } Si l'on devait ajouter un nouvel tat, il faudrait encore crer une nouvelle classe l'encapsulant. L'organisation du code resterait la mme et sa lisibilit serait conserve galement. On ne peut pas en dire autant du premier exemple. Il en va avec le Pattern Etat comme bien souvent avec les Design Pattern. Plus le code est complexe et sujet modifications, plus leur emploi se justifie. Frdric Mazu - fmazue@programmez.com

code \\ script

Dcouvrir PowerShell 2
PowerShell est un vrai shell en ligne de commande pour Windows. L'outil est puissant. Son volution, PowerShell 2, l'est encore plus, notamment en raison de ses fonctionnalits de travail distance. Dcouvrons-le ensemble.
Programmez! vous a prsent PowerShell de nombreuses occasions, LANGAGE : .NET notamment dans les numDIFFICULTE SOURCE : OUI ros 93 et 99. PowerShell AVANC est une interface en ligne de commande ' la Unix' et qui faisait grand dfaut aux systmes Windows jusqu'alors. A la Unix ? Pas tout fait. Les systmes Unix ou Linux sont dots d'une interface en ligne de commande qui est constitue d'un ensemble de petites applications, gnralement crites en C ou en BASH (ou SH, ou autre) le langage intgr au Shell. Ces petites commandes mettent du texte destination de l'utilisateur sur une console, et un code de retour destination du Shell lui-mme. PowerShell est d'une conception trs diffrente. PowerShell est bas sur le Framework. Net. Il consiste aussi en un ensemble de commandes, baptises cmdlet. Avec PowerShell 1, ces commandes devaient tre crites en C#, en VB.Net, ou avec un autre langage .Net, ce qui indique clairement la nature de PowerShell: plutt que de travailler avec du texte, il manipule des objets. Si en PowerShell 2 il est dsormais possible d'crire des cmdlet directement en PowerShell, celui-ci garde toute sa spcificit de Shell orient objet, spcificit qui en fait tout l'intrt, car pouvoir travailler avec des objets c'est avoir toutes les classes du Framework .Net porte de main. PowerShell 2 apporte un lot d'amliorations qui vont sans doute faire de lui un outil incontournable pour les administrateurs. Le hobbyiste y trouvera aussi sans doute son compte. Nous allons dcouvrir ensemble quelques-unes de ces nouveauts, en commenant par un morceau de choix.

APPLICATION : SHELL

1 LE TRAVAIL DISTANCE
PowerShell 2 permet le travail sur machine distante, ou remoting. Cela ressemble ce que l'on peut faire sous Unix avec une connexion SSH, mais PowerShell permet lui de travailler avec plusieurs machines en mme temps. C'est trs intressant, c'est puissant, mais encore faut-il russir le faire fonctionner :) Nous avons fait quelques manipulations avec PowerShell CTP 2 (quelque chose de similaire une bta 2), seule disponible au moment de la rdaction de cet article. Le lecteur tlchargera donc PowerShell 2 sur le site de Microsoft. Le premier point important est que PowerShell travaille avec le service Winrm qui doit tre obligatoirement mis niveau. La page de tlchargement ddie PowerShell donne un lien sur winrm. Lors de la prparation de cet article, nous avons eu affaire un winrm en bta lui aussi, et qui mettait des sorties pour le moins surprenantes sur la console [Fig.1] Ceci pour dire qu'avant de passer aux essais avec PowerShell, il est prudent de penser sa dsinstallation future, et surtout la dsinstallation de winrm. Celui-ci vient dans un fichier .msu, c'est--dire un paquetage autonome de mise jour. Ce genre de fichier ne se dsinstalle pas comme une application, et il n'apparatra pas dans l'affichage gnral de l'applet 'Programmes et Fonctionnalits' du panneau de configuration. Cliquez alors sur le lien 'Afficher les mises jour installes'. Vous y retrouverez la mise jour sous le nom WindowsRemoteManagement comme illustr ci-contre. [Fig.2]. Demander ici la dsinstallation du service vous fera automatiquement revenir la version prcdente. Si vous n'tes pas sr de vous, vous pouvez prfrer crer un point de restauration systme avant de vous faire la main avec ces outils bta.

Fig.1

Fig.2

Sortie mise par la commande winrm help config... On ne souhaitera peut tre pas garder un service winrm bta sur sa machine :)

Le service winrm bta se dsinstalle comme une mise jour systme.

74

PROgrammez ! \\ Mai 2009

code \\ script

2 CONFIGURER LES MACHINES


Quand le service winrm et PowerShell 2 seront installs, vous devrez configurer winrm sur chaque machine. Pour cela, nos essais ont montr que la connexion rseau utilise sur chaque machine doit imprativement tre partage. En outre cette connexion doit tre de type rseau priv. Peut tre cela sera-t-il diffrent avec la version finale de PowerShell 2. En attendant, dans l'applet 'Centre rseau et partage' du panneau de configuration, accdez vos connexions par le lien 'Grer les connexions rseau', cliquez avec le bouton droit sur la connexion que vous voulez partager, puis dans l'onglet 'Partage', cochez la case de partage, comme illustr ci-dessous [Fig.3]. Vous devez alors vrifiez que tout va bien sous PowerShell. Pour cela lancez-le et dans la console, tapez : get-service SharedAccess Vous devez obtenir : Status -----Running Name ---SharedAccess DisplayName ----------Partage de connexion Internet (ICS)

Le message suggre un problme de pare-feu ou d'inactivit du service SharedAccess. La raison de ce message d'erreur sous Windows Vista Home Premium est pour le moins obscure et le message doit simplement tre ignor. Enfin nous devons vrifier que winrm est actif : PS C:\Windows\System32> get-service winrm Status -----Running Name ---WinRM DisplayName ----------?indw? ?e?t? ??p?gemt (?S-???g...

Ne nous attardons pas sur le nom du service :) contentons nous de constater qu'il est actif (Running). Nous sommes enfin prts pour faire un peu de remoting.

3 UN PEU DE PRATIQUE
Sommes-nous vraiment prts ? Si les machines avec lesquelles nous voulons travailler sont dans un domaine, la rponse est oui. En revanche si les machines sont simplement connectes en rseau, le service winrm sur le poste client doit tre inform du ou des htes de confiance avec lesquels nous voulons travailler. Ainsi si nous souhaitons atteindre une machine baptise 'soleil', nous commenons par taper ceci dans le PowerShell client : winrm set winrm/config/client '@{TrustedHosts="soleil"}' D'aprs la documentation de winrm, il est thoriquement possible d'atteindre toutes les machines d'un rseau aprs l'excution de cette commande : winrm set winrm/config/client '@{TrustedHosts="<local>"}' Toutefois nos essais ne se sont pas rvls concluants. Pour un premier essai de commande distance, nous nous proposons de lister le contenu du disque C: de la machine distante 'soleil'. Un peu d'aide ne fait pas de mal. Sept documents sont notre disposition, nous pouvons les lister ainsi : PS > help about_remote* Name ---about_remote about_remote_FAQ about_remote_jobs about_remote_output about_remote_quoting about_remote_requirements about_remote_troubleshooting Puis pour en consulter un, par exemple : help about_remote_FAQ Si la fonctionnalit d'aide est casse sur votre machine, cela vient sans doute du fait que tous les fichiers sont situs dans C:\Windows\System32\WindowsPowerShell\v1.0\en-US Category -------HelpFile HelpFile HelpFile HelpFile HelpFile HelpFile HelpFile

Pour la configuration de winrm proprement dit, Powershell 2 vient avec un script qu'il vous suffit de lancer depuis la console PowerShell : configure-wsman Oui, ici, winrm s'appelle wsman :) Nous avons fait des essais avec des machines en rseau quipes de Windows Vista Ultimate et un ordinateur portable quip de Windows Vista Home Premium. Avec les premiers tout se passe parfaitement. Avec le dernier, le script met la fin de son excution un message d'erreur aussi inquitant qu'abondant et dont voici un extrait : CheckError : Error opening port 80 on system. \nCheck if the 'Windows Firewall/Internet Connection Sharing (ICS)' service is running using the following command:\n\n\t get-service SharedAccess\n\nIf the ser vice is not running, use the following to star t the service:\n\n\t netsh firewall set opmode enable\n
Fig.3

Pour le travail distance avec Powershell 2, la connexion rseau doit tre partage.

Oui, vous avez bien lu... v1.0, mais ceci n'a aucune importance. Par

ABONNEMENT PDF :

2,73 le numro

Mai 2009 \\ www.programmez.com PROgrammez ! 75

code \\ script
contre, faites une copie du rpertoire soit le nom C:\Windows\System32\WindowsPowerShell\v1.0\fr-FR pour rparer la fonctionnalit d'aide. Cette aide nous apprend que pour parvenir notre but, PowerShell 2 doit avant tout tre lanc avec les droits administrateur. Ensuite nous apprenons que nous devons utiliser la cmdlet invoke-command. Il reste bien comprendre la question des credentials, ce qui est ni plus ni moins que les login et mot de passe utilisateur sur la machine distante. Ceux-ci seront demands par chaque excution distante. Essayons avec cette commande : PS > invoke-command -scriptblock { ls c:\ } -computername so leil -credential soleil\fred s'ouvre alors une bote de dialogue demandant le mot de passe de l'utilisateur fred sur la machine soleil, comme illustr ci-dessous. [Fig.4]. Donnez le mot de passe, et miracle, le contenu du disque distant s'affiche sur votre poste client. Comme toute cmdlet peut tre excute ainsi, vous pouvez travailler sur la machine distante comme si vous y tiez. En revanche, saisir le mot de passe chaque commande est videmment invivable. Mais nous pouvons mmoriser une fois pour toutes le crdential dans une variable, comme ceci : $cred = get-credential soleil\fred la dure d'une session et aussi d'obtenir une connexion avec une machine distante de manire semblable ce que l'on fait sous Unix avec SSH. Examinons d'abord ce dernier point PS > $cred = get-credential soleil\fred PS > push-runspace -computername soleil -credential $cred [soleil]: PS G:\Windows\System32> A l'issue de l'opration le prompt sur notre console local a chang. Il indique dsormais que nous sommes connects la machine soleil. Nous pouvons excuter directement une commande sur cette machine : ls c:\ Il est remarquer que le procd ne peut tre appliqu en cascade. Ainsi depuis soleil nous ne pouvons atteindre une autre machine distante 'lune' tandis que nous le pourrions depuis notre machine locale, sur laquelle tourne la console PowerShell. Pour clore la session distante, il suffit de saisir : pop-runspace Crons maintenant deux runspace sur notre machine locale. (pour simplifier les commandes) PS > $rs1 = new-runspace PS > $rs2 = new-runspace Maintenant crons une variable dans chaque runspace. La variable porte le mme nom chaque fois : PS > invoke-command -runspace $rs1 -scriptblock {set-variable -name v -value "A"} PS > invoke-command -runspace $rs2 -scriptblock {set-variable -name v -value "B"} Chaque variable v est stocke dans un des environnements d'excution, ou runspace, cr prcdemment. Elles sont invisibles directement : echo $v ne donne rien. Dire qu'elles sont invisibles directement revient dire qu'elles ne font pas partie du runspace par dfaut, car toute session PowerShell en cre un. Nous pouvons accder nos variables en spcifiant le runspace : PS > invoke-command -runspace $rs1 -scriptblock {echo $v} A PS > invoke-command -runspace $rs2 -scriptblock {echo $v} B Parce qu'ils permettent l'excution en parallle de scripts sans risquer de collision dans les noms de variable, les runspaces de PowerShell 2 sont une fonctionnalit trs intressante qui prend tout son sens avec la fonctionnalit d'excution en arrire plan que nous examinons maintenant, mais non sans avoir d'abord pris soin d'effacer nos runspaces : PS > remove-runspace $rs1 PS > remove-runspace $rs2

qui ouvrira la bote de dialogue dont nous venons de parler. Ensuite les commandes auront cette allure : invoke-command -scriptblock { ls c:\ } -computername soleil credential $cred

4 NOTION DE RUNSPACE
Tout ceci est dj trs bien. Mais PowerShell 2 appor te aussi quelque chose de trs intressant, le runspace, ou espace d'excution. Cet espace permet de conserver des variables pendant
Fig.4

Pour lancer une commande distance sous PowerShell 2, login et mot de passe sont requis.

76

PROgrammez ! \\ Mai 2009

DVELOPPEZ VOTRE SAVOIR-FAIRE


mensuel n111 - septembre 2008

PRO grammez ! PRO grammez ! ! PROgrammez


Le magazine du dveloppement
www. programmez.com mensuel n112 - octobre 2008

Nouvelle Formule

PROGRAMMEZ !

Numro Spcial 10 ans ! EXCLUS IF Nouvelle Les rvlations Formule


Le magazine du dveloppement du

livre choc

www. programmez.com

Le magazine du dveloppement
mensuel n118 - avril 2009

www.programmez.com

Langage et code, dveloppement web, carrires et mtier : Programmez !, c'est votre outil de veille technologique. Pour votre dveloppement personnel et professionnel, abonnez-vous Programmez !

Enqute

Tout ce quil faut savoir pour

Linux MULTI-TOUCH
sur
Comment a Les outils, les technologies disponibles Dvelopper vos Coder pour l'iPhone premires applications 2.0 Les dveloppeurs Au coeur du e-lab de Bouygues
Matriser les standards : marche ? AppChecker LSB,

La Rvolution du

Dvelopper

Vos langages Les favoris Olympiques du

Jeux

Lquipe The Shads, de lEpita ABC Project

Plonge au cur des Mozilla Labs

ImagineCup Microsoft de rvle les nouveaux talents

Exclusif ! Vers dveloppement !Microsoft 3.0 2.0 Web Les projets secrets

Comment choisir son framework Ajax ?

Le match parlent en

Spcial
Les nouveauts PHP 5.3 Crer son moteur de template en PHP 5 AspectJ

Eclipse - Netbeans
technique
Tout savoir sur Eclipse 4.0 ENFIN DISPONIBLE ! SQL Server Flash

Mon Choisirest-il code source GAGNER loutil idal ! lgal ?


Les dernires versions compares

Faire carrire dans lOpen Source 300 licences

PHP Java
:

Chrome et les dveloppeurs Le Google Developer Day !

Choisissez votre formule


Abonnement 1 an au magazine : 49
(au lieu de 65,45 tarif au numro) Tarif France mtropolitaine

PHP et Google JavaSpaces de dveloppement : tout faire 2008 Multicur Matriser le bitmap avec la programmation par composants Le Resource Intgrer Google Maps et JSF futur de la modlisation 3 ActionScript Crer votre grid computing Dcouvrez le Programmer vos curs avec OpenMP M 04319 - 111 - F: 5,95 E Ce Governor que prpare Mozilla

UML

La le duo d'enfer UML et PHP :programmation par aspect facile ! : latelier WinDev

Outil

Et La charge OSLO aussi : Crer votre extension XUL Microsoft avec processeur iPhone / .net Linux : Dvelopper avec WMI pour Firefox ! Piloter votre des extensions Nautilus Windows Media Center avec iPhone

3:HIKONB=^UZ^Z]:?k@b@l@b@a;

Jeux :

Dvelopper des jeux en Java


M 04319 - 112 - F: 5,95 E
John Schreiner/illustrationOnLine.com

Serveur GPU
+

Terracotta : simplifiez-vous le cluster Matriser la puissance de Cuda

Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH

3:HIKONB=^UZ^Z]:?k@l@b@c@a; Coding4fun
Open Source
Les fondamentaux de PHP

Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 59 Tarif France mtropolitaine Abonnement PDF / 1 an : 30 - Tarif unique
Inscription et paiement exclusivement en ligne www.programmez.com

Faites parler vos applications avec MS Speech !


M 04319 - 118 - F: 5,95 E

Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH

3:HIKONB=^UZ^Z]:?a@l@l@i@a;

11 numros par an : 49 *

Economisez 16,45 *
*Tarif France mtropolitaine

Abonnement Etudiant : 1 an au magazine : 39

(au lieu de 65,45 tarif au numro) Offre France mtropolitaine

ACCS ILLIMIT aux ARCHIVES du MAGAZINE pour 0,84 par mois !


Cette option est rserve aux abonns pour 1 an au magazine, quel que soit le type dabonnement (Standard, Numrique, Etudiant). Le prix de leur abonnement normal est major de 10 (prix identique pour toutes zones gographiques). Pendant la dure de leur abonnement, ils ont ainsi accs, en supplment, tous les anciens numros et articles/ dossiers parus.

+ Abonnement INTGRAL
Vous pouvez vous abonner en ligne et trouver tous les tarifs

OUI, je mabonne
PROGRAMMEZ

www.programmez.com

Abonnement 1 an au magazine : 49 (au lieu de 65,45 tarif au numro) Tarif France mtropolitaine Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 59 Tarif France mtropolitaine Abonnement Etudiant : 1 an au magazine : 39 (joindre copie carte tudiant) Offre France mtropolitaine
M. Mme Mlle
Entreprise :
........................................................................................

Fonction : ...................................................

Nom : ........................................................................................ Prnom :.................................................................................................................................... Adresse :


.........................................................................................................................................................................................................................................

Le renvoi du prsent bulletin implique pour le souscripteur l'acceptation pleine et entire de toutes les conditions de vente de cette offre. Conformment la loi Informatique et Liberts du 05/01/78, vous disposez d'un droit d'accs et de rectification aux donnes vous concernant. Par notre intermdiaire, vous pouvez tre amen recevoir des propositions d'autres socits ou associations. Si vous ne le souhaitez pas, il vous suffit de nous crire en nous prcisant toutes vos coordonnes.

Code postal : Tl :

...............................................

Ville :

...................................................................................................................................................................

........................................................................................

E-mail :

....................................................................................................................................

Je joins mon rglement par chque lordre de Programmez ! Je souhaite rgler rception de facture A remplir et retourner sous enveloppe affranchie : Programmez ! - Service Abonnements - 22 rue Ren Boulanger - 75472 Paris Cedex 10. abonnements.programmez@groupe-gli.com

PRO grammez !
Le magazine du dveloppement

PROG 119

Offre limite, valable jusquau 31 mai 2009

code \\ script

5 LES BACKGROUND JOBS


PowerShell est plein de qualits, mais on ne peut vraiment pas dire que la rapidit en fasse partie. Dans ce contexte, lancer un ou plusieurs scripts en arrire plan permet de vaquer d'autres activits, sans devoir attendre. Pour travailler avec les jobs en arrire plan, la premire chose savoir est que les fonctionnalits de travail distance doivent tre correctement configures, comme expliqu au dbut de cet article, mme si on a l'intention de lancer des jobs en arrire plan sur la machine locale seulement. Pour nous faire la main, commenons par lancer la commande ls c:\ en arrire plan et sur la machine locale : PS > start-psjob -command "ls c:\" PowerShell rend immdiatement la main et nous pouvons saisir une autre commande ou attendre... l'infini. En effet, si sous Unix un job en arrire plan met par dfaut ses sorties sur la console, un job PowerShell n'en fait rien. En revanche, la commande start-psjob a affich ceci : SessionId --------1 Name ---Job1 State HasMoreData --------------Running True Location -------localhost Command ------ls c:\

6 EN ARRIRE PLAN ET DISTANCE


PowerShell propose trois approches. La premire consiste tout simplement se connecter la machine distante avec la cmdlet pushrunspace ainsi que nous l'avons vu plus haut, puis de lancer un job en arrire plan ainsi que nous venons de le voir. La seconde approche consiste en l'usage de la cmdlet invoke-command avec l'option -AsJob. Utilise ainsi, invoke-command retourne un objet job de la mme manire que la cmdlet start-psjob. Et comme cet objet rside sur la machine locale, sa manipulation est directe et galement locale. Exemple : PS > $cred = get-credential soleil\fred PS > $j = invoke-command -asjob -scriptblock { ls c:\ } -compu tername soleil -credential $cred PS > wait-psjob -job $j PS > receive-psjob -job $j Enfin, la troisime approche consiste invoquer distance la cmdlet start-psjob au moyen de invoke-command et ceci l'intrieur d'un runspace. Cela parat plus compliqu que la solution prcdente, mais cela prsente l'avantage de pouvoir laisser les rsultats d'un job rsider sur la machine distante, et donc de les interroger plusieurs fois. Exemple : PS > $rs = new-runspace -computername soleil -credential $cred PS > invoke-command -runspace $rs -scriptblock {start-psjob -com mand "ls c:\"}

PowerShell a attribu Job1 comme nom notre job. Nous pouvons nous servir de ce nom pour savoir si le job est termin : PS > get-psjob -Name "Job1" SessionId --------1 Name State HasMoreData Location Command ----- -------------- -------------Job1 Completed False localhost ls c:\

C'est le cas, (State Completed) nous pouvons donc en obtenir le rsultat, ce qui doit tre demand par la commande receive-psjob : PS > receive-psjob -name "Job1"

HasMoreData StatusMessage Location Command JobStateInfo InstanceId SessionId Name

: True : : localhost : ls c:\ : Running : b530598a-26bf-4db8-9b4a-1cf8312eff1e : 7 : Job7

Directory: Microsoft.PowerShell.Core\FileSystem::C:\

Mode ---d---d---d---# etc, etc

LastWriteTime ------------08/08/2008 16:45 06/12/2008 11:03 29/09/2008 21:25

Length Name ------ ---.emacs.d Articles bin

#obtenir les rsultats une premire fois $result = invoke-command -runspace $rs -scriptblock {receive-ps job -name "Job7" -keep} #obtenir les rsultats une seconde fois et dernire fois $result = invoke-command -runspace $rs -scriptblock {receive-psjob -name "Job7"} Cependant, sauf erreur de notre part, la troisime approche ne fonctionne correctement que lorsque les machines font partie d'un domaine, du moins avec PowerShell bta 2

Il est possible d'utiliser la cmdlet wait-psjob pour attendre explicitement la fin d'un job. Il est encore possible de travailler avec des 'objets job', plutt qu'avec des noms de job gnrs par le systme. Exemple : PS > $j = start-psjob -command "ls c:\" PS > wait-psjob -job $j PS > receive-psjob -job $j

7CONCLUSION
PowerShell 2 recle encore d'autres innovations. Toutefois nous avons pu apprcier que les innovations que nous avons dcouvertes forment un tout la fois cohrent et d'une grande puissance pour l'administration des systmes Windows en local ou distance. Nous tudierons d'autres possibilits de PowerShell 2 dans un article venir. Frdric Mazu - fmazue@programmez.com

78

PROgrammez ! \\ Mai 2009

ludique \\ applications

En direct des labos !


BeeDiff
(http://freshmeat.net/projects/beediff) BeeDiff (prononcez " bidif ") est une interface utilisateur graphique (GUI, Graphical User Interface) pour comparer des diffrences textuelles entre deux fichiers qui seront mises en relief dans diverses couleurs selon le type de diffrence. Toute diffrence trouve peut alors tre efface ou copie entre fichiers. BeeDiff est dveloppe avec de nouvelles librairies Qt4, ce qui la rend trs rapide et lgre. Elle se veut galement trs facile installer, ce qui constitue un plus. texte dans chacun deux. Le volet de gauche est loriginal, et le volet de droite permettra la comparaison entre les deux. Tout en haut droite de chaque volet se trouve un bouton pour naviguer et choisir le fichier que vous voulez charger. Une fois charges, toutes les lignes diffrentes seront mises en relief dans diffrentes couleurs : Rouge : les lignes qui ont t effaces. Bleu : les lignes qui ont t ajoutes. Jaune-vert : les lignes qui ont t modifies. Aprs avoir dtermin quelles lignes sont diffrentes, vous pouvez alors choisir entre plusieurs actions. Le long de la barre des outils droite (et dans le menu sous Operations) se trouvent quatres icones : Remove all from left (" enlever tout de gauche "), Remove all from right (" enlever tout de droite "), Merge all to left (" fusionner tout vers la gauche "), Merge all to right (" fusionner tout vers la droite "). Les boutons Remove, comme leur nom lindique, effacent le texte en question, mais le bouton Merge vous permet de saisir toutes les lignes divergentes et de les copier vers lautre fichier, que vous pouvez sauvegarder trs pratique !

1re partie

Dans les laboratoires, coles, centres de recherche, on dcouvre parfois de petites merveilles. Voici quelques exemples que nous avons retenus ! Bonne dcouverte.
Fig.1

Le meilleur ami du programmeur insomniaque.


Fig.2

Installation

[Fig.1] En ce qui concerne linstallation, vous avez deux choix possibles : un fichier binaire i586 ou un source compress .tar (en anglais, " source tarball "). Si vous choisissez le binaire, tlchargez tout dabord le fichier compress .tar fourni et extrayez-en le contenu vers un rper toire de votre choix. Ensuite, comme racine ou en utilisant sudo(1), copiez le fichier binaire vers /usr/bin ou vers votre rpertoire binaire prfr pour excuter BeeDiff au niveau systme. Puis copiez licne gnre, beediff.png, vers /usr/ share/icons ou vers le rpertoire dicnes de votre got.

vez excuter le fichier en tapant : $ chmod u+x youtube-dl

Usage
BeeDiff est ax sur la comparaison de deux fichiers qui ont la mme origine, si bien que la comparaison de morceaux de code et de scripts sera la meilleure faon dutiliser les possibilits de BeeDiff. Lanez BeeDiff et une fois lintrieur, vous remarquerez deux volets (sous-fentres) principaux. L, vous chargerez un fichier

Youtube-dl

(1) sudo (abrviation de superuser do, en anglais : " super utilisateur fait ") est une commande informatique utilise principalement dans les systmes d'exploitations de type Unix et Linux. Elle permet un administrateur systme de donner un utilisateur (ou un groupe d'utilisateurs) la possibilit d'excuter une ou toutes les commandes en tant que super utilisateur, tout en gardant une trace des commandes tapes et des arguments.

[Fig.2] (www.arrakis.es/~rggi3/youtube-dl) Voici un tlchargeur YouTube. Pas dun grand intrt, puisque tout le monde en a dj fait usage auparavant, nest-ce pas ? En effet, mais il y a quelques mois, YouTube a modifi quelques options imbriques, rendant inutiles la plupart de ces jolis petits outils. Eh bien, ce petit script a t mis jour et tlcharge trs bien des vidos YouTube. Pour linstaller, sauvegarder simplement lURL fourni sur votre disque dur et cest tout ! Assurez-vous cependant que vous sauvegardez le nom du fichier comme tel et non avec une extension .html. Pour lutiliser, ouvrez un terminal dans le rpertoire o vous avez sauvegard le fichier. Assurez-vous que vous pou-

Vous tes maintenant prt vous lancer ! Trouvez votre clip-video YouTube favori et copiez son URL. Retournez sur votre terminal et tapez ./youtubedl, et collez lURL du clip-video juste aprs, cest--dire en tapant : $ ./youtube-dl http://youtube. com/watch?v=tNTWwbYYlgU A prsent, youtube-dl le sauvegarde sur votre disque dur et il dispose mme dun moniteur patant progression textuelle. Une fois tlcharg, le nom du fichier ressemble tout simplement des dtritus alatoires. Renommez le fichier avec le nomdevotreclip-video.flv (lextension .flv est la partie la plus importante), et ouvrez-le avec un bon logiciel video (video player) tel que VideoLAN ou Mplayer. Dr. Rodrigue Sabin Mompelat Enseignant-Chercheur, Ingnieur Logiciel, Copenhague - Danemark

Un outil amusant, utilisable sur la ligne de commande, pour sauvegarder des videos YouTube sur le disque dur

Mai 2009 \\ PROgrammez !

79

ludique \\ xbox

Crer un jeu vido de A Z avec XNA


Honntement, est-ce que vous auriez cru avoir la possibilit de dvelopper un jour sur une console next-gen telle que la Xbox 360 ? XNA permet mme de parallliser le dveloppement de projets sur PC.

(suite et fin)

isponible en version trial pour les tudiants, il faut toutefois dbourser 99$ lanne (ou 44$ pour 4 mois) pour dbloquer cette fonctionnalit. Sacquitter de cette somme permet galement de dbloquer du contenu pdagogique supplmentaire sur le " Creator club " et de pouvoir vendre son jeu sur plusieurs millions de consoles via le Community Games. Nous allons prendre comme exemple Programmez Tycoon que nous allons porter sur XBOX 360.De manire gnrale, le portage est trs simple mais il y a quelques subtilits connatre. Aprs avoir effectu les diffrentes configurations ncessaires sur sa machine (cf lien), ouvrez votre solution, cliquez droit sur le projet et slectionnez tout simplement " Create Copy of Project for Xbox 360 ". XNA va alors crer un autre projet. Les modifications faites sur la version Xbox ou PC seront automatiquement reportes sur lautre, mme pour lajout de nouvelles ressources. Noubliez pas toutefois de slectionner le nouveau projet xbox comme projet par dfaut.

Vous avez peut-tre remarqu la premire ligne de code concernant la Xbox 360 ? On rcupre ltat dune manette en particulier. Le joueur pouvant trs bien se connecter avec la " manette 2 ". Pour le reste, la gestion de la manette est trs proche du clavier. Vous trouverez donc des mthodes utilitaires dans le code source fourni. Une fonction intressante toutefois est la gestion du retour de forces (les vibrations). Ce qui pouvait prendre un temps considrable se fait avec une facilit affligeante : /// <param name="lMotor">Intensit du moteur gauche (0 -> 1)</ param> /// <param name="rMotor">Intensit du moteur droit (0 -> 1)</ param> public void VibrateGamepad(float lMotor, float rMotor, int du ration) { GamePad.SetVibration(this.currentPlayerIndex, lMotor, rMo tor); this.vibrationDuration = duration; } Petit cas particulier mais qui a son importance, pensez mettre le jeu en pause lorsquaucune manette nest connecte. public void CheckForDisconnection() { if (!GamePad.GetState(this.currentPlayerIndex).IsConnected) { this.active = false; if (this.OnDisconnection != null)

Viva la revolucion !
La souris nest logiquement plus gre sur Xbox 360. On va alors dfinir le stick analogique (ThumbSticks) gauche pour la remplacer. La pression exerce sur le stick est traduite par une valeur comprise entre 0 et 1. En pratique, il sera courant de dfinir un comportement de certaines fonctionnalits du jeu spcifique notre console ou au PC (voire au Zune). Pour cela, on peut utiliser les directives conditionnelles de prprocesseur. #if !XBOX lastMouseState = currentMouseState; currentMouseState = Mouse.GetState(); // update position vector with mouse coordinates this.position = new Vector2(currentMouseState.X, current MouseState.Y); #else currentGamePadState = GamePad.GetState(this.currentPlayer Index); this.internalPosition += this.mouseSpeed * new Vector2(this .currentGamePadState.ThumbSticks.Left.X, -this.currentGamePad State.ThumbSticks.Left.Y); this.position = internalPosition; if (this.position.X < 0) this.position.X = 0; else if (this.position.X > Kernel.Instance.Width) this.po sition.X = Kernel.Instance.Width; if (this.position.Y < 0) this.position.Y = 0; else if (this.position.Y > Kernel.Instance.Height) this. position.Y = Kernel.Instance.Height; #endif

80

PROgrammez ! \\ Mai 2009

ludique \\ xbox
this.OnDisconnection(this, null); } } Le portage est un vrai bonheur mais quand on nest pas familier du dveloppement sur console, on se frotte des problmes trs particuliers. Nous en avons tout particulirement retenu deux : le Systme dIO et de la mmoire & la gestion des rsolutions et loverscan. public Kernel(Game game, Size windowSize, bool fullscreen) { // Creates and configures the graphic device this.graphicsManager = new GraphicsDeviceManager(game); this.initialSizeScreen = windowSize; this.graphicsManager.PreferredBackBufferWidth = windowSize .Width; this.graphicsManager.PreferredBackBufferHeight = window Size.Height; this.graphicsManager.PreferMultiSampling = true; // Keeps a game reference this.game = game; // Keeps the engine instance Kernel.instance = this; } Sur les tlviseurs 4:3, le jeu aura trs certainement des bandes noires sur les bords haut et bas de lcran. Bien entendu, il est possible de grer compltement et manuellement ce type de rsolution. Il suffira de checker le format dcran via la mthode GraphicsAdapter.DefaultAdapter.IsWidescreen. Je vous parle " doverscan " depuis tout lheure mais de quoi sagit-il ? Cest un problme inconnu sur PC car il ne se pose pas. En fait, certaines tlvisions naffichent pas la totalit de ce quelles devraient afficher, il y a souvent des pertes sur les bords latraux de lcran. Ces pertes peuvent tre de 10%. Dans la mesure o il est impossible de savoir o sont situs ces pertes sur lcran, il est trs fortement recommand de nafficher les informations importantes que dans la zone intrieure de lcran (gale 80% donc). Cette zone est appel la " Title Safe Area ". Attention, ce phnomne touche tout type de tlviseur : aussi bien sur de vieilles configurations que sur les crans HD. Pour grer le problme efficacement et surtout indpendamment de la rsolution dcran sans calcul pnible faire, XNA propose une mthode associe au Viewport (zone de lcran) afin de permettre de rcuprer les dimensions et positions de la Title Safe Area. // Rcupre le viewport actuelle (zone daffichage et les dimensions de la title safe area Viewport viewport = GraphicsDevice.Viewport; Rectangle safeArea = viewport.TitleSafeArea; antialiase. Et inversement. Nous dfinissons la taille de notre application lors de linitialisation du game engine :

Loading Please Be Patient !


Il nest pas pensable quun jeu ne prcharge pas les ressources quil va utiliser. Dans le premier cas, nous avions effectivement plusieurs centaines dassets divers et parfois " lourd " (textures, FX, etc.) loader pour que le jeu puisse fonctionner. Premier constat : le systme dIO de la Xbox 360 nous a mis une claque. Sil ne fallait que quelques secondes de chargement sur PC, on est arriv sur console 5 minutes ! On a alors factoris au maximum les diffrents assets pour crer les fameux " spritesheets " dont nous vous avions parl dans larticle 2. On a pu ainsi gagner 2 petites minutes. La XBOX 360 semble donc lire trs rapidement un fichier mais peine pour passer dun fichier un autre. Nous avons alors cr trois grosses archives de nos assets, grce la bibliothque SharpZLib. Le chargement est dsormais trs rapide mais le problme na t que partiellement rsolu. En effet, les archives sont bien rapidement charges en mmoire mais il faut galement " extraire " ce dont on a besoin. La Xbox 360 ne contient que 512 Mo de Ram et vous serez surpris quel point on peut les atteindre trs vite. Autre point important, mme si on est loin du foss sparant les dveloppeurs java dapplications industrielles de ceux spcialiss dans J2ME, on ne programme pas de la mme manire sur PC quavec le .NET Compact Framework. Pour amliorer les performances, Lutilisation des mthodes virtuelles est par exemple viter, vous obligeant alors quelques changements darchitectures, lutilisation de structures est parfois privilgier, etc. On vous renvoie notamment larticle sur zyggyware et loptimisation de jeux en XNA. Autre prcision importante sur le systme dIO, lcriture et la lecture dans un fichier en XNA contient certaines spcificits. Il faut notamment utiliser une instance de StorageDevice. On linitialise en demandant au joueur quel support de stockage il souhaite utiliser (disque dur, carte mmoire, etc.). Sil ny a quun seul support de stockage, le choix sera transparent pour lutilisateur.

Prenez de bonnes rsolutions !


Lautre principale difficult est la gestion de lcran. Ergonomique tout dabord, un jeu vido ne sapprhende pas de la mme manire si lon est scotch devant son cran dordinateur ou assis confortablement sur un canap. La " culture " nest pas la mme, les joueurs consoles sont dailleurs plus exigeants et sattendent ce que votre jeu " just work ". Les informations doivent tre bien visibles - les interfaces doivent tre pures, les textes suffisamment gros (avec une taille de police au strict minimum de 14) grant loverscan et videmment disponible dans la rsolution de leur tlviseur. Prenons ce dernier cas. Nous vous recommandons fortement dutiliser la rsolution 720p, soit 1280x720. Celle-ci fonctionne en effet sur toutes les consoles XBOX 360 quelle que soit la rsolution de votre tlviseur. Si votre rsolution est plus petite, la machine va automatiquement redimensionner vos images et le texte de manire

Ressources :
Comment connecter sa xbox : http://www.benjamingauthey.com/page/Comment-installer-des-jeux-sur-Xbox-360-via-XNA.aspx Creator club : http://creators.xna.com/fr-FR zyggyware High Performance: http://www.ziggyware.com/readarticle.php?article_id=222

Laurat de lImagine CUP dans la catgorie jeu vido et soutenue par Microsoft, ECOThink dveloppe des jeux vido innovants grce la technologie XNA. contact@ecological-tycoon.com
Frdric PEDRO

FORUM

Mai 2009 dialogue et assistance www.programmez.com \\ PROgrammez ! 81

livres \\

par Franois Tonic

livre du mois

RIA Flex 3
Difficult : ** / *** Editeur : Eyrolles Auteur : Laurent Jayr Prix : 29,90
Dans les platesformes des applications internet riches, Flex tient une place part. Par sa maturit et la qualit de ses outils et API. Lauteur brasse en 200 pages de nombreux thmes : Flex Builder, le Framework, linterface et sa conception, les effets et animations, la gestion de donnes. Il sagit de bien comprendre les fondations et le fonctionnement de Flex. A noter un point trs intressant : AMF et Flex. AMF se ddie linteraction entre le client et le serveur. Puis on enchane avec le serveur BlazeDS, un serveur open source sintgrant dans linfrastructure Flex. La dernire partie est tout aussi intressante avec la " migration " des applications sur la plate-forme desktop : Air. Un bon ouvrage pour bien dmarrer avec Flex. Seul regret : le manque de prsentation des outils tiers.

Practical Symfony
Difficult : *** - Editeur : Sensiolabs books Auteur : Fabien Potencier - Prix : 24,90
Vous utilisez le dsormais clbre Framework Php Symfony ou vous souhaitez lutiliser ? Ce livre se propose de faire une plonge assez complte dans Symfony. On dmarre par la cration dun projet, sa gestion. Puis on attaque dans le dur avec le modle de donnes, larchitecture MVC de la librairie, le support des services, les plug-in, la gestion cache, sans oublier de finir par le dploiement. En 24 jours, vous pouvez acqurir les bonnes bases pour coder en Symfony. Le livre contient beaucoup de code et de conseils pour bien matriser la librairie. Seul regret : disponible uniquement en anglais. Limpression se fait la demande sur www.lulu.com. techniques utiliser. Les nombreux tableaux et schmas permettent une meilleure assimilation.

MTHODE Pragmatic Version Control


Difficult : *** Editeur : Pragmatic Bookshell Auteur : Travis Swicegood Prix : 34,95 $ US
Ce livre est le premier dune srie de trois pour aider le dveloppeur et les quipes tre plus efficaces, notamment en utilisant des mthodes de grands projets open source comme Mozilla, le noyau Linux, etc. qui mettent en oeuvre le contrle de version distribu ou DVCS. Ce premier volet sattache expliquer le contrle de version : son architecture, son fonctionnement, son usage. Bref tout ce quil est ncessaire de matriser pour dployer et utiliser au quotidien un tel environnement. Au final, un ouvrage plutt didactique et plaisant lire. En Anglais.

solide et approfondi. Judicieusement dcoup en grandes parties, on dbute par les fondamentaux : les API, l a f f i c h a g e , les symboles, linteractivit. Puis lauteur rappelle avec prcision quil faut penser objet avec ActionScript. Et pourtant, cest loin dtre une section rbarbative ! Thibault explique les grands principes de lobjet avec des exemples ActionScript pour bien comprendre comment cela passe dans le langage. Mais comme ActionScript fait aussi de lanimation, une importante section concerne le graphisme, le son, la 3D. Un incontournable pour tout flexeur et flasheur.

INFRASTRUCTURE Zimbra
Difficult : ** Editeur : ditions Eni Auteur : Sbastien Don Prix : 54
La messagerie dentreprise est une composante vitale en entreprise. Si Microsoft Exchange continue tre trs prsent, le projet open source Zimbra se pose en alternative srieuse pour lentreprise. Cet ouvrage prsente de manire claire son architecture, son administration, son dploiement et les mcanismes de synchronisation. Idal pour sauter le pas vers Zimbra.

TESTS Industrialiser le test fonctionnel


Difficult : *** Editeur : Dunod Auteur : collectif Prix : 33
On parle beaucoup des tests et notamment des tests fonctionnels. Pour rappel, le test fonctionnel sert vrifier les diffrents composants dune application selon le cahier des charges, les demandes du client. Et aujourdhui lindustrialisation de ces tests est devenue un vritable enjeu. Trois grandes parties dans cet ouvrage : les tapes du cycle de tests, les techniques mettre en uvre selon les tapes et enfin des exemples concrets de mise en uvre ! Tout est fait pour rendre comprhensible la dmarche dindustrialiser et les tapes et

DBA SQL Server 2008, guide de ladministrateur


Difficult : *** Editeur : Microsoft Press Auteur : William Stanek Prix : 45
Voici une des bibles autour de SQL Server 2008 et de son administration. Comme toujours dans cette collection, on trouve tout ce quil faut pour administrer au mieux sa base : les politiques de scurit, configuration et optimisation, gestion des serveurs, les outils disponibles, etc. Prcis et complet, un autre indispensable pour le DBA !

LANGAGE Pratique dActionScript 3


Difficult : *** Editeur : Pearson Auteur : Thibault Imbert Prix : 56 Reconnu pour sa matrise de Flex et dActionScript, Thibault nous livre un ouvrage

82

PROgrammez ! \\ Mai 2009

Amen change de peau pas dme.


Depuis quelques mois, Amen, lun des leaders franais des services Internet aux entreprises, fait partie du Groupe Dada, lun des leaders europens sur le march de lhbergement web et des noms de domaine. Lappartenance un Groupe aux ambitions mondiales a donn des ailes Amen : plus de services, plus de solutions. et toujours une coute attentive du client, renforce par les nouvelles infrastructures dont dispose maintenant Amen. Amen avec Dada, cest aujourdhui 1 400 000 domaines grs et 500 000 sites hbergs pour 450 000 entreprises clientes, une prsence dans 7 pays dEurope et 320 spcialistes tourns entirement vers la satisfaction client. Amen avec Dada, cest bien sr, la gestion paneuropenne de noms de domaine, des plateformes dhbergement de dernire

gnration, des solutions de-commerce aussi puissantes que faciles mettre en uvre. Mais cest dornavant galement une gamme doutils la pointe pour crer votre site en quelques clics ou pour gnrer vos newsletters, et vos campagnes demails marketing, ... Avec Dada, Amen prend sa nouvelle dimension autour de valeurs communes : innovation, fiabilit, simplicit, internationalisation,

convergence des services. Et une proccupation de tous les instants : faire de chaque client un client heureux

www.amen.fr

Dveloppez 10 fois plus vite

Nouvelle version

PLATEFORME PROFESSIONNELLE DE DVELOPPEMENT (AGL) Windows, .Net, Java Windows 98, 2000, NT, 2003, XP, Vista, 2008

*: WINDEV a t lu Langage le plus productif du march par les lecteurs de la revue Programmez!, octobre 2008

Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.

RUSSISSEZ TOUS VOS PROJETS AVEC LOUTIL DE DVELOPPEMENT LU LE PLUS PRODUCTIF*


est lenvironnement de dveloppement totalement intgr (IDE, ALM), intgralement en franais, rput pour sa puissance et sa facilit dutilisation. WINDEV 14 est livr complet: diteur danalyses (UML,...), RAD, patterns, lien avec toutes les bases de donnes (ODBC, OLE DB), Oracle, SQL Server, AS/400, Informix, DB2..., lien natif MySQL, PostgreSQL, base de donnes Client/Serveur HyperFileSQL gratuite incluse, Gnrateur dtats PDF, Codesbarres, Accs natif SAP R/3, Lotus Notes, Gestion de planning, Gestion des Exigences, L5G, SNMP, Bluetooth, TAPI, OPC, FTP, HTTP, Socket, Twain, API, DLL, domotique, liaisons srie et USB, dbogage distance, profiler, refactoring, gnre dapplications JAVA la demande, multilangue automatique, Gestionnaire de versions, Installateur 1-clic, etc... Les applications cres fonctionnent avec toutes les versions de Windows: 98, 2000, NT, 2003, XP, Vista, sous TSE et Citrix, sur eeePC...

WINDEV 14

VERSION EXPRESS GRATUITE


Tlchargez-la !

Vous aussi, dveloppez 10 fois plus vite... avec WINDEV 14.

Logiciel professionnel

UN CODE MULTI-PLATEFORME : Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, SmartPhone, Client riche ...

DEMANDEZ LE DOSSIER GRATUIT


252 pages + DVD + Version Express incluse + 112 Tmoignages. Tl: 04.67.032.032 ou 01.48.01.48.88 info@pcsoft.fr

Fournisseur Officiel de la Prparation Olympique

www.pcsoft.fr

Vous aimerez peut-être aussi