Académique Documents
Professionnel Documents
Culture Documents
www.programmez.com
Base de donnes
Cr dit : (c )ist oc k.c om /G eo pa ul
Open Source
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 ?
Trois gourous
se dvoilent
Webmaster
T4, Axum :
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;
Jean
Responsable du centre de donnes
Sophie
Directrice Technique
Pierre
Directeur Financier
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
PRO grammez !
Le magazine du dveloppement
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
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...
dito\\
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
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
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
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.
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 ...
www.windev.fr
Fournisseur Officiel de la Prparation Olympique
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.
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
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
actu \\ en bref
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 /
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.
11
vnements \\ interviews
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
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.
"
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-
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
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
16
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.
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.
17
webmaster \\ flex
dinterfaces riches
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
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>
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
20
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
21
dossier \\ sgbd
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-
22
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
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-
24
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 ?
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).
25
dossier \\ sgbd
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.
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]
26
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
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.
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
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
Fig.6
Fig.10
Fig.11
Fig.12
Fig.13
29
dossier \\ sgbd
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.
30
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)
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);
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 ;
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.
--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
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
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.
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
34
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
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
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
37
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
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 !
39
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
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 !
41
{ calc.
{ calc.
{ calc.
{ calc.
Fig.4
42
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
43
Fig.10
44
Fig.15
Fig.13
45
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).
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
enqute \\ formation
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),
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.
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
enqute \\ formation
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
50
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
D.R.
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.
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
enqute \\ formation
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.
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
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
Le bureau de Chrome OS
Fig.2
56
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
57
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
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
www.solutionslinux.fr
technique \\ intgration
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
60
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
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
code \\ cloud
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
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 !
Fig.4
64
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
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
65
code \\ shell
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 *
66
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
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
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.
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
68
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
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
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 + " / " } }
+ toString)
70
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.
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
ABONNEMENT
www.programmez.com
mensuel n126 - janvier 2010
Base de donnes
Crd it: (c)is tock .com /Ge opa ul
Open Source
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 ?
Trois gourous
se dvoilent
Webmaster
T4, Axum :
Les incroyables langages de Microsoft
Choisir son
PDF
30 par an
PROGRAMMEZ !
Abonnement INTGRAL
Pour un supplment de
10
an
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;
www.programmez.com
code \\ texte
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" #>
<# 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-
Tous les templates T4 peuvent tre excuts par un clic sur un bouton de la barre d'outils de l'explorateur de solution.
74
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 :
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.
<#+ 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
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
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
Trois gourous
se dvoilent
Webmaster
T4, Axum :
Les incroyables langages de Microsoft
Choisir son
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 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 : ...................................................
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
code \\ futur
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
78
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.
Fig.1
Fig.2
Fig.3
Configuration d'un projet Visual Studio pour passer des paramtres la ligne de commande de l'application.
79
code \\ futur
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
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
81
livres \\
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 !
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
Cas clients
Avis dExperts
Actus
Newsletter
LINFORMATION EN CONTINU
www.solutions-logiciels.com
>
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
www.pcsoft.fr