Vous êtes sur la page 1sur 84

PROGRAMMEZ !

www.programmez.com

mensuel n126 - janvier 2010

Base de donnes
Cr dit : (c )ist oc k.c om /G eo pa ul

Open Source

Mike Milinkovich Fondation Eclipse

MySQL mena par les forks ? PostgreSQL vs MySQL : comment choisir ? SQL Server 2008 : Matriser les index et adopter une gestion par rgles Objet vs Relationnel ami ou ennemi ?

Anthony Wasserman Universit Carnegie Mellon Jim Zemlin Fondation Linux

Trois gourous

se dvoilent

Tout savoir sur

al Studio 2010 Visu


Pas de rpit chez

Webmaster

T4, Axum :

Flex 4.0 Google dbarque GO


Le nouveau langage FXG Linterface devient dynamique

Les incroyables langages de Microsoft


Choisir son

Chrome OS Closure Tools


Shell
Matriser PowerShell 2

COLE INFORMATIQUE
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

Cloud
Utiliser Cloud Foundry

Java
Scala : le nouveau Java ?

Technique
Mettre en oeuvre Hudson

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

M 04319 - 126 - F: 5,95 E

Jean
Responsable du centre de donnes

Sophie
Directrice Technique

Pierre
Directeur Financier

Touchez du doigt une nouvelle efcacit qui na rien de virtuel.

Mettre en uvre une infrastructure virtualise, du Data Center au poste de travail est dsormais porte de main. Choisissez Windows Server2008 R2 avec Hyper-V, et vous pourrez vous passer de logiciels tiers aussi coteux que superus. Ajoutez-y SQL Server2008 Entreprise et vous voici libr de vos racks de serveurs sous-utiliss. Quant System Center, il vous donnera la touche nale pour une gestion de votre systme dinformation homogne et ce jusquau niveau applicatif. Rsultat ? Une architecture virtualise et ractive qui vous garantit un retour sur investissement optimal et une uidit sans gale de vos processus mtiers. Vous ne pouvez plus laisser passer une telle efcacit Pour dcouvrir ce que la virtualisation peut vous faire gagner en efcacit, rendez-vous sur : www.nouvelle-efcacite.fr

Microsoft France - RCS Nanterre B 327 733 184.

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

PRO grammez !
Le magazine du dveloppement

numro 126 - janvier 2010


6

sommaire\\

\\ actus
Lactualit en bref ..............................................................................6 Agenda ..............................................................................................11

\\ vnement
Trois gourous du Libre se dvoilent ......................................................12 Retour sur la PDC 2009 : le futur est pour demain................................16

\\ webmaster
Flex 4 et le skinning de composants dinterfaces riches ..........................18 18

\\ dossier

Bases de donnes :
choisir et optimiser
21 MySQL et ses forks, comment choisir ..................................................22 Gestion par rgles et le resource governor de SQL Server2008 ..............26 Fonctions avances de PostgreSQL et MySQL........................................30 Technique dindexation avance : les index couvrants ..............................36 Lopposition relationnel /objet est-elle toujours dactualit ......................38

\\ cahier spcial

Visual Studio 2010


Inside Visual Studio 2010 ..................................................................39 Dcouverte de Visual Studio 2010........................................................41

39

\\ carrire
Formations en soire : une exprience originale et motivante ............48 Comment choisir son cole ..................................................................50

50

\\ gros plan
Go, Chrome OS et Closure Tools : pas de rpit chez Google ....................55

\\ technique
Hudson, le serveur dintgration adopt par les grands groupes industriels........................................................60

\\ code
Cloud Foundry : aux fondations du cloud computing ................................63 PowerShell 2.0 : Windows au bout du Shell ..........................................66 Scala: le Java nouveau est arriv..........................................................69 Gnrez des documents sous Visual Studio avec le langage T4..........73 Axum, un langage pour la programmation concurrente et distribue sous.Net..................................................................78 55

\\ temps libre
Les livres du mois.........................................................................82
Rdaction : redaction@programmez.com Directeur de la Rdaction : Jean Kaminsky. Rdacteur en Chef : Franois Tonic - ftonic@programmez.com. Ont collabor ce numro : F. Mazu, C. Remy, L. Guillois, P. Davy. Experts : G.Renard, G. Belmas, M. Chaize, C.P. de Geyer, S. Combaudon, V. Bellet, L. Ait Ali, O. Caudron, L. Baumann, G. Rouchon, V. Labatut, M. Oppetit, G. Boissineau, N. Franois, B. Talmard, S. Saurel. Illustration couverture : istock.com/Geopaul. Publicit : Rgie publicitaire, K-Now sarl. Pour la publicit uniquement : Tl. : 01 41 77 16 03 - diff@programmez.com. Editeur : Go-02 sarl, 21 rue de Fcamp 75012 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

PROCHAIN NUMRO
Modlisation & Model Driven
Comment les nouvelles gnrations de modlisation aident-elles le dveloppeur au quotidien ? Dcouvrez les nouvelles tendances du Model Driven Microsoft en 2010
A l'occasion des TechDays 2010, le panorama et l'analyse des nouveauts Microsoft pour les dveloppeurs, le web, les bases de donnes, la bureautique, le cloud computing...

N127 Fvrier 2010, parution 30 janvier

dito\\

Plus fort que Nostradamus


hait ? Un modle de dveloppement unifi entre Android et ChromeOS, un support matriel bien plus large. Mais la grosse interrogation reste la connexion son cloud (donc internet). L, lutilisateur doit composer avec la qualit de son abonnement Internet et la disponibilit des services Google Et de tout cela, les responsables vitent soigneusement den discuter. Ne parlons pas des sujets qui fchent. Autre constat, impactant directement le dveloppeur, lvolution des langages, voire lapparition de nouveaux dialectes plus ou moins rgionaux . Nous avons dj eu loccasion den discuter ici mme. Et lternel dbat revient : faut-il enrichir un langage existant ou en crer un autre ? Nous tions, particulirement pour la programmation parallle, partisan de la cration mais dornavant, avouons que la prudence est de mise. Et les arguments de James Reinders (spcialiste parallle chez

Il est bien connu que la nature a horreur du vide et le monde de lincertitude. Or 2009 na t quune longue succession de questions. Laffaire la plus emblmatique concerne le rachat de Sun par Oracle, toujours suspendu la dcision europenne qui devrait intervenir fin janvier. Le sort de MySQL exacerbe les tensions, les scnarios hypothtiques. Cette turbulence naide pas MySQL, mme si la communaut se veut rassurante. Par contre, terme, cela peut aider les forks sortir de lombre ou encore aux concurrents ouverts reprendre des utilisateurs. Google a jou au chat et la souris une bonne partie de lanne 2009, mais depuis septembre dernier, cest une cascade dannonces : nouveaux langages et outils, nouveau systme, futur tlphone A croire que Google veut appliquer la vision de Microsoft : S + S, logiciels et services. Clairement, avec ChromeOS, Google veut concurrencer Windows, principalement sur le Netbook, et avec le futur Google Phone , Blackberry et iPhone. Mais il est dcevant, pour ne pas dire surprenant, que ChromeOS ne soit pas compatible avec Android, le systme mobile de Google. Cela oblige le dveloppeur crer une nouvelle branche de dveloppement. Et finalement, ChromeOS nest quun autre Linux, dpouill du superflu et avec une dose de cloud computing. Sur le papier lide est assez sduisante mais il est bien trop tt pour prdire quoi que ce soit. Notre sou-

Intel) sont intressants. Car finalement, il y a dj tant faire sur le paralllisme avec les langages existants, comme fournir des extensions communes afin de proposer un modle de programmation suffisamment indpendant des langages et des plates-formes. Si lindustrie russissait cette tape, le paralllisme aurait fait un grand pas vers le dveloppeur. Voil notre vu pour 2010. Toute lquipe de Programmez ! vous souhaite une bonne anne 2010, avec tout plein de 0 et de 1. Franois Tonic

Cest Nol ! 4 milliards deuros pour le numrique


A lheure o ce magazine part sous presse, les chiffres du Grand Emprunt viennent dtre annoncs. Nous ne connaissons pas tous les dtails, mais nous retenons ce cadeau de Nol pour linformatique et pour le logiciel. Reprenant la prconisation du rapport Jupp-Rocard, 4 milliards deuros sont attribus lIT : deux pour le dveloppement du trs haut dbit et deux pour le dveloppement d'usages et de contenus numriques innovants. Pour Investir dans la socit numrique ces deux milliards devront permettre de financer des projets partenariaux publicsprivs de recherche et de dmonstration visant la conception de logiciels, dusages et de contenus numriques innovants dans tous les domaines, en premier lieu dans les rseaux intelligents (lectriques et de transport), mais aussi dans le tltravail, la tlmdecine, le-sant, le-administration, le-ducation, le-justice, la numrisation des contenus culturels au besoin en sappuyant sur le dveloppement dinfrastructures partages (cloud computing, super-calculateurs). Un fonds ddi cet objectif, pourrait tre cr au sein de la nouvelle agence pour le numrique . Dautres fonds concerneront partiellement linformatique, au travers de la cration de ples de formation et de recherche de taille mondiale, et du financement des PME innovantes. Nous avons perdu la bataille mondiale de lindustrie, nous commenons nous donner les moyens pour gagner celle de lintelligence. Et pour dvelopper lindustrie de lintelligence. 2 milliards deuros, cela nquivaut qu 2 semaines et demi du CA annuel de Microsoft (60 milliards de dollars en 2008). A vous de le faire fructifier ! Jean Kaminsky
Lire les propositions du rapport Jupp Rocard : http://www.elysee.fr/documents/index.php?mode=view&lang=fr&cat_id=8&press_id=3109

actu \\ en bref
Zend dvoile Zend Studio 7.1. Cette version supporte dsormais le dveloppement orient tche, une synchronisation simple de serveur distant, le support des archives PHP Que du . bonheur pour les dveloppeurs PHP ! JetBrains, diteur doutils de dveloppement, a sorti la version finale de IntelliJ IDEA 9. Cette mouture amliore les performances, compatible Java EE 6, support de PHP de PHPUnit, de , Adobe AIR et de Flex. Bref, une excellente version ! Alfresco et SpringSource annoncent Spring Surf Extension. Il sagit dun framework de dveloppement pour crer du contenu riche bas sur Java. Projet conu par Alfresco, il passe dsormais en licence Apache. Le framewok permet dutiliser plusieurs librairies comme Web Scripts. Il utilise aussi une approche MVC (via Spring MVC). Inclut aussi des outils de dveloppements (Web Studio). 4D dvoile 4D v11 SQL Release 5. Cette version est dsormais compatible (officiellement) avec Windows 7 et MacOS X 10.6. Elle inclut aussi des modifications dans le langage avec de nouvelles commandes. Lexcution des applications 4D se voit amliore avec de nouvelles fonctions doptimisation (ex. : gestion de la mmoire cache). Google prpare son propre Smartphone. Rumeur depuis des mois, linformation a t confirme mi-dcembre. HTC en sera le constructeur. Pour le moment, rien de prcis sur le modle, son business model ou encore sa date de commercialisation. Il fonctionnera naturellement sous Android. Les constructeurs de mobiles ne sont sans doute pas presss de voir ce futur concurrent arriver

Multicore

Intel veut renforcer le dveloppement parallle I


ntel continue de miser plus que jamais sur la programmation parallle, le multicore et les outils permettant de simplifier le dveloppement parallle. Aujourdhui, il y a trs peu de code rellement optimis pour le multicore, cest--dire les applications massivement parallles capables dutiliser au mieux plusieurs processeurs et plusieurs curs simultanment dans le mme ordinateur. Pour cela, il faut duquer, convaincre les dveloppeurs de devenir de bons experts en programmation parallle, ce qui est loin dtre le cas ! Pour Intel, la premire tape fut franchie au printemps dernier avec la disponibilit de la gamme Parallel Studio, ddie la programmation parallle, la traque des bugs et loptimisation du code. Disponible pour les dveloppeurs C++ sous Visual Studio, la gamme a eu droit un premier service pack en dbut octobre. La principale nouveaut tant la prise en charge de Windows 7 ainsi que la possibilit de piloter Parallel Inspector en ligne de commande et quelques corrections de bugs. James Reinders, expert en paralllisme et responsable des outils parallles dIntel, de passage Paris dbut dcembre, nous a dvoil une partie de lagenda 2010 des outils Intel. Sur la gamme Parallel Studio, le fondeur sortira une nouvelle version pour supporter Visual Studio 2010 et les nouveauts qui iront avec (ex. : CCR, TPL, piles parallles de Microsoft). James se rjouit de linvestissement de Microsoft sur le paralllisme avec Visual Studio. Cela ne peut quaider ce type de dveloppement sim-

poser. Mais au-del de Windows, Intel va proposer de plus en plus de fonctions Windows de Parallel Studio aux outils Linux. Lobjectif est davoir le mme niveau, ou quasi, entre Windows et Linux. Cependant, James nous a prcis quaucune version des plug-in Parallel Studio nest prvue pour Eclipse ou NetBeans.

Le projet Ct
Lautre gros chantier est le projet Ct, ddi au paralllisme des donnes et sur la manire dadapter les donnes, leurs traitements dans un contexte parallle. Projet excitant et primordial dixit James, Ct tente de rpondre la problmatique des donnes, de leur traitement et manipulation dans un contexte parallle. Ct se prsente comme une extension au C++. Il doit permettre de traquer les bugs, les erreurs et de dcouvrir les ventuels goulets dtranglements. Car traiter des donnes en parallle savre dlicat pour garder une synchronisation entre les cores et surtout lintgration des informations. Une premire version bta est disponible depuis peu (annonce par James pour fin dcembre). Par contre aucune date prcise de

disponibilit finale nest encore annonce. Intel souhaite tout dabord stabiliser la technologie et avoir le retour des dveloppeurs. A la question : allez-vous crer un langage parallle spcialis , James Reinders rpond prudemment. Car pour notre expert, le plus important est de disposer des (mmes) extensions parallles dans les langages existants et de savoir les utiliser. Car qui dit nouveau langage, dit apprentissage et migration sur ce dit langage Par contre, les langages fonctionnels (F#, Erlang), constituent des approches intressantes mme sils ne sont pas trs populaires auprs des dveloppeurs. James sinterroge sur un usage plus intensif de ces langages. Ils possdent une bonne abstraction et leurs qualits ne sont plus dmontrer. Enfin si la premire gnration de multicoeur graphique, le projet Larabee, est purement et simplement annule pour passer directement ltape suivante, Intel continue cependant de fournir les outils aux dveloppeurs afin quils se prparent ds maintenant cette prochaine volution majeure des PC et des applications

PROgrammez ! \\ Janvier 2010

8, 9, 10 fvrier 2010 - Palais des Congrs de Paris


3 journes incontournables pour dcouvrir toutes les dernires innovations informatiques

Edition spciale lancements

et bien dautres...

En partenariat avec :
* Sur inscription en ligne
Microsoft France RCS Nanterre B327 733 184

PL ATEFORME PROFESSIONNELLE DE DVELOPPEMENT (AGL) Windows, .Net, Java Windows 7, 2000, NT, 2003, XP, Vista, 2008

document non contractuel. version 15 annonce * 15 requtes sur la version en cours de commercialisation, seule la communication est votre charge

a version 15 de WINDEV vous apporte des nouveauts irremplaables dans le domaine de la scurit et des performances.

Vos applications sont plus sres, plus rapides, plus compactes. Vos utilisateurs et clients apprcient immdiatement ces volutions.

DVELOPPEZ 10 FOIS PLUS VITE

les 555 Parmi uts : nouvea


N O U V E L L E V E R S I O N 15 A N N O N C E
jauge Champ agenda Champ ue ynamiq Audit d tatique Audit s ure) astruct LO (infr SI push Install nnes ulticolo Etats m tat lgal d chivage Ar rvices Webse utaire mmuna Doc co haud nce c aintena M eurs de serv Ferme es + rapid diteurs E Android es s phon Window nt nceme Rfre WL eauts 0 Nouv 0 1 a ts Jav ouveau 69 N ux ts Lin ouveau 6 1 8N SaaS s7 Window ...

Vos applications sont plus rapides et plus sres grce la version 15.

VOTRE CODE EST MULTI-PLATEFORMES: Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, SmartPhone, Client riche ...

DEMANDEZ LE DOSSIER GRATUIT


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

www.windev.fr
Fournisseur Officiel de la Prparation Olympique

VERSION EXPRESS GRATUITE


Tlchargez-la !

actu \\ en bref
Sun propose dsormais pour son Java Application Store la possibilit de payer les applications avec le systme scuris paypal. Cela concerne les applications allant de 1,99 200 dollars. Dans le mme temps, Sun en profite pour modifier linterface de lactuelle bta de la boutique en ligne Java. Egalement accessible pour les non-amricain. Le nouveau noyau Linux est disponible. Il sagit de la version 2.6.33. Elle propose un support natif dacclration 2D et un suppor t 3D encore en dveloppement. Elle intgre aussi le systme de fichier DRBD ddi la haute disponibilit, avec notamment la possibilit de rpliquer le contenu dun disque vers un autre travers le rseau ! Le projet Mono renforce sa compatibilit .Net en sortant la version 2.4.3. Cette mouture corrige de nombreux bugs. Il implmente une version open source de loutil MSBuild de Microsoft, xbuild. Autre bonne nouvelle, le compilateur C# de Mono est compatible avec C# 4, mme si ce dernier nest pas encore disponible par dfaut dans la pile Mono ! Blackberry renforce sa boutique App World en y proposant depuis mi-dcembre des thmes dinterface pour Blackberry. Ils sont conus depuis Blackberry Theme Studio 5.0, outil de cration de thme tlchargeable. Weelya a dvoil une nouvelle version de son Ajax Push Engine. La version 1.0 propose un modle technique respectueux des standards web (sans addition client), qui permet au serveur denvoyer les informations tous les utilisateurs ds quelles sont disponibles. Ainsi, ceux-ci ne sont plus ignorants des agissements du serveur, et peuvent attendre que les informations leur soient envoyes en temps rel.

Projet WebGL va-t-il bousculer lanimation sur le web ?


hronos Group a dvoil courant dcembre les premires spcifications autour de WebGL. Pour rappel, WebGL est une technologie web permettant, dans un navigateur web, sans rajout dextension, de jouer des animations 3D, dafficher des objets 3D ou encore dinteragir avec. WebGL supporte lacclration graphique, indispensable pour avoir une bonne fluidit des textures et animations. Pour pouvoir afficher ces objets graphiques, WebGL utilise le canvas apparu avec HTML 5. Nous nen sommes quau dbut du travail et des fonctionnalits. Il est difficile de savoir si cette technologie sera rapidement utilise par les dveloppeurs. Khronos espre une premire version aboutie pour la premire moiti de 2010. La premire spcification est intgre dans les nightly build de Firefox, Safari, Chrome et Opera, mme si ces versions restent instables et limplmentation plus ou moins complte. Dautre part, WebGL nest pas activ par

dfaut. Notons que la scurit constitue une partie non ngligeable du travail de Khronos, notamment sur les restrictions daccs aux ressources de la machine hte et quil doit disposer de mcanismes empchant les dnis de services. Autre point intressant, WebGL supporte le langage OpenGL ES Shading Language. Site officiel : http://khronos.org/webgl/wiki/Main_Page

Java EE 6 : certifi et disponible !


C
ertains diront enfin ! Car on attendait Java EE 6 depuis plusieurs mois. Mais au moins, contrairement aux versions Java prcdentes, Java EE 6 a reu immdiatement un soutien marqu dIBM, Oracle, Red Hat. Cette version introduit de nombreuses nouveauts, consolidations et amliorations. On peut tout dabord citer lintroduction des profils. Ils permettent de cibler des scnarios dapplications pour mieux coller aux marchs, aux secteurs mtiers. On dispose aussi dun profil trs lger ciblant spcifiquement les applications web. Lextensibilit de Java EE est un autre lment prsent avec JEE 6. Cela permettra de crer et dajouter des plug-in. Tout cela doit rendre plus souple larchitecture de Java EE et permettre une meilleure manags dans une application JSF. CDI tisse un pont entre une couche web dune plateforme JEE et une couche entreprise. Reste voir comment cela va tre concrtement mis en uvre. Autre point intressant, le Bean Validation (JSR 303). Il permet de valider, par exemple, des caractres saisis dans un champ avant que cette saisie ne soit traite dans lapplication. Ainsi le dveloppeur peut plus facilement vrifier et valider les saisies dans lensemble des couches de son application. Dans la foule, Sun a annonc la disponibilit de NetBeans 6.8, bien entendu compatible JEE 6 et de la version finale de Glassfish, en le proposant dans un bundle Eclipse. Pour en savoir plus : http://java.sun.com/javaee/

adaptation. La partie web services et technologies web a subi une nouvelle fois une grosse mise jour : Java API for RESTful Web Services, Contests and Dependency Injection (CDI) et enfin, la validation bean. CDI est un ensemble de composants JEE (session EJB, JSF) permettant dinjecter et dinteragir avec des vnements EJB ou JSF. Ainsi, il est possible de remplacer des beans dentreprise par des beans JSF

10

PROgrammez ! \\ Janvier 2010

actu \\ en bref

WinDev 15 : PC SOFT russit son tour de France 2009


C
omme chaque anne, PC SOFT parcourt la France pour montrer la nouvelle version de sa solution intgre : WinDev. La version 15 devrait tre disponible quand vous lirez ces lignes. Une pr-version tait disponible depuis la midcembre. Devant plusieurs centaines de personnes Paris, les responsables de PC SOFT ont dmontr durant plus de quatre heures les avantages et la simplicit de cette 15e version et comment WinDev rduit le temps de conception dune application desktop, mobile ou web. Pour clore la session, une dmo dune interface proche de Microsoft Natal a t ralise La mobilit est un des axes stratgiques pour lditeur, les entreprises ayant besoin dintgrer la mobilit dans leurs applications. Ce nest donc pas un hasard si Android, Windows Mobile et les crans tactiles sont supports. Il ne manque plus que le iPhone (dj prsent pour la par tie site web).

W4 dvoile sa nouvelle plate-forme LEONARDI. Il sagit dune solution complte dautomatisation de la production des interfaces homme-machine qui amliore le cycle

Lautre lment retenir de cette v15 concerne WebDev, la partie dveloppement web qui intgre des animations la Flash sans tre du Flash. On dispose de belles animations de pages, donglets, de champs tiroirs, etc. On peut bien entendu utiliser du code Ajax pour disposer de sites dynamiques. On dispose aussi des url rewriting, ce qui simplifie bien le travail du dveloppeur. PC SOFT suit aussi les dernires tendances en incluant la possibilit de crer des applications SaaS en cochant une simple option dans lenvironnement de travail Pour ladministration, on dispose dune console centralise do lon peut grer les utilisateurs,

les crer, les supprimer. On dispose dune API dauthentification SaaS assurant la connexion, lidentification (entreprise et utilisateur), la vrification de lIP la dure de , connexion maximale, etc. Toujours dans le monde web, le support de PHP a t renforc avec 45 nouvelles fonctions. Autre nouveaut importante, le support des nouveaux navigateurs (avec tests des sites) : Chrome, Opera et Safari. Encore une nouveaut bienvenue : la possibilit de dployer simplement des sites vers Free et OVH ! Sur une partie plus systme, WinDev 15 permet aujourdhui de gnrer des services Windows et Linux (sans interface).

de dveloppement. Cette version 4.4 intgre finement le projet de reporting BIRT, expose les services web et autorise de nouveaux composants. La partie outillage a elle aussi t amliore et renforce pour tirer parti des nouveauts. Novell veut conqurir de nouveaux marchs en 2010. Lun dentre eux concerne les solutions de gestion intelligente des environnements systme. Novell y intgre la gestion des identits et des ressources. Cette approche rpond aux problmatiques des entreprises qui souhaitent rduire les risques lis l'htrognit des systmes, tout en garantissant leurs utilisateurs un accs scuris et conforme aux services dont ils ont besoin. Sodifrance lance FASTtoFlex. Il sagit dune solution de transformation des applications client-serveur en application Flex /

Livre vnement Richard Stallman et la rvolution des logiciels libres


Le 21 janvier prochain sortira en librairie un livre vnement sur Richard Stallman, figure emblmatique du Libre depuis les origines. Projet l'initiative de Framasoft, cette biographie autorise, revue et enrichie par lui-mme, donne un clairage nouveau sur ce personnage intgre aux allures de prophte. Une rfrence indispensable pour qui veut comprendre lorigine et les volutions de cette lame de fond quest le logiciel libre. MARS 2010 Du 16 mars 2010 au 18 mars 2010, Paris Expo, Porte de Versailles Solutions Linux / Open Source 2010 Organis par Tarsus France, ce salon demeure le carrefour d'changes incontournables des acteurs du logiciel libre. http://www.solutionslinux.fr

agenda \\
JANVIER Du 18 au 19 janvier 2010, Paris 17, Palais des Congrs iLearning Forum Ltd, nouvelle dition du salon de rfrence europen le plus important en France dans le domaine des technologies au service de lapprentissage. http://www.ilearningforum.org/fr/index.php

FEVRIER Du 8 au 10 fvrier, Paris 17, Palais des Congrs, TechDays 2010. Le rendez-vous incontournable des dveloppeurs, dcideurs et professionnels de linformatique. Trois jours pour se former sur toutes les nouveauts Microsoft et dcouvrir les tendances du march http://www.microsoft.com/france/mstechDays/

Air. Pour la modernisation d'architectures, F.A.S.T. permet dautomatiser lensemble des processus, depuis la rtro-modlisation des applications existantes jusqu la gnration massive du code final des applications dans la technologie cible. F.A.S.T. sappuie sur une mthodologie et une plateforme logicielle outille pour raliser la transformation dans des dlais plus rapides et avec un niveau de scurit important.

Janvier 2010 \\ PROgrammez !

11

vnements \\ interviews

Trois gourous du Libre se dvoilent !


Dans le cadre de l'Open World Forum, qui s'est droul Paris dbut octobre, nous avons rencontr plusieurs figures marquantes du logiciel libre et du dveloppement logiciel : Mike Milinkovich (Fondation Eclipse), Jim Zemlin (Linux Foundation) et Anthony Wasserman, qui est la tte du centre d'investigation sur l'Open Source de l'Universit Carnegie Mellon.
Ralis par Philippe Davy

Anthony Wasserman
Directeur excutif du Centre de recherche sur l'Open Source, Universit Carnegie Mellon
Tour tour professeur, diteur et chercheur, Anthony Wasserman est l'un des pionniers des outils de dveloppement graphiques et le concepteur de StP. Il dirige dsormais le COSI (Center for Open Source Investigation) de Carnegie Mellon University. Cest galement l'un des fondateurs du consortium Open Source for America, qui vise dvelopper l'usage des logiciels libres au sein de l'administration amricaine. P ! : A quel moment avez-vous dcouvert les logiciels libres ? Anthony Wasserman : J'tais San Francisco l'poque du dveloppement de Berkeley Unix. Nous avions conu des systmes interactifs, assez nouveaux pour l'poque, qui n'taient pas destins des informaticiens mais des personnes du secteur de la sant. C'tait en 1980. Ces outils ont t distribus sous licence BSD, et ont commenc rencontrer un certain succs auprs des utilisateurs. Le problme tait de trouver la bonne structure pour les supporter. Alors j'ai fond IDE (Interactive Development Environments) en 1984 pour diter Software Through Pictures (StP) qui tait le premier outil graphique de modlisation multi-utilisateur. Nous avons utilis du code sous licence BSD au sein d'un produit propritaire. Nous tions parmi les tous premiers le faire, car part Sun je ne vois personne dautre. IDE s'est dvelopp, et la compagnie a t rachete. Une partie du code de StP se trouve prsent au sein d'OpenAmeos, le projet libre d'outil de modlisation UML issu d'Aonix, qui avait rachet IDE au dbut des annes 90. P ! : Quelles sont les activits du centre de recherche ? A. W. : La recherche du COSI est concentre sur l'valuation, l'adoption et l'usage des logiciels libres, avec pour objectif secondaire leur commercialisation. Les projets rcents incluent le Business Readiness Rating, (un cadre pour l'valuation des projets et des logiciels libres), qui traitera des notions de tests et de fiabilit ncessaires pour les entreprises. Il y a galement le Software Project Governance Framework, qui permet d'valuer l'ouverture des projets open source. Le COSI mne actuellement une enqute sur les dveloppeurs d'applications mobiles, ainsi qu'une tude des activits de rseau social au sein des projets libres. Par ailleurs, je dirige un sminaire de formation sur le management de projets logiciels. Le but est de permettre a des dveloppeurs dj actifs de passer la prochaine tape dans leur carrire, en prenant en compte la dimension business aussi bien que la partie technique, de faon leur donner les moyens de lancer leur affaire. On tudie en dtail la manire dont le logiciel est distribu, qu'il soit propritaire, hberg ou open source, ou encore une combinaison des trois. Je dirige galement un sminaire sur l'Open Source. loppait un serveur d'applications Java. Ma mission consistait ouvrir leur centre de dveloppement sur la Cte Ouest. L nous avons conu un toolkit open source, Total eMobile, destin permettre aux applications fonctionnant sur les tlphones portables d'changer avec le serveur d'applications. C'tait en 2000, et un peu en avance sur son temps. Ensuite HP a rachet Bluestone, et ils ne savaient pas vraiment quoi faire de nous. Alors, je suis parti, et j'ai t contact par Carnegie Mellon, qui voulait ouvrir un centre de recherche sur la Cte Ouest. C'est trs gratifiant. La notion de libert est trs importante dans le monde acadmique. Les dveloppeurs dans ce domaine s'attendent ce que leurs productions soient librement accessibles et utilisables. Cela tranche avec les habitudes de la publication scientifique, o toutes les revues sont propritaires. C'est la prochaine bataille, la publication libre !
D.R.

"

Dans le monde acadmique, ceux qui dveloppent du logiciel s'attendent ce qu'il soit librement accessible.

P ! : Comment en tes-vous arriv diriger le COSI ? A. W. : Aprs le rachat de IDE, je me suis investi dans le boom "dot com" San Francisco, une trs bonne faon d'apprendre JEE. Puis j'ai rejoint Bluestone Software, qui dve-

P ! : A quel moment avez vous t convaincu de la viabilit du modle Open Source ? A. W. : Tout a dmarr en 1998, avec l'Open Source Definition. Bien sr, d'autres avaient dj prouv la viabilit conomique du modle avant cela, mais le modle a vritablement permis la relance aprs l'clatement de la bulle Internet. Pendant la bulle, il y avait beaucoup d'argent disponible, on achetait des applications Oracle et des serveurs Sun, c'tait facile. Mais quand l'argent a fait dfaut, ce sont les PC et les logiciels libres qui on connu un vrai succs.

12

PROgrammez ! \\ Janvier 2010

vnements \\ interviews

Jim Zemlin
Directeur excutif de la Fondation Linux
Issue de la fusion de l'Open Source Development Labs et du Free Standards Group, la Fondation Linux s'est donne pour tche la promotion de l'OS libre, sa protection et sa standardisation. Elle est dirige par Jim Zemlin depuis la fusion en 2007.
Programmez ! : Comment s'est constitue la Fondation Linux et quel est son rle ? Jim Zemlin : La Fondation est le rsultat de la fusion du Free Standards Group et de l'OSDL. Sparment, les deux organisations sans but lucratif partageaient le mme objectif, acclrer l'adoption de Linux, et nous avions dj travaill ensemble. Il y a eu une priode o nous nous sommes demands comment travailler en commun plus efficacement, et en 2007, compte tenu du rythme d'adoption de Linux, il a t dcid de les fusionner. Au dpart, il s'agit de fournir une base de dveloppement neutre pour Linux, l'cart des contraintes court terme imposes par le march, la fois pour la communaut des utilisateurs et pour les entreprises qui l'utilisent commercialement. Nous employons les principaux dveloppeurs du noyau Linux, dont Linus Torvalds. Par ailleurs, nous fournissons une base lgale importante pour protger Linux sur le plan juridique, et nous coordonnons les travaux sur sa standardisation et sur les amliorations lui apporter, avec des projets comme Desktop Linux pour le poste de travail ou Carrier Grade Linux, trs haute disponibilit pour les oprateurs rseaux. La liste des membres comprend des gants tels qu'HP IBM, , Intel, Oracle ou encore Google, mais aussi de nombreuses socits plus petites, et des universits affilies. P ! : Comment tes-vous venu au logiciel libre ? J. Z. : J'ai grandi au milieu d'ordinateurs. Mon grand-pre tait programmeur et l'un des fondateurs de Cray Research, le pionnier des supercalculateurs. Mon pre tait programmeur, mes frres le sont aussi. Quand nous tions petits, il y avait une rgle simple: nous avions le droit de jouer sur l'ordinateur pendant dix minutes, mais il fallait programmer pendant une heure. Ma premire machine fut un Tandy, nous avons eu des Atari, des Apple. Je me suis investi dans le logiciel libre il y a environ 9 ans. Je travaillais dans une socit, Corio, dont l'activit consistait hberger des progiciels tels que PeopleSoft. Lorsque nous avons dcid de nous pritaires. Comment cela va-t-il voluer selon vous ? J. Z. : La question est plutt "qui absorbe qui ?" Je ne crois pas que l'on puisse rduire l'quation un camp contre l'autre. Quiconque produit du logiciel, du matriel informatique, des solutions techniques, dpend du logiciel libre. Si vous regardez ce smartphone dun constructeur de renom, il est propritaire, mais rempli de logiciels open source. Il n'est plus possible de raliser un systme un tant soit peu sophistiqu sans recourir au logiciel libre. Le secteur entier dpend de l'open source. Les apports du logiciel libre sont l'efficacit, la stabilit, l'change, le fait que quelqu'un va penser un dtail ou une fonction laquelle vous n'auriez pas song vousmme. Linux est un bon exemple : en gnral, les entreprises ne prennent pas Linux pour en faire leur propre version qu'elles devront supporter ad vitam aeternam. On n'a aucun des avantages du libre de cette faon. Manifestement des entreprises gagnent de l'argent avec le libre, en vendant des services associs. IBM gagne beaucoup d'argent avec, Intel galement, de mme que Google, mme si c'est de manire indirecte. Je vis dans la Silicon Valley et tout le monde est d'accord pour dire que le modle avec de fortes marges sur du logiciel propritaire, comme Microsoft, cest fini. MySQL, SpringSource, Xen, Jboss, SleepyCat ont t valus bien au-del de leur valeur comptable, et les financiers sont constamment la recherche de nouveaux investissements. Je le sais parce qu'ils me demandent en permanence sur quoi investir.

"

Aujourd'hui, quiconque produit du logiciel ou du matriel dpend du logiciel libre

introduire en Bourse, notre grande inquitude tait que nous n'tions pas propritaires des logiciels que nous hbergions. Avec des logiciels libres, cela aurait t bien plus facile. Aprs l'introduction en Bourse, j'ai quitt la socit et travaill dans une start-up qui proposait des services autour du serveur Apache. Et puis j'ai eu la possibilit de participer la dfinition de la plate-forme LSB (Linux Standard Base) au sein du Free Standards Group, un projet novateur. P ! : Le logiciel libre se rpand, et en mme temps, de nombreux projets sont absorbs par des acteurs pro-

Janvier 2010 \\ PROgrammez !

13

vnements \\ interviews

Mike Milinkovich
Directeur excutif de la Fondation Eclipse
A l'origine en 2001, il s'agissait pour IBM de placer ses outils de dveloppement Java sous la bannire Open Source. Mais depuis 2004, le projet Eclipse est devenu une fondation regroupant 160 socits membres et plus de 230 projets, l'une des plus importantes communauts sur la plante. Et, au del de Java, ces projets concernent dsormais C++ ou encore PHP dans un large ventail de domaines. Mike Milinkovich , dirige la Fondation Eclipse depuis sa cration.
Programmez ! : parmi toutes les grandes communauts libres, comment caractriseriez-vous Eclipse ? Mike Milinkovich : L'une des particularits d'Eclipse est que le processus est centr sur l'adoption commerciale. Pour amliorer cela, nous organisons chaque anne un 'train de versions", c'est--dire un grand nombre de projets publis le mme jour, tests pour garantir que ces versions fonctionnent bien ensemble. En juin dernier, nous avons publi 37 projets, soit environ 20 millions de lignes de code. Cela fait six ans que nous sortons nos versions l'heure dite, au jour prs. Cette publication a lieu le dernier jeudi de juin, chaque anne. Ce ct prdictible est ce qui caractrise Eclipse, parce que des entreprises comptent sur ces produits pour fonctionner, savent qu'elles peuvent tabler sur des dlais respects. Et cela renforce leur confiance. Si l'on se place dans le contexte d'origine, initi par IBM, cela a entran d'importants changements culturels. Garantir l'indpendance vis vis d'un acteur est le principal objectif de la Fondation, et la partie la plus intressante de notre travail. rien compris du tout. Comment gagne-t-on sa vie avec du libre ? Pourquoi mettre un logiciel sous licence libre ? C'tait dans les annes 1994, 1995. Par la suite dans une autre activit, je me suis trouv en comptition avec l'Open Source, puisque je travaillais pour Toplink, le logiciel de mapping objet/relationnel, en concurrence avec le projet Hibernate. J'ai observ leurs parts de march s'roder dans cette comptition, et il faut avouer que j'tais un peu frustr face au ct inexorable de cette rosion. Dans mon nouveau travail, j'ai en quelque sorte rendu les armes et je me suis associ au mouvement. Je suis devenu compltement convaincu que l'open source reprsentait le futur de la production de logiciels. Quand les chercheurs expliquent qu'un tiers de l'argent dpens pour le logiciel est dilapid, je pense que ces statistiques sont vraies, c'est un tel gchis de talent, d'avoir toutes ces nombreuses socits rinventant la roue en permanence. P ! : Mais la rutilisation n'tait-elle pas dj un sujet de rflexion central avant l'mergence du logiciel libre ? M. M. : Bien sr, mais l'poque tout le monde, moi y compris, croyait qu'il s'agissait d'un problme technique. Nous tions des ingnieurs sans perspectives, car il ne s'agit pas d'un problme technique, mais bien d'une question de licence de gouvernance, de processus de dveloppement. Toutes ces questions doivent tre traites galement, et l'open source fait un excellent travail l-dessus. Il ne s'agit pas de technologie, mais de coordonner de multiples socits de faon ce qu'elles construisent quelque chose en commun, de grer l'ensemble des questions lies la proprit intellectuelle, aux licences, etc. Comme Eclipse, les autres communauts comme la fondation Apache, ou Linux ont toutes les mmes problmes grer. Chacun sa manire, mais il sagit toujours du mme problme. P ! : Comment voyez-vous l'avenir du logiciel libre ? M. M. : On ne peut qu'tre optimiste quand Microsoft cre une fondation Open Source. Mais, plus srieusement, la tendance est irrversible. Les utilisateurs ne sont plus enclins payer des licences hors de prix. L'ouverture des communauts doit toutefois imprativement tre prserve. Des communauts comme Apache, Eclipse, Mozilla ou encore OW2 sont vritablement le cur du mouvement Open Source. Il faut se mfier des communauts fermes, qui dpendent d'un seul acteur possdant tous les droits. Et cet acteur est la proprit d'investisseurs dont le but dans la vie n'est pas d'tre gentil avec la communaut. A l'inverse, nous sommes dans une structure sans but lucratif, et nous pensons tre dans une bien meilleure position pour conserver l'quilibre entre les besoins de la communaut et ceux de l'cosystme commercial.

D.R.

"

Depuis six ans, nous publions nos versions l'heure dite, au jour prs.

P ! : Personnellement, comment en tes vous venu au logiciel libre ? M. M. : La premire fois que j'ai entendu parler du logiciel libre, je n'y ai

14

PROgrammez ! \\ Janvier 2010

Lors d'une raction lectrochimique qui a anim les cellules dormantes d un uf trs puissant, Gort a clos. Dot de pouvoirs spciaux et de la capacit d'insufer aux applications ordinaires des interfaces utilisateurs extrmement fonctionnelles, dune grande facilit d'utilisation et possdant le "facteur Wow!", Gort conoit des Killer Apps. Allez sur infragistics.com/killerapps pour dcouvrir comment commencer crer vos propres Killer Apps.
Infragistics Ventes France 800 231 8588 Infragistics Europe Ventes +44 (0) 800 298 9055 Infragistics India +91-80-6785-1111
Copyright 1996-2009 Infragistics, Inc. All rights reserved. Infragistics and the Infragistics logo are registered trademarks of Infragistics, Inc.

vnements \\ 2010

Retour sur la PDC 2009 : le futur est pour demain


Il y a maintenant un mois, sest tenue Los Angeles la Microsoft Professional Developer Conference (PDC). Au travers de ces 3 jours et des centaines de sessions techniques, Microsoft a dvoil sa stratgie technologique mais aussi un contenu permettant ceux qui y ont assist de repartir avec un vritable bagage technologique. Les keynotes (sessions plnires) sont donnes loccasion des grandes annonces mais les sessions techniques et les activits annexes (stands, rencontres, etc.) sont souvent une mine dinformations quil ne faut pas ngliger. Morceaux choisis
Windows Azure : les petits dtails passs inaperus mais vitaux !
Windows Azure XDrive, a vous parle ? Il sagit de la possibilit de simuler un volume NTFS partir dun Blob Azure sous-jacent. Une annonce qui peut se rvler cruciale pour dcider ou non de migrer des applications existantes utilisant une persistance des donnes classiques vers Windows Azure et qui est pourtant passe quasiment inaperue ! Toujours au niveau du storage dAzure, connaissez-vous la diffrence entre un block blob et un page blob ? Le premier est le blob que lon connait depuis la PDC 2008 tandis que le second est un nouveau type de blob introduit avec la nouvelle CTP de Windows Azure. Une des principales diffrences rside dans la taille maximale de stockage (200 Go pour le block blob contre 1 To pour le page blob). Le snapshot dun blob, qui permet den conserver diffrentes versions, et le Content Delivery Network, sorte de geo-caching de blob, sont aussi des annonces annexes de la PDC. Si vous voulez encore plus de nouveauts sur lAzure Storage, regardez donc la session Windows Azure Blob and Drive Deep Dive (http://microsoftpdc.com/Sessions/SVC14) disponible en ligne. softpdc.com/Sessions/SVC50) nous a offert plusieurs dmonstrations sur lhbergement dune application tournant la fois sur le couple ApacheTomcat et sur la machine virtuelle Java. Mme si lintgration de Java nest pas aussi pousse et native que celle de .NET, il y a tout de mme un effort notable dinteroprabilit de la part de Microsoft et de ses partenaires : mise disposition dune API Java pour manipuler lAzure Storage, un Solution Accelerator pour faciliter le dploiement de Tomcat, etc. De vritables scnarios de production sont maintenant envisageables ! Une session voir durgence si le sujet vous intresse. pement, surtout quand la chane complte de dveloppement est intgre et fonctionne automatiquement. Les speakers de la session Automating Done Done in Team Workflows with VS Ultimate 2010 and TFS 2010 (http://microsoftpdc.com/ Sessions/P09-02) proposent de monter une chane complte doutillage base sur la suite Visual Studio ALM en moins dune heure : Build automatique avec le nouveau Team Build reposant sur Workflow Foundation Intgration continue avec les Gated Checkins (publication automatique du code seulement aprs russite de la compilation et des tests unitaires) Tests dinterface utilisateur (Coded UI Tests) pour assurer les tests fonctionnels mais aussi la nonrgression lors du dveloppement Mise en place des environnements de test la demande grce au module Team Lab Management. Ce

Visual Studio 2010 Ultimate et TFS 2010


Ils arrivent bientt (vers mars 2010) et noccupent donc pas le devant de la scne : le couple VS 2010 Ultimate et TFS 2010 offrent de belles perspectives pour les quipes de dvelop-

Windows Azure : du .NET et bien au-del


Java dans Azure ? Oui, et cela marche ! Nous lavons vu fonctionner ! La session Developing Java Application With Windows Azure (http://micro-

16

PROgrammez ! \\ Janvier 2010

vnements \\ 2010
dernier composant permet de construire un ou plusieurs environnements virtuels afin dy dployer et excuter les diffrents tests. Les usines logicielles deviennent de plus en plus concrtes et compltes avec cette nouvelle version de lIDE de Microsoft. La RTM nous offrira sans doute encore plus de possibilits que ce que lon peut dj voir ici dans cette session. droits plus levs lui permettant daccder par exemple des rpertoires et fichiers locaux Linterop COM : Gestion de fichiers Excel par exemple La barre de notification pour Silverlight Out of Browser (Toast) la AIR Le TextTrimming permettant enfin dafficher du texte lisible dans Silverlight La gestion du text RTL permettant maintenant dafficher votre texte de droite gauche Le ViewBox control dj connu des utilisateurs des Toolkits La gestion du H.264 PlayReady dans le cadre des DRM Le DependencyObject Binding Ou encore le support de Google Chrome Retrouvez lensemble des nouveauts de Silverlight 4 depuis ladresse suivante : http://www.silverlight.net/getstarted/silverlight-4-beta Aprs avoir parcouru les nouveauts mentionnes ci-dessus, force sera de constater la stratgie mise en uvre par Microsoft mettant disposition de tout un chacun lensemble des outils ncessaires crer la nouvelle gnration dapplications sur la plateforme Software + Services (avec Windows Azure) tant annonce et prsente par Microsoft au-cours de ces dernires annes !! Ces nouveauts de Silverlight 4 apportent aux dveloppeurs la possibilit de crer des applications capables de fonctionner aussi bien en mode online que offline sans changement de technologies RIA/RDA. Souvenez-vous en dfinitive de la prsentation des offices web applications lors de la PDC 2008, le temps est-il maintenant venu pour les diteurs de logiciels de sintresser plus fortement cette nouvelle gnration dapplications ? La question mrite dtre plus que souleve et prise en compte ! En attendant la confrence web du Microsoft Mix 2010 qui devrait dvoiler la version mobile de Silverlight constater que ceux-ci comportent de nombreuses volutions majeures ! Effectivement, lune des avances tant que ce nouveau type de bloc dhbergement de nos futurs data center, dit de 4e gnration, possdera une capacit modulaire et dvolution permanente de par la construction progressive par ajout de conteneurs. Cette nouvelle stratgie de constitution des centres dhbergement de type nuages (Cloud) porte le nom de PAC (Pre-Assembled Components), cette stratgie devra permettre ainsi Microsoft doptimiser les cots de construction de ceux-ci et surtout lvolution pragmatique et en cohrence avec les besoins du march. Chaque conteneur contenant 455 units et le tout est aliment par du 420 Volts (en mode plug & play) ! Ces blocs dhbergement (conteneurs) de 4e gnration semblent tre clairement optimiss pour une utilisation en extrieur avec une conception base sur lair frais, free cooling , plutt que sur une climatisation non conforme avec les orientations Green-IT. Le tout tant bas sur une exploitation de leau dverse par petites quantits et gestion de lair ambiante permettant ainsi la stabilisation de la temprature entre 20 et 25 degrs. Ces conteneurs devraient tre dploys dans les installations Windows Azure de Chicago, San Antonio, Dublin, Amsterdam, Singapour et Hong Kong. Chicago devant accueillir terme 112 conteneurs d'une contenance totale de 224 000 serveurs. Microsoft annonce ainsi avec cette 4e gnration vouloir rduire ses investissements de 20 40 % et ses dlais de dploiement de centre de donnes de 18 mois moins de 6 mois.

Silverlight 4 : disponibilit de la bta 1


Lune des annonces phares de cette PDC 2009 fut sans aucun doute celle de Silverlight 4.0 Bta qui apporte un lot de nouvelles fonctionnalits non ngligeables tendant rompre de plus en plus la frontire entre le RIA et RDA ! Les nouveauts qui seront ainsi apportes Silverligth 4 ont t travailles sur 3 axes majeurs : Media , Business Applications et Beyond the Browser ! Constatez par vous-mme au travers dune liste non exhaustive de ces nouvelles fonctionnalits : Le designer XAML Silverlight qui fait sa rapparition au sein de Visual Studio 2010 La mise disposition dune API dimpression permettant dimprimer des crans Silverlight La gestion du clic droit ainsi que du menu contextuel Laccs non ngligeable aux Webcams et Micros permettant dtendre de manire radicale les usages de la technologie Silverlight 4 dans le domaine des rseaux sociaux. La gestion du scroll de la souris (MouseWheel) Le contrle de saisie de texte riche (RichTextArea) qui tait plus quattendu Larrive de lICommand sur ButtonBase et lHyperlink Le gestionnaire de copier / coller (Clipboard) Le WebBrowserControl permettant de charger du HTML au sein de Silverlight imaginez charger vos applications flash terme au sein de SL4. La mise en uvre dune nouvelle fonctionnalit permettant Silverlight Out Of Browser davoir des

Vivement 2010 !
2009 est lanne de la confirmation pour Microsoft : cette PDC naura pas vu de grosses annonces comme en 2008 mais plein de nouveauts cohrentes et en phase avec la stratgie amorce il y a un an. En conclusion : vivement 2010 ! Par nos envoys spciaux Grgory Renard (alias Rdo) et Guillaume Belmas, Wygwam.

Lvolution des conteneurs cloud Microsoft


Microsoft a galement dvoil la prochaine gnration des conteneurs Windows Azure, et force est de

Janvier 2010 \\ PROgrammez !

17

webmaster \\ flex

dinterfaces riches

Flex 4 et le skinning de composants


Flex 4 est en bta depuis plusieurs mois. Les principaux changements par rapport la version 3 sont ns des changes entre Adobe et la communaut. Ils portent principalement sur une nouvelle architecture des composants et leur skinning. Lobjectif de Flex 4 est de maintenir la compatibilit avec les dveloppements Flex 3, cependant la nouvelle architecture de composants de Flex 4 reprsente clairement le futur du framework.
remire diffrence de taille, les applications Flex 4 sont compiles pour tre excutes par la version 10 du Flash Player. En Septembre 2009, plus de 93% des ordinateurs ont dj install la version 10. On peut donc penser que lorsque le nouveau framework sortira au printemps 2010, la quasi-totalit des ordinateurs seront prts excuter des RIA Flex 4. Quelques nouveaux tags permettent de mieux structurer son code MXML. Le tag <fx :Declarations> permet de dfinir une zone de dclaration dlments non visuels de lapplication. Cest dans celui-ci que lon dclare dsormais les RemoteObjets, ou les Web Services utiliss par linterface. Le tag <fx :Private> stocke de linformation qui sera ignore par le compilateur comme les informations sur le dveloppeur ou sur la version de lapplication. Le nouvel outil de Design interactif Flash catalyst utilise cette zone pour stocker de linformation utile pour optimiser le workflow entre le designer et le dveloppeur. Le tag <fx :Library> est utilis pour stocker des lments graphiques qui ne seront instancis qu leur utilisation.

Vous pouvez crer vos propres classes de layout. Cet exemple montre comment crer un Layout circulaire. Les composants safficheront en suivant le contour dun cercle. package { import mx.core.ILayoutElement; import spark.layouts.supportClasses.LayoutBase; public class CircularLayout extends LayoutBase { override public function updateDisplayList(w:Number, h:Number):void { super.updateDisplayList(w, h); if (!target) return; var layoutElement:ILayoutElement; var count:uint = target.numElements; var angle : Number = 360/count; var radius : Number = Math.min( target.width/2, target .height/2 ) - 25; var w2 : Number = target.width/2; var h2 : Number = target.height/2; for (var i:int = 0; i < count; i++) { layoutElement = target.getElementAt(i); if (!layoutElement || !layoutElement.includeInLayout) continue; var radAngle : Number = (angle * i) * (Math.PI / 180) ; var _x : Number = Math.sin( radAngle ); var _y : Number = - Math.cos( radAngle ); layoutElement.setLayoutBoundsPosition( w2 + (_x * radius) - 25, h2 + (_y * radius) - 10 ); }

Layout
Dans Flex 3, le dveloppeur agence des composants en fonction du container. Le Canvas permet de placer des lments en coordonnes (x,y), le container VBox pour enchaner verticalement les composants et HBox pour une mise en forme horizontale. Le nouveau tag layout de Flex 3 propose ces trois agencements sans tenir compte du composant pre. Cela donne un contrle total de lagencement des composants enfants dune application. Autre avantage, un layout peut tre dfini, modifi ou supprim au runtime pour un composant. Dsormais, pour facilement afficher verticalement deux boutons, on utilisera cette syntaxe : <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo"> <s:layout> <s:VerticalLayout/> </s:layout> <s:Button label="button one"/> <s:Button label="button two"/> </s:Application>

18

PROgrammez ! \\ Janvier 2010

webmaster \\ flex
} } } Pour lutiliser dans une application, il suffit de linstancier avec le tag layout : <s:layout> <local:CircularLayout /> </s:layout> <s:Group verticalCenter="0" horizontalCenter="0"> <s:Path data="M 69.054 37.607 L 0.5 37.607 L 21.884 0.5 L 90.437 0.5 L 69.054 37.607 Z" winding="nonZero" x="0" y="0"> <s:fill> <s:LinearGradient rotation="90" scaleX="17.9275" x="45. 834" y="14.022"> <s:GradientEntry color="0xFF2400" ratio="0"/> <s:GradientEntry color="0xD01E00" ratio="0.993865"/> </s:LinearGradient> </s:fill> <s:stroke> <s:SolidColorStroke caps="none" color="0xB50000" joints ="miter" miterLimit="4" scaleMode="normal" weight="1"/> </s:stroke> </s:Path> <s:RichText color="0xFFFFFF" fontFamily="Arial Black" font Size="21" kerning="on" lineHeight="120%" whiteSpaceCollapse= "preserve" x="22" y="11" > <s:content><s:p whiteSpaceCollapse="collapse"><s:span >PRO< /s:span></s:p></s:content> </s:RichText> </s:Group> </s:Application> Rsultat : Bien que la syntaxe reste trs proche de celle de Flex 3, quelques nouveaux composants apparaissent. Lespace de nom s correspondant au nouveau modle de composant baptis Spark. Le container Group est llment le plus simple pour encapsuler des lments graphiques. Des primitives graphiques comme Rect, Circle ou ici Path sont accessibles pour dessiner des formes en FXG (les spcifications sont en ligne sur opensource.adobe.com). Pour convertir cette forme en composant (un bouton dans lexemple), il suffit de transformer cette description graphique en classe de skin, puis dassocier cette skin un composant bouton. Cette nouvelle architecture autorise la sparation de la vue et des comportements au sein mme de la dfinition dun composant. Cette approche tait impossible en Flex 3 et fait toute la richesse de la nouvelle version du framework. Pour transformer cette description en classe de skin, il suffit de rajouter une dclaration de quatre tats propres au composant Button (up, over, down et disabled). La classe de skin buttonSkin.mxml : <?xml version="1.0" encoding="utf-8"?> <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300"> <s:states> <s:State name="up" /> <s:State name="over" /> <s:State name="down" /> <s:State name="disabled" /> </s:states> <?xml version="1.0" encoding="utf-8"?> <s:Application>

La gestion des tats


La gestion des tats, ou states, a grandement t revue et amliore avec Flex 4. Dans Flex 3, les states dcrivent comment des lments visuels doivent tre ajouts ou supprims de la couche visuelle, en modifiant des styles, des proprits et des vnements. Ces tats sont trs simples grer avec Flex Builder, car visuellement, il suffit dagencer les vues et le dveloppeur peut voir les diffrences en temps rel. Par contre le code gnr est assez illisible et difficile maintenir. Avec Flex 4, la dfinition des states ne se fait plus dans une zone spcifique du code, avec ajout ou suppression par programmation des composants. Les composants existent dans le code quoi quil arrive, et ils hbergent des proprits qui les rattachent certains states. Comme en Flex 3, chaque tat est dfini avec un tag State qui contient des nuds states. Les mthodes AddChild et RemoveChild dans les tats de Flex 3 ont t remplaces par des attributs includeIn et excludeFrom directement dans les tags MXML. Une nouvelle syntaxe propertyName.stateName remplace les mthodes SetProperty et SetStyle qui rendaient le code trop verbeux. Je reviendrai dans larticle sur cette nouvelle syntaxe lors du skinning dun bouton. Lobjectif principal de Flex 4 est damliorer lexprience de skinning, et plus globalement les changes entre designers et dveloppeurs de RIA. Le framework fournit du coup une sparation claire entre les vues et le comportement dun mme composant. Avec Flex 3, le mme code pour un composant inclut sa logique comportementale et visuelle. Les composants Flex 4 sont factoriss en plusieurs classes qui contiennent des lments de comportement et la gestion de lapparence. Une classe principale, qui reprsente aussi le nom du composant (utilis comme nom du tag MXML) encapsule le comportement de base : les vnements mis par le composant, le modle de donnes, les connexions aux sous-composants, et la gestion des tats internes du composant. Cette classe principale est couple avec une classe de skin qui gre lapparence visuelle du composant, les lments graphiques, la mise en forme, la reprsentation de la donne, les transitions entre les tats.

Skinning avec Flex 4


Le FXG est un nouveau langage de dclaration de vecteurs graphiques en XML. Il est nativement interprt par le Flash Player et par de nombreux outils de la gamme Adobe (dont Illustrator). Il est dsormais possible de dcrire en code XML un bouton avec une forme rectangulaire. Jai dessin dans Illustrator un bouton Pro aux couleurs du magazine Programmez. Aprs un export en FXG, je peux copier-coller directement le rsultat dans mon projet Flex 4.

Janvier 2010 \\ PROgrammez !

19

webmaster \\ flex
<s:Path data="M 69.054 37.607 L 0.5 37.607 L 21.884 0.5 L 90. 437 0.5 L 69.054 37.607 Z" winding="nonZero" x="0" y="0"> <s:fill> <s:LinearGradient rotation="90" scaleX="17.9275" x="45. 834" y="14.022"> <s:GradientEntry color="0xFF2400" ratio="0"/> <s:GradientEntry color="0xD01E00" ratio="0.993865"/> </s:LinearGradient> </s:fill> <s:stroke> <s:SolidColorStroke caps="none" color="0xB50000" joints= "miter" miterLimit="4" scaleMode="normal" weight="1"/> </s:stroke> </s:Path> <s:RichText color="0xFFFFFF" fontFamily="Arial Black" fontSize ="21" kerning="on" lineHeight="120%" whiteSpaceCollapse="preserve" x="22" y="11" > <s:content><s:p whiteSpaceCollapse="collapse"><s:span >PRO</s:span></s:p></s:content> </s:RichText> </s:Skin> Lapplication Main.mxml du coup nimplmente que lajout dun composant Bouton associ notre classe de skin : <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth ="1024" minHeight="768"> <s:Button x="14" y="15" label="Button" skinClass="buttonSkin"/> </s:Application> 834" y="14.022"> <s:GradientEntry color="0xFF2400" ratio="0"/> <s:GradientEntry color="0xD01E00" ratio="0.993865"/> </s:LinearGradient> </s:fill> <s:stroke> <s:SolidColorStroke caps="none" color="0xB50000" joints= "miter" miterLimit="4" scaleMode="normal" weight="1"/> </s:stroke> </s:Path> Etat over : Deux astuces sont ici employes pour dfinir des changements visuels sur le composant au passage de la souris. Lemploi du point aprs une proprit permet de lassigner un tat : alpha.over, ne sera interprte que lors du survol de la souris. Lautre astuce consiste employer les proprits includeIn ou excludeFrom dans un composant. Pour rendre dsormais le label dynamique, je recommande lutilisation de la mtadonne HostComponent dans la classe de skin. Rajoutez ces lignes dans la classe de skin : <fx:Metadata> [HostComponent("spark.components.Button")] </fx:Metadata> <s:RichText color="0xFFFFFF" fontFamily="Arial Black" fontSize= "21" kerning="on" lineHeight="120%" whiteSpaceCollapse="preserve" x="22" y="11" > <s:content><s:p whiteSpaceCollapse="collapse"><s:span>{host Component.label} </s:span></s:p></s:content></s:RichText> Cest la mthode la plus lgante pour associer de la donne depuis un composant. Je rajoute dans mon application main.mxml deux boutons avec deux labels diffrents qui seront pris en charge par la skin. <s:Button x="14" y="15" label="PRO" skinClass="buttonSkin" width="145" height="56"/> <s:Button x="14" y="79" label="AMF" skinClass="buttonSkin" width="145" height="56"/> Une autre approche consiste renseigner les parties attendues par le composant (parts). Un bouton par exemple attend une partie labelDisplay : le composant texte qui va accueillir laffichage du label. Si vous remplacez le bloc <s :RichText> de la classe de skin par un label qui vous donnez lid labelDisplay, le composant va automatiquement lassocier la partie qui affiche la proprit label. <s:Label id="labelDisplay" x="22" y="10" color="0xFFFFFF" font Family="Arial Black" fontSize="21"/> Le bon usage des parts simplifie le skinning de composants, spcialement celui de composants plus complexes comme un slider ou une barre de dfilement. Un composant slider attend par exemple deux parties thumb et track (la piste). Michael Chaize Adobe France, Consultant

Cration de skins dynamiques


Cette classe de skin prsente peu dintrt dans son tat actuel. Il faut lenrichir pour grer les interactions avec le composant. Un contrat est donc pass entre le composant et sa skin. Le contrat est divis en trois sections : les tats (states), les donnes (data), et les parties (parts). Si dans le composant je dfinis une variable titre , alors la skin peut y accder par la proprit hostComponent.titre grce au contrat. Pour enrichir les states dun composant, je vais juste rajouter une raction quand la souris passe sur notre bouton. Dans la classe de skin, je vais juste modifier le trac rouge en fond du bouton pour faire apparatre une ombre au passage de la souris, et le rendre un peu transparent. <s:Path data="M 69.054 37.607 L 0.5 37.607 L 21.884 0.5 L 90. 437 0.5 L 69.054 37.607 Z" winding="nonZero" x="0" y="0" alpha. over="0.7"> <s:filters> <s:DropShadowFilter includeIn="over" knockout="false" blurX= "5" blurY="5" alpha="0.32" distance="2" /> </s:filters> <s:fill> <s:LinearGradient rotation="90" scaleX="17.9275" x="45.

20

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd

Base de donnes
Choisir et optimiser
Le march des bases de donnes est toujours domin par trois gros diteurs : Oracle, IBM et Microsoft. Mais les bases de donnes open source / libres se taillent une belle place auprs des entreprises et dveloppeurs, notamment pour les sites web o MySQL a su simposer avec le fameux modle LAMP. Par contre, pour les volumtries de donnes ou les secteurs critiques, les entreprises restent fidles aux valeurs traditionnelles des leaders historiques. Si le march semble stable, ponctu par les nouvelles versions, les nouvelles fonctions, le monde open source est secou par loffensive de certaines bases (Ingres, PostgreSQL) ou encore par les incertitudes concernant lavenir, le positionnement de MySQL depuis la volont de rachat de Sun par Oracle et la multiplication des forks MySQL, dont le plus ambitieux est MariaDB. Mais au-del de ces querelles, motives ou non, une des questions rcurrentes est de savoir comment choisir sa base de donnes. Lun des dilemmes se situant entre MySQL et PostgreSQL. Les deux projets possdent leurs atouts propres et finalement, tout va dpendre du contexte mais effectivement, on a tendance trop choisir MySQL par dfaut alors quil est loin dtre le seul ! Les autres bases ne seront pas oublies pour autant. Nous reviendrons sur un dbat technique et fonctionnel que lon croyait enterr, mais qui revient

rgulirement la surface : faut-il choisir une base objet ou une base relationnelle (et faussement objet) ? Pour des utilisations critiques o les exigences de performances sont primordiales, lapproche objet reste la meilleure. Enfin, nous reviendrons sur les tendances actuelles et futures dans les bases de donnes. Franois Tonic

Janvier 2010 \\ PROgrammez !

21

dossier \\ sgbd

MySQL et ses forks, comment choisir


MySQL au ct d'Oracle ? Cette hypothse aurait pu faire sourire il y a quelques annes. Depuis le rachat de MySQL par SUN puis de SUN par Oracle c'est en passe de devenir une ralit. Quelles consquences pour les utilisateurs, quelles alternatives ? Nous allons au cours de cet article essayer de prsenter les diffrentes options.
ySQL est un systme de gestion de bases de donnes (SGBD) dont les principaux atouts sont la rapidit, la robustesse et la facilit dutilisation. Son moteur est bas sur la norme ANSI SQL 92, avec cependant quelques fonctions spcifiques. Il est disponible sous deux licences, la licence GPL (General Public License) des projets GNU et FSF (Free Software Foundation) et une licence propritaire moins contraignante mais payante. Pour permettre la socit MySQL AB de vendre des licences il lui faut dtenir toutes les sources du logiciel, c'est l'une des raisons qui font que certains patchs externes ne peuvent pas tre repris. La socit MySQL AB a t rachete le 16 janvier 2008 par Sun Microsystems pour un milliard de dollars. Le 20 avril 2009, Oracle Corporation annonce racheter Sun Microsystems pour 7,4 milliards de dollars, crant la crainte de voir MySQL disparatre ou du moins ne plus tre dvelopp au profit d'Oracle, le SGBD d'Oracle Database. MySQL est cependant loin d'avoir toutes les fonctionnalits d'Oracle, et pourrait donc tre vu au contraire par la socit comme un produit gratuit d'appel, banalisant l'usage de SQL et prparant donc ses futures ventes.

Considrations gopolitiques
Oracle, propritaire de MySQL ? Si la commission Europenne valide le rachat de SUN par Oracle le 27 Janvier prochain ce sera le cas. La question que l'on peut lgitimement se poser est : quel intrt pour Oracle de maintenir des concurrents Open

Source ses solutions ? . A priori quasiment aucun si lon en croit Michael Widenius qui lors du Forum PHP martelait : MySQL fait perdre un milliard par an Oracle et rapporte au mieux 100 millions . Effectivement, Oracle a beau tre une trs belle base de donnes, sur de nombreux cas d'utilisation une base plus lgre comme MySQL peut trs bien convenir. En suivant ce raisonnement on pourrait mme envisager que MySQL aurait pu continuer son dveloppement et terme concurrencer encore plus Oracle. Pour les clients c'tait une aubaine, nombre d'entre eux utilisaient la menace de migration vers MySQL pour obtenir des rabais substantiels sur les tarifs d'Oracle. Au mieux, on peut penser qu'Oracle continuera le dveloppement de MySQL en le limitant une utilisation Web. Cette stratgie permettrait alors de couper les ailes de MySQL sans le tuer. La rponse de la communaut ne s'est pas fait attendre, Michael Widenius, l'un des crateurs de MySQL a initi un projet OpenSource nomm MariaDB dont il sera question plus loin. Ce projet a attir plusieurs des principaux Core Dveloppeurs de MySQL. La meilleure solution pour MySQL serait de ne pas appartenir Oracle mais une entit indpendante qui pourrait assurer sa survie et son dveloppement.

MySQL. Nous verrons dans cet ar ticle que des alternatives se construisent et ont des avantages cibls.

Avantages
La base de donnes MySQL dispose d'une communaut d'utilisateurs extrmement large ; c'est ce qui fait dire la socit MySQL AB que sa base de donnes est la plus populaire au monde . Effectivement, rien qu'en comptabilisant tous les sites Internet tournant sur le fameux couple LAMP (Linux Apache MySQL PHP) les chif fres s'envolent. Le rachat rcent par SUN a galement permis d'amliorer les interactions entre Java et MySQL. Cette communaut permet de trouver facilement de la documentation et de laide qui vont au-del de ce qu'on peut trouver sur le site officiel. On ne compte pas les forums, blogs ou autres wikis anims par des utilisateurs de MySQL, et ce, dans de nombreuses langues. Toutes sor tes d'interrogations peuvent trouver une rponse avec la communaut, des plus simples (comment se connecter au serveur ?) aux plus complexes (mes performances vont-elles s'amliorer si je recompile le serveur avec des pages InnoDB de 8ko au lieu de 16ko ?) La disponibilit d'installeurs pour les plates-formes les plus courantes rend simple la plupart des dploiements. Pour les plates-formes un peu plus exotiques, des binaires sont souvent disponibles. Enfin, en dernier recours ou par choix dlibr, le code source de la version communautaire reste tlchargeable et peut tre compil. Pour ceux qui ne pourraient pas adop-

Les versions officielles portes par SUN et la communaut MySQL


Autant le dire tout de suite, ce jour il n'y a pas d'offre aussi fournie que celle lie la version officielle de

22

PROgrammez ! \\ Janvier 2010

Boostez vos Applications !

Embarquez le moteur de dveloppement le plus rapide et faites dcoller vos applications !


InterSystems Cach offre tous les dveloppeurs rapidit, scalabilit et portabilit maximale. Cach est le moteur de base de donnes et de dveloppement le plus rapide que vous puissiez intgrer vos applications et qui vous offre simultanment les avantages des environnements Objet et Relationnel, tout en diminuant les cots dadministration et de matriel. Dveloppez sans mapping! Grce son architecture novatrice, Cach pargne aux programmeurs Objet (Java,.NET,etc) des efforts laborieux en liminant le mapping objet-relationnel. Dveloppez o vous voulez! Une application Cach dveloppe sous un OS tournera sous un autre OS sans effort de portabilit (Cach est disponible sous Unix, Linux, Windows, Mac OS X, et OpenVMS.) Dveloppez vraiment rapidement! Cach intgre un environnement de dveloppement puissant ainsi quun framework de type Ajax. Cach peut tre utilis comme serveur dapplication et supporte galement en standard le T/SQL ou MultiValue. Cach est dj dploy sur plus de 100,000 systmes, supportant jusqu plus de 50,000 utilisateurs. Embarquez nos innovations et enrichissez vos applications !

Tlchargez une version complte de Cach gratuitement ou demandez votre CD sur InterSystems.fr/embarquez
2007 InterSystems Corporation. All rights reserved. InterSystems Cach is a registered trademark of InterSystems Corporation. 8-07 EmbedCache27

Make Applications More Valuable

dossier \\ sgbd
ter la version communautaire, Sun/MySQL propose une version Enterprise avec une licence commerciale. Cette version fournit galement du suppor t et des outils d'administration, par exemple le MySQL Query Analyzer dont le but est d'aider trouver et corriger les requtes lentes ou l'Enterprise Monitor qui permet de faire du monitoring des instances installes. Historiquement, MySQL a t conu comme tant un SGBD pour le Web, qui vise d'abord la facilit d'installation et d'administration avant de viser le respect des normes et l'tendue des fonctionnalits. C'est cette logique qui a permis de conqurir des parts de march. Puis, petit petit au fil des versions, la liste des fonctionnalits s'est enrichie pour se rapprocher des SGBD traditionnels comme SQL Server, PostgreSQL ou Oracle. Mais l'essence mme de MySQL, savoir cette simplicit dans l'utilisation, a toujours t prserve. nique pour intgrer les patchs provenant de la communaut. La version 5.4, qui embarque nombre de patchs mais reste en bta l'heure actuelle, tente de corriger le tir sur ce point. InnoDB est le moteur la pointe de MySQL, donnant au SGBD la plupart des fonctionnalits que tout dveloppeur ou administrateur attend d'un SGBD : cls trangres, transactions, respect des conditions ACID... Oui, mais InnoDB se fait vieillissant et de plus en plus d'applications sont confrontes des problmes de scalabilit avec ce moteur. InnoDB a en effet t conu une poque o les machines avaient des disques lents, peu de mmoire et un seul processeur, et prouve des difficults tirer parti du matriel le plus moderne. MySQL s'est voulu ds son origine facile utiliser et administrer. C'tait effectivement le cas sur la premire gnration d'applications ayant popularis MySQL (les sites personnels, les applications mtier lgres). Aujourd'hui, il n'est pas rare de voir MySQL traiter des tra-octets de donnes pour des applications critiques. Avec une telle volumtrie, il est impratif que le serveur expose le plus de paramtres possible pour que les administrateurs puissent maintenir les bases de donnes en condition oprationnelle. Face toutes ces limitations, les membres les plus actifs de la communaut MySQL ont dmarr plusieurs projets visant rendre encore meilleur leur SGBD prfr ou corriger des anomalies qui tardent tre rsolues. Dressons-en un panorama. Launchpad). Ces produits sont disponibles prts lusage sur les systmes Linux grce aux outils yum et apt-get. Parmi les contributeurs on compte Google et Percona. Chacun de ces patchs rsout ou optimise une fonctionnalit bien particulire et sadresse donc aux administrateurs de base de donnes chevronns. On retrouve notamment un patch qui permet de tuer une connexion uniquement si celle-ci est inutilise (KILL IF_IDLE), ou encore un patch qui propose une version tendue des statistiques concernant les requtes lentes (slow.log). Toutes les informations concernant les versions produites par OurDelta sont disponibles l'adresse : http://ourdelta.org/ Percona Percona fournit des versions de MySQL 5.0 incluant l-encore de nombreux patchs par rapport la version officielle. Ces patchs sont soit dvelopps directement par Percona, soit par OpenQuery ou encore Google (et sans aucun doute trs prochainement Facebook). Ces versions proposent galement des paramtrages non disponibles dans les versions officielles et susceptibles de fournir des gains de performance apprciables pour les applications trs forte charge sur la base de donnes. La liste des versions disponibles se trouve l'adresse : http://www.percona.com /docs/wiki/release:start Malgr tout, certains dveloppeurs ne se satisfont pas de la direction que prend MySQL et ont donc dcid de coder des modifications profondes, crant ainsi de vritables forks et plus seulement des versions amliores.

Limites
L'une des limites de MySQL est lie sa politique de licence. Effectivement pour tre en mesure de vendre des versions non Open Source il faut que la socit dtienne toutes les sources du logiciel. Cela implique que la version officielle de MySQL Entreprise ne peut inclure certaines amliorations apportes par Google (les fameux Google patchs) ou d'autres comme ceux proposs par Percona. De plus, la politique de maintenance consiste geler au bout de 2 ans les volutions pour les versions dcrtes stables (GA pour suivre le jargon de MySQL). Seuls des correctifs de scurit sont publis rgulirement. C'est ce qui explique que des fonctionnalits dveloppes initialement par des membres de la communaut sous forme de patchs sont disponibles sur la version 5.1 mais pas sur la version 5.0 encore largement utilise. C'est le cas de la commande SHOW PROFILES qui permet de collecter des informations trs prcieuses sur les requtes qu'on cherche optimiser. On note par ailleurs une lenteur chro-

Les versions MySQL communautaires amliores


OurDelta OurDelta est un projet qui a pour but de mettre disposition sous licence GPL des distributions optimises de MySQL 5.0 et MariaDB 5.1, dont nous parlons un peu plus loin. Leur travail consiste essentiellement dvelopper et maintenir des patchs (une vingtaine environ en fonction des versions) qui ont leur branche de code indpendante (disponible sur

Les futures alternatives


MariaDB Initi par les crateurs de MySQL, MariaDB est une branche de dveloppement de la version officielle de MySQL maintenue par la communaut. MariaDB correspond la distribution de MySQL utilisant le moteur Maria. Lobjectif de MariaDB est de fournir une alternative libre et ind-

24

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
pendante de MySQL tout en assurant une compatibilit importante avec celle-ci. Pour cette raison, dans la plupart des cas, ce SGBD fonctionnera de manire analogue MySQL. L'intgralit des commandes, interfaces et bibliothques sont disponibles. L'intrt de Maria rside donc essentiellement au niveau du gain de performances. Les requtes complexes sexcutent plus rapidement et on constate une meilleure ractivit. Il est galement reconnu que Maria rduit le nombre d'anomalies bloquantes. Quelques fonctionnalits particulires font galement leur apparition comme au niveau des statistiques o l'on peut apprcier l'affichage de la liste des processus en microsecondes. Depuis fin octobre, l'quipe travaille sur la Release Candidate, jalon ultime avant la version stable. Des packages seront bientt disponibles pour Linux. Nous avons rencontr le crateur de MariaDB l'occasion du forum PHP et celui-ci nous indiqu que beaucoup de dveloppeurs du projet originel MySQL avaient rejoint sa socit dans le but de promouvoir MariaDB. Site : http://www.mariadb.org Drizzle Le projet Drizzle est dfini par ses concepteurs comme un SGBD lger driv de MySQL dont le but est de revenir aux ides originales de MySQL : performances, fiabilit et facilit d'utilisation et d'administration. Drizzle est trs orient applications Web et cloud computing, c'est--dire des cas o les accs concurrents sont massifs et o rplication et sharding sont courants. Les dveloppeurs ont voulu ds le dpart que le SGBD soit capable de grer au mieux la mmoire disponible et capable d'exploiter les architectures multi-core qui sont aujourd'hui courantes. Pour esprer parvenir un logiciel le plus lger possible, le code repris de MySQL a t rcrit en adoptant une architecture de type micro-noyau et surtout la volont de supprimer le code correspondant tout ce qui tait jug non indispensable. En consquence, la plupart des fonctionnalits introduites par MySQL 4 et 5 ont t enleves du noyau, telles que les vues, les triggers, les procdures stockes ou encore le cache de requtes ! Cela ne signifie pas que ces fonctionnalits n'existeront jamais avec Drizzle, mais plutt que si elles sont implmentes, elles le seront sous la forme de plugins. Il existe d'ailleurs dj des bauches de tels plugins pour les vues ou les triggers. La gestion des droits est organise de faon originale puisque les tables de droits ont t supprimes pour laisser la place une authentification LDAP/PAM. D'autres simplifications sont galement notables : InnoDB est le seul moteur de stockage disponible (bien que MyISAM soit galement encore compil), les types de donnes sont nettement moins nombreux que sous MySQL et seul UTF-8 est disponible pour stocker les donnes textuelles. Le projet a dmarr courant 2008 et reste l'tat alpha, aucune date de sortie de version stable n'tant envisage prsent. D'aprs certaines rumeurs le rapprochement Oracle / SUN pourrait avoir mis mal la ralisation de ce projet. On peut effectivement s'interroger sur l'intrt qu'aurait Oracle dvelopper ce type de super base de donnes en version OpenSource. Pour installer et tester Drizzle, il faut d'abord compiler les sources. Drizzle peut tre install sur Linux, Mac OS X et Solaris. Aucune version n'est disponible pour Windows et un tel portage n'est pas prvu l'heure actuelle. L'installation en elle-mme ne pose pas de problme particulier ds que toutes les dpendances sont satisfaites (la liste est publie sur le site du projet). Il faut simplement penser compiler libdrizzle puis drizzle. Dans l'utilisation courante, l'exception des simplifications mentionnes plus haut, les commandes SQL utilisables avec MySQL sont galement utilisables avec Drizzle.

Conclusion / perspective
Pour tous ceux qui dbutent avec MySQL, il apparat clairement que les versions officielles sont recommandes. Le choix entre la version communautaire et la version Enterprise sera le plus souvent dict par des critres conomiques ou par la sensibilit l'open source. Les utilisateurs avancs aimeront certainement essayer MariaDB ou Drizzle afin de mieux comprendre ce que peut faire ou ce que ne peut pas faire la version officielle ou encore de se projeter dans le futur. Nanmoins, ces versions/forks de MySQL ne sont pas aujourd'hui dans un tat permettant d'envisager un passage en production court terme. On attend beaucoup de MariaDB qui devrait annoncer sous peu ses premires versions de production. Quant aux versions amliores, si elles sont, elles aussi, rserves aux utilisateurs aviss capables de comprendre en quoi l'inclusion de patch peut leur procurer de meilleures performances, ce sont dj des versions utilises en production et sur des applications de grande envergure. Pourquoi alors ne pas tenter de franchir le pas si des tests de performance montrent que le jeu peut en valoir la chandelle ?

Avec l'amicale participation d'Olivier Dasini

Loc Guillois est dveloppeur Web indpendant et contributeur actif du framework de dveloppement Play! Cyril Pierre de Geyer est un architecte OpenSource, co-auteur du livre "PHP 5 avanc", et cofondateur des groupes d'utilisateurs MySQL (LeMug.fr) et PHP (AFUP).

Stphane Combaudon est DBA MySQL et membre du MySQL User Group France(LeMug.fr).

Janvier 2010 \\ PROgrammez !

25

dossier \\ sgbd

Gestion par rgles et le resource governor de SQL Server 2008


Dans ce dossier nous allons traiter de deux nouvelles fonctionnalits qui ont fait leur apparition avec la version 2008 de SQL Server. Ces fonctionnalits sont fortement lies ladministration de SQL Server et notamment pour les entreprises qui doivent faire face chaque jour des problmatiques toujours plus nombreuses et toujours plus complexes.
ous vous proposons ainsi une fonctionnalit qui a pour but de grer de manire intelligente et dfinie lallocation des ressources de vos serveurs telle ou telle application ou tel ou tel groupe/utilisateur. Cela permet de rpondre aux problmatiques daccs multiples aux sources de donnes, en priorisant les accs et traitements. Cette fonctionnalit se nomme gouverneur de ressources ou encore resource governor . La seconde fonctionnalit permet quant elle de dfinir des rgles de gestion que lon peut rgir unitairement ou de manire centralise. Ces rgles peuvent ainsi augmenter lintgrit et la scurit des donnes manipules par exemple par les dveloppeurs, comme dfinir des rgles pour industrialiser toujours plus lusage de vos instances SQL Server 2008. Le nom de cette fonctionnalit parle de lui-mme on parle de gestion par rgle ou policy-based management . Pour information, ces fonctionnalits fortement apprcies de nos clients sont bien videmment prsentes dans la nouvelle mouture SQL Server 2008 R2.

INTERNAL : ce pool systme est utilis pour les processus internes SQL Server 2008 DEFAULT : pool systme utilis pour les charges qui ne seraient pas affectes un groupe de charge (workload group) A noter que les pools systme ont pour caractristique davoir une plus grande priorit sur les pools personnaliss. Pour dterminer les minimums et maximums quelques rgles suivre : Minimum : la somme des minimums entre les pools ne doit pas excder 100% Maximum : entre le minimum du pool spcifi et 100% Exemple de calcul Pools Min % Max % Max rel % Pool A 10 70 70 Pool B 5 100 90 Pool C 0 100 85 Le maximum rel qui peut tre utilis par un pool dtermin est calcul en prenant son maximum allou moins la somme des minimums des autres pools.

Le gouverneur de ressources
Lessence mme du gouverneur de ressources provient des problmatiques bien connues des accs parallles des sources de donnes. Il devient en effet compliqu dans certaines modlisations de cloisonner toutes les sources de donnes. En effet, lorsque lon a un datamart de finance la fois interrog par un dpartement pour du reporting mais aussi pour des traitements de type insertion/mise jour qui se font en mme temps, il nest pas possible de les prioriser. On peut galement citer en exemple les accs par un DSI des rapports et des traitements divers qui se font sur une base commune, il peut savrer ncessaire de grer les ressources de faon donner priorit laccs au rapport, quitte ralentir les autres traitements. Le gouverneur de ressources ne se contente pas de diviser lallocation des ressources (CPU et mmoire) entre les utilisateurs, il est capable de donner plus de ressources que le quota allou en cas de ressources non utilises durant une priode T. Cette fonctionnalit introduit trois nouveaux concepts.

Groupes de charge Workload groups


Cest le composant indispensable pour lier une charge un pool de ressources. Un administrateur peut dailleurs dcider de dplacer un groupe de charge vers un nouveau pool de ressources en cas de changement de priorit ou tout simplement pour augmenter/diminuer les ressources alloues. Tout comme les pools de ressources, il existe des groupes de charge internes (DEFAULT & INTERNAL).

Fonction de classification
Fonction dtermine par ladministrateur pour aiguiller les requtes vers les bons groupes de charge. A noter quil faut tre prudent lors de limplmentation de cette fonction car elle va tre utilise de manire importante par le mcanisme du gouverneur de ressources.

Modlisation

voir [Fig.1]

Implmentation Resource pools


Les pools servent dterminer les restrictions de minimum et maximum que lon peut allouer par rapport aux ressources physiques du serveur. Ces pools peuvent tre considrs comme des instances virtuelles avec leurs propres ressources CPU/mmoire au sein dune instance physique. La limite est de 18 pools personnaliss en plus des 2 pools systme crs linstallation de SQL Server 2008. Avant toute chose, il est fortement recommand dautoriser les connexions DAC (Dedicated Admin Connection) pour toujours permettre laccs vos instances SQL Server 2008. Pourquoi ? La connexion DAC nest pas sujette la fonction de classification qui pour rappel est appele chaque initialisation de session, cela savre donc extrmement pratique pour dbuguer. SQL Server Management Studio La premire chose faire est dactiver le gouverneur de res-

26

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
sources. Cela se fait trs simplement, lexplorateur dobjet une fois connect une instance relationnelle. Dans la partie gestion, vous trouvez lobjet gouverneur de ressources, un clic droit puis activer permettra dautoriser son fonctionnement. La seconde tape correspond la cration dun pool de ressource, clic droit, ajouter un nouveau pool de ressources. [Fig.2] Dans cette fentre, on peut dfinir les diffrents pools de ressources dont on a besoin et faire les affectations de ressources CPU/mmoire correspondantes. Pour chacun des pools, on peut dfinir les groupes de charge avec notamment le niveau de priorit, le nombre maximum de requtes Initialement, dans la liste droulante de fonctions de classification, aucune fonction nest dfinie. Pour cela, il suffit de dfinir une fonction de type scalar et de laffecter ensuite au gouverneur de ressources dans cette mme fentre. Scripts Une autre manire est bien entendu de scripter ces traitements par des requtes SQL. Ainsi pour modifier des proprits dun pool ou dun groupe de charge, on procdera de la manire suivante (exemple fait sur le pool default) : USE [master]; GO ALTER RESOURCE POOL [default] WITH ( MAX_MEMORY_PERCENT = 15, MAX_CPU_PERCENT = 45 ); ALTER WORKLOAD GROUP [default] WITH ( MAX_DOP = 1, REQUEST_MAX_CPU_TIME_SEC = 400 ); Pour crer un pool de ressource et un groupe de charge associ : CREATE RESOURCE POOL [MonPoolA]; CREATE WORKLOAD GROUP [MonGroupeA] USING [MonPoolA]; GO La dernire tape concerne la cration de la fonction de classification et la mise jour du gouverneur de ressources pour appliquer les changements. Dans cet exemple, on spcifie que si le nom de lapplication ou que tel utilisateur est reconnu, alors on adresse la requte vers le groupe de charge MonGroupeA, sinon vers le pool interne default.
Fig.1

CREATE FUNCTION dbo.MaFonction() RETURNS SYSNAME WITH SCHEMABINDING AS BEGIN RETURN ( SELECT CASE WHEN APP_NAME() = N'NomApplicationLambda' OR SUSER_SNAME() IN ('utilisateur1','utilisateur2', 'utilisateur3') THEN N'MonGroupeA' ELSE N'default' END ); END GO ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.classifier_PreventRunaway); GO ALTER RESOURCE GOVERNOR RECONFIGURE; GO

Bonnes pratiques
Vrifier bien que votre connexion DAC fonctionne correctement Bien optimiser le traitement de la fonction de classification Utiliser les vnements PreConnect :Starting et PreConnect :Completed dans le Profiler pour identifier les traces gnres par la fonction de classification Eviter les oprations rptes sur les chanes de caractres dans la fonction de classification Dterminer judicieusement lallocation des ressources, ne pas hsiter vrifier au pralable laide de la DMV sys.dm_os_performance_counters lutilisation des ressources. Ne pas hsiter utiliser les DMV ddies au gouverneur de ressources comme sys.resource_governor_workload_groups

Pourquoi utiliser le gouverneur de ressources ?


Cette fonctionnalit vous permettra de dfinir finement lutilisation des ressources par vos utilisateurs et bases sur votre serveur. Cela peut viter notamment des mauvaises surprises en cas de charge importante, que des utilisateurs importants ne puissent plus avoir accs aux donnes, une situation de saturation du serveur Comme on le sait, ces problmes sont de plus en plus courants notamment avec la consolidation des parcs que lon voit de
Fig.2 Fig.3

Explorateur d'objets SSMS

Janvier 2010 \\ PROgrammez !

27

dossier \\ sgbd
plus en plus. On cherche optimiser logiquement lutilisation des serveurs et cela nous amne forcment des situations o les ressources sont mieux utilises au point de venir frler la ligne rouge en termes de saturation en cas de charge gnrale. Il devient donc primordial de bien grer les allocations des ressources. Les administrateurs peuvent galement mieux prvoir leur travail doptimisation en ayant spcifi des valeurs minimales pour tel ou tel pool utilis par telle ou telle base. Enfin lusage du gouverneur de ressources permet aussi de mieux monitorer et prendre les bonnes dcisions quant aux usages des ressources. ment un oprateur de comparaison, un champ et une valeur. On peut bien entendu combiner plusieurs expressions pour reprsenter une condition. Par exemple, pour le respect dune norme de nommage, on dfinit que les vues doivent avoir le champ @Name qui commence par vw_ et que ces vues ne doivent pas tre des vues systme : @Name LIKE vm% AND @IsSystemObject = false Rgles ou policies Les rgles sont des entits que lon active ou dsactive. Une rgle ne reprsente quune seule condition. Pour faciliter lusage, on peut grouper ces rgles par catgorie. Il suffit ensuite de sabonner ces rgles afin de les appliquer.

La gestion par rgle


La seconde problmatique que tend rsoudre SQL Server 2008 est de pouvoir standardiser son parc de serveurs SQL Server 2008 via une gestion par rgle. Cette gestion permet par exemple de dfinir de manire centralise un ensemble de rgles et conventions dfini par lentreprise pour administrer ses objets SQL Server. En effet, dans la plupart des entreprises, il devient difficile de grer des dizaines de serveurs avec N instances et dploys dans diffrents endroits gographiques. Il savre ainsi souvent difficile de dfinir des rgles globales et de les voir appliques un niveau local, le scnario typique est avec des filiales. Tant bien que mal on peut dfinir des rgles de base, les mettre en place mais comment vrifier quelles sont bien respectes, comment grer la mise jour dune rgle et son application ? Ce sont ces problmes que la gestion par rgle rsout. Quelques cas dutilisation : Grer la scurit en spcifiant par exemple que tel groupe de serveurs doit utiliser tel mode dauthentification et pas un autre Dfinir des conventions de nommage pour les objets SQL Server et les faire appliquer globalement ou sur un groupe de serveurs/instances Gestion des serveurs/instance par exemple en vrifiant quelles instances ont tel service pack dploy

Les modes dvaluation


Une rgle pour but dtre value par le moteur de rgles et cette valuation peut se faire de 4 manires diffrentes : On demand : mode o on demande explicitement lvaluation dune rgle On change :prevent : utilisation des triggers DDL, on fait lvaluation avant de valider la modification On change :log only : utilisation des triggers DDL, on autorise les changements mais en enregistrant lvnement des logs On schedule : on planifie lvaluation via le SQL Server Agent

Utiliser les rgles prdfinies


Au lieu de rinventer la roue, problme bien connu en informatique, vous pouvez commencer votre implmentation des rgles en utilisant des rgles dj dfinies et fournies avec SQL Server. Depuis lexplorateur dobjets dans SQL Server Management Studio 2008, dans le rpertoire Management de votre instance relationnelle, dplier litem Policy Management , clic droit puis Import Policy . [Fig.3] Depuis le chemin suivant nous avons la possibilit dimporter les rgles correspondant aux bonnes pratiques de : SQL Server Analysis Services Reporting Services C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Policies Depuis la fentre dimport il suffit de se rendre dans le rpertoire des rgles, mentionn prcdemment. Dans cet exemple, nous avons choisi dimporter lensemble des bonnes pratiques SQL Server. [Fig.4 et 5]. Une fois importes, les rgles apparaissent ainsi dans lexplorateur dobjets. Vous pouvez galement dplier les facets et conditions et, bien entendu, les personnaliser. [Fig.6] En double-cliquant sur lune de ces rgles, par exemple SQL Server Login Mode , une bote de dialogue saffiche pour prsenter les options suivantes pour pouvoir appliquer la rgle : La target ou groupe de targets Le type dvaluation de la rgle La possibilit dexclure des targets rpondant une condition particulire, par exemple exclure les serveurs dont le nom comporte tel ou tel ID. On remarque au passage la hirarchie des rgles par groupe, ici Server Security [Fig.7] En ouvrant la condition, on voit quelle expression a t utilise pour dfinir cette condition : [Fig.8]

Smantique
Tout dabord, cette fonctionnalit intgre de nouvelles notions quil est bon de dfinir avant daller plus loin sur limplmentation. Managed Targets Ce sont les objets qui sont grs par la gestion par rgle, typiquement on retrouve : Instances SQL Server Bases de donnes Tables Index On peut bien entendu crer des groupes pour ces types dobjets comme un groupe form par les procdures stockes dont le nom commence par usp_ . Facets Cela reprsente lensemble dun groupe de proprits qui sappliquent des objets en particulier (managed targets). Par exemple la facet Server Information sapplique aux objets de type Server et contient des proprits comme Collation , IsClustered , IsSingleUser Conditions Les conditions reprsentent ltat attendu pour une target ou un groupe de targets. Lexpression dune condition inclut gnrale-

28

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
Crer ses propres rgles
Maintenant que nous avons vu comment importer des rgles, nous allons voir comment crer les ntres. Vous noterez au passage que les rgles dfinies peuvent videmment sexporter et ainsi tre importes ailleurs. Particulirement intressant pour grer ses rgles entre diffrents environnements. Notre rgle va permettre de mettre en place une convention de nommage sur la cration de bases de donnes sur nos serveurs. Ces noms de base devront commencer par myDB_ . La premire tape consiste crer notre condition. On la nomme Nommage Bases et lexpression est la suivante : @Name LIKE myDB_%. Slectionnez ensuite bases de donnes comme facet pour lappliquer aux objets bases. [Fig.9] Il nous faut maintenant crer notre rgle qui se base sur la condition qui vient dtre dfinie. Outre dfinir un nom pertinent pour la rgle, on va aller chercher notre condition qui doit tre classe parmi les conditions de la facet bases de donnes . [Fig.10] Une fois la condition slectionne, la target se positionne automatiquement sur la facet dfinie dans la condition, cest--dire bases de donnes . On dfinit maintenant que cette rgle sera value la demande et pas dexclusion particulire. [Fig.11] Lobjectif est maintenant dvaluer cette rgle sur les serveurs souhaits, nous allons commencer localement et nous verrons ensuite pour grer les rgles sur le parc. Pour valuer une rgle, vous pouvez lancer lvaluation des rgles de votre serveur ou slectionner une rgle particulire, clic-droit puis valuer. Une fentre de rsultats va alors safficher. Dans mon exemple, on voit deux erreurs sur les bases ReportServer
Fig.4

et ReportServerTempDB qui ne respectent effectivement pas la rgle dfinie.

Dployer et grer mes rgles pour N serveurs


La version 2008 de SQL Server introduit une nouvelle fonctionnalit nomme Central Management Servers . A noter que le serveur dfini comme Central Management Servers ne fera pas partie des valuations des rgles. Il faut donc utiliser un serveur ddi pour mettre en place les rgles et les valuer sur lensemble du parc auquel on souhaite les appliquer. Dans longlet Registered servers dans Management Studio, vous commencez par dfinir le serveur qui sera le Central Management Server . Dans la fentre il suffit dindiquer le nom du serveur et quelques informations de connexion. La seconde tape consiste ajouter les serveurs que lon souhaite valuer. A noter que lon peut ajouter les serveurs un par un et crer des groupes de serveurs. [Fig.12]. Une fois les serveurs ajouts, on peut lancer les valuations de rgles. A ce moment prcis, il faut prciser o se trouve la source des rgles qui peut tre la fois des fichiers ou une connexion une instance SQL Server. Lvaluation peut alors commencer. [Fig.13]. Grce cette mthode il devient alors simple de grer tout ou partie de son parc avec des rgles homognes et distribues. Cet outil devrait savrer tre trs utile pour lindustrialisation des dveloppements SQL Server mais aussi pour Analysis Services ou encore Reporting Services. Vincent Bellet Consultant - Application Platform Optimization Microsoft France - Enterprise Services
Fig.5

Fig.6

Parcourir les fichiers de type "rgle" format XML


Fig.7

Slectionner les fichiers de type "rgle" format XML


Fig.8

Liste des rgles dans SSMS


Fig.9

Fig.10

Fig.11

Fig.12

Fig.13

Janvier 2010 \\ PROgrammez !

29

dossier \\ sgbd

Fonctions avances de PostgreSQL et MySQL


Dans cet article nous allons comparer les bases de donnes MySQL et PostgreSQL sous trois angles : le partitionnement des donnes, linteroprabilit et les outils dadministration.
e partitionnement est une technique utilise avec des tables volumineuses pour organiser les donnes stockes sur le disque. La base de donnes peut ensuite exploiter cette organisation pour minimiser les accs au disque, ce qui contribue amliorer les performances. Dans cette partie nous dtaillerons les moyens mettre en uvre pour utiliser le partitionnement avec MySQL et PostgreSQL. Linteroprabilit dtermine la facult dune base de donnes tre insre dans une architecture existante et oprer avec dautres bases. Nous regarderons donc quelles facilits MySQL et PostgreSQL proposent pour sintgrer dans un existant. Enfin, nous finirons notre comparaison avec un rappel des outils dadministration disponibles pour ces deux bases.

mise en place du partitionnement sous MySQL et le mme exemple sera utilis sous PostgreSQL. Nous avons choisi une table simple qui gre les ventes de glaces par date et par ville. Nous souhaitons stocker ces donnes avec la date des ventes comme critre car la plupart des requtes consistent calculer la somme des ventes sur chaque anne.

Une table classique


Voici la structure de la table mesure sans partition qui nous sert d'exemple : CREATE TABLE mesure ( id_ville int not null, date_trace date not null, temperature int, ventes int ) ; create index idx_date_trace on mesure(date_trace); Pour alimenter la table mesure nous avons cr une procdure stocke proc_mesure.sql qui insre des donnes alatoires dans cette table. Nous insrons un million d'enregistrements laide de la ligne de commande suivante : mysql>call insert_mesure(1000000) ; Pour avoir des informations sur le plan d'excution de la requte, nous utilisons le mot cl explain de cette manire : mysql> explain partitions SELECT sum(ventes) from mesure where date_trace >= '2004-01-01' and date_trace < '2005-01-01'\G ************************* 1. row *************************** id: 1 select_type: SIMPLE table: mesure partitions: NULL type: range possible_keys: idx_date_trace key: idx_date_trace

Partitionnement : optimiser vos tables


Pour une base de donnes, le partitionnement est la possibilit de dcouper une table en plusieurs petites tables. Ce dcoupage peut tre fait selon des rgles que l'utilisateur dfinit en fonction de la nature des donnes stocker. Cette fonctionnalit est apparue sous PostgreSQL depuis la version 8.1 (2005). Elle na t supporte par MySQL qu' partir de la version 5.1 (2008). Le but de cette section est d'tudier et comparer la mise en place du partitionnement de tables pour ces deux bases de donnes. Il est important de noter que le partitionnement ne peut pas se substituer au travail d'optimisation des requtes. Loptimisation doit tre faite tout le temps alors que le partitionnement permet daugmenter les performances pour des requtes dj optimises ! MySQL offre la possibilit de partitionner les tables selon plusieurs critres. Il doit tre conu en fonction des requtes longues et complexes afin de rduire le nombre d'enregistrements sur lesquels elles portent. MySQL permet de partitionner une table horizontalement ou verticalement. Le partitionnement horizontal consiste dcouper une table en lignes et dfinir un critre de groupage afin de stocker chaque groupe sur une partition diffrente. Le partitionnement vertical consiste dcouper une table en colonnes. Les cls doivent tre prsentes dans toutes les partitions pour permettre de retrouver les donnes originales l'aide des jointures entre les diffrentes partitions. Dans la suite, nous nous intresserons au partitionnement horizontal. Le partitionnement sous MySQL est facile mettre en place : seules quelques commandes suffisent pour scinder une table en partitions. Nous avons choisi un exemple simple pour illustrer la

30

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
key_len: 3 ref: NULL rows: 77882 Extra: Using where 1 row in set (0,00 sec) Comme la table mesure nest pas partitionne, nous constatons que le mot cl partitions est gal NULL. Pour montrer lintrt du partitionnement, nous feront des tests sur des tables avec et sans partitions. Pour cela nous utiliserons deux requtes. La premire calcule la somme des ventes sur lanne 2004 c'est--dire dans le cas le plus favorable o la requte accde une seule partition. mysql> SELECT sum(ventes) from mesure where date_trace >= '2004 -01-01' and date_trace < '2005-01-01'; +-------------+ | sum(ventes) | +-------------+ | 41478016 | +-------------+ 1 row in set (1,05 sec) La seconde requte calcule la somme des ventes sur plusieurs annes pour tester un cas moins favorable. mysql> SELECT sum(ventes) from mesure where date_trace < '2009 -01-01' and date_trace > '2004-01-01'; +-------------+ | sum(ventes) | +-------------+ | 1038423038 | +-------------+ 1 row in set (1,27 sec) mysql> explain partitions SELECT sum(ventes) from mesure where date_trace >= '2004-01-01' and date_trace < '2005-01-01'\G ************************* 1. row *************************** id: 1 select_type: SIMPLE table: mesure partitions: p2004 type: ALL possible_keys: idx_date_trace key: NULL key_len: NULL ref: NULL rows: 1000000 Extra: Using where 1 row in set (0,00 sec) On constate que l'optimiseur de MySQL a choisi de ne parcourir que la partition p2004 susceptible de contenir les donnes. mysql> SELECT sum(ventes) from mesure where date_trace >= '2004 -01-01' and date_trace < '2005-01-01'; +-------------+ | sum(ventes) | +-------------+ | 41478016 | +-------------+ 1 row in set (0,18 sec) Le temps de rponse de cette requte est 5,8 fois plus petit que celui de la mme requte excute sur la table non partitionne. Regardons maintenant le cas moins favorable de notre requte pluriannuelle. mysql> explain partitions SELECT sum(ventes) from mesure where date_trace < '2009-01-01' and date_trace > '2004-01-01'\G ************************* 1. row *************************** id: 1 select_type: SIMPLE table: mesure partitions: p2004,p2005,p2006,p2007,p2008 type: ALL possible_keys: idx_date_trace key: NULL key_len: NULL ref: NULL rows: 456222 Extra: Using where 1 row in set (0,00 sec) Le plan dexcution indique toutes les partitions qui seront lues. mysql> SELECT sum(ventes) from mesure where date_trace < '2009 -01-01' and date_trace > '2004-01-01'; +-------------+ | sum(ventes) | +-------------+ | 1038423038 | +-------------+ 1 row in set (0,82 sec)

Mise en uvre du partitionnement MySQL


Nous reprenons la structure de la table prcdente et nous lui ajoutons des partitions. Voici la nouvelle structure de la table avec sept partitions. CREATE TABLE mesure ( id_ville int not null, date_trace date not null, temperature int, ventes int ) Partition BY RANGE(YEAR(date_trace)) ( PARTITION p2004 VALUES LESS THAN(2005), PARTITION p2005 VALUES LESS THAN(2006), PARTITION p2006 VALUES LESS THAN(2007), PARTITION p2007 VALUES LESS THAN(2008), PARTITION p2008 VALUES LESS THAN(2009), PARTITION p2009 VALUES LESS THAN(2010), PARTITION p2010 VALUES LESS MAXVALUE ); create index idx_date_trace on mesure(date_trace); Une fois cette nouvelle table remplie, voyons le nouveau plan dexcution propos par MySQL :

Janvier 2010 \\ PROgrammez !

31

dossier \\ sgbd
Nous constatons que le partitionnement ci-dessus convient aux requtes qui portent sur les ventes dune anne et permet galement damliorer les performances des requtes qui parcourent plusieurs partitions. CREATE CREATE CREATE CREATE INDEX INDEX INDEX INDEX mesure_a2007_date_trace mesure_a2008_date_trace mesure_a2009_date_trace mesure_a2010_date_trace ON ON ON ON mesure_a2007 mesure_a2008 mesure_a2009 mesure_a2010 (date_trace); (date_trace); (date_trace); (date_trace);

Le partitionnement avec PostgreSQL


Le partitionnement sous PostgreSQL est connu sous le nom de l'hritage et c'est le mme concept que lhritage dans les langages orients objet. Il consiste scinder une table volumineuse en plusieurs petites tables. La table mre contient les champs communs toutes les tables. Les tables filles contiennent les donnes en fonctions des critres des requtes et hritent de toutes les colonnes de la table parente. Reprenons notre exemple prcdent pour illustrer le partitionnement sous PostgreSQL.

Les tables filles sont cres avec le mot cl INHERITS(mesure) qui signifie que ces tables hritent de la table mesure et rcuprent ainsi toutes ses colonnes. Des index sont galement crs sur le champ date_trace pour chaque partition. Une requte peut tre limite la table mre en lui ajoutant le mot cl ONLY comme dans l'exemple ci-dessous : SELECT * FROM ONLY mesure ;

On peut supprimer une table fille du partage en la gardant comme une table autonome en utilisant la commande SQL suivante : ALTER TABLE table_fille NO INHERIT mesure; Ou en la supprimant dfinitivement laide de cette commande : DROP TABLE table_fille ;

Cration de la table mre et des tables filles


Sous PostgreSQL, les partitions sont des tables part entire et ne font pas partie de la structure de la table dorigine. CREATE TABLE mesure ( id_ville int not null, date_trace date not null, temperature int, ventes int ); CREATE TABLE mesure_a2004 ( CHECK ( date_trace >= DATE '2004-01-01' '2005-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2005 ( CHECK ( date_trace >= DATE '2005-01-01' '2006-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2006 ( CHECK ( date_trace >= DATE '2006-01-01' '2007-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2007 ( CHECK ( date_trace >= DATE '2007-01-01' '2008-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2008 ( CHECK ( date_trace >= DATE '2008-01-01' '2009-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2009 ( CHECK ( date_trace >= DATE '2009-01-01' '2010-01-01' ) ) INHERITS (mesure); CREATE TABLE mesure_a2010 ( CHECK ( date_trace >= DATE '2010-01-01') ) INHERITS (mesure);

Les donnes insres dans la table mre ne sont pas rediriges automatiquement vers la table fille concerne. Pour cela, il est ncessaire de mettre en place une fonction et un trigger.

Insertion des enregistrements dans les tables filles


La procdure stocke utilise pour alimenter le table mesure sous MySQL a t adapte pour alimenter la table mesure sous PostgreSQL. Excutons l avant la mise en place du trigger. partition#call insert_mesure(1000000) ; AND date_trace < DATE partition=# select count(*) from mesure; count --------1000000 (1 row) partition=# select * from mesure_a2007; id_ville | date_trace | temperature | ventes ----------+------------+-------------+-------(0 rows) Nous constatons que toutes les donnes sont insres dans la table mre et que les tables filles sont vides. Dclarons maintenant la fonction dinsertion CREATE OR REPLACE FUNCTION mesure_insert_trigger() RETURNS TRIGGER AS $$ BEGIN IF ( NEW.date_trace >= DATE '2004-01-01' AND NEW.date_trace < DATE '2005-01-01' ) THEN INSERT INTO mesure_a2004 VALUES (NEW.*); ELSIF ( NEW.date_trace >= DATE '2005-01-01' AND NEW.date_trace < DATE '2006-01-01' ) THEN INSERT INTO mesure_a2005 VALUES (NEW.*); ELSIF ( NEW.date_trace >= DATE '2006-01-01' AND NEW.date_trace < DATE '2007-01-01' ) THEN INSERT INTO mesure_a2006 VALUES (NEW.*);

AND date_trace < DATE

AND date_trace < DATE

AND date_trace < DATE

AND date_trace < DATE

AND date_trace < DATE

--Cration des indexes CREATE INDEX mesure_a2004_date_trace ON mesure_a2004 (date_trace); CREATE INDEX mesure_a2005_date_trace ON mesure_a2005 (date_trace); CREATE INDEX mesure_a2006_date_trace ON mesure_a2006 (date_trace);

32

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
ELSIF ( NEW.date_trace >= DATE '2007-01-01' AND NEW.date_trace < DATE '2008-01-01' ) THEN INSERT INTO mesure_a2007 VALUES (NEW.*); ELSIF ( NEW.date_trace >= DATE '2008-01-01' AND NEW.date_trace < DATE '2009-01-01' ) THEN INSERT INTO mesure_a2008 VALUES (NEW.*); ELSIF ( NEW.date_trace >= DATE '2009-01-01' AND NEW.date_trace < DATE '2010-01-01' ) THEN INSERT INTO mesure_a2009 VALUES (NEW.*); ELSIF ( NEW.date_trace >= DATE '2010-01-01' THEN INSERT INTO mesure_a2010 VALUES (NEW.*); ELSE RAISE EXCEPTION 'Date en dehors !'; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; et le trigger : CREATE TRIGGER insert_mesure_trigger BEFORE INSERT ON mesure FOR EACH ROW EXECUTE PROCEDURE mesure_insert_trigger(); Avant chaque insertion dans la table mesure, le trigger insert_ mesure_trigger se dclenche et appelle la fonction mesure_ insert_trigger() qui permet dinsrer les donnes dans la table fille correspondant au bon intervalle de date. Lexemple ci-dessous montre que quand le trigger est en place, les donnes insres dans une table partitionne sont rediriges directement dans les tables filles. partition=# select count(*) from only mesure; count ------0 (1 row) partition=# select count(*) from only mesure_a2004; count ------91246 (1 row) partition=# select count(*) from only mesure_a2009; count ------90706 (1 row) Pour activer loptimisation par partitionnement sous PostgreSQL, il est ncessaire de vrifier que le paramtre constraint_exclusion est on dans le fichier de configuration PostgreSQL.conf. Ce paramtre permet au planificateur de prouver que les partitions qui ne satisfont pas les critres de la section where de la requte ne sont pas concernes par celle-ci. Seules les partitions concernes seront donc parcourues. lanne 2004 sur une table non partitionne : Partition=# SET constraint_exclusion=on ; partition=# explain analyze SELECT sum(ventes) from mesure where date_trace >= '2004-01-01' and date_trace < '2005-01-01'; QUERY PLAN ----------------------------------------------------------Aggregate (cost=20637.96..20637.97 rows=1 width=4) (actual time =1066.222..1066.223 rows=1 loops=1) -> Seq Scan on mesure (cost=0.00..20406.00 rows=92782 width =4) (actual time=0.080..904.743 rows=91246 loops=1) Filter: ((date_trace >= '2004-01-01'::date) AND (date _trace < '2005-01-01'::date)) Total runtime: 1066.308 ms (4 rows) partition=# SELECT sum(ventes) from mesure where date_trace > = '2004-01-01' and date_trace < '2005-01-01'; temps d'excution : 995 ms Somme des ventes sur plusieurs annes sur une table non partitionne : Partition=# explain analyze SELECT sum(ventes) from mesure where date_trace < '2009-01-01' and date_trace > '2004-01-01'; QUERY PLAN ---------------------------------------------------------Aggregate (cost=21544.02..21544.03 rows=1 width=4) (actual time =2049.607..2049.608 rows=1 loops=1) -> Seq Scan on mesure (cost=0.00..20406.00 rows=455206 width=4) (actual time=0.173..1276.384 rows=455646 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date _trace > '2004-01-01'::date)) Total runtime: 2049.710 ms (4 rows) Partition=# SELECT sum(ventes) from mesure where date_trace < '2009-01-01' and date_trace > '2004-01-01'; temps d'excution : 1103 ms Excutons les mmes requtes sur une table partitionne. Somme des ventes sur une anne : partition=# explain analyze SELECT sum(ventes) from mesure where date_trace >= '2004-01-01' and date_trace < '2005-01-01'; QUERY PLAN ----------------------------------------------------------Aggregate (cost=2086.81..2086.82 rows=1 width=4) (actual time =757.246..757.249 rows=1 loops=1) -> Append (cost=0.00..1864.50 rows=88922 width=4) (actual time=0.040..584.616 rows=91246 loops=1) -> Seq Scan on mesure (cost=0.00..36.55 rows=9 width =4) (actual time=0.004..0.004 rows=0 loops=1) Filter: ((date_trace >= '2004-01-01'::date) AND (date_trace < '2005-01-01'::date)) -> Seq Scan on mesure_a2004 mesure (cost=0.00.. 1827.95 rows=88913 width=4) (actual time=0.029..270.641 rows =91246 loops=1) Filter: ((date_trace >= '2004-01-01'::date) AND (date_trace < '2005-01-01'::date)) Total runtime: 757.361 ms (7 rows)

Tests de performances
Reprenons nos deux requtes de somme des ventes pour illustrer le gain avec les partitions PostgreSQL. Somme des ventes pour

Janvier 2010 \\ PROgrammez !

33

dossier \\ sgbd
partition=# SELECT sum(ventes) from mesure where date_trace > = '2004-01-01' and date_trace < '2005-01-01'; temps d'excution : 162 ms Le constat est sans appel, seules la table mre et la table fille mesure_a2004 concernes par cette requte sont scannes. Le temps dexcution de cette requte a t divis par 6 ! Somme des ventes sur plusieurs annes : partition=# explain analyze SELECT sum(ventes) from mesure where date_trace < '2009-01-01' and date_trace > '2004-01-01'; QUERY PLAN ----------------------------------------------------------Aggregate (cost=10347.03..10347.04 rows=1 width=4) (actual time =3087.072..3087.074 rows=1 loops=1) -> Append (cost=0.00..9226.70 rows=448130 width=4) (actual time=0.122..2371.086 rows=455646 loops=1) -> Seq Scan on mesure (cost=0.00..36.55 rows=9 width =4) (actual time=0.005..0.005 rows=0 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) -> Seq Scan on mesure_a2004 mesure (cost=0.00.. 1827.95 rows=88913 width=4) (actual time=0.111..284.506 rows =90988 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) -> Seq Scan on mesure_a2005 mesure (cost=0.00.. 1813.87 rows=87973 width=4) (actual time=0.063..187.284 rows =91297 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) -> Seq Scan on mesure_a2006 mesure (cost=0.00.. 1861.92 rows=91177 width=4) (actual time=0.059..187.622 rows =91261 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) -> Seq Scan on mesure_a2007 mesure (cost=0.00.. 1852.40 rows=90609 width=4) (actual time=0.053..186.164 rows =91110 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) -> Seq Scan on mesure_a2008 mesure (cost=0.00.. 1834.01 rows=89449 width=4) (actual time=0.055..188.422 rows =90990 loops=1) Filter: ((date_trace < '2009-01-01'::date) AND (date_trace > '2004-01-01'::date)) Total runtime: 3087.331 ms (15 rows) partition=# SELECT sum(ventes) from mesure where date_trace < '2009-01-01' and date_trace > '2004-01-01'; temps d'excution: 745 ms Grce au partitionnement le temps dexcution de cette requte est rduit de 33%. oprer avec d'autres systmes. En effet, linsertion dune nouvelle architecture dans une infrastructure existante doit permettre dexploiter les donnes stockes dans d'autres systmes ou mme cohabiter avec ceux-ci pour permettre une migration de donnes en douceur.

Avec MySQL
Dans la plupart des cas, la mise en place d'une nouvelle architecture sous un nouveau SGBD ncessite la migration des donnes de lancien systme vers le nouveau. Cette tape est souvent dlicate et coteuse. MySQL dispose des moteurs de stockage iStorage et IBMDB2I afin de faciliter la communication entre une base de donnes DB2 de IBM et une base de donnes MySQL. Les donnes sont gres par un serveur de bases de donnes DB2/400 et sont accessibles la fois par les applications PHP ou .NET de MySQL et par les programmes natifs sur AS/400. Pour les autres SGBD, MySQL dispose de son kit de migration pour assister les utilisateurs migrer d'une base de donnes existante vers une base MySQL. Ce kit est open source et prend en charge la plupart des bases de donnes du march.

Avec PostgreSQL
Pour passer dun SGBD PostgreSQL en version open source, il est ncessaire de passer par ltape de la migration. Seul un script Perl existe pour aider migrer une base de donnes Oracle vers une base de donnes PostgreSQL. Toutes les procdures stockes, les triggers et les fonctions doivent tre rcrites car le langage pl/sql dOracle nest pas support par PostgreSQL. Ils peuvent tre rcrits soit en pl/pgsql ou avec dautres langages compatibles avec PostgreSQL. PostgreSQL en version entreprise (PostgreSQL plus advanced server) est compatible avec le serveur Oracle, il peut cohabiter avec lui dans la mme architecture. On peut mme rpliquer une base de donnes Oracle vers une base PostgreSQL. Cette fonctionnalit permet PostgreSQL de s'insrer dans une architecture Oracle existante afin de planifier la migration des donnes, et de remplacer des serveurs Oracle par PostgreSQL. Cette version supporte le langage de dveloppement pl/sql dOracle et la migration ne ncessite aucune rcriture du code.

Les outils dadministration


Les deux systmes de bases de donnes disposent des interfaces graphiques pour grer et configurer les serveurs de bases de donnes. Dcrivons brivement le fonctionnement de certains outils et leurs limitations.

Administrer MySQL
MySQL dispose de linterface MySQL Administrator pour administrer les bases de donnes dun serveur et superviser la rplication entre un serveur matre et des serveurs esclaves. Cette interface a ses limites. Elle ne permet pas, par exemple, de mettre jour une base de donnes en utilisant les commandes SQL update ou insert. MySQL Query Browser est un client graphique qui dispose dun diteur des ordres sql pour crire et excuter des requtes sur la base de donnes, mais ne permet pas deffectuer certaines tches dadministration. PHPMyAdmin est un des outils d'administration les plus complets

Interoprabilit entre MySQL et PostgreSQL


L'interoprabilit d'un systme de bases de donnes est la facult

34

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
et les plus clbres pour MySQL. Il se prsente sous la forme d'une interface web crite en PHP .

Administrer PostgreSQL
PgAdmin-III est une interface dadministration des serveurs PostgreSQL. Elle comprend une interface graphique dadministration, un outil de requtes SQL et un diteur de code procdural. Elle est conue pour rpondre la plupart des besoins dun DBA PostgreSQL, depuis lcriture de simples requtes SQL jusquau dveloppement de bases de donnes complexes. Cette interface supporte les fonctionnalits de PostgreSQL les plus rcentes et rend ladministration PostgreSQL trs simple. Pgadmin-III permet galement dadministrer plusieurs serveurs de bases de donnes sur la mme interface. PhpPgAdmin est une interface web dadministration PostgreSQL crit en PHP et permet deffectuer toutes les actions ncessaires ladministration des serveurs de bases de donnes PostgreSQL.

Conclusion
Le partitionnement sous MySQL est efficace et simple mettre en place. La redirection des donnes vers les partitions correspondantes est automatique et ne ncessite aucun dveloppement supplmentaire. Sous PostgreSQL, le partitionnement est implment laide de lhritage au sens des langages objets. Cette architecture est plus complexe mettre en place et ncessite du dveloppement supplmentaire. Au travers de ses moteurs iStorage et IBMDB2I, MySQL offre des possibilits dinteroprabilit avances avec la base DB2. La ver-

sion entreprise de PostgreSQL de son ct est tourne vers Oracle avec la possibilit de reprendre du code pl /sql. Du ct de la compression de donnes, MySQL propose des solutions adaptes plusieurs cas. PostgreSQL nen propose pas. Concernant les outils dadministration, on peut noter que PostgreSQL dispose dune seule interface simple qui permet de faire toutes les actions ncessaires ladministration et au dveloppement des bases de donnes PostgreSQL. MySQL dispose de deux interfaces : lune oriente administration et lautre destine aux dveloppeurs. Lahcen Ait Ali - Devoteam

LINFO permanente
Lactu : le fil dinfo quotidien de la rdaction La newsletter hebdo : abonnez-vous, comme 46 000 professionnels dj. Cest gratuit !

PRO grammez !
Le magazine du dveloppement

Cest

PRATIQUE !

Le forum : modr par la rdaction et les auteurs de Programmez!, rejoignez les forums techniques de programmez.com Les tutoriels : une solution en quelques clics ! Le tlchargement : rcuprez les nouveauts.

www.programmez.com

dossier \\ sgbd

Technique dindexation avance : les index couvrants


Les performances dune application, et de la base de donnes sous-jacente, sont lies en grande partie aux index. Une stratgie dindexation parfaitement matrise permet dobtenir de trs bonnes performances. De mauvais index ou labsence dindex engendrent une lenteur perceptible dun point de vue utilisateur, mme si les composantes matrielles (processeur, disque et mmoire) sont largement dimensionnes. Aprs un bref rappel sur la notion dindex, ordonn et non ordonn, nous aborderons la notion dindex couvrant.
n index est une structure permettant laccs rapide une information contenue dans une table. Tout comme, la fin dun livre, lindex permet de savoir quelles pages font rfrence un mot bien prcis, un index de base de donnes permet de localiser trs rapidement un enregistrement ou un groupe denregistrements, sans avoir parcourir lensemble des lignes dune table. Un index va donc permettre de rduire drastiquement les entres/sorties disque et les lectures logiques, avec comme rsultat un gain de performances. Un index est constitu dune ou plusieurs colonnes issues dune table. Il est reprsent sous forme dun arbre balanc compos dune page racine, dune ou plusieurs pages de niveau intermdiaire et de pages de niveau feuille. Lindex cluster, ou index ordonn, permet un accs extrmement
Fig.1

rapide aux enregistrements car les pages de niveau feuille sont les pages de donnes. Cet index va trier les enregistrements de la table suivant cette cl. En consquence, il ne peut y avoir quun seul index cluster par table. [Fig.1] Lindex cluster nest pas obligatoire, si celui-ci nest pas implment sur une table, on parlera alors de segment mmoire, ou de tas. [Fig.2]. Lindex non cluster, ou index non ordonn, possde une structure identique avec 16 colonnes et 900 octets au maximum. Les pages de niveau feuille vont soit contenir la cl cluster si un index ordonn existe, soit ladresse de lenregistrement dans le cas dun segment mmoire. Il peut y avoir jusqu 249 index non cluster par table. [Fig.3]

Index couvrant
Un index couvrant est un index non ordonn qui va satisfaire en totalit

une requte sans avoir faire rfrence la table sous-jacente. En effet, les requtes conduisent gnralement deux lectures : une lecture de lindex (accs par identifiant) et une lecture dans la table de donnes (pour remonter les donnes supplmentaires). Un index, reprenant la fois lidentifiant et les donnes supplmentaires, est dit couvrant parce que lui seul suffit rcuprer toutes les informations ncessaires au traitement de la requte. Considrons la table Person de la base exemple AdventureWorks2008 [Fig.4]. La table contient 19972 enregistrements dont le regroupement par PersonType nous donne : [Fig.5] Afin de rechercher les 17 personnes de type SP, la requte gnre 3816 lectures logiques. [Fig.6] Le plan dexcution utilise un parcours complet de lindex cluster (ClusFig.3

Fig.2

36

PROgrammez ! \\ Janvier 2010

dossier \\ sgbd
tered Index Scan) pour rechercher les donnes. [Fig.7] Un index non cluster sur la colonne PersonType permet de faire baisser le nombre de lectures 53 et modifie le plan dexcution : [Fig.8]. On constate lapparition de loprateur Key Lookup (car il existe un index cluster sur la table), excut 17 fois (nombre de lignes remontes par loprateur Index Seek), qui va permettre de slectionner les champs FirstName et LastName. [Fig.9] Bien que performante, cette requte peut tre optimise grce un index couvrant. SQL Server 2005 a introduit les index include, des index couvrants plus
Fig.4

lgers que dans les versions prcdentes de SQL Server. Il ne va stocker les colonnes incluses que dans les pages feuilles de lindex, les niveaux intermdiaires et racines ne comprenant eux que les donnes de la cl. Le parcours de cet index, lger et couvrant, sera rapide. [Fig.10] Aprs seulement 2 lectures disque, la requte est entirement satisfaite, lindex seul a suffit pour prsenter les donnes lutilisateur. [Fig.11 et 12] Lindex couvrant a permis de rduire les IO disques de 3816 seulement 2. Ce gain de performance important va, dans un environnement multi utilisateur, permettre la diminution du verrouillage sur la table et, de fait,
Fig.5

augmenter la concurrence daccs. De tels index peuvent tre encore plus performants en utilisant la notion de filtre apparue avec SQL Server 2008. Les index filtrs contiennent une clause Where permettant de nindexer quune partie des donnes, en excluant les valeurs NULL par exemple. Ils deviennent encore plus slectifs et plus performants. Christophe Laporte MCT - MVP SQL Server
Fig.6

Fig.10

Fig.7

Fig.8

Fig.11

Fig.9

Fig.12

Janvier 2010 \\ PROgrammez !

37

dossier \\ sgbd Avis dexpert

L'opposition relationnel - objet est-elle toujours d'actualit ?


Les bases de donnes ont relever deux dfis majeurs qui touchent leurs limites: la complexit (des donnes et des besoins d'exploitation) et les volumes: par exemple, le stockage de donnes d'imagerie, notamment l'imagerie mdicale DICOM qui reprsente un dfi trs pointu et trs actuel.
l'utilisation d'un langage de programmation afin d'accder aux donnes, et sont d'ailleurs souvent fortement lis un langage de programmation spcifique au dtriment des autres. Rapprocher les deux mondes n'est pas un dfi facile relever. Diverses grandes socits informatiques s'y sont frottes en incluant dans leurs SGBD relationnels des capacits orientes objet (ou XML, ce qui revient en pratique au mme) plus ou moins natives (Sybase, Oracle, Microsoft...) A ce jour, ces tentatives restent relativement anecdotiques et certainement peu convaincantes, l'intgration au SGBDR tant gnralement assez pauvre et la performance trs insuffisante. On rve donc d'une solution mlant efficacement les modles relationnel et orient objet. Mais cette solution devra trs certainement remettre en cause les fondements mme des modles de stockage des SGBD actuels, qu'ils soient relationnels ou orients objet. C'est l sans doute une difficult majeure pour les grands acteurs du march: remettre en question la base mme de leur offre commerciale. Peut-tre la rponse viendra-t-elle d'un acteur indpendant : InterSystems, par exemple, propose depuis des annes un SGBD, Cach , capable de stocker de grands volumes de donnes complexes dans une structure efficace pour une exploitation dans chacun des deux modes, relationnel et orient objet, et accessibles par de nombreux langages orients objets aussi bien que par du SQL standard (via ODBC ou JDBC). Par ailleurs, on se prend repenser certains modles passs de mode pour diverses raisons mais qui peuvent peuttre rpondre efficacement ces dfis. Modles (nativement) hirarchiques ou multidimensionnels (voir IMS DB), en rseau (voir IDMS), etc. Certainement, le systme BigTable de Google, utilis notamment pour l'indexation du contenu web et divers produits de la socit comme Google Earth et Google Finance, en est une parfaite illustration. Afin de rpondre des besoins extrmes en termes de volumes (de l'ordre du ptaoctet!) et de transactions, Google a dvelopp un systme bas sur des vecteurs creux multidimensionnels persistants, classs et distribus somme toute aux antipodes des systmes relationnels, et trs diffrents des systmes de stockage orients objet en fait, une approche qui rappelle fortement dans les principes directeurs le systme de stockage MUMPS, qui existe depuis plus de 40 ans! Doit-on pour autant abandonner le bateau du relationnel ? Le stockage orient objet est-il pour autant une impasse ? Il ne faudrait pas dramatiser. Ces systmes rpondent toujours parfaitement l'immense majorit des besoins en stockage et requtes. Les modles alternatifs rpondent des besoins souvent extrmes o trs spcifiques. Il est indniable cependant qu' terme, ces approches devront tre consolides en un nouveau modle rpondant mieux l'ensemble des besoins du domaine. Olivier Caudron Senior Sales Engineer InterSystems

es technologies de bases de donnes traditionnelles , relationnelles et orientes objet, peinent rpondre la fois ces deux dfis. Les SGBD relationnels rpondent mieux au dfi des volumes mme si les besoins actuels commencent toucher aux limites mme des SGBDR mais continuent de se montrer inadapts au traitement de donnes complexes (voir la floraison de technologies de mapping objet-relationnel comme Hibernate, TopLink, etc.), pour tenter de grer efficacement des graphes d'objets complexes, et les approches spcifiques requises par l' intelligence mtier . Dans les deux cas, on essaie de rapprocher au mieux un besoin mtier avec une approche stockage en ralit inadapte ce besoin. Ces solutions pour la plupart de grande qualit ont leurs limites et ajoutent une couche de complexit qui n'a pas toujours un effet positif sur la mise en place des besoins. Notamment, les outils de mapping objet-relationnel sont tous relativement limits quant au niveau de complexit et de volume de donnes (en stockage et en requte) qu'ils sont capables de grer efficacement. De leur ct, les SGBD purement objet rpondent de manire adquate au dfi de la complexit mais n'ont jamais russi convaincre sur leur gestion des volumes et leur efficacit sur des requtes simples. De plus, malgr diverses tentatives de standardisation, ils ncessitent souvent

38

PROgrammez ! \\ Janvier 2010

Inside Visual Studio 2010

Dans quelques mois, le dveloppeur Windows / .NET va pouvoir utiliser une des versions de son environnement de dveloppement prfr les plus attendues depuis 10 ans : Visual Studio 2010. Autant les versions 2005 et 2008 taient dans la continuit de ldition 2003, autant le millsime 2010 redfinit lIDE tel quon le connat depuis une dcennie.
PRT POUR OFFICE 2010, WINDOWS 7
Avec Visual Studio 2010 (VS 2010), le dveloppeur Windows et/ou .Net va souvrir de nouveaux horizons, de nouveaux dveloppements. Tout dabord, cest lIDE idal pour crer les meilleures applications pour Windows 7 ! VS 2010 permet de dvelopper des applications natives (C++) Windows 7, ou en code manag (.Net) tout en tirant parti de toutes les nouveauts du systme : multitouch, Direct Access, le nouveau SDK Windows, le ruban, etc. Cest aussi loccasion de passer des applications WinForms aux applications WPF. Lautre nouveaut est une intgration toujours plus fine entre Visual Studio et lensemble des logiciels Office 2010. Microsoft fournit un effort considrable pour simplifier le dveloppement Sharepoint dans VS 2010. Ainsi, concevoir un projet Sharepoint nest plus une corve. Visual Studio dispose dsormais des outils spcifiques Sharepoint, les templates projets, un explorateur serveur pour les sites et contenus Sharepoint, etc. Le dveloppeur peut ainsi crer rapidement des applications Sharepoint, agrger des donnes mtiers, intgrer des donnes de diffrentes sources (SQL Server, SAP , Siebel). On peut aussi packager et dployer un projet Sharepoint 2010 depuis VS 2010. Au-del de Sharepoint 2010, VS 2010 continue amliorer le dveloppement des applications Office. Avec la prochaine sor tie dOffice 2010, VS 2010 dispose dune toute nouvelle version des outils Visual Studio Tools for Office. Il devient possible de dvelopper en 32 et 64-bit, crer des packages de dploiement, bnficier des nouvelles interfaces dOffice (ex. : Ruban, Linq). cur multiples. Malheureusement, peine 3 % du code produit est rellement paralllis (chiffres Microsoft, 2008). Le dfi est colossal. Car un logiciel non paralllis ne tirera aucun avantage dun processeur 4 curs et lutilisateur sera frustr de ne pas exploiter les performances de son ordinateur. Avec des logiciels toujours plus gros, puissants, la programmation parallle devient un leitmotiv. Cest pour cette raison que VS 2010 met en exergue le paralllisme aussi bien dans lenvironnement que dans les librairies de dveloppement. Tout est fait pour aider le dveloppeur en limitant les modifications de code. Ct librairies, on dispose de PLinq, de Parallel Fx ou encore du Task Parallel Library. Mais pour exploiter au mieux la paralllisation, Microsoft a incorpor un tout nouveau runtime interne : le Concurrency Runtime qui doit grer les tches et les ressources. Au-del de ces librairies et API, pour C++ et .Net, le dveloppeur dispose aussi dans VS 2010 doutils de dbogage parallle et danalyse. Avec VS 2010, cest le moment ou jamais de srieusement se mettre la programmation parallle !

BOOSTEZ VOS PROJETS AVEC LA PROGRAMMATION PARALLLE


Depuis plusieurs annes, Microsoft, et lensemble de lindustrie informatique, sensibilise les dveloppeurs aux dveloppements multicore, la programmation parallle, permettant dexploiter au mieux les processeurs

Janvier 2010 \\ PROgrammez !

39

Visual Studio 2010


DEVENEZ UN PRO DU CLOUD COMPUTING !
Cela fait presque 2 ans que lon entend parler de services en ligne (Saas) ou encore de cloud computing. Microsoft propose sa propre vision du cloud avec Windows Azure. Et durant la confrence dveloppeur (PDC) de novembre dernier, Microsoft a dvoil la version finale de Windows Azure, des librairies, des outils. VS 2010 devient ainsi le centre de dveloppement par excellence dune application Azure. On dispose de template Azure et des Windows Azure Tools for Visual Studio. Ils permettent de crer, dboguer et de dployer des services et applications cloud dans Azure. L encore, tout est fait pour intgrer le cloud computing dans ses dveloppements tout en facilitant la construction et le dploiement. Le dveloppeur a accs lensemble des services Azure : projet Dallas pour lagrgation des donnes, SQL Azure (base de donnes dans le cloud), Azure Storage, .Net Services. Et surtout, le dveloppeur bnficiera avec lachat dun VS 2010 de nombreuses heures dutilisation Windows Azure. Idal pour tester et comprendre le cloud computing ! Aujourdhui, le dveloppement ne se limite pas lintgration de nouvelles technologies. Il est important pour chaque dveloppeur (et en particulier ceux qui sont en relation directe avec le client) davoir une vision de haut niveau de son projet, des relations avec ses clients, de lavancement, de la qualit. Cest ce quon est en droit dattendre dun outil de dveloppement moderne. Avec Visual Studio 2010, le rfrentiel commun la gestion des bugs, des tests, des exigences et autres lments de travail donne une transparence nouvelle aux projets de dveloppement. Partager ce rfrentiel entre dveloppeurs et testeurs garantit une meilleure collaboration entre les deux mtiers. Cette collaboration est renforce par des fiches de bugs, riches de contexte, permettant dviter de nombreux aller-retour entre la dcouverte dun bug par le testeur et sa reproduction sur le poste du dveloppeur.

Une gamme 2010 plus simple, plus complte !


vec VS 2010, Microsoft a entirement revu sa gamme. Cen est fini de Team System et des nombreuses ditions. Lditeur fusionne lensemble de ses outils de dveloppement et dALM en une seule offre : Visual Studio 2010 . On disposera dsormais de 4 ditions, au lieu de 7 : Visual Studio 2010 Professionnel Visual Studio 2010 Professionnel avec MSDN Visual Studio 2010 Premium avec MSDN Visual Studio 2010 Ultimate avec MSDN Chacune delles possde ses spcificits fonctionnelles. La version intgrale possde lensemble des fonctionnalits, la modlisation et toutes les fonctions de tests, darchitecture, etc. (Fig. A) La gamme Visual Studio 2010 contient galement trois nouveaux produits satellites. Le premier est un outil ddi aux testeurs fonctionnels, Visual Studio Test Elements 2010. Ce dernier propose une interface pure par rapport lIDE de Visual Studio et permet, de grer les campagnes de tests manuels, de les excuter et mme de les automatiser. (Fig. B) Le deuxime produit est Visual Studio Team Lab Management 2010 qui permet de grer des environnements virtuels via System Center Virtual Machine Manager pour les campagnes de tests. Enfin on retrouve TFS qui a t renomm pour loccasion Visual Studio Team Foundation Server 2010. Visual Studio Team Foundation

Server 2010 propose de nouveaux modes dinstallation. Il ny a plus ddition Workgroup ni Active Directory, Microsoft propose dsormais deux modes dinstallation : Le mode Basic, destin remplacer Visual Source Safe, et qui peut tre install soit sur un environnement serveur, soit sur un environnement client (Vista et Windows 7). La couche de donnes pourra utiliser une version Express de SQL Server et le nombre dutilisateurs ne sera pas limit. Les restrictions de cette version sont sur les composants installs, seul le gestionnaire de code source, la gestion des WorkItems et le serveur de build (qui, lui, pourra tre install sous XP) seront disponibles. Le mode Standard, lui, contient lensemble des composants. Il est bien entendu possible de migrer dune version basique vers une version Standard si le besoin des composants manquants se faisait sentir (Sharepoint et Reporting). Concernant les modes de licences, Microsoft a indiqu quils allaient tre entirement revus pour la gamme Visual Studio 2010.

Loc Baumann - Architecte Logiciel et expert en ALM chez Winwise ainsi que MVP Team System. Guillaume Rouchon - Consultant / Formateur .NET et expert ALM chez Winwise. Vincent Labatut - Consultant / Formateur .NET et expert ALM chez Winwise.

Fig.A

Fig.B

40

PROgrammez ! \\ Janvier 2010

Visual Studio 2010

Dcouverte de Visual Studio 2010


D
eux articles ne seront pas de trop pour vous prsenter la gamme cliente puis la gamme serveur. Nous verrons au passage que Visual Studio est plus que jamais la marque de Microsoft pour les dveloppeurs suite la disparition du nom Team System. C'est parti pour ce tour d'horizon, attachez vos ceintures !

1re partie

Comme vous le savez tous, Microsoft s'apprte sortir une nouvelle version de son environnement de dveloppement phare : Visual Studio. Autant le dire tout de suite, cette version 2010 est majeure : tant au niveau de l'volution du contenu qu'au niveau des changements qui ont t apports sur l'ensemble de la gamme.
La catgorie (par exemple File ). La description courte de lvnement ( Access C:\test.txt ). Une description longue ( Initialized a FileStream to the path C:\test.txt ). Le thread courant ( Thead: Main Thread [2116] ). Des liens vers des diffrentes vues (Locals, Call Stack ). La trace peut galement contenir la valeur de certaines variables (dans notre exemple le chemin du fichier). Il est en effet possible lors, de la dclaration dun vnement, de spcifier un ensemble de variables tracer lorsque cet vnement survient. La valeur de ces variables est alors disponible dans la vue Locals . En plus de ces informations, Visual Studio est capable de faire le lien entre un vnement et la ligne de code layant gnr : un double-clic sur lentre vous transporte la ligne correspondante dans le code ! Toutes ces informations sont accessibles aussi bien pendant une session de dbogage qua postriori. En effet, toutes les donnes sont stockes dans un fichier .tdlog dont lemplacement est paramtrable dans les options de Visual Studio. Une simple ouverture de ce fichier avec Visual Studio permet de naviguer dans la trace. Plus besoin dexcuter des dizaines de fois lapplication en esprant retomber sur le bug, ayant mis des points darrt au pralable pour connatre ltat de lapplication avant le problme : lapplication plante, on ouvre la trace et lon voit lensemble des vnements qui ont eu lieu !

DU NOUVEAU POUR LES DVELOPPEURS


Intellitrace
Sil ne fallait retenir quune nouveaut dans Visual Studio 2010 pour les dveloppeurs, il sagirait de lIntelliTrace, prcdemment connue sous le nom dHistorical Debugger. Cette fonctionnalit rvolutionne la manire dont un dveloppeur va pouvoir dboguer une application via : Lenregistrement des vnements dune application. La journalisation automatique des appels de mthode (trace) et la navigation postriori dans ces traces. Dans les deux cas le mcanisme utilis est linjection de code IL lexcution. Ce procd dinstrumentation peut dgrader les performances de lapplication. Cependant, dans le cas o lon cherche analyser une application en profondeur, on ne sera pas vraiment regardant l-dessus la vue de lnorme gain de temps quil procure.

Traage des vnements


Lenregistrement des vnements est loption la moins intrusive et permet de suivre lensemble des vnements mis depuis le lancement dune application jusqu ce quelle se termine (Fig. 1). Voici quelques exemples des vnements disponibles : Action sur un contrle graphique. Accs aux fichiers. Accs la base de registre. Exceptions. ADO.Net Si vous ne trouvez pas votre bonheur dans les vnements fournis par dfaut ou si vous souhaitez enregistrer des appels vos propres librairies, il est tout fait possible den ajouter de nouveaux via ldition du fichier CollectionPlan.xml . Comme on peut le voir sur la figure 1, Visual Studio affiche dans la trace :
Fig.1

Traage de tous les appels de mthode


Si cette liste dvnements nest pas suffisante, il est possible dactiver en plus la trace de lensemble des appels des mthodes avec la valeur de leurs paramtres. Cette trace est plus lourde mais va permettre de stocker un arbre exhaustif des appels comme on peut le voir sur la figure 2. On retrouve donc tous les appels de mthode du projet ainsi que les appels au Framework .Net (en gris). Pour chaque entre et sortie de mthode, on aura aussi accs aux valeurs des paramtres ainsi
Fig.2

Janvier 2010 \\ PROgrammez !

41

Visual Studio 2010


qu la valeur de retour de la fonction ! Pour parfaire le tout, il est possible de se dplacer librement dans larbre des appels et de remonter dans lhistorique afin de suivre exactement le parcours qua effectu lapplication. Ce voyage dans le temps se reflte dans la trace des vnements qui se restreint dynamiquement aux vnements effectivement raliss. Cette navigation peut se faire soit via les mmes raccourcis clavier que ceux utiliss pendant le dbogage, soit par un jeu de boutons Fig.3 contextuels affichs dans la marge du code (Fig. 3). Une autre option trs utile est la possibilit de se dplacer entre les diffrents appels dune mme mthode. En slectionnant Search For This Method In IntelliTrace dans le menu contextuel, on peut alors visualiser les diffrents appels puis reprendre notre investigation en naviguant dans larbre des appels. class Program { static object SyncLock = new object(); static void Main(string[] args) { var calc = new Calc(); var tasks = new Thread[] { new Thread(o => { lock (SyncLock) Addition((int)o); }}) { Name = "Addition" }, new Thread(o => { lock (SyncLock) Soustraction((int)o); }}) { Name = "Soustraction" }, new Thread(o => { lock (SyncLock) Division((int)o); }}) { Name = "Division" }, new Thread(o => { lock (SyncLock) Multiplication((int)o); }}) { Name = "Multiplication" }, }; tasks[0].Start(2); tasks[1].Start(4); tasks[2].Start(6); tasks[3].Start(2); Array.ForEach(tasks, t => t.Join()); Console.WriteLine("Resultat: " + calc.Resultat); Console.ReadKey(); } } Comme on peut sen douter, le rsultat est alatoire et va dpendre de lordre dexcution des threads. Si vous excutez ce code plusieurs fois, il peut arriver que vous ayez une exception de type Divi-

{ calc.

{ calc.

{ calc.

Exemple dutilisation de lIntelliTrace


Afin de montrer lavantage de lIntelliTrace, voici un petit exemple. Nous avons une classe Calc exposant quatre mthodes permettant dajouter, de supprimer, de diviser et de multiplier un oprande fourni en paramtres la valeur stocke dans la proprit Resultat. La proprit Resultat est mise jour avec le rsultat de lopration : public class Calc { int _resultat; public int Resultat { get { return _resultat; } set { _resultat = value; } } public void Addition(int operande) { Resultat = operande + Resultat; } public void Soustraction(int operande) { Resultat = operande - Resultat; } public void Division(int operande) { Resultat = operande / Resultat; } public void Multiplication(int operande) { Resultat = operande * Resultat; } } Nous allons maintenant appeler ces quatre oprations en parallle afin de simuler une application multi-thread :

{ calc.

Fig.4

42

PROgrammez ! \\ Janvier 2010

Visual Studio 2010


deByZeroException. Sans IntelliTrace, il faudrait ajouter un mcanisme de journalisation afin de savoir lordre dexcution des appels qui a gnr cette erreur et il faudrait relancer lapplication en esprant retomber sur le problme. Avec IntelliTrace, plus besoin de tout cela ! Afin de ne pas ajouter de code, nous avons modifi le fichier CollectionPlan.xml afin de dfinir des vnements sur les mthodes de la classe Calc. Lorsque lerreur est arrive, il a suffi de regarder la vue des vnements pour voir ce qui sest pass depuis le lancement de lapplication (Fig. 4) : On saperoit ainsi que si les oprations sont excutes dans lordre suivant : Ajout : 2 + 0 = 2 Multiplication : 2 * 2 = 4 Soustraction : 4 4 = 0 Division : 6 / 0 => erreur Nous obtenons alors notre exception. Cet exemple est assez simple et certains dentre vous auront vu les squences qui ne fonctionnent pas juste en regardant le code mais dans un vrai programme multi-thread, cela peut faire gagner normment de temps ! De plus, comme vous pouvez le voir sur limage, lors de la dclaration des vnements personnaliss nous avons captur la valeur du paramtre de la fonction et la valeur de la proprit Resultat afin denrichir la trace. Il est noter que la capture de valeur ne peut se faire que sur des variables, do le fait que la classe Calc nutilise pas de proprit automatique. Attention, si vous migrez depuis TFS 2008 il faudra indiquer o sont les branches laide de laction Convert to Branch du menu contextuel. Question ergonomie, certaines botes de dialogues sont devenues des fentres documents part entire comme lhistorique des ChangeSets. Ce dernier permet galement dafficher les labels (enfin !) (Fig. 6). Lors de dveloppements complexes, on a besoin davoir du recul vis--vis de la structure des branches en place, on veut pouvoir visualiser lensemble ou partie des branches de notre projet. Cest ce que propose la vue hirarchique des branches, accessible depuis nimporte quelle branche dans son menu contextuel (Fig.7). Depuis ce document, il est alors trs facile de fusionner deux branches. En effet, un simple glisser-dposer dune branche vers une autre suffit pour effectuer lopration ! La rsolution des conflits a galement t sensiblement amliore. Au lieu de devoir rgler tous les conflits dans une fentre modale, les conflits sont affichs dans la fentre des changements en attente (Pending Changes), ce qui est finalement beaucoup plus naturel. On dispose de plus dinformations, comme les utilisateurs impliqus, ainsi que les liens vers les ChangeSets lorigine du conflit (Fig.8). Enfin, il est galement possible de suivre lvolution dun ChangeSet au fil des branches. En effet, en tant que dveloppeur, comment savoir si nos modifications on bien t rpercutes dans la structure de branches existante et surtout de quelle manire ? La rponse est dans la fonction Track Changeset accessible directement depuis chaque ChangeSet. Cette dernire nous propose un affichage de type hirarchique ou chronologique. Vous pouvez voir comment le correctif a t rtro-intgr dans la branche Main puis partiellement port dans la branche WPF_Poc (les fusions partielles apparaissent en jaune) (Fig. 9). L encore, un simple glisser-dposer permettra doprer une fusion entre deux branches, cette fois-ci, seul le ChangeSet sera rpercut.

LES BRANCHES
Penchons-nous maintenant sur une des fonctionnalits de base de la gestion de configuration : les branches. Celles de TFS et VS 2010 ont gagn en importance : elles sont devenues des composantes de premier ordre, nous allons donc passer en revue les dernires amliorations autour des branches et des ChangeSets. Premier point, les branches sont maintenant directement identifiables au niveau du contrleur de source (Fig.5).

Fig.5

Fig.6

Fig.8

Fig.7

Janvier 2010 \\ PROgrammez !

43

Visual Studio 2010


LES NOUVEAUTS POUR LES DBA
A partir de la version Premium, Visual Studio 2010 contient des fonctionnalits spcifiques pour le dveloppement de bases de donnes dont on avait dj eu un avant-got avec la release out-of-band de GDR2 pour Visual Studio 2008. Ces outils sont malheureusement encore peu connus du fait de leurs sorties tardives, ce qui va sans doute changer avec la version 2010 qui les inclut nativement. On distingue les outils de comparaison et ceux ddis au dveloppement. vention, il y a vingt ou dix ans, que de dveloppeurs. Aujourd'hui d'autres rles ont fait surface et dans un souci de productivit, il est important d'offrir un outil qui est adress aux testeurs fonctionnels. En effet, l'intgration entre les deux mondes est essentielle si l'on veut pouvoir dvelopper efficacement et sereinement son application. MTLM tait donc destin initialement aux testeurs mais il suscite nanmoins de l'intrt chez les dveloppeurs, d'o sa prsence dans la version Ultimate de Visual Studio. Nous ne pouvons malheureusement pas nous attarder sur l'ensemble des fonctionnalits que nous offre ce nouveau logiciel mais il est intressant de parler de certains concepts et certaines fonctionnalits qui vont changer la vie d'une quipe de dveloppement.

Les outils de comparaison


Les outils de comparaison marchent aussi bien sur les schmas que sur les donnes. La comparaison de schmas va, aprs avoir slectionn les schmas source et cible ainsi que les objets comparer, afficher leurs diffrences sous forme de liste (Fig. 10). Il est facile de faire ressortir les similitudes ou de se concentrer uniquement sur les diffrences. Visual Studio permet alors de gnrer un script TSQL de mise jour du schma cible ou de le mettre directement jour. Il est bien entendu possible de comparer un schma existant celui dun projet de type base de donnes, les fonctionnalits proposes seront les mmes. Loutil est particulirement pratique pour reprer les diffrences entre les bases de diffrents environnements (dveloppement et pr-production par exemple) et pour gnrer les scripts de mise jour le cas chant. Avec loutil de comparaison de donnes, on va pouvoir slectionner les tables dont on veut comparer les donnes depuis une base source et une base cible. La liste de rsultats contiendra (Fig.11) : Les lignes diffrentes (mme cl primaire mais donnes diffrentes). Les lignes uniquement prsentes dans la table source. Les lignes uniquement prsentes dans la table cible. Les lignes identiques. Comme pour la comparaison de schmas, Visual Studio 2010 proposera de mettre jour les tables cibles directement ou de gnrer un script de mise jour contenant lensemble des requtes SQL. Il est bien entendu possible de slectionner les mises jour que lon veut effectuer.

Test Suite, Test Case et Requirement


Vous avez la possibilit de dclarer des campagnes de test (Test Suite) qui vont enfin formaliser cette tche dans le dveloppement de votre logiciel. Ces campagnes sont composes d'une srie de Test Case ou de Requirement tester (Fig. 12). Un Test Case est tout simplement un test manuel (idal pour tester les IHM) tandis qu'un Requirement est la formalisation d'une exigence remplir. L'intrt du Requirement est qu'il peut se lier n'importe quel type de Work Item qui va dtailler son implmentation (typiquement les types Task ou Test Case). La gestion des Requirements et des campagnes de test permettent donc d'assurer la traabilit complte entre une exigence et la validit de son implmentation ! Nous ne nous tendrons pas plus sur le sujet mais sachez que Microsoft a bien fait les choses, MTLM gre le droulement d'une campagne, l'analyse des rsultats d'une campagne (avec les statistiques de rgression par rapport au droulement prcdent, etc.(Fig.13)).

Fig.10

QUEN EST-IL DES TESTEURS ?


Avec la vague 2010, une nouvelle SKU vient complter Visual Studio, il s'agit de Microsoft Test & Lab Manager ou MTLM (pour viter un claquage de la mchoire). Le constat de Microsoft fut simple : le dveloppement d'applications ne demandait principalement l'interFig.9 Fig.11

44

PROgrammez ! \\ Janvier 2010

Visual Studio 2010


Matriser son environnement de test
Une campagne de tests va toujours s'inscrire dans un contexte d'excution ou Test Plan. Celui-ci permet de dfinir sur quelles machines (Test Environment) la campagne va tre excute pour les tests manuels et automatiques et en fonction de quels paramtrages spcifiques (Test Settings). La notion de Test Environment est trs importante, nous aurons l'occasion de revenir dessus dans la prochaine partie avec Team Lab. Le Test Plan permettra en outre de matriser la campagne dans son excution (date de dbut, date de fin, responsable, etc. (Fig. 14)). frents diagrammes (UML, Couche Logique, et DGML). L'dition Ultimate, quant elle, offre la totalit des fonctionnalits travers : la modlisation UML, les diagrammes de couche logique (avec validation de l'architecture applicative) et l'Architecture Explorer.

De l'UML dans Visual Studio


Une bonne surprise est le revirement de Microsoft concernant l'utilisation de l'UML. Dans le pass, l'diteur de Redmond tait parti dans la direction des DSL, prtextant une ouverture plus large par opposition un standard clairement dfini et dlimit comme l'UML. Cependant, l'un n'empche pas l'autre et Visual Studio 2010 le prouve par le biais des briques architectes et en dlivrant l'excellent DSL Toolkit. L'UML est un standard adopt par beaucoup d'entreprises, l'avoir au sein de Visual Studio renforce la position de l'diteur et conforte son ambition d'avoir un environnement avec le maximum de fonctionnalits cls intgres.

A LA RESCOUSSE DES ARCHITECTES


Le rle d'Architecte d'Entreprise a t trait avec peu de russite dans les ditions prcdentes de Team System. Ayant conscience de son chec, Microsoft a dcid de faire table rase et de repartir sur une nouvelle brique qui serait oriente cette fois-ci vers l'aspect Architecte Logiciel. Virage 180 particulirement russi! Si l'dition prcdente n'avait quasiment aucun intrt, Microsoft a su retenir toutes les critiques et s'orienter vers une nouvelle direction qui remplit une bonne partie du contrat : venir en aide, assister et fournir les briques de base pour les Architectes Logiciels. Les diffrentes fonctionnalits sont rparties dans les ditions Premium et Ultimate de Visual Studio 2010. Pour l'dition Premium, nous avons l'accs en lecture-seule des difFig.12

Les fonctionnalits Architecte


Les fonctionnalits architecte s'articulent autour de deux concepts principaux : les diagrammes et l'Architecture Explorer.
Fig.14

Fig.15

Fig.13

Janvier 2010 \\ PROgrammez !

45

Visual Studio 2010


Fig.16

Fig.17

Les diffrents types de diagrammes sont au nombre de sept, cinq pour l'UML (Class, Sequence, Use Case, Activity et Component), le diagramme de couche logique et enfin le diagramme gnrique DGML (pour Directed Graph Markup Language) : (Fig. 15). Architecture Explorer est un concept assez nouveau, un peu droutant au premier abord, mais qui deviendra vite indispensable lorsque l'on travaille sur des gros projets ou lorsque l'on reprend un projet existant. Celui-ci vous permet de parcourir un Project, une Solution ou des fichiers excutables afin d'y dcouvrir les diffrents lments tels que les espaces de noms, classes, mthodes, proprits, etc. (Fig. 16). Lorsque vous avez cibl l'lment qui vous intresse, vous avez la possibilit de gnrer un diagramme relationnel (Fig.17). Vous avez aussi la possibilit de gnrer un diagramme relationnel partir d'excutables et en choisissant la granularit de restitution selon les types : assemblage, espace de nom, classe, mthodes et leurs expositions : public, internal, protected et private (Fig.18).

Validation de la couche logique


Microsoft prne souvent le pragmatisme lorsqu'il s'agit de sa suite de dveloppement ALM, une fonctionnalit dmontre particulirement cet tat d'esprit : la validation du diagramme de couche logique travers la compilation. Une des responsabilits majeures de l'architecte logiciel est de dfinir pour une application tout un ensemble de couches logiques reprsentant les diffrentes parties de celle-ci, puis de dfinir les interactions possibles entre elles et veiller ce qu'elles soient respectes dans le code. Visual Studio 2010 prend ce scnario en charge intgralement. La cration d'un diagramme de couche logique nous permet de modliser l'architecture logique (Fig.19) Ensuite, nous pouvons attacher des lments du projet (assemblage, espace de nom, classe, etc.) des couches spcifiques. Et enfin, nous spcifierons pour chaque diagramme s'il valide ou non l'architecture, et la compilation du projet se chargera de vrifier l'intgrit de celui-ci. Lorsquun dveloppeur utilise un objet sans que la liaison entre les couches soit modlise, une erreur sera gnre. De plus, il est possible dautomatiser cette vrification pour quelle gnre une erreur pendant un Build !

Fig.18

Fig.19

Loc Baumann 14 ans d'exprience dans le monde du dveloppement logiciel. Il est actuellement Architecte Logiciel et expert en ALM chez Winwise ainsi que MVP Team System. http://loicbaumann.org

Guillaume Rouchon 8 ans d'exprience dans le monde du dveloppement logiciel. Il est actuellement Consultant / Formateur .NET et expert ALM chez Winwise. http://blog.qetza.net

Vincent Labatut 10 ans d'exprience dans le monde du dveloppement logiciel. Il est Consultant / Formateur .NET et expert ALM chez Winwise. http://blogs.codes-sources.com/vlabz

46

PROgrammez ! \\ Janvier 2010

enqute \\ formation

Formations en soire : une exprience originale et motivante.


Depuis 2 ans, la SSII Objet Direct, spcialise dans les nouvelles technologies, a mis en place un dispositif original de formations internes, ligibles au DIF, et donc rmunr hauteur de 50% du salaire.

bjectifs de la SSII : favoriser la monte en comptences de ses collaborateurs, donner un cadre la capitalisation technique, encourager la formation continue et louvrir au plus grand nombre sans pnaliser lentreprise par un dficit de facturation, proposer des stages adapts et de bonne qualit, exploiter le bnfice dabriter au sein de lentreprise un centre de formation aux nouvelles technologies, permettre aux salaris de bnficier du DIF (droit individuel la formation),

Sur la base du volontariat


Chez Objet Direct on appelle le dispositif : Formation en Soire : F.E.S. Il est ouvert tous les salaris, sur la base du volontariat. Le but de ces formations est de permettre aux consultants de dcouvrir et d'utiliser concrtement des technologies ou mthodologies quils nont pas encore eu loccasion de mettre en uvre dans leurs missions. Ces formations se droulent sur un format plus court que les stages classiques. Organises dans les agences Objet Direct Paris, Lyon et Grenoble, les sessions de formation rassemblent 8 12 collaborateurs sur une tranche horaire 18h30 - 22h30. Un repas est servi pendant la pause. Une formation complte se compose en gnral de 2 3 sessions.

hsion. Quelques exemples : Formation la mthodologie agile Scrum, Dveloppement .NET avec Visual Studio 2008, Architectures JEE et EJB3, Intgration continue avec Maven2, Dvelopper des RIA avec le Google Web Toolkit (GWT), Applications Web : XHTML / CSS Bonnes pratiques, etc. Ces formations sur mesure dveloppent un thme technique ou mthodologique en se basant principalement sur du vcu (exprim par le formateur) et en allant l'essentiel , estime Vianney Grassaud, consultant Objet Direct et formateur. C'est trs enrichissant. Aprs une F.E.S, on est vraiment capable d'apprhender au mieux la techno ou la mthodologie prsente. La qualit du matriel pdagogique fourni par Objet Direct (prsentation PowerPoint, supports de cours et TP) est aussi un atout.

Se former en dehors du temps de travail et bnficier du DIF


Les formations se droulent en soire, donc en dehors temps de travail et sont ligibles au DIF (Droit individuel la formation). C'est--dire que le temps pass en formation est rmunr hauteur de 50% du salaire. Ainsi, la participation une F.E.S. de 4 heures rapporte lquivalent de 2 heures de salaire net. Ce dispositif mis en place depuis 2 ans a permis Objet Direct de raliser 25 % de son

Les consultants forment les consultants


Les sujets sont proposs par les consultants-formateurs eux-mmes, et slectionns en fonction des thmes qui rassemblent le plus dad-

plan de formation 2009. Au-del des statistiques, limpact sur la motivation des salaris et le climat social est trs positif. Ces formations en soire permettent en effet aussi de se former au mtier de formateur ; Une formation en Soire est parfois lultime tape de mise en situation avant le passage de la certification qui permettra au consultant danimer des formations classiques face des clients , explique Franck Priore, Directeur des Oprations. Cest dailleurs pour le formateur que leffort est intense, la prparation dune formation demandant un gros investissement temps, difficilement conciliable avec les horaires habituels de mission. Le travail de prparation empite souvent sur le temps personnel, sans relle contrepartie financire puisque le DIF ne bnficie pas au formateur. Ces formations sont galement apprcies pour leur aspect convivial : dner et ambiance dtendue. Les F.E.S. ont pour vocation de mettre le pied l'trier d'une technologie ou d'une mthodologie. Elles sont trs orientes pratique, et mme "bonnes pratiques" et intgrent une grande proportion de TP ce qui les rend particulirement efficaces, souligne Rmi Patriarche, consultant Objet Direct. Elles sont aussi trs actuelles, axes sur les dernires tendances technologiques et sont ainsi le reflet d'une relle veille technologique participative. Jean Kaminsky

48

PROgrammez ! \\ Janvier 2010

enqute \\ formation

Comment choisir son cole


Il y a encore peu de temps, les entreprises la recherche dinformaticiens sarrachaient les jeunes diplms la sortie des coles dingnieurs.
ujourdhui, les temps sont devenus plus durs pour tous, y compris les jeunes diplms. Raison de plus pour bien choisir son cole, dautant que certaines dentre elles annoncent que tous leurs lves sont recruts dans un dlai trs bref, et souvent en CDI. Le premier rflexe est de sintresser au taux de recrutement des jeunes diplms la sortie des coles. Celui-ci est souvent li la notorit de lcole. Ainsi, cest grce elle quen France et linternational, les Insa annoncent presque 100% des diplms embauchs en moins de 3 mois. Selon une enqute premier emploi 2010 portant sur linsertion des ingnieurs de la promotion Efrei 2009 (300 ingnieurs forms par an), les jeunes ingnieurs Efrei ne connaissent pas la crise. En effet, en sortant de cette cole, le dlai moyen dinsertion est infrieur 1,5 mois, avec 83% de propositions de pr-embauche. Des taux assez proches de ceux de lEpita, dont 80 95% des tudiants ont trouv du travail moins de deux mois aprs la fin des tudes. Quant lEisti : Jusqu prsent, 100% de nos lves signaient un contrat dembauche avant mme lobtention de leur diplme dingnieur , assure Marie-Pierre Piguet, responsable administrative de lEisti.
D.R.

Quels dbouchs pour quelles coles ?


A y regarder de plus prs, que cherchent les recruteurs ? et quels sont les points forts des coles ? Cest ce que nous allons essayer de mettre au jour travers les prsentations dun certain nombre de ces coles for-

mant bac+5. Le premier critre, savoir la reconnaissance du diplme, nest pas suffisante en situation de pnurie de postes. La notorit et la cooptation par les informaticiens et dveloppeurs dj en situation est certes importante. Nous choisissons les jeunes diplms en fonction de la connaissance que nous avons de lcole (Ensimag, pour la finance, par exemple) , reconnat Franois Salaun, PDG de Softeam. Le choix dun candidat est un quilibre entre deux facteurs : prestige de lcole et personnalit du candidat. La socit de conseil et ingnierie en informatique Devoteam recrute 15 20% de jeunes diplms sur environ 500 recrutements par an. Soit prs de 100 jeunes diplms et environ 70 stagiaires par an. Nous recrutons des diplms dcoles comme lEpita, Isep, Efrei, etc., pour la solidit de la formation scientifique et technique, dune part, et les qualits relationnelles quelles dvelopBenot Castel pent, dautre part , indique Benot Castel, responsable de lquipe recrutement France de Devoteam. Nous attachons aussi de limportance la personnalit du candidat, ainsi quaux expriences professionnelles (stages) et ltranger , ajoute Franois Salaun.

pratique taye par des stages en entreprise tout au long de la formation. Le candidat idal pour les entreprises serait un professionnel de linformatique immdiatement oprationnel, tout en ayant un profil ouvert et adaptable tout au long de la vie professionnelle. Il en rsulte un compromis entre deux types de formations : certaines coles mettent laccent sur les technologies et les applications, dautres sur la formation scientifique, plus thorique, avec la capacit dadaptation. Ainsi lInsia, cole dinformatique applique, met laccent sur les cours techniques, par exemple C++, JEE, SGBD, PHP, technologies enseignes au travers de TP en salles machines, ou de TD, plutt que sur la thorie. Les enseignements dans cette cole passent souvent par des projets comme le dploiement et la configuration de services systmes et rseau sur Linux, Windows, BSD, ou la ralisation de robots comptitifs autonomes. Plutt que des comptences dans des technologies particulires, comme Java, JEE, etc., Devoteam sattache plutt lagilit intellectuelle et ladaptabilit des candidats : Les technologies changent sur 40 ans de carrire. Pour faire un parcours dans linformatique, il est plus prcieux davoir lagilit intellectuelle , affirme Benot Castel. Quant aux qualits relationnelles, elles sont essentielles pour la gestion de projet, le travail en quipe. Nous apprcions les coles o laccent est mis sur des travaux collectifs, avec mise en situation. Les lves apprennent travailler en rseau, tenir un calendrier, grer un projet, faire du reporting , souligne Benot Castel. Outre la motivation du jeune, nous

Technologie versus personnalit


Les entreprises peuvent apprcier dembaucher des jeunes rapidement oprationnels, grce une formation

50

PROgrammez ! \\ Janvier 2010

enqute \\ formation
apprcions la capacit prsenter un projet cohrent, laisance, lesprit de synthse. Dans certaines coles, ces qualits sont dveloppes au travers de piscines , o ltudiant est immerg la fois dans la technologie et dans le travail en quipe. A lInsia, une piscine est une priode intense de TP qui stale sur 2 3 semaines au dbut de lanne, o llve suit des cours sur des matires phares, dans une ambiance de collaboration et dmulation, visant la fois crer un esprit de corps et acqurir rapidement des connaissances techniques de pointe. A InTech Info, chaque semestre, les lves en quipe de 4 6 ralisent deux projets concrets denvergure, en situation de travail semblables celles des entreprises. contenu de ma formation me sert tous les jours, en par ticulier tous les aspects lis au management de projets , affirme un ancien lve de cette cole, aujourdhui ingnieur de projet dans une SSII. De mme pour lEpitech, o la pdagogie se rsume en une phrase : Former autour des projets, o ltudiant est actif ds le dbut , selon Nicolas Sadirac, directeur de cette cole. Le tutorat est aussi lun des points forts de lEisti, qui insiste sur la rigueur et louverture desprit. Dans le domaine pdagogique, nous sommes dans une priode dvolution majeure , souligne Fabrice Bardche, vice-prsident du groupe Ionis, auquel appar tiennent lEpita et lEpitech. LEpita forme des scientifiques. Cest lcole de lintelligence informatique : on y apprend la culture scientifique globale, restituer ses comptences techniques, ainsi que les connaissances managriales. La spcialisation se fait en dernire anne. Elle comporte une rflexion socitale, conomique. Toutes les coles mettent laccent sur limportance des stages, mme si certaines coles les privilgient plus que dautres. Ainsi, sur les 3 ans de formation dispense lEnsea, plus de 7 mois sont consacrs aux stages en entreprise. LEfrei associe, ds le cycle prparatoire intgr, la formation scientifique et technique la formation gnrale et professionnelle de lingnieur, avec quatre stages obligatoires et un stage facultatif, sans faire limpasse sur les cours magistraux en amphi. Cette alliance gnraliste est perue trs positivement par les entreprises, en ce sens quelle permet une grande adaptabilit des lves ds leurs premiers stages , affirme la direction de lEfrei. LEce associe les majeures couvrant la matrise des technologies, aux mineures pour lacquisition des savoir-faire professionnels : sinitier au marketing des technologies, crer une start-up, sengager dans la vie associative, mener un projet de recherche scientifique Coachs par des responsables professionnels, les lves suivent le domaine quils ont choisi. A la pdagogie, il faut associer troitement la vie associative et autres activits de lcole. Ces activits, quelles soient culturelles ou sportives, voire festives, sont non seulement un facteur dattraction pour les futurs lves, mais peuvent galement forger une personnalit et dvelopper des qualits apprcies par les entreprises, comme lpanouissement personnel, la crativit, lesprit dquipe. Une vie associative qui fait partie de la formation : prises de responsabilit, exprience entrepreneuriale, sens de laction collective , indique-t-on Suplec.

Fabrice Bardche

Diverses dmarches pdagogiques


Entre les approches traditionnelles, fondes sur les cours magistraux, et la pdagogie de projets, o laccent est mis sur les stages et la quasi-totalit du travail se fait en petites quipes, sur des problmatiques proches de la ralit professionnelle, il y a tout un ventail de types de pdagogies dans les coles dinformatique. Dans la premire catgorie, citons lEpsi o tout le cursus est fait par des professeurs selon des mthodes denseignement traditionnel , comme lexplique son directeur gnral, Albert Cohen. Les lves y sont trs encadrs : suivis tout au long de leur scolarit, leur prsence aux cours et le travail personnel sont obligatoires. A lautre extrme, InTech Info a choisi de calquer son environnement sur celui des entreprises : la pdagogie est fonde sur le travail en projets, lcole tant conue comme une communaut de travail , avec des quipes pdagogiques jeunes et disponibles, la relation entre enseignants et lves prfigurant le mode de fonctionnement des entreprises, avec un accompagnement individuel de type coach ; ds lentre lcole, llve se voit attribuer un tuteur, souvent un ingnieur en activit, qui a pour rle de lpauler et laider dfinir son projet professionnel. LExia.cesi prne galement la pdagogie par projets. Lessentiel du

Multilinguisme et ouverture linternational


Linternational est devenu obligatoire dans de nombreuses coles. Les cursus internationaux, quil sagisse dune anne ou dun stage dans un autre pays, de projets au sein duniversits ltranger, sont apprcis par toutes les entreprises et considrs comme un atout par les lves. Les deux axes majeurs actuels de dveloppement de lcole sont linternational et lentrepreneuriat , assure Michel Ciazynski, directeur gnral de lIsep, une cole qui compte parmi ses partenaires des universits prestigieuses du monde entier, et accueille galement des tudiants trangers dans son cursus ingnieur. Cest aussi la chance pour les tudiants franais de bnficier dun environnement international lintrieur mme de lcole , affirme-t-on lIsep. Les lves de lExia.cesi peuvent, par le biais de passerelles, suivre la filire recherche au sein de lUQAM (Universi-

D.R.

Janvier 2010 \\ PROgrammez !

51

enqute \\ formation
t du Qubec Montral). Les lves de lEpitech passent la 4e anne ltranger, de prfrence dans un pays anglophone (Etats-Unis, Canada, Australie, Inde), mais aussi Chine ou Russie. Lobjectif est dacqurir une exprience du travail avec des trangers, la comprhension de linternational et linterculturalit , prcise Nicolas Sadirac. Supinfo ouvre progressivement des coles hors de France : au Canada, en Chine, au Maroc, Londres, avec un rythme douverture denviron 7 coles par an, et une nouvelle identit : Supinfo International Universities . Cet essaimage donne aux tudiants la possibilit de mobilit, ce qui est hautement apprci par nombre dentre eux. La mobilit dans lespace europen et international est une priorit majeure pour lEsiea : aprs la Finlande en 2007 et les Pays-Bas en 2008, lcole a sign un nouvel accord avec Anglia se 30 doubles diplmes (Master of Science). LEpitech, pour sa part, totalise plus de 100 universits et instituts partenaires dans 42 pays. Lapprentissage des langues est aussi important. Langlais est obligatoire pour pratiquement tous les tudiants en informatique. A lEnsimag, 95% pratiquent une seconde langue. LEfrei accorde une importance particulire lapprentissage de langlais et dune seconde langue trangre. A lEnsea galement, lapprentissage de deux langues est obligatoire. 25% de la promotion suit une partie de son cursus ltranger. Dans certains cas, les tudiants ont la possibilit dobtenir un double diplme. A lEsigetel, o 20% des cours sont ddis linternational, un centre de langues runit des professeurs danglais, allemand, espagnol, japonais, chinois, russe, italien et arabe, et lcole forme, ds la 3e anne, au Business English sur diffrents thmes professionnels. Certaines coles exigent un score TOEIC pour dcerner leur diplme. Matriser une langue trangre est un lment essentiel, surtout langlais. Par ailleurs, cela donne une ouverture desprit et permet de dvelopper des qualits relationnelles, ainsi que la capacit dadaptation un autre environnement, une autre langue , indique Benot Castel. LEce a depuis longtemps dvelopp des partenariats avec de grandes universits trangres : sminaires obligatoires, semestres dtudes ltranger, offre de masters en dernire anne (double cursus), summer schools, stages ltranger, cursus spcifiques (sections internationales, mineure international , voies dapprofondissement en anglais). Ainsi, les tudiants du cycle prpa bnficient dun semestre entier de formation luniversit anglophone de Concordia Montral pour commencer leur cycle dingnieur. La dernire anne du cycle ingnieur dbute par un sminaire global management dun mois lUniversity of California, Irvine, prs de Los Angeles. De plus, ceux qui le souhaitent peuvent effectuer la dernire anne ou un stage ltranger, grce des conventions avec diffrents pays (Australie, Angleterre, Espagne, Danemark, Norvge, Sude, Finlande, Qubec, Pologne, Prou, Norvge, Afrique du sud, Mexique, Brsil, Chine, Islande). La mineure international a pour objectif de prparer les tudiants partir travailler ltranger et tudier la culture du pays de destination. Depuis la rentre 2005, lEce propose des sections internationales ses lves de 2e et 3e annes de cycle ingnieur, avec un cursus en langue anglais pour la quasitotalit des cours, TP, TD et trois majeures : systmes dinformation et rseaux, systmes embarqus, tlcoms et rseaux.

Connaissance des entreprises et partenariats


Souvent implantes dans une zone constituant un bassin demploi informatique, les coles facilitent de fait le contact entre les lves et les entreprises. Ainsi, chaque campus de Suplec (Gif-sur-Yvette, Rennes, Metz) est implant dans un environnement technologique de haut niveau. Fonde par le GPNI, chambre syndicale des SSII, lEpsi est par nature proche dun vivier demplois potentiels. Ses diffrentes implantations rpondent un besoin local de personnel. Les partenariats avec les entreprises sont un atout pour les lves. A lInsia, un cercle des parrains , regroupant les entreprises partenaires, vise devenir la rfrence en termes de partenariat entre les univers de la formation et de lentreprise. Des personnes en activit dans les entreprises peuvent tre charges denseignement. Par exemple, des consultants de Devoteam interviennent dans les enseignements de certaines coles : Il en rsulte une interpntration des milieux assez forte , indique Benot Castel. Par ailleurs, les stages en entreprise, qui sont un passage oblig dans la plupart des coles, permettent aux lves de mieux connatre le milieu de lentreprise. Cest dailleurs souvent le mode de recrutement prfr des entreprises. Ainsi Devoteam reoit prs dune soixantaine de stagiaires par an. Pour les stages, nous privilgions les tudiants qui viennent nos confrences et se prsentent nos consultants enseignants , souligne

D.R.

Ruskin University, Royaume-Uni : les lves de 3e anne peuvent effectuer un semestre dtudes de niveau Bachelor of Science sur lun des campus dARU, Chelmsford ou Cambridge. Dans le mme temps, si cela est ncessaire, ils peuvent bnficier de cours de renforcement danglais afin damliorer leur score au TOEIC. LEsiea a aussi un accord avec King Mongkuts University of Technology Tonbury en Thalande, permettant des changes dtudiants, des projets inter-universitaires et des rencontres entre tablissements. LEfrei multiplie les partenariats avec les universits et les entreprises ltranger : 66 partenariats actifs rpartis dans 29 pays, quil sagisse dchanges acadmiques (Erasmus, Crepuq, changes bilatraux avec des pays dAsie, Russie, Etats-Unis, Mexique), de sjours dimmersion ou de stages. Elle propo-

52

PROgrammez ! \\ Janvier 2010

enqute \\ formation

Janvier 2010 \\ PROgrammez !

53

enqute \\ formation
Benot Castel. Cest lexpression dune motivation plus forte que celle qui peut ressortir dune candidature spontane : cela prouve que llve narrive pas par hasard. La relation entre cole et entreprise rassure souvent cette dernire sur la capacit du jeune diplm tenir son poste, sexprimer Quant llve, par ses contacts avec des personnes issues du milieu professionnel, il a dj une premire ide de ce quil aimerait faire. Cela fait partie de la motivation , ajoute Benot Castel. Suplec met en avant le haut niveau de recherche et la qualit de lenseignement, grce une troite liaison avec lindustrie, notamment via les contrats de recherche. Les formations conues pour et avec les entreprises permettent de raliser un vritable systme de transfert des connaissances entre lcole et les entreprises. LExia.cesi fait appel des experts du secteur informatique, du management ou du droit pour intervenir au cours de confrences ou suivre des projets. Le partenariat entre InTech Info et les grandes entreprises couvre un large spectre dactions : laboration de projet pdagogique, dfinition des comptences et des mtiers, dlgation de tuteurs, de chefs de projets, offres de stages, contrats dalternance, cofinancement de la formation. Les entreprises partenaires animent la moiti des modules, valuent les projets prsents loccasion des forums et peuvent confier aux lves des projets informatiques dvelopper. Des partenariats avec des diteurs ont une grande importance dans certaines coles, comme lExia.cesi, mais surtout Supinfo, qui grce ces partenariats a mis en place des laboratoires pdagogiques consacrs aux diffrentes technologies (Microsoft, Cisco, Apple, Oracle, IBM). De tels partenariats permettent aux lves de bnficier en avant-premire des volutions technologiques et de lutilisation privilgie des logiciels. Nous considrons les partenariats avec des diteurs de logiciels comme trs importants pour la formation ces produits , souligne Mauricio Diaz Orlich, directeur des laboratoires de Supinfo.

Comment financer ses tudes


Enfin, les aspects de financement ne sont pas le moindre critre considrer en priode de difficult conomique. Si beaucoup de formations bac+2 sont publiques (universit, math sup et sp dans les lyces dEtat), les tudiants qui souhaitent acqurir un niveau bac+5 sont confronts au choix entre deux filires : celles de lEtat, gratuites mais difficiles daccs car trs slectives, et les coles prives, relativement coteuses : quelques milliers deuros par an, soit plusieurs dizaines de milliers de k pour la totalit de la formation. Toutefois, le prix des tudes peut tre rduit grce au cofinancement avec des entreprises (Insia ou InTech Info, par exemple), par des bourses pour les coles reconnues par lEtat, ou des prts. Prts bancaires tudiants tarif prfrentiel, rmunration des stages et de lalternance, missions rmunres Les banques partenaires de lEisti proposent aux lves-ingnieurs un financement intgral de leurs tudes, sans caution parentale, un taux raisonnable, remboursable une anne aprs lentre dans la vie professionnelle sur 36 ou 72 mois. Dsormais, nous accompagnons ce financement des tudes par une mesure forte : la prise en charge par lEisti des intrts du prt bancaire tant que le jeune diplm na pas acquis un contrat dembauche , assure MariePierre Piguet. Quant aux sjours ltranger, quil sagisse de stages ou dtudes, cest une question de curiosit et de volont plutt quune stricte question de finances , ajoute MarieJose Lamerre, responsable relations internationales de lEisti. De nombreux dispositifs ont t mis en place par la Rgion le-de-France et le Conseil Gnral du Val-dOise pour soutenir matriellement les tudiants. Quoi quil en soit, la difficult concerne surtout les premires annes, puisque, plus llve avance dans le cursus, plus les stages lui permettent de financer ses tudes. Claire Rmy

Ecoles informatiques (niveau bac+5) : o les trouver ?


(liste non exhaustive)

Ecole
ECE (cole centrale dlectronique) EFREI (cole franaise dlectronique et dinformatique) EISTI (cole internationale des sciences du traitement de linformation) ENSEA (cole nationale suprieure de llectronique et de ses applications) ENSIIE (cole nationale suprieure dinformatique pour lindustrie et lentreprise) ENSIMAG - INP EPITA EPITECH EPSI (Ecole Prive des Sciences de lInformatique) ESGI (cole suprieure de gnie informatique) ESIEA (cole suprieure dinformatique, lectronique, automatique) ESIGETEL (cole suprieure en informatique et gnie des tlcommunications) IGM (institut dlectronique et dinformatique Gaspard Monge) INSA informatique INSIA (institut suprieur dinformatique applique) INTECH INFO ISEP (institut suprieur d'lectronique de Paris) SUPELEC (cole suprieure dlectricit) SUPINFO

Situation gographique
Paris Villejuif Cergy, Pau Cergy Evry Grenoble Paris

Site web
www.ece.fr www.efrei.fr www.eisti.fr www.ensea.fr www.ensiie.fr www.ensimag.fr www.epita.fr

Paris, Bordeaux, Lille, Lyon, Marseille, Nancy, www.epitech.fr Montpellier, Nantes, Nice, Rennes, Strasbourg, Toulouse Paris, Bordeaux, Montpellier, Arras, Nantes, Lyon Paris Paris, Laval Fontainebleau-Avon www.epsi.fr www.esgi.fr www.esiea.fr www.esigetel.fr www.exia.cesi.fr www-igm.univ-mlv.fr www.insa.fr www.insia.org www.intechinfo.fr www.isep.fr www.supelec.fr www.supinfo.com

EXIA.CESI (cole suprieure dinformatique du groupe CESI) Arcueil, Pau, Rouen, Toulouse (et autres rgions) Marne-la-Valle Lyon, Rennes, Toulouse Paris Paris Paris Gif-sur-Yvette, Rennes, Metz Paris, Strasbourg, Bordeaux, Rennes, Montpellier, Lille, Marseille,Metz, Reims, Martinique,Runion, Guadeloupe

54

PROgrammez ! \\ Janvier 2010

gros plan \\ google

Go, Chrome OS et Closure Tools : pas de rpit chez Google


Entre la rvlation du projet Chrome OS dbut juillet 2009 et lannonce le 19 novembre dernier de louverture tout le monde de son code source, Google poursuit son agenda technologique en annonant non seulement la sortie de ses Closure Tools, une suite doutils pour JavaScript, mais galement son propre langage de programmation, Go.
Go : New, Experimental, Concurrent, GarbageCollected, Systems Language
Le langage Go est laboutissement dun projet initi en 2007 par Ken Thompson, (crateur du langage B, prcurseur du C, et employ Google depuis 2006), Robert Griesemer et Rob Pike, auteurs du format dencodage trs rpandu : lUTF-8. On peut regrouper les dclarations de mme type dans une liste parenthse, spare par des points-virgules ( lexception, comme on vient de le voir, du dernier lment de la liste). const ( Space = " "; Newline = "\n" // On peut omettre le dernier point-virgule ) On pourrait galement crire : const Space = " " const Newline = "\n" Jetons maintenant un il la dclaration et laffectation de variables avec Go. On utilise le mot-cl var, suivi du nom de la variable, suivi de son type, suivi du signe gal, et dune valeur initiale : var s string = "" ; Mais cette dclaration peut tre raccourcie : puisque la valeur "" est de type string, nous navons pas besoin de le signaler au compilateur. On pourrait ainsi crire : var s = "" ; Chaque fichier source Go dclare, en utilisant le mot-cl package, quel package il appartient (ici, le package main ). Il peut galement importer dautres packages afin den utiliser ses fonctions. Ici, nous importons le package fmt afin davoir accs la mthode fmt.Printf. Les fonctions sont dclares avec le mot-cl func. La fonction main est le point dentre du programme, tout comme en Java et en C/C++. Les chanes de caractres peuvent contenir des caractres Unicode. Dailleurs, les fichiers source Go sont, vous laurez devin, encods en UTF-8 par dfaut. La convention pour les commentaires est la mme quen Java, C et C++ : /* */ // Les points-virgules sont utiliss comme en C, en C++ et en Java, mais dans beaucoup de cas, on peut sen passer. Cela sinscrit dans loptique de Google de rendre la programmation plus rapide, et de ce fait, plus agrable. Les points-virgules sparent les instructions (et les dclarations) plutt que de les terminer, ils sont donc facultatifs aprs la dernire dclaration dun bloc. Illustrons ceci avec un exemple de dclaration de constantes. const ( Space = " "; Newline = "\n"; ) Mais on ne sarrtera pas l ! On peut davantage raccourcir et crire : s := "" ; Loprateur := est beaucoup utilis dans Go pour reprsenter une dclaration et une affectation simultane. On remarque donc quavec cette affrence de type, Go se veut tre un langage dynamique. Cest le principe du Duck Typing : Si je vois un animal qui vole comme un canard, crie comme un canard, et nage comme un canard, alors j'appelle cet oiseau un canard . Les boucles for ont galement chang dans Go, les parenthses de la clause ont disparu, acclrant ainsi un peu plus le codage : for i := 0; i < 10; i++ { } Notons que dans le cas de clauses for, les points-virgules sont indispensables.

Hello, World !
Comment prsenter un nouveau langage sans montrer son Hello, World ? Voici donc quoi ressemble le fameux Hello World en Go : package main import "fmt" // Package implementing formatted I/O func main() { fmt.Printf("Hello, World !\n") }

La compilation :
A ce jour, il existe deux compilateurs : gccgo est un compilateur Go qui repose sur le compilateur GCC. Il existe aussi une suite de compilateurs avec des noms qui varient en fonction de larchitecture avec, entre autres : 6g pour les 64-bit x86, et 8g pour les 32-bit x86. Ces derniers compilent plus rapidement que le gccgo mais gnrent du code un peu moins efficace. Voyons comment compiler notre helloworld.go avec ces diffrents compilateurs. Janvier 2010 \\ PROgrammez !

55

gros plan \\ google


Avec 6g/8g : $ 8g helloworld.go $ 8l helloworld.8 $ 8.out Hello, world ! $ Avec gccgo : $ gccgo helloworld.go $ a.out Hello, world ! $ La nomenclature des compilateurs provient du projet Plan 9 de Bell Labs cr, entre autres, par Ken Thompson et Rob Pike, dont les diffrentes versions de compilateurs de fichiers C sont les suivantes : 0c spim littleendian MIPS 3000 family 1c 68000 Motorola MC68000 2c 68020 Motorola MC68020 5c arm littleendian ARM 6c amd64 AMD64 and compatibles (e.g., Intel EM64T) 7c alpha Digital Alpha APX 8c 386 Intel i386, i486, Pentium, etc. kc sparc Sun SPARC qc power Power PC vc mips bigendian MIPS 3000 family # compile; object goes into helloworld.8 # link; output goes into 8.out

Chrome OS : un systme dexploitation orient cloud


Chrome OS est le nouveau systme dexploitation de Google. Bas sur une version ultra-allge de la distribution Debian, il est initialement destin aux netbooks, et se veut entirement tourn vers le Web et les services en ligne. Il devrait tre disponible au second semestre 2010, mais le code source (projet Chromium OS) est ouvert tous depuis le 19 novembre. Comme son nom lindique, il est bas sur le navigateur Chrome, conu pour rpondre la prolifration dapplications Web de plus en plus puissantes. Chrome OS garde ce cap, et le navigateur devient un systme dexploitation part entire. Rapidit, simplicit, scurit Chez Google, on voulait un systme dexploitation rapide, ils se sont donc dbarrass de tous les processus inutiles, ont optimis normment doprations et excutent le plus de traitements en parallle. Et cela semble payant : Chrome OS bat des records de dmarrage : en 5 secondes seulement, lordinateur est prt tre utilis et connect internet. Linterface est simpliste, elle reprend celle du navigateur Chrome, toutes les applications sont organises en onglets, et le bureau aussi nest autre quun onglet [Fig.1 et 2]. Toutes les applications sont des applications Web. On y trouvera entre autres les incontournables de la maison : Google Docs pour la bureautique, Gmail pour la messagerie, et Google Talk pour la messagerie instantane. On ne stocke plus aucune donne sur lordinateur, tout est entirement en ligne dans le Cloud . De ce fait, il ny a plus besoin dinstaller ou de mettre jour quoi que ce soit. Par contre, il est impossible dinstaller des applications classiques
Fig.1

Langage dynamique Et compil ?


En fait, Google a essay de garder le meilleur des deux mondes. Fortement inspir du C++ et du Python, Google explique que "Go combine la vitesse de dveloppement quand on programme avec un langage dynamique comme Python, avec lefficacit et la scurit des langages compils comme C ou C++". Cest un langage compil et multitche, et Google sest efforc de respecter le multithreading (avec des goroutines , qui remplacent les threads) tout en gardant une performance optimale, proche de celle du C : les performances de Go seraient de lordre de 10 20% infrieures celles du C.

Compiler rapidement du code rapide


Le fer de lance de Go est sa rapidit de compilation. En effet, lors du Tech Talk, Rob Pike nous dmontre que le package tree entier de Go, qui comprend environ 120 000 lignes de code (regroupant toutes les librairies du langage Go, les flags, expressions rgulires, et bien plus) se compile en moins de 10 secondes sur un ordinateur portable ! Go fournit galement un modle pour la construction de logiciels qui rend lanalyse de dpendances facile et qui vite ainsi le chargement de la plupart des bibliothques et des fichiers dinclusion de type C. Google a aussi voulu amliorer le typage : les types nayant pas de hirarchie sous Go, on pourra ainsi limiter le temps pass dfinir leurs relations. Et le langage Go tente de rendre les types plus lgers que dans les langages orients objet classiques. Donc bien que Go repose sur les notions de types et de mthodes et quil permette un style de programmation oriente objet, certains considreront que labsence de hirarchie rend justement ces objets trop lgers par rapport ceux de langages comme Java ou C++. Go est-il donc un langage orient objet ? Oui et non. Go gre aussi compltement le ramasse-miettes et propose un support fondamental pour lexcution concurrente, il serait donc particulirement adapt au dveloppement de logiciels excuts sur des machines plusieurs processeurs, ou un seul processeur et plusieurs curs dexcution.

Le bureau de Chrome OS
Fig.2

Lexplorateur de fichiers de Chrome OS

56

PROgrammez ! \\ Janvier 2010

gros plan \\ google


comme sous Windows ou Linux. Chrome OS est vraiment ddi lInternet, et cest se demander si Google na pas fait un pari un peu os en limitant cet OS la navigation sur Internet. Il est vrai que les netbooks sont dabord utiliss cet effet, mais certaines personnes qui achtent un ordinateur pourraient certainement avoir envie de faire autre chose que de surfer sur le Web. Vous, par exemple, tes-vous prt laisser tomber vos applications desktop ? La scurit tait aussi une des proccupations majeures de Google en dveloppant ce systme dexploitation afin que les utilisateurs naient pas se proccuper de virus, de malwares, ou de mises jour de scurit . Contrairement aux autres systmes dexploitation, Chrome OS ne fait confiance aucune des applications que vous excutez. Chacune dentre elles est lance dans son propre sandbox (bac sable), rendant ainsi une infection par un virus ou un malware beaucoup plus difficile. Chrome OS ne se fait pas non plus confiance : chaque dmarrage de lordinateur, lOS vrifie lintgrit de son code. Si le systme a t compromis, il sauto rpare : une version propre est automatiquement rinstalle. Cela est rendu possible par le fait que toutes les donnes sont stockes dans le Cloud sur un serveur et non sur lordinateur. On devrait voir apparatre les premiers netbooks commercialiss avec Chrome OS vers fin 2010, mais si vous souhaitez dj lessayer, il existe une version compile partir des sources, tlchargeable en bittorrent. Limage est au format VMWare (image VMDK), donc vous aurez besoin de VMWare Player (http://www.vmware.com/products/player/), VMWare Fusion (http://www.vmware.com/products/fusion/) pour ceux dentre vous qui sont sur Mac, ou encore VirtualBox de Sun (http://www.virtualbox.org/). Site Officiel : http://www.chromium.org/chromium-os svn checkout http://closure-library.googlecode.com/svn/trunk/ closure-library-read-only Une fois tlcharge, on obtient un dossier closure-library-readonly contenant tout le code de la Closure Library. Crons ensuite un script que lon nommera hello.js :

Et un fichier HTML qui utilisera ce script :

Closure Tools :
une suite doutils JavaScript
Le 5 novembre a vu sortir une collection doutils JavaScript ayant contribu au dveloppement des applications Web phares de Google comme Google Maps, Gmail ou Google Docs. Google a toujours vanglis la puissance de JavaScript, et depuis ces applications qui avaient jet un pav dans la mare en montrant ses possibilits, il a galement sorti, pour le navigateur Chrome, un moteur dinterprtation open-source ECMAScript V8 , un des plus performants ce jour. Closure Tools est une suite de 3 outils dont le code est disponible sous licence Apache : Closure Library Closure Compiler Closure Templates Closure Library : une bibliothque JavaScript linstar de jQuery, MooTools et Dojo Closure Library est une bibliothque JavaScript standardise mettant disposition des toolkits qui permettent de dployer une application Web et ce, quel que soit le serveur ou le navigateur. On y retrouve, entre autres, la manipulation du DOM (Document Object Model), ldition WYSIWYG (What You See Is What You Get), les widgets, la srialisation JSON, la gestion dvnements et lanimation. Elle tend les fonctionnalits du navigateur et permet dcrire des scripts plus rapidement avec une API ddie et une syntaxe spcifique. Regardons un exemple de son utilisation. Vous laurez peut-tre devin, un petit Hello World. Il faut tout dabord tlcharger la Closure Library, vous aurez besoin dun client Subversion afin de la rcuprer :

En ouvrant le hello.html, on obtient notre fameux Hello World. Le script hello.js utilise deux fonctions (goog.dom. createDom() et goog.dom.appendChild()) qui sont dfinies dans le fichier closure-library-read-only/dom/dom.js. Afin de pouvoir les utiliser, on y fait appel dans le fichier hello.js au moyen de lexpression goog.require('goog.dom') ainsi que par lappel du fichier base.js dans le hello.html. Cest dans le fichier base.js quest dfinie la fonction goog.require(). Lappel goog.require(goog.dom) charge le fichier JavaScript qui dfinit toutes les fonctions du namespace goog.dom ainsi que tous les autres fichiers de la Closure Library dont ces fonctions ont besoin. La Closure Library charge ces fichiers en ajoutant dynamiquement une balise de script au fichier HTML. Par exemple, lexpression goog.require(goog.dom) de hello.js entrane lajout dune balise script dans hello.html :
Fig.3

o path-to-closure est le chemin de lemplacement de hello.html vers le rpertoire o se trouve base.js. Cependant, bien quelle paraisse trs utile, cette librairie est encore jeune et il y a dj quelques retours de la part de dveloppeurs faisant part de soucis de performances, il serait donc imprudent dabandonner compltement vos librairies prouves comme jQuery ds aujourdhui. Closure Compiler : optimisez et compressez votre JavaScript La vocation de ce module est lefficacit : dune part, il rduit la taille des fichiers JavaScript (donc le temps dinterprtation de ces fichiers), dautre part, il vrifie le code, et affiche des erreurs dtailles si le code a t mal rdig ou sil pourrait tre mal inter-

Fig.4

Janvier 2010 \\ PROgrammez !

57

gros plan \\ google


prt (erreurs de syntaxe, de rfrencement de variables, ou de types). Il gnre donc un script plus propre et plus conforme. Grce au plugin Firefox Closure Inspector, on peut dsormais utiliser le dbogueur JavaScript FireBug avec les scripts compils par Closure Compiler. Closure Compiler a galement t intgr au plugin Firefox Page Speed afin dvaluer le gain de temps qui dcoulerait de son utilisation. Closure Compiler peut tre utilis de 3 manires diffrentes : Une application Web avec interface graphique Une application Java excutable en ligne de commande Une API RESTful Lapplication Web Pour utiliser lapplication Web, il suffit de se rendre sur http://closurecompiler.appspot.com et dindiquer lURL de votre fichier .js que vous voulez optimiser, ou alors tout simplement faire un copier-coller de votre code JavaScript dans le champ prvu cet effet, puis dappuyer sur le bouton Compile : [Fig.4 et 5] Lapplication Java en ligne de commande Tout dabord, il faut crer un rpertoire nomm closure-compiler . Ensuite nous devons tlcharger le fichier compiler.jar du Closure Compiler, et le placer dans ce rpertoire. Ecrivons ensuite un fichier JavaScript simple: hello.js, et enregistrons-le dans notre rpertoire closure-compiler . Le paramtre compilation_level indique au compilateur quel niveau doptimisation il doit utiliser. Ici, WHITESPACE_ONLY indique quil ne doit effectuer que des optimisations les plus basiques (il retire les commentaires et les espaces inutiles). Il existe dautres niveaux plus sophistiqus : SIMPLE_OPTIMIZATIONS , le mode par dfaut, il n'interfre pas avec les autres scripts et librairies qui pourraient tre prsents sur la page ; ADVANCED_OPTIMIZATIONS , qui prend des liberts avec les noms de fonctions et de variables afin de les optimiser ; mais attention, ce mode peut dramatiquement modifier votre code qui risque de ne plus tre correctement interprt, notamment s'il fait appel d'autres frameworks comme jQuery. Si on ouvre closure_compiler_test.html dans un navigateur, on obtient une page comme ceci :

Pour compiler ce fichier, on lance la commande suivante dans la console ( partir du rpertoire closure-compiler ) : java -jar compiler.jar --js hello.js --js_output_file hello-compiled.js Cette commande va crer un nouveau fichier hello-compiled.js qui contient le code suivant : Il suffit ensuite de cliquer sur le bouton Optimize et on obtient le code optimis correspondant que lon peut copier-coller :

Comme vous pouvez le voir, Closure Compiler enlve les commentaires, les espaces, et les points-virgules inutiles. Il a galement remplac le paramtre longName par un nom beaucoup plus court : a . LAPI RESTful LAPI RESTful permet dautomatiser le processus doptimisation, ou alors de lintgrer dans un systme plus important (comme une extension dIDE, par exemple). Pour faire appel cette API, il suffit de crer une page HTML quon appellera closure_compiler_test.html :

Fig.5

Closure Templates : Gnration simplifie de code HTML Closure Templates est un moteur de templating, gnration dynamique de pages Web, qui simplifie le codage de pages HTML en sparant lapparence et le contenu. Closure Templates est mis en uvre dans Gmail et Google Docs, et son fer de lance est que les templates sont indpendants de la technologie sous-jacente. En effet, les templates ont une syntaxe spcifique (et une extension .soy), et peuvent tre implments tant du ct client avec du JavaScript prcompil, que du ct serveur avec Java. La syntaxe est plutt triviale, et on y retrouve des lments classiques comme, entre autres, des boucles, des contrles et des oprateurs. Aujourdhui, on peut difficilement imaginer que Closure Library puisse concurrencer des librairies performantes et prouves comme jQuery. Closure Templates aussi risque davoir du mal saffirmer face aux technologies existantes. En revanche, Closure Compiler, grce au plugin FireBug, fait dj partie des outils indispensables du dveloppeur JavaScript. Il va donc falloir attendre davoir un peu plus de recul afin que les dveloppeurs puissent faire le bon choix technologique. Martin Oppetit Ingnieur de dveloppement chez Aeon Consulting martin.oppetit@aeon-consulting.fr

58

PROgrammez ! \\ Janvier 2010

Toutes les solutions et nouveauts pour encore plus de libre au service de lentreprise !

Business Intelligence Clustering & Grid CMS Collaboratif CRM Data Center Dveloppement E-Commerce ERP Introprabilit Mobilit Network Management Poste de Travail Scurit SGDB SOA & Web Services Temps Rel & Embarqu VoIP Virtualisation

16,17 et 18 mars 2010


Paris - Porte de Versailles - Hall 1
un vnement partenaire ofciel partenaire

www.solutionslinux.fr

technique \\ intgration

Hudson, le serveur d'intgration adopt par les grands groupes industriels


Hudson est un serveur d'intgration continue, open source. Il est hberg sur java.net et bnficie d'une des plus fortes activits open source. De grands acteurs industriels et de l'open source comme eBay, Yahoo, SwingLabs, GlassFish, JBoss, Lucene, MySQL, Apache ou Eclipse lutilisent.
Que fait Hudson?
Concevoir et dvelopper un composant logiciel est une tche part entire mais vrifier son intgration avec d'autres composants dans un environnement proche de l'environnement final est une autre tche beaucoup plus consommatrice. Des processus d'intgration continue permettent d'automatiser les points intgrations manuels, de faire jouer automatiquement les tests de non rgression vitant ainsi les phases de recherches d'anomalies longues et prilleuses. Ces processus d'intgration sont orchestrs dans une chane de build qui sera excute en permanence par l'outil d'intgration continue. Et tout comme ses concurrents, Hudson est capable de dclencher une chane de build de manire rpte. La chane de build d'un projet est constitue de scripts automatisables, et compose de diffrentes tapes allant de la gnration de code au dploiement, en passant par la compilation des sources du projet et l'excution des tests de non rgression. Un utilisateur peut dclencher manuellement cette chane de build. Nanmoins, dans un scnario classique, Hudson est en coute des changements du gestionnaire de configuration comme Subversion et dclenche la chane de build chaque changement de code source des dveloppeurs. Les tests et les diffrents rapports de mtriques, dont la couverture de code, la documentation technique (ex:Javadoc), sont reports par Hudson et accessibles aux membres de l'quipe du projet. Hudson va donc automatiser les tapes manuelles de la construction d'une application afin de permettre aux dveloppeurs d'une quipe projet de passer plus de temps crer et dvelopper de nouvelles fonctionnalits. Il faut considrer Hudson comme un autre membre de l'quipe, extrmement mticuleux et organis et qui n'est jamais malade, ce qui contribue l'augmentation de la productivit.

Schma du dashboard Hudson http://hudson.zones.apache.org/hudson/


sur les serveurs d'intgration en reprenant les meilleures fonctionnalits des produits existants sans les inconvnients. Hudson est distribu sous licence MIT et Creative Commons, ce qui lui confre sa libert dutilisation et dexploitation.

Les critres de choix d'un serveur d'intgration continue


Le choix d'un outil par rapport un autre est dfini avant tout par l'usage que l'on en fait. Il doit rpondre un large ventail de besoins utilisateurs, comme possder une interface de visualisation permettant de contrler le statut des projets, d'administrer et d'accder aux rapports statiques. Il doit supporter plusieurs outils SCM, pouvoir construire les projets de diffrents langages et fournir un ensemble d'outils de notification afin d'avertir l'quipe projet dans les plus brefs dlais du succs ou de l'chec du rsultat de l'excution de la chane de build. Hudson est dot d'une interface Web graphique fournissant des indicateurs de diffrents types avec un mcanisme de couleurs pour le rsultat de build (rouge en cas d'erreur comme dans le cas d'une erreur de compilation, jaune en cas de build instable comme dans le cas o il y a des tests en chec et bleu dans le cas du succs d'un build). Notons que dans la culture japonaise, la couleur bleue est synonyme d'espoir; il vous est possible de la changer par l'ajout d'une extension Hudson. De plus, Hudson propose la notion de sant des projets ou mto du projet. Cette sant peut tre calcule de diffrentes manires en fonction des extensions installes et actives sur le projet. Par dfaut, la sant du projet correspond au pourcentage des builds rcents ayant russi: plus ce pourcentage est lev, meilleure est la sant du projet. Cette notion de sant permet d'identifier les projets qui sont souvent en chec ou qui ne satisfont pas un ensemble de rgles, par exemple une couverture de code suprieure 80%; alors que le dernier build n'est pas en chec car le projet compile et que l'ensemble des tests jous sur le projet sont satisfaits.

La naissance de Hudson
Hudson a t cr par Kohsuke Kawaguchi, ingnieur chez Sun au Japon. Son objectif tait de fournir un serveur d'intgration continue multi plate-forme, dont le mot d'ordre serait la simplicit en termes de dploiement, d'utilisation et d'extension, compar aux outils qui taient sur le march au moment de sa cration, comme CruiseControl ou Continuum. Hudson est donc n de l'expertise acquise

Les avantages de Hudson


Hudson se distingue tout d'abord de ses concurrents par la trs grande simplicit d'installation et d'utilisation.

60

PROgrammez ! \\ Janvier 2010

technique \\ intgration
Installation
Hudson est livr sous forme d'une archive Web. Il vous suffit de la dployer dans le container Web de votre choix comme le serveur Tomcat ou SpringSource TC Serveur. Ce dernier est trs pratique puisqu'il intgre un serveur Tomcat corrigeant de nombreux problmes (plus particulirement sur le classloader) et fournit des scripts d'administration. Mais l'ajout d'un container de servlet est optionnel. En effet, l'archive Hudson elle-mme, inclut le trs lger serveur Web Winstome qui permet de disposer d'une instance Hudson sans aucun autre outil supplmentaire. C'est trs pratique dans le cadre de la ralisation d'une dmonstration de Hudson. try { int status = client.executeMethod(postMethod); System.out.println(status + "\n"+ postMethod.get ResponseBodyAsString()); } finally { postMethod.releaseConnection(); } } Exemple de rcupration du statut de lensemble des jobs dun dashboard Hudson : private void read(String hudsonBaseURL) throws IOException, Http Exception,DocumentException { URL url = new URL(hudsonBaseURL + "/api/xml"); Document dom = new SAXReader().read(url); for (Element job : (List<Element>) dom.getRootElement().elements ("job")) { System.out.println(String.format("Name:%s\tStatus: %s", job.elementText("name"), job.elementText("color"))); } } En outre, toujours au sein de l'archive Web, un module Hudson CLI est livr. Ce dernier permet de piloter l'outil Hudson entirement en ligne de commande. Ces possibilits d'administration sont indispensables au sein de grands groupes industriels o les instances Hudson sont souvent pilotes par des quipes d'administration ddies. En effet, tous ces services permettent de rduire le temps de prise en main de l'outil pour les intgrateurs et les administrateurs. Exemple de la dsactivation d'un job sur une instance Hudson existante par Hudson CLI : java -jar hudson-cli.jar -s http://hudsonserver:8090 disable-job my-job Exemple de rcupration de la date du dernier build d'un projet Hudson : curl http://code.taglab.com/hudson/job/Gradle/lastBuild/build Timestamp?format=dd/MM/yyyy

Configuration
Hudson se distingue par la fourniture d'une interface graphique trs riche et trs intuitive pour configurer les projets qu'il excutera et les outils (comme Ant, Maven ou autres), dont la chane de build d'un projet dpend. Tous les lments de configuration de l'interface graphique sont constitus par un ensemble de formulaires. L'aisance de la configuration graphique est fournie entre autres, par une zone d'aide pour chaque entre des formulaires Cette zone est dans certaines situations traduite en 8 langues. La convivialit en termes de configuration permet d'viter de livrer l'intgrateur lui mme, ce qui n'est souvent pas le cas pour les autres outils du march. Par ailleurs, la configuration Hudson est convertie en fichier XML simple aprs la cration des projets, ce qui permet une configuration manuelle si besoin. En effet, il est possible de changer un lment de configuration depuis l'interface graphique, ou directement depuis son fichier XML correspondant, pour que ce changement soit effectif. [Fig.1]
Fig.1

Les autres fonctionnalits


De plus, Hudson expose lensemble des ses oprations de configuration et d'utilisation par API. Dans un style REST, il est ainsi trs facile de pouvoir raliser des oprations de type CRUD (cration, mise jour, suppression de projets), dclencher un build ou mme rcuprer le rsultat des diffrents builds. Exemple de cration d'un job Hudson par API via une implmentation Java avec HttpClient : private void put(HttpClient client, String hudsonBaseURL,String jobName, File configFile) throws IOException, HttpException { PostMethod postMethod = new PostMethod(hudsonBaseURL+ "/create Item?name=" + jobName); postMethod.setRequestHeader("Content-type","application/xml; charset=ISO-8859-1"); postMethod.setRequestBody(new FileInputStream(configFile)); postMethod.setDoAuthentication(true); Hudson se distingue aussi sur le march des serveurs d'intgration continue par l'ajout de fonctionnalits supplmentaires comme les dpendances de builds entre les projets, les builds distribus, les matrices de configuration, son extrme extensibilit et mme son ouverture sur le cloud computing. Dpendances de builds Hudson peut mettre en place un mcanisme de dpendances entre les projets de build avec la notion de projet en aval et projets en amont. Un scnario classique permet par exemple d'excuter un build lger suivi d'un build d'intgration. Le premier est charg uniquement de lancer les tapes de compilation et les tests unitaires. En revanche, le second build est charg de l'excution des tests d'intgration (plus longs en temps d'excution) et de l'excution d'ventuels mtriques. Hudson permet d'invoquer ce second build automatiquement la fin du premier si ce dernier est en succs. Hudson peut agrger les rsultats, par exemple le rsultat des tests

Janvier 2010 \\ PROgrammez !

61

technique \\ intgration
la fin de la chane de dpendances. Ce dcoupage permet d'avoir un retour utilisateur plus rapide, trs utile dans le cas de systmes complexes o une chane de build complte prend plusieurs heures. Un autre scnario est d'avoir la possibilit de lancer aprs la construction d'une librairie transverse, la construction simultane de plusieurs composants indpendants les uns des autres, mais o chaque composant dpend de cette librairie transverse. Cette paralllisation des constructions des composants permet de rduire le temps de construction global d'un projet et permet ainsi d'informer du succs ou de l'chec de la chane de build plus rapidement. Builds distribus Nombreux sont les logiciels ayant besoin d'tre excuts sur plusieurs plates-formes. Votre outil d'intgration doit donc vous fournir la capacit de tester sur plusieurs environnements. Hudson permet de pouvoir dlguer d'autres serveurs que le serveur hbergeant Hudson, le lancement de la chane de build de certains projets. C'est la notion de serveur matre et de serveurs esclaves. Par exemple, un scnario classique est d'avoir une instance Hudson installe sur un serveur Windows excutant la chaine de build d'un projet sur une distribution Linux. De ce fait, votre build s'excute dans un environnement compltement isol de la plate-forme Hudson. [Fig.2] Ce service est galement souvent trs utilis lorsque la chane de build met en uvre certains outils installs sur des machines spcifiques et qui ne sont pas prsents sur le serveur o est install Hudson. C'est utilis aussi dans le cas o l'outil requis par la chane de build est prsent sur le serveur Hudson mais pas dans la bonne version. Un cas d'exemple est de disposer d'une machine de build o serait install l'outil propritaire Visual Studio pour disposer des routines de build des projets .NET. Cet outil est install sur uniquement une machine ddie avec une licence serveur. Dans ce contexte, l'instance Hudson installe et configure sur une autre machine va dlguer tous les build .NET au serveur en question. Matrices de configuration Une autre fonctionnalit trs intressante de Hudson est la possibilit de mettre en place des matrices de configuration. Elle est particulirement adapte aux projets qui ncessitent un grand nombre de configurations diffrentes, comme des environnements de tests multiples, des binaires spcifiques une plateforme, etc. Par exemple, vous pouvez builder un mme projet avec diffrentes versions du JDK, diffrents types de base de donnes; et agrger les rsultats. Grce aux matrices de configuration, la mise en place d'un tel environnement d'intgration continue est simplifie grandement. [Fig.3 et 4] Couples la possibilit de distribuer les builds, les matrices de configuration permettent d'augmenter le
Fig.2 Fig.3

nombre de projets pouvant se construire simultanment et donc de rduire le temps global d'excution des chanes de builds. L'extensibilit Hudson peut tre tendu afin de lui permettre de supporter certains outils ou processus que vos quipes utilisent. Cette extensibilit est permise car son architecture expose un ensemble de points d'extensions. Ces derniers permettant de dvelopper des plugins contribuant aux diffrentes parties de Hudson comme le systme de gestion de configuration, les tapes de build, les outils de publication des rsultats. Hudson peut ainsi voluer au-del d'un simple outil de gestion des constructions en proposant un cycle de dveloppement trs avanc comme la promotion de tags construits aprs le build, le suivi des modifications dans les dpendances de produit, la fourniture des graphiques des rsultats de test au cours du temps, le suivi de la couverture de code, et bien dautres possibilits. Mais on peut galement dvelopper des plugins afin d'tendre les capacits de configuration (cas du support d'un nouvel outil) et d'administration, en contribuant au module Hudson CLI qui pilote Hudson en ligne de commande. Par exemple, un plugin de configuration logicielle peut rajouter des commandes Hudson CLI pilotant la cration de branches; de tags ou de changement de statuts. Exemple de la promotion d'une baseline composite par le plugin clearcase-release du build 17 pour le job 'job-test' java -jar hudson-cli.jar -s http://server/hudson release-composite job-test 17 Exemple de la promotion des latest baselines par le plugin clearcaserelease du job 'job-test' java -jar hudson-cli.jar -s http://server/hudson release-latest -baselines job-test

Conclusion
A l'instar de ses principaux concurrents que sont CruiseControl, Bamboo ou TeamCity, Hudson se distingue par sa simplicit d'installation, de configuration, d'utilisation, ses fortes possibilits d'administration et son vaste cosystme de plugins qui lui confre un avantage certain. Tous ces avantages font de Hudson, aujourd'hui, le serveur d'intgration continue adopt par la majorit des acteurs de l'industrie pour tous types de projets et de nimporte quelle taille. Grgory Boissineau Expert intgration continue (Zenika) et committeur Hudson
Fig.4

62

PROgrammez ! \\ Janvier 2010

code \\ cloud

Cloud Foundry : aux fondations du cloud computing


Au cours du mois d'aot dernier, aprs s'tre fait racheter par WMware, SpringSource annonce le rachat de Cloud Foundry. La voie est ainsi ouverte pour mettre ses applications dans les nuages en s'appuyant compltement sur la pile technologique propose par SpringSource. Quels en sont les enjeux ? Cloud Foundry est actuellement en bta. Dans cet article, nous dcouvrirons sur quoi se btit l'offre, comment se crer un compte, comment dployer son application, de son premier lancement jusqu' sa maintenance et enfin nous nous intresserons aux possibilits qu'offre Cloud Tools.
Cloud Foundry est avant tout conu pour dployer des applications Spring et LANGAGE : SCRIPT Grails. Sa particularit est DIFFICULTE SOURCE : NON de ne possder aucune MOYENNE infrastructure : le ser vice s'appuie sur Amazon EC2. terme, le dploiement sera possible sur l'environnement virtualis de VMware : vSphere. Nous avons ainsi une certaine abstraction : que le cloud soit public ou priv l'exprience dveloppeur est voulue pour tre la mme. La simplification du cloud est la ligne directrice de Cloud Foundry : pouvoir dployer et maintenir en quelques clics seulement une application grce une interface d'administration riche. Fidle au principe d'open source de SpringSource, l'offre s'appuie sur une infrastructure technique compose de Apache, Tomcat et MySQL. Ces serveurs peuvent tre sur une seule instance ou rpartis sur plusieurs, de la manire suivante : [Fig.1]. Cloud Foundry dploie toute son infrastructure sur les Amazon Machine Image (AMI) et en garde l'administration. Cette solution est conue comme Infrastructure as a Service (IaaS) : l'infrastructure complte du systme d'exploitation jusqu'aux serveurs est fournie en tant que service. Contrairement aux offres PaaS comme Google App Engine, les contraintes d'API sont ainsi normment rduites, voire nulles. Le dveloppement se fait ainsi comme un dveloppement d'application web classique puisque l'unit de livraison fournir est un war et que la base de donnes est relationnelle. Ce qui diffrencie cette offre d'un simple hbergement web est la caractristique principale et commune des diffrentes formes de cloud computing : la gestion lastique en temps rel des serveurs

APPLICATION : CLOUD

permettant de rsister face la monte en charge. C'est ici qu'intervient une autre brique applicative de SpringSource : tc Server. Ce dernier se dfinit comme une version entreprise de Tomcat qui fournit aux dveloppeurs un serveur lger qui sera coupl la gestion oprationnelle des diagnostics de pointe, et le support de charge critique. Cette supervision applicative se base sur Hyperic HQ, produit que SpringSource avait rachet en mai dernier. Au dploiement, vous choisissez la topologie adopter et par la suite, le nombre d'instances de serveur se redimensionnera automatiquement. Vous pouvez ventuellement spcifier une fourchette afin de mieux matriser leur nombre. Il reste tout de mme possible de modifier manuellement le nombre d'instances via la console d'administration. Par contre, si vous choisissez un dploiement monoinstance, il ne sera pas possible de modifier la topologie. Seul le nombre de tc Server se redimensionne, les instances de MySQL esclaves chappent ce contrle. Cependant, tc Serveur n'est pas le seul serveur d'application support : il est aussi possible d'utiliser un simple Tomcat, Exo ECM ou encore Liferay. Quant la base MySQL, celle-ci peut utiliser la technologie EBS de Amazon, un service de stockage persistant sur disque dur rseau haute capacit. Les donnes sont ainsi protges en cas de sinistres. Sans ce systme, si vous stoppez vos instances ou qu'elles se crashent, vous perdez vos donnes. Contrairement Google App Engine, Cloud Foundry n'est pas un service compltement gratuit : les frais sont ceux d'Amazon EC2. S'agissant d'instances virtualises de serveur, celles-ci sont factures non pas la charge d'utilisation du CPU mais en fonction de la dure de vie des instances [Fig.2]. Il faut en plus compter des cots supplmentaires pour le stockage, bande passante et les transacFig.2

Fig.1

Janvier 2010 \\ PROgrammez !

63

code \\ cloud
tions. noter que la facturation tant effectue aux USA, vous aurez une taxe payer, en l'occurrence celle du Texas au cours des tests que nous avions effectus pour l'criture de cet article. application trs simple qui affiche un message contenu dans une table. Nous dploierons cette application sur des instances multiples. tant donn que la base de donnes sera sur une instance indpendante, il est donc impossible de prvoir l'IP qui lui sera attribue. Nous devons configurer l'URL de connexion de la sorte : jdbc:mysql://${dbHostName}:3306/maBase Ce paramtre sera ensuite fix comme option de la JVM. Dans le menu APPLICATIONS , cliquez sur Upload Application . Dans la zone APPLICATION NAME , renseignez le nom de l'application tel qu'il apparatra dans la liste des applications. Dans le panel, WEB APPLICATION , nous allons slectionner notre war et lui donner un nom de contexte. Afin que l'application puisse connatre l'hte de la base de donnes, c'est dans JVM OPTIONS que nous fixerons le paramtre suivant : -DdbHostName=${databasePrivateDnsName} Le panel DATABASE nous permet de configurer l'accs la base de donnes et de fournir un script d'initialisation de la base. Voil, nous avons renseign les informations ncessaires. Il suffit de cliquer sur Upload pour envoyer votre application sur Cloud Foundry. Une fois l'envoi termin, le menu DEPLOYMENTS s'affichera avec notre application dans sa liste. Il suffit de cliquer sur le triangle vert pour accder au paramtrage du dploiement. Nous donnons un nom au dploiement, slectionnons Multiple instances . remarquer, qu'un indicateur affiche en haut droite, le cot horaire et mensuel de l'infrastructure. Nous laisserons les autres paramtres par dfaut et il ne reste plus qu' cliquer sur Launch pour que le dploiement commence. Cette action prend un temps variable en fonction du nombre d'instances choisies (de 5 8 min). Le dploiement termin, celui-ci devrait apparatre dans le menu DEPLOYMENTS . Un clic sur la ligne nous donne accs aux dtails du dploiement qui permettent d'administrer l'application. Un clic sur Go to the Home Page nous permet de nous rendre sur la page de notre application. Et nous voyons ... une page blanche car nous n'avons pas fourni de script de donnes. Nous allons donc grce l'interface d'administration mettre jour la base avec un simple script SQL qui fera un INSERT. Pour cela, il nous suffit de cliquer sur l'action Execute SQL dans la partie administration de MySQL. Une fentre de dialogue nous demande le script SQL. Celui-ci sera excut directement. Si nous retournons la page de notre application et que nous rafrachissons, nous voyons bien notre message apparatre [Fig.4]. Au cours du cycle de vie de votre application, vous serez srement amens devoir la mettre jour par un nouveau war. Pour cela, dans les dtails de l'application, il suffit de modifier le war de l'application en supprimant l'ancien et en envoyant le nouveau. Il ne reste

CRATION DE COMPTE
tant donn que Cloud Foundry se base sur les services Amazon, vous devez au pralable disposer d'un compte Amazon EC2 (http://aws.amazon.com/ec2). Vous aurez besoin de : - Votre Access Key ID et votre Secret Access Key - Le ou les Pair key de rgion dont vous disposez. N'oubliez pas non plus d'ouvrir les ports SSH et HTTP Et c'est tout . ce que vous aurez faire sur votre compte Amazon, Cloud Foundry se chargera du reste. Connectez vous sur http://www.cloudfoundry.com et cliquez sur SIGN UP . Vous n'avez qu' mentionner votre mail et vous recevrez une invitation dans laquelle vous aurez un lien d'activation de votre compte. Vous aurez indiquer quelques informations ncessaires la cration de votre compte. L'cran suivant permet de configurer la connexion votre compte Amazon EC2. Si vous ne souhaitez pas les mentionner tout de suite, il sera possible de le faire plus tard via le menu SETTINGS [Fig.3]. Et c'est tout... L'interface se dcompose en 5 menus : - HOME : Synthse de diffrentes informations telles que les applications tournant actuellement, les derniers vnements, la mto des services ou les dernires news. - APPLICATIONS : Liste des applications qui ont t envoyes. - DEPLOYMENTS : Liste de dploiements qu'ils soient en cours ou qu'ils aient t arrts. - SETTINGS : Options de configurations telles que votre mot de passe et vos identifiants Amazon. - HELP : FAQ et liens vers le forum. Voil, votre compte est prt pour pouvoir lancer vos applications dans les nuages !

DPLOIEMENT D'UNE APPLICATION


Le premier dploiement d'une application se fait en deux tapes : cration d'une application dployable et son dploiement. Il est d'abord important de comprendre la notion d'application au sein de Cloud Foundry. Celle-ci est compose d'au moins un war et d'une base de donnes (mme si elle n'est pas utilise). Ensuite viennent se rajouter de faon facultative : script(s) SQL, d'autres war, script d'installation, jar partag, Pour notre test, nous utiliserons une
Fig.3

Fig.4

64

PROgrammez ! \\ Janvier 2010

code \\ cloud
plus qu' redployer en cliquant sur Redeploy dans les dtails de dploiement. A l'heure actuelle, l'interface d'administration ne fournit que des informations de base sur les serveurs : consultation de logs, reboot/stop/redeploy, excution SQL, modification de topologie, charge CPU, .... Nous aurions aim pouvoir consulter des lments comme le trafic rseau ou un graphe historique de l'activit mais malheureusement ce n'est pas encore possible. Il est nanmoins prvu de les intgrer. Si vous avez besoin de ces informations, vous devrez vous rabattre sur CloudWatch, service payant de votre compte Amazon EC2. Attention, n'oubliez pas que vous disposez d'instances personnalises et donc que si le dploiement de votre application choue, vous tes tout de mme factur. Il en sera de mme si vous stoppez une application dont vous ne vous servez plus. <sqlScripts> <param>./database/dll.sql</param> </sqlScripts> <catalinaOptsBuilder> {builder, databasePrivateDnsName, slaves -> builder.arg("-server") builder.arg("-Xmx1000m") builder.prop("com.sun.management.jmxremote") builder.prop("com.sun.management.jmxremote .port", 8091) builder.prop("com.sun.management.jmxremote .authenticate", false) builder.prop("com.sun.management.jmxremote .ssl", false) builder.prop("ptrack.application.environment", "ec2") builder.prop("jdbc.db.server", database PrivateDnsName)} </catalinaOptsBuilder> </configuration> </plugin> </plugins> </build> et le fichier aws.properties : imageId.m1.small=ami-6f2cc906 accessKey=... secretKey=... keyName=maCle keyPairFile=./cle_aws_europe.pem sshDir=/usr/bin

ALLER PLUS LOIN AVEC CLOUD TOOLS


Fondateur de Cloud Foundry, Chris Richardson tait dj l'instigateur de Cloud Tools, projet open source dvelopp en Groovy dont le but est de faciliter le dploiement sur Amazon EC2. C'est justement sur cette plate-forme que s'appuie Cloud Foundry. Il est possible d'utiliser Cloud Tools en tant que plug-in Groovy ou Maven. Intressons nous son utilisation avec Maven pour que le cloud fasse partie du cycle de vie de votre application. Ce plug-in n'tant pas dans les dpts officiels, il faut en ajouter votre fichier POM : <repositories> <repository> <id>pia-repository</id> <url>http://www.pojosinaction.com/repository</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>pia-repository</id> <url>http://www.pojosinaction.com/repository</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> L'intgration du plug-in dans votre build se fait par exemple de la sorte : <build> <plugins> <plugin> <groupId>net.chrisrichardson</groupId> <artifactId>cloudtools-maven-plugin</artifactId> <configuration> <awsPropertiesFile>./aws.properties</awsPro pertiesFile> <schemaName>maBase</schemaName> <schemaUsers> <param>user:pass</param> </schemaUsers>

CONCLUSION
Cloud Foundry s'adresse principalement au business court terme comme des campagnes marketing ou publicitaires. Cette stratgie se justifie par le fait que la dure de vie sera suffisamment courte pour qu'un retour sur investissements en achetant et mettant en place de nouveaux serveurs nait pas le temps de se produire. D'autre part, l'environnement tant classique, le dveloppement pourra tre confi aux quipes habituelles puisqu'il ne ncessite aucune connaissance particulire. Un autre cas d'utilisation propos par Cloud Foundry est la charge temporaire : je sais qu'un mois par an, j'aurai une forte charge, j'hberge mon site pendant ce temps chez Cloud Foundry et le reste de l'anne chez moi. L'acquisition de Cloud Foundry par SpringSource est encore rcente et la roadmap n'est pas encore exactement fixe. La bta est prvue sur une dure de 6 8 mois et devrait donc se terminer vers mars-avril. D'ici l, un certain nombre de nouvelles fonctionnalits, telles que le dploiement en cloud priv sur vSphere, devrait voir le jour. Cloud Foundry : http://www.cloudfoundry.com Cloud Tools : http://www.cloudtools.org Amazon EC2 : http://aws.amazon.com/ec2 Nicolas Franois Ingnieur Dveloppement chez Sfeir

Janvier 2010 \\ PROgrammez !

65

code \\ shell

PowerShell 2.0 : Windows au bout du Shell !


Les sorties de Windows 7 Windows Server 2008 R2 et Exchange Server 2010 nous , donnent loccasion de revenir sur les bases de Windows PowerShell, technologie de scripting, mi-chemin entre IT et dveloppement.
Trois annes se sont coules depuis la sortie officielle de Windows PowerShell LANGAGE : SHELL 1.0. Depuis, le potentiel de DIFFICULTE SOURCE : NON cet outil na cess dvoluer. MOYENNE Entre les fonctionnalits de base destination des administrateurs systmes, les outils et produits tirant parti de cette technologie et les nouveauts de la version 2.0, il est aujourdhui difficile de passer ct de Windows PowerShell. Il nest plus ncessaire de dmontrer les enjeux et les avantages duser et dabuser des scripts en entreprise, les atouts de lautomatisation et de la mise lchelle ont fait leurs preuves depuis longtemps. Windows PowerShell est une technologie regroupant deux concepts quon avait lhabitude de voir spars dans les environnements Windows : un invite de commande puissant et un environnement de scripts intgr. Intressons-nous dans un premier temps la notion de commande.

APPLICATION : SYSTME

nom du paramtre et largument (lorsquun argument est ncessaire) est renseign la suite. Pour connatre les diffrents paramtres pouvant tre utiliss avec telle ou telle CmdLet ou pour obtenir plus de dtails sur les actions excutes, vous pouvez utiliser la commande Get-Help. Je vous conseille de lutiliser avec le paramtre -full, sans argument, afin dobtenir le plus de dtails possible. Par exemple, nous pouvons obtenir laide dtaille de la CmdLet Get-Command en excutant linstruction suivante : Get-Help -Name Get-Command -full Dans certain cas, il est important de noter que le nom du paramtre peut tre omis, et que celui-ci peut tre implicite grce aux diffrents arguments que vous fournissez. Ainsi, la dernire instruction peut tre crite de cette faon : Get-Help Get-Command -full Largument Get-Command est en effet automatiquement reconnu comme argument du paramtre Name. Une autre faon de simplifier une instruction est dutiliser les alias de CmdLets, afin de rduire leurs appels quelques caractres. Ainsi, Get-Command peut galement scrire gcm, Get-Process peut scrire gps ou ps, ls est lquivalent de Get-Childitem, La commande suivante vous permettra dobtenir la liste des sujets daide disponibles, CmdLets, alias et sujets divers compris : Get-Help *

PRENEZ LES COMMANDES !


Dans un premier temps, la plupart des oprations que vous allez raliser le seront grce aux commandes de base de PowerShell, appeles CmdLets (prononcer commandelettes ). Leur nombre varie en fonction de la version de Windows PowerShell, de la version du systme dexploitation et des diffrents logiciels installs. Jen ai par exemple 236 sur le Windows 7 que jutilise actuellement pour la rdaction de cet article. Ces commandes ont des champs dapplications trs divers, allant de la rcupration dinformations systmes (Get-Process, Get-Host, Get-Service, Get-Eventlog, ) la manipulation de fichiers (GetContent, New-Item, Set-Location, ) en passant par le formatage et laffichage dinformations (Out-File, ConvertTo-Html, Format-Table, ). Lun des avantages des CmdLets est la syntaxe Verbe-Nom homogne, vous permettant davoir rapidement une ide sur laction effectue et sur quoi celle-ci est excute. La premire CmdLet que je vous invite tester est celle vous fournissant la liste des CmdLets disponibles sur votre systme : Get-Command -CommandType CmdLet En plus du nom de la CmdLet, nous avons utilis le paramtre CommandType afin de lui fournir largument CmdLet . Cela indique que nous souhaitons obtenir seulement les commandes de type CmdLet. Il existe en effet dautres types de commandes, comme les alias (permettant dappeler une CmdLet via un nom raccourci), les fonctions (regroupant plusieurs instructions), les scripts ou encore les applications Windows disponibles sur la session en cours (.exe par exemple). La syntaxe utilise pour les paramtres est galement cohrente entre les diffrentes CmdLets. Le tiret - prcde le

66

PROgrammez ! \\ Janvier 2010

code \\ shell
CEST DANS LE PIPE !
Lutilisation du pipe | , la barre verticale que vous trouverez sur votre clavier grce aux touches Alt Gr + 6 est bien connu dans le monde Unix. Elle permet de passer le rsultat dune instruction comme argument dune autre instruction. Cette notion de pipeline prend tout son sens dans Windows PowerShell grce une intgration trs pousse. Vous pourrez ainsi passer vos rsultats de CmdLets en CmdLets, sans vous soucier des conversions complexes mises en uvre pour vous. Nous verrons dans la prochaine partie quelle va encore plus loin grce aux concepts orients objets. La premire illustration que nous pouvons faire est lutilisation dune CmdLet de sortie, que nous allons utiliser pour crire dans un fichier le rsultat de la commande Get-Process, nous permettant de lister les processus de la machine : Get-Process | Out-File c:\temp\process.txt Une fois cette commande excute, vous pourrez vrifier que le fichier process.txt contient bien la liste des processus. Cette liste a en effet t passe du rsultat de la commande Get-Process lentre de la CmdLet Out-File. Dans le cas o votre deuxime commande vous renvoie un nouveau rsultat (ce qui nest pas le cas dOut-File), vous pouvez une nouvelle fois utiliser un pipe pour le passer une troisime commande, et ainsi de suite. Voici un exemple un peu plus pouss utilisant le mcanisme de pipeline sur plusieurs CmdLets : Get-Process | Sort-Object -Name CPU | Select-Object -first 10 | Out-File c:\temp\process.txt Mme sans connatre toutes ces CmdLets, vous devinez certainement ce que fait cette instruction non ? les processus ou les services Windows sont eux aussi reprsents sous cette forme, etc. Si vous ntes pas encore familiers la notion dobjet, considrez lanalogie suivante : - Voiture est un type dobjet, - une voiture parmi dautres est un objet, - cette voiture a des proprits, comme la couleur, la cylindr, le nombre de portes, - enfin, cette voiture peut effectuer des actions comme acclrer , freiner ou mme tomber en panne . Ces actions sont des mthodes. Pour rsumer, un objet appartient un certain type, possde des proprits que vous pouvez lire ou crire ainsi que des mthodes que vous pouvez excuter. Les diffrentes CmdLets de PowerShell ne drogent pas la rgle : elles manipulent des objets. Par exemple, en utilisant la CmdLet Get-Date, vous obtiendrez la reprsentation objet de la date en cours. Cette reprsentation nest en effet pas une simple chane de caractres affiche lcran, mais une liste de proprits (jour, mois, ) et de mthodes (ajouter jour, comparer une autre date, ). Vous pouvez par exemple accder la valeur du mois en cours avec la syntaxe suivante : (Get-Date).Month Les parenthses sont ici utilises pour indiquer Windows PowerShell que nous voulons travailler sur lobjet obtenu grce la CmdLet Get-Date et le point indique que nous souhaitons utiliser une proprit ou une mthode de cet objet (ici, la proprit Month). Pour utiliser une mthode, la syntaxe est la suivante : (Get-Date).AddDays(2) Dans le cas de lappel dune mthode, les parenthses aprs le nom de la mthode AddDays nous permettent dindiquer les arguments ncessaires lexcution, spars par des virgules. Dans cet exemple, nous ajoutons 2 jours la date courante. Pour connatre les proprits et les mthodes dun objet, vous pouvez le passer (via un pipe | ) la CmdLet Get-Member de la faon suivante : Get-Date | Get-Member Les objets peuvent donc tre manipuls (via leurs proprits et mthodes), transmis des commandes (via le pipeline qui montre ici toute sa puissance) mais peuvent galement tre stocks. Cest le but des variables. Pour stocker la date courante dans la variable nomme $dateCourante (une variable commence toujours par le caractre $), vous pouvez utiliser la syntaxe suivante : $dateCourante = Get-Date Votre objet tant stock dans la variable $dateCourante, vous pourrez utiliser cette dernire plus tard, comme argument dune autre CmdLet par exemple. Vous pouvez par exemple afficher son contenu lcran en utilisant la syntaxe suivante : Write-Host -Object $dateCourante

TOUT EST OBJET !


Depuis quelques annes, une grande tendance de linformatique est lutilisation de concepts orients objets. Cest notamment vrai du ct du dveloppement mais le devient de plus en plus du ct infrastructure et administration. En PowerShell, tout est objet, ou plus prcisment, tout est reprsent sous forme dobjet. Ceux-ci vous permettent de manipuler plus simplement les informations avec lesquelles vous souhaitez travailler. Une chane de caractres est un objet, une date est un objet,

VOTRE PREMIER SCRIPT !


Nos premiers exemples sont utiles pour communiquer avec le systme via linvite de commande de Windows PowerShell. Mais cette technologie prendra tout son sens ds le moment o vous allez commencer crire des scripts afin dautomatiser des actions plus ou

Janvier 2010 \\ PROgrammez !

67

code \\ shell
moins complexes. Les scripts PowerShell sont de simples fichiers texte avec lextension .ps1 (mme pour les scripts utilisant des fonctionnalits de PowerShell 2.0). Ils peuvent tre dits grce au bloc-notes, Windows PowerShell Integrated Scripting Environment (lditeur intgr Windows PowerShell 2.0) ou avec tout autre diteur de fichiers textes. Dans ces fichiers, vous pouvez enchaner les instructions ligne aprs ligne, qui peuvent tre des appels de CmdLet, des assignations de variables, des instructions utilisant le pipeline, des commentaires (lignes prcdes de #), des boucles, etc Je vous propose dcrire ds maintenant votre premier script, en utilisant des exemples utiliss plus haut dans cet article : #Rcupration de la date courante $dateCourante = Get-Date #Rcupration de la liste des processus $p = Get-Process #Ecriture de la date courante dans un fichier $dateCourante | Out-File -FilePath c:\temp\process.txt #Ecriture des 10 premiers processus consommateurs de CPU la suite du mme fichier $p | Sort-Object -Property CPU -Descending | Select-Object First 10 | Out-File -FilePath c:\temp\process.txt -Append Une fois ce fichier sauvegard, nessayez pas de double-cliquer dessus, il ne se lancera pas. Lextension de fichier .ps1 est en effet associe au bloc-notes, pour viter dtre excute par mgarde. Le deuxime mcanisme de scurit vous empchera tout simplement dexcuter un script sur votre machine. Cest lExecutionPolicy, rgl par dfaut sur Restricted . Vous pouvez vrifier ce rglage en excutant la CmdLet Get-ExecutionPolicy via votre invite Windows PowerShell. Diffrents rglages existent pour cet ExecutionPolicy. Vous pouvez autoriser tous les scripts (Unrestricted), simplement les scripts locaux et les scripts distants sils sont signs (RemoteSigned) ou seulement les scripts signs (AllSigned). Pour dfinir le rglage souhait, vous devez tre administrateur de la machine, et, en fonction de votre systme dexploitation, lancer PowerShell en mode administrateur via un Excuter en tant quadministrateur par exemple. Vous pourrez ensuite utiliser la CmdLet Set-ExecutionPolicy en lui passant la valeur souhaite via le paramtre -ExecutionPolicy. Je vous conseille des fins de test dutiliser la valeur RemoteSigned vous permettant dexcuter vos propres scripts tout en vous protgeant de ceux venant de lextrieur : Set-ExecutionPolicy RemoteSigned Vous pouvez maintenant lancer votre script en passant son chemin lexcutable powershell.exe ou plus simplement en utilisant le point dans un invite de commande Windows PowerShell dj lanc : . chemin_complet_vers_votre_script.ps1

Le script sexcutera et vous pourrez vrifier le rsultat.

A CONDITION DE LA BOUCLER !
Les conditions et les boucles sont des concepts essentiels que vous devez connatre lors de la rdaction de vos premiers scripts. Ceux-ci sont trs proches des concepts utiliss en programmation. Selon le rsultat dune condition (vrai ou faux), vous pourrez excuter des instructions diffrentes. Cest le mcanisme ifthenelse bien connu. Voici un exemple de sa syntaxe : if((Get-Date).Month -gt 9 -or (Get-Date).Month -lt 4) {WriteHost "Pensez votre charpe"} else {Write-Host "Tout va bien"} Au-del de la faon dutiliser les oprateurs (-gt, -eq, -and, -match, ) que vous pourrez dcouvrir plus en dtail via laide Get-Help about_logical_operators et Get-Help about_comparison_operators, il ny a pas de difficult particulires. Il est cependant bon de noter que vous ntes pas oblig de tout crire sur une ligne lorsque vous dveloppez un script. Les boucles sont trs utiles pour effectuer des actions sur tous les objets dun tableau ou dune liste dobjets. Cest le cas quand vous rcuprez la liste des services avec la CmdLet Get-Service par exemple. Il est en effet trs facile dutiliser le pipeline pour effectuer une action sur toute la liste, comme lcrire dans un fichier par exemple. Mais pour effectuer une action sur chacun des fichiers individuellement, vous devez utiliser une boucle, grce la CmdLet Foreach-Object par exemple : Get-Service | Foreach-Object {Write-Host $_.Name} Ici, la spcificit se trouve dans la variable $_ , qui contient, chaque itration de la boucle, la valeur de lobjet en cours. Cest grce ce mcanisme que vous avez la possibilit deffectuer des actions sur chacun des objets dune collection. La CmdLet ForeachObject nest pas la seule utiliser ce mcanisme, vous le retrouverez par exemple avec la commande de filtre Where-Object. Dautres syntaxes existent pour effectuer des boucles for, while ou dowhile. Vous les dcouvrirez encore une fois grce la commande Get-Help *loop* par exemple.

Benjamin Talmard Technical Account Manager ADC, Microsoft France http://benjamin.talmard.com

PROCHAIN NUMRO
N127
Fvrier 2010, parution 30 janvier Comment les nouvelles gnrations de modlisation aident-elles le dveloppeur au quotidien ? Dcouvrez les nouvelles tendances du Model Driven

Modlisation & Model Driven Microsoft en 2010

68

PROgrammez ! \\ Janvier 2010

A l'occasion des TechDays 2010, le panorama et l'analyse des nouveauts Microsoft pour les dveloppeurs, le web, les bases de donnes, la bureautique, le cloud computing...

code \\ java

Scala : le Java nouveau est arriv !

1re partie

Dans lunivers en pleine expansion des langages tournant sur la plate-forme Java, il en est un qui fait de plus en plus de bruit depuis plusieurs mois. Cr en 2001, le langage Scala commence atteindre une certaine maturit, ce que semblerait confirmer lintrt de plus en plus grand de la communaut Java son gard. Dcouverte dun langage prometteur aux approches innovantes que les plus audacieux nhsitent pas prsenter comme le futur remplaant du langage Java ! Rien que a
Depuis son apparition il y a de cela une quinzaine danLANGAGE : JAVA nes, le langage Java na DIFFICULTE cess dvoluer et surtout SOURCE : OUI MOYENNE de senrichir au point de devenir aujourdhui incontournable dans le monde industriel. A tel point que dsormais on ne dsigne plus seulement un simple langage en parlant de Java mais plutt une plate-forme dexcution complte et performante. Toutes ces volutions ont eu un cot cependant, puisque dsormais, les spcifications du langage Java atteignent facilement les 600 pages, ce qui a pour effet premier de ralentir les avances futures du langage comme on a pu le voir ces 2 dernires annes avec Java 7. De ce fait, il commence devenir vident que le langage Java nest plus vraiment en adquation avec les contraintes informatiques actuelles et quil faut chercher dautres voies dvolution. Ce constat, certains lavaient dj fait bien avant tout le monde et ils ont ainsi commenc prparer un successeur au langage Java sappuyant sur sa plate-forme dexcution, formidable outil qui na cess dtre amlior et optimis depuis toutes ces annes, mais apportant un nouveau langage la pointe des avances techniques. Parmi eux, Martin Odersky, un professeur universitaire bien connu de la communaut Java pour avoir travaill sur javac le compilateur Java et pour avoir dirig les travaux sur les Generics de Java 5. Ds 2001, il se met plancher sur un langage qui serait extensible et qui permettrait de rsoudre des problmes de toute taille partir des mmes concepts. Comme un clin dil cette volont de rendre ce langage scalable, il lui donne pour nom Scala (SCAlable LAnguage). Afin datteindre cette scalabilit, il travaille sur une approche innovante, mixant la fois le paradigme objet mais galement le paradigme fonctionnel. Dsormais en version 2.7.7, le langage semble arriver maturit et lintrt de plus en plus grand quil suscite conforte son crateur dans son ide que Scala est le futur langage de programmation star pour la plate-forme Java.

APPLICATION : TOUT

object HelloWorld { def main(args : Array[String]) { val msg = "Hello World !" println(msg) } } Ici, on utilise un objet Scala pour dfinir un singleton dont la gestion est transparente pour le dveloppeur. Au sein de ce dernier, on dfinit une mthode main laide du mot-cl def. Cette mthode prend en entre un tableau de String. On remarque quen Scala la dfinition du type dune variable suit son nommage. Ensuite, on utilise la mthode println pour afficher lcran notre clbre message. Cette dernire est utilisable car Scala importe implicitement tout le contenu du package java.lang de Java. Le lecteur attentif aura remarqu que la mthode main ne dclare pas un void par exemple comme en Java pour prciser quelle ne retourne rien. En effet, en Scala le retour vide est de type Unit et seule la valeur () est de type Unit. Son utilisation ici nest pas requise. La dernire instruction dune fonction est automatiquement renvoye en sortie. Ici, la dernire instruction tant un println, on renvoie bien un type Unit. En outre, il est intressant de noter que lutilisation du ; en fin dinstruction est galement optionnelle dans la
Fig.1

UN LANGAGE 100% OBJET


Scala se distingue tout dabord du langage Java par son modle orient objet pur [Fig.1]. Contrairement Java qui avait amen quelques dviations avec notamment des types primitifs, des donnes membres statiques et une syntaxe spciale pour la gestion des tableaux, tout est objet en Scala ! Ainsi, les tableaux sont grs via une classe spcifique nomme Array, de mme que lemploi de singletons natifs est utilis pour la gestion de donnes devant tre uniques. Ainsi, le classique exemple "Hello World" peut scrire de la manire suivante en Scala :

Hirarchie de type du modle objet de Scala.

Janvier 2010 \\ PROgrammez !

69

code \\ java
mesure o lon respecte la rgle dutiliser une instruction par ligne. Enfin, on notera que la dfinition dune valeur se fait laide du motcl val et que, par dfinition, une valeur est immuable. Pour pouvoir utiliser des variables, il faut passer par le mot-cl var. Cette immuabilit comme principe de base du langage est un apport primordial dans le cadre de la programmation concurrente mais nous y reviendrons par la suite. La dclaration de notre variable msg nest pas suivie de la dfinition dun type. Bien que Scala soit un langage statiquement typ, dont les types des variables sont donc connus la compilation, cela est rendu possible par le moteur dinfrence de type du langage qui dans bien des cas nous permet de nous abstraire de cette dclaration de type. Ceci soulageant le dveloppeur dune tche que le compilateur peut raliser. Ainsi, Scala permet la concision et la lgret de langages de scripts tels que Python ou Ruby tout en gardant la scurit quapportent les langages statiquement typs. automatiquement accessibles depuis lextrieur de la classe Person. Lors de la cration dun objet, il arrive frquemment quon ne souhaite pas initialiser certaines donnes. En Scala, les donnes membres dune classe ne sont pas initialises implicitement avec la valeur par dfaut du type correspondant, comme cela est le cas en Java. Ainsi, il est ncessaire dinitialiser la variable nickname dans la classe Person. Puisquon ne souhaite pas la renseigner sa cration, on utilise le caractre magique Scala _ qui va se charger de linitialiser correctement avec la valeur par dfaut de son type dclar. Scala tendant le concept de type abstrait aux donnes membres des classes, la non initialisation de la variable nickname aurait rendu la classe Person abstraite et aurait contraint ses classes filles dfinir sa valeur dinitialisation. Scala permet en outre de dfinir des contraintes sur les donnes membres de la classe qui seront testes lors de son instanciation. La dfinition de constructeurs auxiliaires se faisant quant elle laide du mot-cl this en faisant appel au constructeur principal dfini la dclaration de la classe. Pre de lAPI Generics de Java, Martin Odersky a, bien entendu, implment ce concept dans son bb mais en y ajoutant des possibilits encore plus grandes. Lutilisation de classes abstraites ne prsente pas normment de spcificits cela prs quil suffit de ne pas dfinir le corps dune mthode ou de ne pas initialiser une donne membre pour quelles soient considres comme abstraites par le compilateur. Dans ce cas-l, il est ncessaire de prfixer la dclaration de la classe par le mot-cl abstract. Enfin, les classes filles doivent faire appel au constructeur principal de leurs classes parentes directement dans la dfinition de lhritage via le mot-cl extends. Lexemple suivant vient dtailler ces quelques points : abstract class Person (var firstName : String, var lastName : String, var age : Int) { // partie abstraite de la classe Person var nickname : String def doAction(value:String) override def toString = "[Person : firstName = " + firstName + ", lastName = " + lastName + ", age = " + age + "]" } // hritage simple avec appel au constructeur de la classe mre class Student(firstName : String, lastName : String, age : Int) extends Person(firstName, lastName, age) { // Initialisation de la donne membre abstraite var nickname : String = _ def doAction(value:String) { println("I'm student " + value + " / " } }

DES CLASSES ALLGES


En Scala, le concept de classe est toujours utilisable via le mot-cl class. Et si lensemble de la syntaxe du langage Java reste bien entendu utilisable, Scala va beaucoup plus loin en proposant des facilits permettant de rduire grandement la taille de vos classes. Prenons lexemple dune classe modlisant une personne : // classe Person paramtre par le type T qui est publique par dfaut class Person[T](var lastName: String, var firstName: String, var age: Int, var objects:List[T]) { // variable dinstance non dfinie la construction var nickname : String = _ // vrification de valeurs la construction if(lastName == null){ error("Last Name must be not null !") } if(age < 0 ){ error("Age must be greater or equal to 0") } // dfinition dun constructeur auxiliaire def this(lastName: String, age: Int) = this(lastName, "Undefined", age, Nil) // surcharge de la mthode toString override def toString() = "Last Name = " + lastName + " / First Name = " + firstName + " / Age = " + age // dfinition dune mthode simple def printAll() { println(toString) // utilisation dune closure avant lheure ;) objects.foreach(obj => println("Objet : " + obj)) } } Le premier dtail qui peut tonner concerne le constructeur de la classe Person. En effet, celui-ci est plac directement au niveau de la dclaration de la classe, contrairement ce que lon fait en Java ou dans la plupart des langages orients objets. Par dfaut, les arguments passs en entre de ce constructeur sont considrs comme immuables et ne sont pas accessibles lextrieur de cette classe. Dans notre exemple, ils sont prcds du mot-cl var, ce qui permet de les dclarer comme des variables muables et les rend

+ toString)

LES TRAITS : DES INTERFACES SURVITAMINES


Dernier point central des langages orients objets, les interfaces qui dfinissent des services tout en permettant un dcouplage de leur implmentation. L encore Scala innove en proposant le concept de traits qui tirent parti de la puissance des interfaces et des classes abstraites Java tout en les alliant aux possibilits de mixin offertes par Ruby. Ainsi, non seulement les traits dfinissent des services

70

PROgrammez ! \\ Janvier 2010

code \\ java
mais ils offrent en outre la possibilit de spcifier des comportements en leur sein. Enfin, ces traits peuvent tre composs via ce que le crateur de Scala appelle la mixin-composition. Tout ceci tant trs thorique, prenons un premier exemple montrant la puissance des traits Scala : // trait simple spcifiant qu'on doit pouvoir avoir accs au poids d'une personne trait Person { def weight() : Int } // trait gnrique de comparaison d'lments tirant parti de la simulation // de surcharge d'oprateurs Scala ... trait Comparable[T]{ def < (that: T) : Boolean def <= (that: T) = (this < that) || (this == that) def > (that: T) = !(this <= that) def >= (that: T) = !(this < that) } // implmentation d'une personne possdant un poids et pouvant tre compare class Student(var lastName : String, var firstName : String, var weightc : Int) extends Person with Comparable[Person] { def weight() = weightc // dfinition ncessaire d'une seule mthode def < (that : Person) = weight() < that.weight() } // exemple simple dutilisation object Main { def main(args: Array[String]) { val student = new Student("lastName", "firstName", 19) val student2 = new Student("lastName2", "firstName2", 20) println(student > student2) } } Ici, on considre tout dabord un trait gnrique Comparable qui permet de comparer des lments laide des symboles de comparaison mathmatiques classiques. Mathmatiquement parlant, ces fonctions de comparaisons peuvent toutes tre dfinies partir dune seule savoir la fonction strictement infrieure. Avec une interface Java, il serait impossible de tirer parti de ces proprits mathmatiques. Avec les traits Scala, cela devient possible et mme trs facile En effet, les traits offrent la possibilit de dfinir des comportements en leur sein. Ainsi, il est tout fait possible de dfinir la fonction < comme tant abstraite puisque non dfinie et de dfinir les autres fonctions de comparaison partir de celle-ci. Ainsi, les classes implmentant ce trait de comparaison nauront qu dfinir une seule fonction par la suite pour avoir accs lensemble des oprateurs de comparaison mathmatique ! Pour mettre en exergue cette caractristique, on dfinit un trait Person implment par une classe Student qui doit donc dfinir la mthode weight expose par le trait Person. En outre, on souhaite rendre les instances de Student comparables via des oprateurs mathmatiques. Pour cela, Student tend logiquement le trait Comparable en le paramtrant avec le type dlments sur lesquels porte la comparaison. On constate que lhritage multiple de traits est tolr et se fait par lutilisation du mot-cl with. Finalement, la classe Student se contente de dfinir la mthode < et permet laccs lensemble des oprateurs de comparaison dfinis par le trait Comparable. Au passage, on notera que lutilisation de caractres alphanumriques comme identificateur de fonctions donne Scala la possibilit de simuler la surcharge doprateurs de manire lgante.

AUX POSSIBILITS STUPFIANTES


Autre point fort des traits Scala, le concept de mixin-composition inspir du langage Ruby. Cela permet de bnficier dune approche oriente module au sein mme du code o les modules sont reprsents par des classes ou des traits. Ainsi, on peut facilement rutiliser des modules dfinis et les utiliser avec diffrentes classes. Ceci ouvre un grand nombre de possibilits et savre trs puissant. On peut par exemple imaginer utiliser la mixin-composition pour raliser des dcorateurs permettant notamment de rajouter ou de supprimer des fonctionnalits. Prenons lexemple suivant : // trait Service avec une mthode execute trait Service { def execute(value: Any) } // trait pour un service de log trait LoggerService extends Service { abstract override def execute(value: Any) { println("Before execute with param : " + value) super.execute(value) println("After execute") } } // trait pour un service d'audit trait AuditService extends Service { abstract override def execute(value: Any) { println("Start audit : " + value) super.execute(value) println("After audit : " + value) } } // Implmentation du service class ServiceImpl extends Service{ def execute(value: Any) { println("Execute with " + value) } } object Main { def main(args: Array[String]) { // ici on dcore linstanciation du service avec un logger et un audit def service = new ServiceImpl with LoggerService with AuditService service.execute("Test") } }

Janvier 2010 \\ PROgrammez !

71

code \\ java
On dfinit tout dabord le comportement attendu dun service basique avec une simple mthode execute. Puis, on cre 2 traits spcifiant un service de log et un service daudit. Tous deux implmentent le trait Service et overrident sa mthode execute tout en la redclarant abstract, ce qui est essentiel dans le cadre de la composition par mixin. A linstanciation dune classe ServiceImpl, on va la composer avec les traits LoggerService et AuditService laide du mot-cl with. Ainsi dcore, lors de lappel sa mthode execute, on passera dabord dans la mthode execute de ses dcorateurs. Lordre de passage tant linverse de lordre de composition par mixin. Dans notre cas, cela signifie quon passera dabord dans la mthode execute du trait AuditService puis dans celle du trait LoggerService et enfin dans celle de la classe ServiceImpl, comme on peut le constater sur la sortie dcran de la [Fig.2]. La composition par mixin laisse entrevoir de nombreuses possibilits comme le dmontre cet exemple. On pourrait mme considrer quavec ce concept, Scala offre de la programmation oriente aspect directement au sein de son langage fichier source Scala est permise. Limport du contenu de ces packages est ralis laide du mme mot-cl quen Java mais il offre une plus grande souplesse et une plus grande concision. En effet, il autorise limport de plusieurs classes dun mme package en procdant comme suit : import myPackage.{x, y, z} . Dautre part, il est possible de renommer une classe importe et de lutiliser via son alias dans le fichier source concern. La construction est la suivante : import myPackage.{x => aliasX}. Enfin, outre limport implicite du contenu de java.lang, le compilateur Scala importe galement le package scala et lobjet scala.Predef. Lencapsulation des donnes propose par Scala amne 3 niveaux daccs l o Java en propose 4 avec le fameux niveau package-level pour lequel aucun mot-cl nexiste et qui cause bien des tracas bon nombre de dveloppeurs. Par dfaut, le niveau daccs public est appliqu. Le niveau daccs private restreint la visibilit dune donne la classe laquelle il appartient. En plus de cela, il permet de prciser si ce niveau daccs private peut tre tendu au package englobant via la construction suivante : private[myPackage] def myFunction() . Ici, le niveau daccs private de myFunction est tendu au package englobant en plus de la classe ou lobjet dans lequel elle est dclare. Quant au niveau daccs protected Java, il a la mme signification en Scala. La premire partie de cet article prend fin et nous aura permis de dcouvrir les caractristiques principales du paradigme objet de Scala. Ces dernires, diffrentes en de nombreux points de ce quon peut connatre en Java, offrent de nouvelles perspectives aux dveloppeurs Java. La seconde partie permettra, quant elle, de mettre en avant ses aspects fonctionnels qui viennent lui apporter toute sa souplesse et font de lui un langage extensible. Sylvain Saurel Ingnieur dEtudes Java / JEE ACP www.acp-qualife.fr - sylvain.saurel@gmail.com

PACKAGES ET ENCAPSULATION
Scala reprend le principe des packages Java pour rassembler de manire logique un ensemble dobjets. Le mot-cl package est conserv et la dclaration de plusieurs packages au sein dun mme
Fig.2

Exemple de composition par mixin

ABONNEMENT
www.programmez.com
mensuel n126 - janvier 2010

Base de donnes
Crd it: (c)is tock .com /Ge opa ul

Open Source

Mike Milinkovich Fondation Eclipse

MySQL mena par les forks ? PostgreSQL vs MySQL : comment choisir ? SQL Server 2008 : Matriser les index et adopter une gestion par rgles Objet vs Relationnel ami ou ennemi ?

Anthony Wasserman Universit Carnegie Mellon Jim Zemlin Fondation Linux

Trois gourous
se dvoilent

Tout savoir sur

Visual Studio 2010


Pas de rpit chez

Webmaster

T4, Axum :
Les incroyables langages de Microsoft
Choisir son

Flex 4.0 Google dbarque GO


Le nouveau langage FXG Linterface devient dynamique

PDF
30 par an

PROGRAMMEZ !

Abonnement INTGRAL
Pour un supplment de

10

an

Chrome OS Closure Tools


Shell
Matriser PowerShell 2

COLE INFORMATIQUE
M 04319 - 126 - F: 5,95 E

Cloud
Utiliser Cloud Foundry

Java
Scala : le nouveau Java ?

Technique
Mettre en oeuvre Hudson

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@b@m@g@k;

accs illimit aux archives


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.

soit 2,73 le numro

www.programmez.com

Tous les jours : lactu et le tlchargement www.programmez.com


72
PROgrammez ! \\ Janvier 2010

code \\ texte

Gnrez des documents sous Visual Studio avec le langage T4


Comme Eclipse ou NetBeans, Visual Studio est un vaste univers, avec des recoins peu explors. Nous dcouvrons aujourd'hui le langage T4, intgr tous les Visual Studio depuis l'dition 2005.
Eclipse ou NetBeans sont des IDE puissants et extensibles. Cela est bien connu, parce LANGAGE : C# que leur code est ouvert. DIFFICULTE SOURCE : OUI AVANC Visual Studio, l'IDE de Microsoft est lui aussi trs puissant et extensible, ce que l'on sait moins. Il existe pourtant un Visual studio SDK qui permet d'tendre l'IDE. Lire la documentation de ce SDK fait dcouvrir un monde, d'ailleurs trs complexe. Parmi d'autres possibilits, le SDK nous apprend que lon peut, avec Visual Studio, crer ses propres langages, pour rpondre des besoins particuliers. De tels langages sont appels des DSL, pour Domain Specific Langage, et en bon franais, des langages ddis. Un langage ddi est le contraire d'un langage gnraliste comme le sont des Java, Python, C++, C#, etc. Un langage ddi est un "petit" langage permettant de rsoudre des problmes particuliers dans un contexte prcis. A partir de son SDK, Microsoft a cr un de ces langages. Ce langage est surnomm T4, appellation plus pratique que " Text Template Transformation Toolkit". Comme le nom complet le suggre, T4 permet de gnrer, partir de modles, des documents texte pour divers usages. Si le SDK de Visual Studio n'est pas support par les ditions Express, T4 est bel et bien prsent dans toutes les ditions et chacun pourra exprimenter avec. T4 est document en ligne sur le site http://msdn.microsoft.com au chapitre "Generating Artifacts Using Text Templates". Quand on aborde T4, on se demande, bien quoi il peut servir... mais l'usage on dcouvre que ses applications sont nombreuses... Gnration de code, ou de documentation, par exemple. A travers cet article nous allons voir comment mettre en place un gnrateur de documentation capable de gnrer un fichier de documentation pour chaque classe contenue dans un assembly.

APPLICATION : TEXTE

MessageBox.Show(s); } static void Main(string[] args) { MaClasse p = new MaClasse(); p.Hello("Programmez!"); } } } Tant que nous y sommes, je vous propose de crer un fichier MonAutreClasse.cs, contenant exactement le mme code, l'exception d'une seule mthode dont le nom passe de Hello AutreHello. (Vous trouverez tous ces exemples sur notre site http://www.programmez.com). Au point o nous en sommes, nous avons un assembly de classes C# tout fait ordinaire. C'est le contenu de cet assembly que nous documenterons automatiquement avec T4. Il est maintenant temps de manipuler celui-ci; Ajoutez votre projet un fichier texte et baptisez le hello.tt. L'extension est significative. Tellement significative que ds que vous sauvegarderez votre fichier, Visual Studio l'excutera. A ce moment, un message d'avertissement sera affich, que vous pourrez ignorer par la suite. Voici le contenu de hello.tt <#@ output extension=".txt" #> Programmez! <# Write("Abonnez-vous! :-)"); #> Trois lignes de code qui elles seules appellent beaucoup de commentaires. Notre fichier est un modle de document crit en T4. Comme tel, il contient un mlange de directives, de donnes et de code C#! Tout ce qui n'est pas encadr par les signes <# et #> constitue des donnes. Ainsi dans notre exemple le mot Programmez! est une donne. La premire ligne est une directive qui force T4 a gnrer un fichier d'extension .txt. Un fichier de nom hello.txt sera donc gnr. Sans cette directive c'est un fichier .cs qui sera gnr, ici hello.cs. La dernire ligne est une ligne de code. Une mthode de nom Write, appartenant une classe pour l'instant inconnue, crit du texte dans le document gnr. Ainsi, aprs excution de notre modle en T4, nous trouvons, dans notre projet, un fichier hello.txt dont le contenu est le suivant : Programmez! Abonnez-vous! :-) Pour excuter un template T4 il suffit de le sauvegarder, ou bien de cliquer, dans l'explorateur du projet, avec le bouton droit de la souris puis de slectionner "Run Custom Tool", comme illustr [Fig.1]. La dernire possibilt est de cliquer sur le bouton "Transform All Template" dans la barre du boutons de l'explorateur du projet, comme illustr [Fig.2]. Dans ce cas tous les templates du projet, ou de la solution, seront excuts. Janvier 2010 \\ PROgrammez !

1 HELLO WORLD !
Langage ddi ou pas, la tradition est la tradition :-) Crez un projet, le plus rudimentaire possible, avec votre Visual Studio. Un projet de type console en C# est parfait. VB irait aussi comme nous le verrons plus loin. Il n'est pas possible de crer un projet "T4". Votre projet cr, il contiendra un fichier program.cs. Transformez-le en un fichier MaClasse.cs contenant ce code. using System; using System.Text; using System.Windows.Forms;

namespace basic { public class MaClasse { public MaClasse() {} public void Hello(String s) {

73

code \\ texte

2 FONCTIONNEMENT
La gnration d'un document partir d'un template T4 se droule en trois tapes. A la premire tape, le moteur de T4 analyse le template et partir de son contenu gnre une classe C# drivant de Microsoft.VisualStudio.TextTemplating.TextTransformation. Le code gnr pour notre exemple est probablement trs proche du code donn ci-dessous public class GeneratedtextTransformation : Microsoft.VisualStudio.TextTemplating.TextTransformation { public override String TransformText() { this.Write("Programmez!\n"); this.Write("Abonnez-vous! :-)\n"); return this.GenerationEnvironment.ToString(); } } Nous voyons maintenant o se situe concrtement la mthode Write invoque par <# Write("Abonnez-vous! :-)"); #>. A la seconde tape, le moteur instancie la classe C# gnre et excute sa mthode TransformText qui retourne le fichier gnr partir du modle dans une chane. La troisime et dernire tape consiste simplement crire le contenu de cette chane dans le fichier cible. La comprhension de ce mcanisme ouvre des perspectives.

cer un assembly puis la directive import qui est l'quivalent de l'instruction using de C#. Plus loin, nous dcouvrons la directive include qui permet d'embarquer un autre template. Ici ce template contient : <# String texte = "Programmez! T4"; #> Ensuite, nous ouvrons la MessageBox qui affiche le texte dfini dans le template import. Pour terminer, nous voyons que nous pouvons aussi importer un fichier de donnes sous la forme d'un fichier texte. Celui-ci contient : Programmez! Abonnez vous! Et au final le fichier gnr par notre template contient Programmez! T4 Programmez! Abonnez vous! Voici maintenant une variante de l'exemple prcdent. Dans cette variable nous gnrons le fichier en fonction de ce que rpond l'utilisateur l'ouverture de la MessageBox. Remarquez bien comment une variable C# devient une chane dans le fichier gnr, via la directive <#= #> <#@ <#@ <#@ <#@ <#@ <#@ template language="C#" debug="true" #> import namespace="System.Diagnostics" #> assembly name="System.Windows.Forms.dll" #> import namespace="System.Windows.Forms" #> output extension=".txt" #> include file="data1.tt" #>

3 UN HELLO WORLD FENTR


En soi, avoir un template T4 qui ouvre une fentre n'est pas trs intressant. Mais c'est pour nous une occasion de faire le tour des principales directives T4. En outre, ouvrir une MessageBox peut s'avrer intressant au cours du dbogage. C'est en tout cas moins lourd que d'utiliser la fonctionnalit de dbogage prvue. Voici donc un template qui ouvre une MessageBox avant d'crire quelques lignes dans le fichier gnr : <#@ <#@ <#@ <#@ <#@ template language="C#" #> assembly name="System.Windows.Forms.dll" #> import namespace="System.Windows.Forms" #> output extension=".txt" #> include file="data.tt" #>

<# DialogResult dr = MessageBox.Show(texte, "Programmez!", MessageBoxButtons.YesNo); #> <#= dr #> <# if( dr == DialogResult.Yes ) Write("C'est une trs bonne chose"); if( dr == DialogResult.No ) Write("Abonnez-vous sans tarder"); #>

Fig.1

Fig.2

<# MessageBox.Show(texte); #> <# Write(texte); #> <#@ include file="data.txt" #> La premire directive affine la dfinition du template lui-mme. Ici nous demandons, avec le paramtre language, travailler avec C# 2.0, ce qui est le comportement par dfaut. Nous pourrions demander C# 3.5 en donnant language="C#v3.5" ou Visual Basic en donnant language="VB". Nous incitons vivement le lecteur consulter la documentation en ce qui concerne le paramtre inherits qui permet de spcifier n'importe quelle classe drive de Microsoft.VisualStudio.TextTemplating.TextTransformation, ce qui ouvre de trs riches possibilits. Ensuite vient la directive assembly qui permet de rfren-

Lancement de l'excution du template T4 depuis l'explorateur de Visual Studio

Tous les templates T4 peuvent tre excuts par un clic sur un bouton de la barre d'outils de l'explorateur de solution.

74

PROgrammez ! \\ Janvier 2010

code \\ texte
Enfin cet exemple montre comment dboguer un template. D'abord on donne le paramtre debug="true" la directive template, puis on importe le namespace System.Diagnostics. A la suite de quoi on peut insrer n'importe o cette directive : <# Debugger.Break(); #> qui, lorsqu'elle est rencontre, charge le dbogueur. Vous pouvez alors continuer l'excution en pas pas avec celui-ci. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <# System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(assembly_name); String le_titre = assembly.GetName().ToString(); #> <h1><#= le_titre #></h1> <ul> <# foreach (Type type in assembly.GetTypes()) { #> <p /> Type : <#= type.Name #> <# foreach (MemberInfo member in type.GetMembers()) { #> <li />Membre : <#= member.Name #> <# } #> <# } #> </ul> </html> Si tout ce qui prcde est bien assimil, le prsent code ne mrite que peu de commentaires. On notera que si, dans le code C#, on donne la localisation de l'assembly traiter relativement l'arborescence du projet, ceci n'est pas possible avec T4. En effet, le moteur de T4 n'est pas situ dans cette arborescence et lorsque Visual Studio le lance, le rpertoire courant est positionn sur sa localisation. Voil pourquoi
Fig.3

<#@ template language="C#" #> <#@ output extension=".html" #> <#@ import namespace="System.Reflection" #> <# String assembly_name = "C:\\Developpement\\Programmez\\Demo T4\\basic\\bin\\Debug\\basic.exe"; #>

4 UN PEU DE RFLEXION
Tout ceci est trs bien, mais jusqu' prsent, on ne peut pas dire que ce soit d'une utilit folle. Ce que nous voudrions, c'est par exemple crire un template capable de documenter toutes les classes d'un assembly et surtout que ce template soit suffisamment gnrique pour pouvoir tre rutilis au sein d'un autre projet. Ceci est possible grce l'utilisation conjointe de T4 et des capacits d'introspection (ou reflection) des langages .Net. Cet article n'ayant pas pour but l'tude de l'introspection en .Net, nous donnons simplement un programme C# qui passe en revue l'assembly 'basic' de notre projet, en extrait les noms des classes le constituant, ainsi que les noms des mthodes de chaque classe. La capture montre l'affichage produit par ce code : [Fig.3] using using using using using System; System.Collections.Generic; System.Text; basic; System.Reflection;

namespace reflection { class Program { void Reflechir(String assembly_name) { System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(assembly_name); System.Console.WriteLine("Assembly: " + assembly.GetName()); Console.WriteLine(""); foreach (Type type in assembly.GetTypes()) { Console.WriteLine("Type : " + type.Name); foreach (MemberInfo member in type.GetMembers()) { Console.WriteLine("Membre :" + member.Name); } Console.WriteLine(""); } } static void Main(string[] args) { Program p = new Program(); p.Reflechir( "..\\..\\..\\basic\\bin\\debug\\basic.exe"); } } } Ce code sert de base pour crire un template qui documente tout l'assembly dans un fichier HTML :

Mise en oeuvre des capacits d'introspection de C#.


Janvier 2010 \\ PROgrammez !

75

code \\ texte
nous donnons le rpertoire absolu pour l'assembly, rpertoire que le lecteur devra adapter sa configuration. En lui-mme, ce template est suffisament gnrique puisqu'il suffit de spcifier l'assembly traiter. En outre nous pourrions l'enrichir. En effet nous savons que Visual Studio sait gnrer un fichier XML de documentation partir de commentaires crits cet effet dans le code C#. Par exemple : namespace basic { /// <summary> /// Cette classe est sans quivalent dans le monde /// </summary> public class MonAutreClasse { // etc. etc. Si comme votre serviteur, vous n'avez pas d'atomes crochus avec XSLT, vous prfrerez utiliser conjointement T4, l'introspection de C# et les classes .Net pour travailler avec XML et gnrer une documentation aux petits oignons. devient une mthode de la classe GeneratedtextTransformation. Ensuite depuis le fichier Multidocgenerator, on demande la transformation de deux templates <#@ include file="TemplateProcessor.tt" #> <# ProcessTemplate("MaClasseDocGenerator.tt", "MaClasseDoc.html"); ProcessTemplate("MonAutreClasseDocGenerator.tt", "MonAutreClasseDoc.html"); #>

Vous trouverez le code de ces templates sur notre site : www.programmez.com. Le problme est que maintenant il doit exister aussi un fichier (MonAutreClasseDocGenerator.tt) template pour la documentation de l'autre classe. Autrement dit il faut un template par classe et ceux-ci n'ont plus rien de gnrique, et notre solution n'est plus acceptable en l'tat.

PLUSIEURS FICHIERS 5 GNRER D'UN SEUL TEMPLATE PARTIR


Gnrer un seul document HTML pour un assembly est sans doute trs bien, mais maintenant nous nous posons le problme de gnrer un fichier par classe, et ceci partir d'un seul template. Nous savons que normalement le moteur de T4 ne gnre qu'un document par template trait. La solution consiste tout simplement instancier le moteur T4 au cours du traitement, autant de fois que l'on veut gnrer un fichier. Dans le projet multidoc de nos exemples, ce travail est effectu par TemplateProcessor.tt. En voici le code, qui a t pris sur le site http://www.olegsych.com <#@ <#@ <#@ <#@ output extension=".txt" #> template language="C#" hostspecific="True" debug="true" #> import namespace="System.IO" #> import namespace="Microsoft.VisualStudio.TextTemplating" #>

6 PASSER DES ARGUMENTS UN TEMPLATE


Ce qui nous manque, c'est de pouvoir passer des paramtres un template. Ce problme est trait dans notre dernier projet d'exemple: MultidocParams. Dans MultidocParams.tt, nous utilisons la classe .Net CallContext qui est un dictionnaire spcifique un contexte d'excution : <#@ import namespace="System.Runtime.Remoting.Messaging" #> <#@ import namespace="System.Reflection" #> <# String assembly_name = "C:\\Developpement\\Programmez\\Demo T4\\basic\\bin\\Debug\\basic.exe"; #> <# String assembly_short_name = "basic"; #> <# String generator_name = "ClassDocGenerator.tt"; #> <#@ include file="TemplateProcessorParams.tt" #> <# System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(assembly_name); CallContext.SetData("Assembly.Name", assembly_name);

<#+ void ProcessTemplate(string templateFileName, string output FileName) { string templateDirectory = Path.GetDirectoryName(Host.TemplateFile); string outputFilePath = Path.Combine(templateDirectory, outputFileName); string template = File.ReadAllText(Host.ResolvePath(temp lateFileName)); Engine engine = new Engine(); string output = engine.ProcessTemplate(template, Host); File.WriteAllText(outputFilePath, output); } #> Le point noter est l'utilisation d'une directive que nous n'avions pas encore rencontre: <#+ #> Le code contenu dans une telle directive

foreach (Type type in assembly.GetTypes()) { String type_name = type.Name; String qualified_type_name = assembly_short_name + "." + type_name; CallContext.SetData("Type.Name", qualified_type_name); ProcessTemplate(generator_name, type_name + ".html"); } #> Ensuite il suffit de rcuprer les paramtres dans ce dictionnaire, ce que nous faisons depuis ClassDocGenerator.tt qui est maintenant un template unique, comme nous le souhaitions. (ClassDocGenerator.tt est disponible sur notre site). Nous avons atteint notre but, avec des templates gnriques et rutilisables. Frdric Mazu - fmazue@programmez.com

76

PROgrammez ! \\ Janvier 2010

DVELOPPEZ VOTRE SAVOIR-FAIRE


www.programmez.com
mensuel n126 - janvier 2010

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 !

PROGRAMMEZ !

Base de donnes
Crd it: (c)ist oc

Open Source

Mike Milinkovich Fondation Eclipse

MySQL mena par les forks ? PostgreSQL vs MySQL : comment choisir ? SQL Server 2008 : Matriser les index et adopter une gestion par rgles Objet vs Relationnel ami ou ennemi ?
k.c om /G eo pa ul

Anthony Wasserman Universit Carnegie Mellon Jim Zemlin Fondation Linux

Trois gourous
se dvoilent

Tout savoir sur

Visual Studio 2010


Pas de rpit chez

Choisissez votre formule


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

Webmaster

T4, Axum :
Les incroyables langages de Microsoft
Choisir son

Flex 4.0 Google dbarque GO


Le nouveau langage FXG Linterface devient dynamique

Chrome OS Closure Tools


Shell
Matriser PowerShell 2

COLE INFORMATIQUE
M 04319 - 126 - F: 5,95 E

Cloud
Utiliser Cloud Foundry

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

Java
Scala : le nouveau Java ?

Technique
Mettre en oeuvre Hudson

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@b@m@g@k;

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 :


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

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

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.

PROG 126

Offre limite, valable jusquau 30 janvier 2010

code \\ futur

Axum, un langage pour la programmation concurrente et distribue sous .Net


Les machines microprocesseurs multi-coeurs sont rpandues, et avec elles la programmation concurrente. Nous faisons aujourd'hui connaissance avec Axum, un langage Microsoft exprimental, drivant de C#, et ddi la programmation concurrente et distribue.
L'volution des machines, dsormais toutes quipes de processeurs multiLANGAGE : C# curs, voire mme de pluDIFFICULTE SOURCE : OUI AVANC sieurs, la gnralisation des rseaux, Internet en tte, font que la programmation ne pourra bientt plus tre envisage que comme concurrente et distribue. Dans ce monde qui volue rapidement, il y a une chose qui reste elle, bien constante et tenace: la difficult. Le sujet tant ardu, le travail du programmeur ne doit pas tre alourdi inutilement. Ainsi, celui-ci doit pouvoir au maximum tre dispens de grer le rseau. Il faut donc un environnement ou runtime qui assure ce travail. Mais ceci n'empchera pas le programmeur de se casser la tte avec les classiques problmes du genre, le deadlock, ou verrou mortel, en tte, la race condition, ou accs concurrent une mme ressource, n'tant jamais bien loin elle aussi. Si les problmes sont classiques, les solutions existantes sont nombreuses. Ainsi nous avons par exemple Erlang, langage aussi gnial que mconnu. L'air du temps tant la plate-forme .Net, c'est sur cette plate-forme que des solutions apparaissent en ce moment. Rcemment, dans Programmez! 120, nous avons pu apprcier CCR qui est une API Microsoft pour la programmation concurrente sous .Net. Aujourd'hui, nous dcouvrons Axum, qui est lui un langage. Axum est encore exprimental, en "incubation" chez Microsoft. Axum est un langage qui drive de C#. On peut dire que c'est un C# avec quelques mots-cls et oprateurs supplmentaires. Ce n'est pas un langage anodin pour autant. Il introduit des outils puissants: les protocoles et les canaux (channels). Plutt que la programmation oriente objet, on fait avec lui de la programmation oriente agents avec passage de messages, un peu comme on fait de la programmation oriente processus en Erlang. Mais surtout, il introduit quelque chose de trs nouveau: sa syntaxe permet de visualiser le flux de donnes et les tapes de transformation de celui-ci. Si la rapidit d'excution promise sur son site officiel (http://msdn.microsoft.com /en-us/devlabs/dd795202.aspx ) ne semble pas (ou pas encore) vraiment au rendez-vous, l'accs toutes classes .Net et les apports cits ci-dessus font que Axum vaut le dtour.

APPLICATION : PARALLELE

sont Visual Studio SDK et Visual Studio Shell, ce dernier supportant les plugins. Le lecteur intress par cette possibilit trouvera plus d'information http://msdn.microsoft.com/en-us/vsx2008/products/bb933751.aspx.

2 HELLO WORLD!
Concurrence ou pas, la tradition est la tradition. Sous Visual Studio, il suffit de crer un projet Axum comme illustr [Fig.1]. Commenons simplement, avec un projet de type Console. Pour cette premire application, simplifions le code au maximum. Notamment, enlevons la dclaration public domain Program. Au final le code de notre Hello World! doit se rduire ceci : using System; using Microsoft.Axum; using System.Concurrency.Messaging; namespace HelloWorld { agent Program : ConsoleApplication { override int Run(String[] args) { Console.WriteLine("Hello, World!"); } } } Ce code a lallure du C# mais dj nous voyons apparatre un nouveau mot-cl agent. Ici notre classe programme drive d'une classe de l'assembly Microsoft.Axum. La simple prsence du mot-cl fait de notre classe drive un agent. Avec Axum, un agent est une "entit" tout fait opaque pour le programmeur. Le point important garder l'esprit est qu'une application Axum est un ensemble d'agents qui communiquent entre eux par passage de messages. A la diffrence d'Erlang mentionn plus haut, le programmeur n'envoie pas explicitement les messages et ne doit pas connatre d'identifiants de processus. Ce travail est assur par le runtime. Le programmeur s'occupe simplement d'crire dans des canaux de communications appels Channel dans la terminologie Axum.

1 LES OUTILS
Pour travailler avec Axum, l'idal est de disposer d'un Visual Studio 2008 d'une dition suprieure l'Express, cette dernire ne supportant pas les plugins. Si on dispose de Visual Studio, on tlchargera le plugin Axum l'URL donne plus haut. Sinon on tlchargera la mme adresse AxumLite, qui est une archive contenant des outils en ligne de commande. Dernire alternative: utiliser les deux outils gratuits que

3 CHANNELS, PORTS ET POINTS D'INTERACTION


Avec les agents, les channels sont au cur de la programmation Axum. Ce sont des entits complexes. Pour en avoir une image assez fidle, on peut les comparer aux pipelines d'affichage des

78

PROgrammez ! \\ Janvier 2010

code \\ futur
cartes graphiques. Tout au long d'un pipeline d'affichage, il y a des transformations d'un type de donnes unique: le pixel. Chaque tape d'un pipeline d'affichage trouve sa correspondance dans les points d'interaction des channels. En revanche, contrairement un pipeline d'affichage, un channel Axum peut travailler avec des types de donnes diffrents. Ces donnes entrent et sortent du channel par des ports, chaque port tant ddi un type bien dfini. Essayons maintenant de clarifier ces notions avec quelques exemples simples. La premire chose noter dans ce code est l'apparition d'un nouveau motcl: channel. Nous avons donc maintenant notre classe Program qui est de type agent, mais qui semble driver d'un autre type channel. En fait notre agent est bien un agent et cette criture est plutt une commodit syntaxique qu'autre chose. D'ailleurs nous pouvons remarquer que si dans notre premier exemple nous avons redfini une mthode de la classe de base, nous ne faisons rien de tel ici. Le guide du dveloppeur Axum explique que cet agent s'attache l'implmentation du channel proprement dit et qu'il endosse le rle de serveur de messages pour le channel. Quel channel au fait ? Pour l'instant nous n'avons rien dfini explicitement. La classe Microsoft.Axum.Application comporte un channel intgr du nom de PrimaryChannel que nous utilisons ici. La premire ligne de code, avec l'instruction receive, met l'application en attente d'un message mis par le runtime et contenant la ligne de commande. Lorsqu'on lance le programme, le runtime met immdiatement le message, et l'application continue son cours. On notera que l'instruction receive est bloquante. Il est intressant maintenant de regarder la syntaxe de plus prs : receive(PrimaryChannel::CommandLine); receive n'attend pas "n'importe o" mais sur le port de sortie CommandLine du PrimaryChannel. Port qui, a priori, a t dfini pour fournir un tableau de chane. Passons maintenant directement la dernire ligne du code : PrimaryChannel::ExitCode <-- 0; namespace BasicChannel { agent Program : channel Microsoft.Axum.Application { public Program() { // Le runtime envoie un message dans le // channel intgr PrimaryChannel // Ce message peut tre lu depuis le port // de sortie CommandLine String [] args = receive(PrimaryChannel::CommandLine); Console.WriteLine("Hello World {0}", args[0]); Console.WriteLine("Appuyez sur [RETURN]"); Console.ReadLine(); // Envoyer un message dans // le port d'entre ExitCode: PrimaryChannel::ExitCode <-- 0; } } } Cette ligne crit sur un autre port du PrimaryChannel. Ecriture qui provoque la terminaison du programme. Ce port est dclar comme traitant des entiers. Si l'on exprimente ainsi : PrimaryChannel::ExitCode <-- "0"; Le compilateur, intraitable, met un message d'erreur: "The right-hand operand of '<--' has invalid type 'System.String'. Expected type 'System.Int32'". Nous avons ainsi confirmation qu'un port est affect un type de donne et un seul. Nous allons maintenant voir que les ports sont unidirectionnels. On pourrait tre tent d'crire dans le PrimaryChannel, pour en quelque sorte nous envoyer un message nous-mmes : PrimaryChannel::CommandLine <-- args; Le compilateur est aussi intraitable que prcdemment: "The lefthand operand is an output port in this context. Can only send to an input port". Pour l'instant Axum, au stade exprimental n'est pas bien document. Mais ses librairies sont des assembly .Net. Visual Studio sait donc examiner les types dfinis dans ses assemblies. Ainsi voit-on sur l'illustration [Fig.3] que CommandLine est un port de sortie: impossible d'crire dedans.

4 MANIPULATIONS BASIQUES D'UN CHANNEL


Nous allons crire un Hello World un peu plus labor que le prcdent. Nous voulons que notre programme salue la personne dont le nom a t donn dans la ligne de commande de notre programme. Pour passer des arguments la ligne de commande d'un programme depuis l'environnement de Visual Studio, il faut cliquer avec le bouton droit de la souris sur le nom du projet dans le volet d'exploration de Visual Studio, puis slectionner 'Proprits'. Ensuite, comme illustr [Fig.2]. sous l'onglet 'Debug' on trouve une entre pour donner les paramtres de la ligne de commande. Ecrivons maintenant notre programme : using System; using Microsoft.Axum; using System.Concurrency.Messaging;

Fig.1

Fig.2

Fig.3

Cration d'une application Axum sous Visual Studio.

Configuration d'un projet Visual Studio pour passer des paramtres la ligne de commande de l'application.

Sous Visual Studio, il est ais de connatre la direction d'un port.


Janvier 2010 \\ PROgrammez !

79

code \\ futur

5 POINT D'INTERACTION DANS UN CHANNEL

dclarer le dernier point d'interaction, PrintResult, en tant que fonction, aboutirait une protestation du compilateur : error MA2409: Cannot send or receive messages in a function Notre programme se lance depuis le constructeur de la classe. Nous commenons par instancier un point d'interaction, le premier de la chane, en instanciant la classe OrderedInteractionPoint. Ordered signifiant que l'ordre des messages arrivant au point d'interaction sera prserv. La deuxime ligne de code est assez formidable en terme d'expressivit : question ==> Magazine ==> Abonnement ==> PrintResult; Cette ligne donne l'ordre des points d'interactions traverss par les donnes dans le channel. On peut difficilement faire plus clair. Toute la mcanique se met en branle lorsqu'on crit sur ce premier point d'interaction : question <-- "Que lire ?"; Cette chane passe alors par tous les points d'interactions. A ce moment, ceux-ci sont autant de threads lancs par le runtime. La documentation, pas vraiment dtaille, au stade exprimental o se situe Axum, ne prcise pas comment le runtime gre les threads. Rien ne dit si ce sont des threads lancs sur le systme d'exploitation comme avec CCR ou si ce sont des threads grs par le runtime lui-mme comme avec Erlang. Dans le cas d'Erlang le nombre de threads n'est pas limit. Si ce sont des threads Windows, une application sera limite 64 threads.

Approfondissons un peu par la pratique notre comprhension des channels Axum. Nous allons dfinir un agent et doter de points d'interactions le channel intgr de cet agent. Le programme crira une chane dans le premier point d'interaction, et cette chane sera transforme chaque point, pour finalement tre imprime sur la console au dernier point. using System; using Microsoft.Axum; using System.Concurrency.Messaging; namespace ProgrammezInteraction { agent Programmez : channel Microsoft.Axum.Application { function String Magazine(String s) { return s + " Programmez!"; } function String Abonnement(String s) { return s + ", abonnez vous! :-)"; } void PrintResult(String s) { Console.WriteLine(s); Console.WriteLine("Fin -- Appuyez sur [RETURN]"); Console.ReadLine(); // terminer le programme PrimaryChannel::ExitCode <-- 0; } public Programmez() { var question = new OrderedInteractionPoint<String>(); // Creation du pipeline dans le channel question ==> Magazine ==> Abonnement ==> PrintResult; // Et on dmarre effectivement tout le // processus de transformation en crivant // dans le premier channel, // au premier point d'interaction question <-- "Que lire ?"; } } } Dans cet exemple, tout se passe au sein d'un seul agent attach un channel, comme dans l'exemple prcdent. Cette fois nous dfinissons des mthodes l'intrieur de la classe de notre agent. Chacune de ces mthodes, l'exception bien sr du constructeur, est un point d'interaction dans le channel intgr. Avec deux de ces mthodes, nous voyons apparatre un nouveau mot-cl: function. Une fonction est une mthode sans effet de bord, c'est--dire qui n'affecte aucune variable dclare ailleurs que dans sa porte. Ainsi

6 CRER UN CHANNEL
Jusqu' maintenant, nous n'avons travaill qu'avec un seul agent la fois et avec le channel intgr de cet agent. Si c'est intressant en soi, c'est assez limit. La programmation Axum prend son sens quand plusieurs agents collaborent entre eux, c'est--dire quand un agent peut poster des donnes dans le channel personnalis d'un autre agent. C'est que que nous faisons avec l'exemple suivant : using System; using Microsoft.Axum; using System.Concurrency.Messaging; namespace ProgrammezChannel { channel Programmez { input String mag; input String abo; output String resultat; } agent ProgrammezAgent : channel Programmez { public ProgrammezAgent() { String chaine = receive(PrimaryChannel::mag) + receive(PrimaryChannel::abo); PrimaryChannel::resultat <-- chaine; }

80

PROgrammez ! \\ Janvier 2010

code \\ futur
} agent MainAgent : channel Microsoft.Axum.Application { public MainAgent() { var programmez = ProgrammezAgent.CreateInNewDomain(); programmez::mag <-- "Programmez!"; programmez::abo <-- ", Abonnez-vous :-)"; Console.WriteLine( "Simulation d'un travail avant reception du resultat"); Console.WriteLine("Appuyez sur [RETURN]"); Console.ReadLine(); var result = receive(programmez::resultat); Console.WriteLine(result); // On met fin l'application Console.WriteLine("Fin -- Appuyez sur [RETURN]"); Console.ReadLine(); PrimaryChannel::ExitCode <-- 0; } } } Le premier point important est, au dbut du code, la dclaration du channel personnalis, que nous dotons de deux ports d'entre et un port de sortie. Ensuite nous dclarons un agent qui drive (pardon pour l'abus de langage) de notre channel. Le constructeur de l'agent lance l'coute sur les ports. Le second point important se situe dans l'agent principal (MainAgent). Dans le constructeur, nous crons une instance de l'agent "Programmez". Nous faisons cela avec la mthode statique CreateInNewDomain. En Axum, un domaine est une sorte de super porte dans laquelle les agents peuvent partager les tats. Ceci fait, nous crivons dans le port de l'agent Programmez, qui se met traiter les donnes en arrire-plan. Nous simulons un travail pendant ce temps, puis nous nous mettons en attente bloquante (receive) des donnes de l'agent programmez en lisant dans le port de sortie. Vous pourrez constater que nous avons fait de la programmation parallle sans rflchir une seconde la mise en place de thread. Bravo Axum. { String chaine = receive(PrimaryChannel::mag) + receive(PrimaryChannel::abo); PrimaryChannel::resultat <-- chaine; } } public ProgrammezAgent() { var go = new OrderedInteractionPoint<String>(); go ==> worker; go <-- "go"; } } Moyennent quoi, le MainAgent peut crire volont sur le port de l'agent programmez.

8 LES PROTOCOLES
Tout cela est trs bien. Axum est clair, expressif. Il est agrable de coder avec lui. Mais si la programmation parallle c'est bien, la programmation parallle sans DeadLock c'est mieux. Que se passe-t-il si dans l'exemple prcdent le MainAgent omet d'crire dans le port mag, avant d'crire dans le port abo de l'agent programmez ? Il se mettra en attente sur le port de sortie de l'agent programmez, tandis que celui-ci attendra un message sur son port mag, message qui n'arrivera jamais. Et nous avons un deadlock. Pour minimiser le risque qu'une telle situation ne se produise, Axum, via ce qui s'appelle un protocole, permet de dfinir des tats de transitions dans un channel. Dit simplement, cela signifie que l'on peut spcifier un ordre d'criture sur les diffrents ports d'un channel. Notre exemple devient alors : channel Programmez { input String mag; input String abo; output String resultat; Start: { mag -> MagRecu; } MagRecu: { abo -> AboRecu; } AboRecu: { resultat -> End;} } Avec ce mcanisme, si un agent crit sur le port abo avant d'crire sur le port mag, le runtime d'Axum lvera une exception.

7 UN AGENT PERSISTANT
Vous n'tes pas sans remarquer que l'exemple ci-dessus ne peut crire qu'une fois dans le port de l'agent programmez car celui-ci n'coute qu'une seule fois son port dans son constructeur. Il n'est pas trs intressant de ne pouvoir crire qu'une seule fois dans le port d'un agent. Pour remdier cela, il nous suffit que le code de l'agent qui coute le port boucle sur lui-mme. N'oublions pas que ce code est de facto un thread, grce au runtime d'Axum. Pour mettre cela en place, nous r-crivons notre agent programmez en combinant implmentation de channel et point d'interaction (vous trouverez le code complet ProgrammezChannelInteraction sur notre site) : agent ProgrammezAgent : channel Programmez { void worker(String s) { while(true)

9 EN GUISE DE CONCLUSION
Axum est un langage de programmation concurrente trs expressif. Nous avons vu quelques-uns de ses mcanismes principaux. D'autres aspects restent aborder, notamment la programmation distribue, qu'Axum rend trs aise galement. Microsoft prcise qu'Axum est susceptible d'voluer, mais tel qu'il est, nous avons les bases d'un grand langage. Nous lui souhaitons longue vie et nous ne manquerons pas de le suivre dans ses volutions. Frdric Mazu - fmazue@programmez.com

Janvier 2010 \\ PROgrammez !

81

livres \\

par Franois Tonic

ARCHITECTURE Getting started with Oracle SOA Suite 11g R1


Difficult : *** Editeur : Pack Publishing Auteur : collectif Prix : 59,99 $
Comment mettre en uvre larchitecture de ser vices SOA avec la solution ddie dOracle ? Ce livre est une plonge au cur de cette architecture et de la suite SOA de lditeur. Il sagit tout dabord de dfinir la SOA, les concepts de base, larchitecture SCA et les fondations de la SOA Suite 11g. Puis on dcouvre les premiers projets, les concepts, les dploiements et lensemble des process mettre en place, connatre. Une bonne initiation. En anglais.

LIVRE DU MOIS Programmation iPhone OS 3


Difficult : *** - Editeur : Eyrolles Auteur : Thomas Sarlandie - Prix : 35
Incontournable, iPhone continue dattirer les dveloppeurs et les applications disponibles explosent, plus de 75 000 ! Sans tre un guide de rfrence, cet ouvrage parvient dcrire les fondamentaux du dveloppement iphone, les techniques, les outils. Cela concerne aussi bien les sites web que les applications. Agrable lire, louvrage permet de comprendre larchitecture et les fonctionnements des applications iphone. Plutt destin aux dveloppeurs avancs , il ncessite une bonne matrise des techniques et des astuces de conception connatre ds le dpart !

SCURIT Management de la scurit de linformation 2e dition


Difficult : *** Editeur : Eyrolles Auteur : Alexandre Fernandez-Toro Prix : 39
La scurit demeure un secteur sensible et reste encore trop souvent mal implmente ou mal comprise par les responsables et les dveloppeurs. Ce livre aborde la norme ISO 27001 qui fait rfrence dans la scurit informatique. Mais comment une entreprise peut-elle lutiliser, la dployer et tre certifie ? Une des cls rside dans la mise en place dun systme de management de la scurit informatique en respectant lISO 27001. Cette nouvelle dition va encore plus loin en abordant une autre norme : ISO 27000. Clair et prcis, ce livre apporte de prcieuses informations sur les bonnes pratiques de scurit et les procdures respecter. Nous le conseillons lensemble du service informatique !

livre assez complet pour comprendre Spip et sa richesse fonctionnelle. Une excellente approche !

CMS jQuery
Difficult : *** Editeur : Pearson Auteur : collectif Prix : 37
Dans cet ouvrage, les auteurs partagent leurs connaissances, leur exprience et leur passion pour jQuery afin de vous aider comprendre comment cette bibliothque fonctionne et vous permettre d'en tirer le meilleur parti. Si vos prcdentes tentatives de dveloppement JavaScript vous ont laiss perplexe, ils vous aideront franchir les obstacles dresss par AJAX, les vnements, les effets et les fonctionnalits avances du langage JavaScript. Nattendez plus pour matriser la puissance de jQuery !

MODLISATION UML 2 2e dition


Difficult : *** Editeur : Eni dition Auteur : collectif Prix : 27
La modlisation UML reste souvent une nigme pour le dveloppeur ou mme le responsable informatique, or la modlisation est aujourdhui omniprsente. Ce livre sadresse toute personne voulant dcouvrir en douceur les fondamentaux dUML 2. Cela se fait par plus de 100 QCM, et 60 travaux pratiques, soit en tout prs de 30 heures de cours ! Un chapitre particulier prsente lutilisation dUML en modlisation et en conception (ralisation dun diagramme dtats-transitions) et une tude de cas complte (librairie en ligne) explique comment mettre en oeuvre UML dans un cadre de commerce lectronique. Cette nouvelle dition introduit un chapitre consacr notamment au diagramme de structure composite et la composition de patterns.

WEB GWT
Difficult : *** - Editeur : Dunod Auteur : Olivier Grardin - Prix : 25

CMS Spip 2
Difficult : ** Editeur : Eyrolles Auteur : collectif Prix : 19
Comment publier rapidement et simplement son site web ? L a rponse est Spip 2. Outil de gestion de contenu open source, certes un peu plus discret depuis quelques mois face Drupal, mais Spip garde de nombreux adeptes, alors pourquoi pas vous ? Un

MMOS
Collection Open IT Eni dition, 6 Sous forme de court dpliant, la collection OpenIT aborde des sujets prcis. Ce mois-ci, la collection senrichit des dpliants UML 2 et Shell. Chaque dition comporte les commandes, les explications connatre. A garder prs de son clavier !

Cet ouvrage sadresse tous les dveloppeurs Java qui souhaitent dcouvrir ce nouvel outil cr par Google pour le dveloppement web. Il intressera galement tous ceux qui utilisent dj AJAX et JavaScript et qui souhaitent enrichir leurs comptences. Le principe de GWT est simple : coder en Java, compiler en JavaScript , et cette simplicit fait aussi sa force. Ce livre se dcoupe en deux grandes parties : les bases de GWT et les fonctions avances, que le dveloppeur oublie parfois dutiliser !

82

PROgrammez ! \\ janvier 2010

Retrouvez toutes les chroniques de LIVRES www.programmez.com

Les outils des Dcideurs Informatiques


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 Evnements

Actus

Newsletter

LINFORMATION EN CONTINU

www.solutions-logiciels.com

>

DVELOPPEZ 10 FOIS PLUS VITE

WINDEV 15 est un environnement de dveloppement reconnu comme exceptionnel. WINDEV 15 est totalement intgr (IDE, ALM), intgralement en franais, rput pour sa puissance et sa facilit dutilisation. WINDEV 15 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, Cluster, Gnrateur dtats PDF, Codesbarres, Accs natif SAP R/3, Lotus Notes, Gestion de planning, Gestion des Exigences, Audit, L5G, SNMP, Bluetooth, TAPI, OPC, FTP, HTTP, Socket, Twain, API, DLL, Domotique, liaisons srie et USB, Dbogage distance, Profiler, Refactoring, Gnration JAVA, Multilangue automatique, Gestionnaire de versions, Installateur 1-clic, Install push, etc...
VOTRE CODE EST MULTI-PLATEFORMES: Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, Smartphone, Client riche ...

document non contractuel. v 15 requtes sur la version en cours de commercialisation, seule la communication est votre charge

Les applications cres fonctionnent avec toutes les versions de Windows: 2000, NT, 2003, XP, Vista, 7, sous TSE et Citrix, sur Netbook...

WINDEV 15 gre le cycle complet de dveloppement, pour des quipes de 1 100 dveloppeurs. Le support technique est gratuit*.
ENVIRONNEMENT PROFESSIONNEL DE DVELOPPEMENT OPPEMENT (AGL) Windows, .Net, Java Windows 7, 2000, NT, 2003, XP, Vista, 2008

Vous aussi, dveloppez 10 fois plus vite ... avec WINDEV 15 !


DEMANDEZ LE DOSSIER GRATUIT
252 pages + DVD + Version Express + 112 Tmoignages.

Fournisseur Officiel de la Prparation Olympique

Tl: 04.67.032.032 info@pcsoft.fr

www.pcsoft.fr

Vous aimerez peut-être aussi