Académique Documents
Professionnel Documents
Culture Documents
www. programmez.com
Le magazine du dveloppement
Enqute
Le match
Eclipse - Netbeans
Choisir loutil idal !
Les dernires versions compares Tout savoir sur Eclipse 4.0
Java
AspectJ :
La programmation par aspect facile !
technique
Flash
Matriser le bitmap avec ActionScript 3
JavaSpaces :
Crer votre grid computing
iPhone / .net
Piloter votre Windows Media Center avec iPhone
Et aussi :
Linux : Dvelopper des extensions Nautilus
Jeux :
Dvelopper des jeux en Java
Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
3:HIKONB=^UZ^Z]:?k@l@b@c@a;
WINDEV
Fournisseur Officiel de la Prparation Olympique
Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.
www.pcsoft.fr
Demandez le dossier gratuit (244 pages + 1 DVD) VERSION EXPRESS GRATUITE et 112 Tmoignages. Tl: 04.67.032.032 ou 01.48.01.48.88 Mail: info@pcsoft.fr
PRO grammez !
Le magazine du dveloppement
sommaire\\
\\ actus
Lactualit en bref ..............................................................................8 Agenda ..............................................................................................9 2e symposium Eclipse-OMG..................................................................10 Adobe dvoile la Creative Suite 4..........................................................12
\\ vnements
Google Day Developer..........................................................................14 Google Chrome : le premier navigateur RIA............................................16
\\ sgbd
Le Resource Governor (1re partie)........................................................18
22
48
\\ bonnes feuilles
Les projets secrets de Microsoft (2e partie) ..........................................51
\\ code
Blu age dition 2009 ..........................................................................56 ActionScript 3 et la programmation bitmap ..........................................59 Programmation oriente aspect avec AspectJ........................................62 JavaSpaces et le parallel processing ....................................................65 Piloter votre Windows Media Center avec un iPhone (1re partie) ............68 OpenMPI, une librairie pour la programmation parallle distribue............71 Ecrire des scripts dextensions pour Nautilus ........................................75
68
\\ temps libre
Devenez un petit gnie du jeu video ......................................................80 Les livres du mois ..............................................................................82 80
CD ROM
Eclipse SDK 3.4 - Windows Environnement de dveloppement intgr libre Netbeans IDE Java SE 6.5 bta - Windows Environnement de dveloppement intgr pour Java Netbeans IDE Ruby 6.5 bta - Windows Environnement de dveloppement intgr pour Java Perforce Serveur 2008.1 Windows limitation : 2 serveurs et 5 clients. Le systme de Gestion de Configuration Logicielle rapide Perforce Visual Client 2008.1 (P4V) - Windows
Cappuccino Starter Package 0.5 Framework open source pour le dveloppement d'applications web Love 0.4.0 - Windows Moteur de jeu en 2D - Libre Appchecker - Linux Appchecker : la killer application Linux pour dveloppeur ! AspectJ 1.6.1 Extension oriente aspect pour le langage de programmation Java Delphi and C++Builder 2009 Editeur : CodeGear Windows limitation : 14 jours Version 2009 des environnments de dveloppement C++ et Delphi
PHP 5.2.6 (sources) Dernire version stable de PHP 5 WinSCP 4.1.6 - Windows client SFTP graphique pour Windows. Il utilise SSH et est open source Virtualbox 2.0.0 - Windows Linux - Outil de virtualisation et son SDK Kite 2.0 - Windows Logiciel de test de performance des applications Web OpenLaszlo 4.2 bta 1 Windows plateforme de dveloppement pour des applications web interfaces riches
JAVA
OUTILS
CodeGear CodeGear
Dcouvrez le nouveau Delphi avec toujours plus de .Net. Installeur Windows* - Limit 14 jours. La nouvelle version de lIDE C++ mondialement connu. Installeur Windows* - Limit 14 jours.
* Ncessite une connexion internet pour tlcharger et installer
Echantillon gratuit Ne peut tre vendu sparment Les versions peuvent tre limites, selon les diteurs et prsentes en anglais ou en franais.
Editeur XML
XMLSpy
XMLSpy 2008 dAltova est lenvironnement de dveloppement XML le plus populaire au monde. Il permet de modliser, diter, transformer, dboguer et profiler toutes les technologies XML. Tlchargez une version dvaluation gratuite ds aujourdhui!
XMLSpy offre une conformit sans gale aux Prise en charge des trs gros fichiers XML Fonction de recherche/remplacement dtaille dans lditeur de schmas XML Dtails XSLT avancs dans la fentre Info Aide la saisie dans XSL Outline Prise en charge de Java, C#, JavaScript et VBScript dans les feuilles de style Prise en charge de Visual Studio mise jour pour VS 2008 Et bien plus encore
auts Nouve dans y 2008 XMLSp 2 n versio
normes les plus rcentes de lindustrie. Il prend mme en charge les nouveaux formats Office Open XML (OOXML) employs par Microsoft Office 2007. Ses fonctionnalits avances sallient des vues et des aides la saisie conviviales, des assistants et des dbogueurs pour permettre aux dveloppeurs de crer, diter et optimiser les applications XML et les services Web les plus avancs avec aisance.
Editeur XML Editeur graphique de schmas XML / DTD Editeur, dbogueur et profileur XSLT 1.0/2.0 Editeur, dbogueur et profileur XQuery Analyse et construction XPath 1.0/2.0 Prise en charge des bases de donnes relationnelles Fonctions de validation XML avances Prise en charge des fichiers Office Open XML (.docx, .xlsx, pptx) Client et dbogueur SOAP Editeur graphique WSDL Gnration de code Java, C#, C++ Vues ddition textuelle et graphique Intgration de Visual Studio & Eclipse
Dcouvrez pourquoi XMLSpy a t choisi par plus de 3 millions de dveloppeurs professionnels Tlchargez gratuitement une version dvaluation de 30 jours sur www.altova.com
dito\\
PRO grammez !
Le magazine du dveloppement
Rdaction : redaction@programmez.com Directeur de la Rdaction : Jean Kaminsky Rdacteur en Chef : Franois Tonic Ont collabor : F. Mazu, L. Guillois, F. Dewasmes, C.Remy, J-B. Boisseau,. Experts : F. Madiot, P. Belaud, S. Drapeau, A. Cogoluegnes, M. Ghallab, L. Ellerbach, A. Kolawa, C. Bouchre, T. Imbert, F. Colin, L. Ribardire Illustrations : Piedoue Crdit photo : @iStockphoto.com - Sun Microsystems Maquette : AJE Conseils Publicit : Rgie publicitaire, K-Now sarl Pour la publicit uniquement : Tl. : 01 41 77 16 03 coordination@programmez.com Editeur : Go-02 sarl, 6 rue Bezout - 75014 Paris Coordination@programmez.com - Dpt lgal : parution - Commission paritaire : 0707K78366 ISSN : 1627-0908 - Imprimeur : ETC - 76198 Yvetot Directeur de la publication : J-C Vaudecrane Ce numro comporte 1 CD Rom Abonnement : Programmez 22, rue Ren Boulanger, 75472 Paris Cedex 10 - abonnements.programmez@groupe-gli.com Tl. : 01 55 56 70 55 - Fax : 01 55 56 70 20 - 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 : 45 - Etudiant : 39 CEE et Suisse : 51,83 Algrie, Maroc, Tunisie : 55,95 Canada : 64,33 Tom : 79,61 - Dom : 62,84 e Autres pays : nous consulter. PDF : 30 (Monde Entier) souscription en ligne.
LINFO PERMANENTE
WWW.PROGRAMMEZ.COM
PROCHAIN NUMRO
N113 novembre, parution 31 octobre
Soyez productif !
Dcouvrez les meilleures mthodes, les bonnes pratiques, les outils pour mieux coder, pour russir son projet
Dossier
Dcouvrez toutes les nouvelles API : Android, Gears, App Engine, Protocol buffer
actu \\ en bref
De Cobol Java : Publicitas a annonc la publication du code source des outils dvelopps dans le cadre du projet NACA. Ils permettent de passer dun code Cobol en code Java. Du nouveau pour Silverlight La technologie RIA de Microsoft va enfin intgrer de nouveaux codecs vido / audio : H264 et AAC ! Ils seront aussi intgrs aux outils Expression. Malheureusement, aucune date de livraison nest annonce. Silverlight 2.0 est prvu pour la fin de lanne Dcouvrir CSharpEval : voil un petit outil bien pratique du projet Mono. Il sagit dun compilateur embarqu permettant dvaluer les instructions C#... Le tout dynamiquement ! Autre outil qui mrite votre attention : CsharpRepl, un shell interactif. Refactoring sous VS 2008 : souvent critiqu pour le manque de performance du refactoring, un projet open source se propose de combler les lacunes de Microsoft : TytanNET. Tout nest pas encore disponible, mais ce petit plug-in rendra bien des services ! site : http://www.codeplex.com/tyt annet NHibernate 2.0 : dj bien connu dans le monde Java, Hibernate a toujours eu du mal sur .Net, la faute a un cart fonctionnel avec la version Java. La v2 met niveau ldition .Net avec la v3.2 dHibernate ! Terracotta : encore assez peu connu, Terracotta est un cluster java open source. Il est possible de faire des applications Java EE rapidement distribues capables de monter en charge en monde cluster ! Il se place en middleware. Un projet particulirement intressant et dcouvrir ! site : http://www.terracotta.org/ ebay, une carte, son mail, etc. Les Activities, ou Accelerators, sont des services contextuels accessibles directement sur la page web. Cela permet daccder des services immdiatement sans changer de page, de remonter, etc. Par exemple, traduire dun clic une page web, afficher la recherche, etc. Cest trs pratique lusage, cela permet daller plus vite dans sa navigation, tout comme le webslice. Lobjectif de ces deux fonctions est de faciliter la vie de lutilisateur et pour le dveloppeur, lajout de ces fonctions se fait en codant avec les standards actuels du web, donc peu de surprises attendre. Autre nouveaut intressante, la possibilit davoir plusieurs moteurs de recherche dans la zone de recherche (en haut droite). Il suffit pour cela dajouter des providers. Une nouveaut galement intressante concerne la gestion des crashs: quand un onglet crashe suite un problme sur un site, on ne redmarre pas la session entire mais on perd uniquement la session en cours sur longlet ! Pratique ! Pas de date officielle de disponibilit de la version finale.
Navigateur
Tests
ser sur la demande croissante doutils de tests complets, de suivi de tests, etc. Les entreprises ralisent que le test est incontournable, mme si cela revient cher ! Site : www.smartesting.com
Monde virtuel
actu \\ en bref
Modlisation
Alfresco, un sharepoint open source. Lditeur implmente le protocole Sharepoint, ouvert par Microsoft. Il est ainsi possible dutiliser des composants Sharepoint dans Alfresco (webpart). Ce choix est, selon lditeur, logique, car Sharepoint est devenu une rfrence sur le portail. Et veut tre une alternative Microsoft. VirtualBox 2 : Sun a lanc dbut septembre Virtual Box 2.x. Il supporte les
Stratgie
agenda \\
OCTOBRE MSDN & Technet Tour 2008 Le MSDN & Technet Tour redmarre du 29 septembre au 5 novembre 2008 dans 6 villes de France http://technet.microsoft.com/frfr/cc184917.aspx Le 2 Octobre, Paris, l'vnement de lancement SQL Server 2008 /Windows Server 2008 HyperV, avec Steve Ballmer, pour dcouvrir Les solutions dentreprise nouvelle gnration. http://c2.microsoft.fr/
Le 8 octobre, Vmware organise Paris son Vmware Virtualization Forum. http://info.vmware.com/ Confrence IBM Rational le 14 octobre l'IBM Forum, pour faire le point sur les derniers outils, dcouvrir Jazz et toutes les nouveauts de la fin de l'anne. http://www-05.ibm.com/fr/events/RSDC/ Qt Developer Days 2008 Europe Du mardi 14 octobre 2008 au mercredi 15 octobre 2008, Munich. http://trolltech.com/qtdevdays2008 Forum CXP 2008 Le 21 octobre 2008 http://www.cxp.fr/
21 & 22 octobre : Valtech Days, deux jours pour faire le point sur les technologies ! 21 octobre Paris : Eclipse, now you can. Journe consacre la plate-forme Eclipse http://www. eclipse-nowyoucan.com/index.php? Symposia NOVEMBRE Le 19 novembre, Paris, Confrence MySQL 2008 MySQL (appartenant dsormais Sun) a annonc la tenue de sa confrence annuelle franaise (payante), MySQL. La journe promet dtre trs riche: http://www. mysql.fr/news-and-events/european-conferences/2008/
actu \\ en bref
2e Symposium Eclipse-OMG
Vers une meilleure implmentation des standards de lOMG sur Eclipse
LOMG a invit la communaut Eclipse en juin dernier, dans le cadre du meeting de lOMG Ottawa. Au menu : des rflexions de fond et des retours dexprience dditeurs ou de chercheurs qui ont dj eu loccasion de se frotter cet exercice. Le tout agrment de nombreux changes avec la salle, notamment sur la diffrence de nature entre les deux consortiums.
SOFTEAM Formation
Exceptionnel !
Sminaire de Formation Journe Gratuite Les Meilleures Techniques pour lAlignement Mtier du Systme dInformation
Cest le nouvel enjeu des DSI. Robuste et performant, le SI doit aussi implmenter les stratgies mtiers de lentreprise, et tre suffisament agile pour sadapter rapidement aux changements mtiers, lis lenvironnement concurrentiel, lacclration du time to market, et la diffusion des nouveaux produits ou services qui en rsultent. SOFTEAM vous propose une journe exceptionnelle - et gratuite - pour partager avec vous son savoir faire et ses meilleures pratiques dans llaboration dun SI align sur le mtier de votre entreprise.
UML, M THODES
EA BPM
J2EE
SOA
UML
.NET Java
M THODOLOGIE
SOA
Introduction aux technologies objets et UML . . . . . . . . . . . . . . . . . . . 1 j UML pour la matrise douvrage et lexpression de besoins . . . . . . . . . 2 j Analyse et conception avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j Processus de dveloppement objets : Etat de lart . . . . . . . . . . . . . . . . . 2 j De UML.1.x UML.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 j Mthodologie pour SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
A RCHITECTURE
SOA SOA SOA
ET I NTGRATION
Architecture SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j Dveloppement de Web Services en Java . . . . . . . . . . . . . . . . . . . . . . . 3 j Dveloppement de Web Services en C# . . . . . . . . . . . . . . . . . . . . . . . . 3 j Architecture et approche MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j Design Patterns avec Java / J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j Architecture et intgration : la synthse . . . . . . . . . . . . . . . . . . . . . . . . 3 j
Programmation oriente objet avec Java . . . . . . . . . . . . . . . . . . . . 4 j Programmation Java avance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j Dveloppement dapplications JEE 5 . . . . . . . . . . . . . . . . . . . . . . . 5 j Dveloppement dapplications JEE 5 Front End . . . . . . . . . . . . . . . 4 j Dveloppement dapplications JEE 5 Back End avec EJB 3 . . . . . . 3 j Matrise du framework Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j Matrise du framework JSF - Java Server Faces . . . . . . . . . . . . . . . . 3 j Matrise du framework Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j Mapping Objet / Relationnel avec Hibernate . . . . . . . . . . . . . . . . 3 j Dveloppement dIHM avec Swing . . . . . . . . . . . . . . . . . . . . . . . . 3 j Dveloppement dapplications embarques avec J2ME . . . . . . . . 3 j 2.0 Dveloppement dIHM avec Ajax . . . . . . . . . . . . . . . . . . . . . . . . . 2 j Web 2.0 Dveloppement dapplications avec GWT . . . . . . . . . . . . . . . . . . 3 j Web D VELOPPEMENT .N ET Dveloppement dapplications .NET / C# . . . . . . . . . . . . . . . . . . 4 j Principes et architecture de la plate-forme .Net . . . . . . . . . . . . . . . 1 j Conception et dveloppement avec .Net 2.0 . . . . . . . . . . . . . . . . 5 j Dveloppement dapplications Web avec ASP.Net 2.0 . . . . . . . . . 5 j D VELOPPEMENT XML ET AUTRES LANGAGES Dveloppement d'applications avec XML . . . . . . . . . . . . . . . . . . . 4 j Formatage et transformation de documents XML avec XSL . . . . . . 2 j Dveloppement d'applications vocales avec VoiceXML . . . . . . . . 3 j Dveloppement dapplications avec C++ . . . . . . . . . . . . . . . . . . . 3 j
Cette session de Formation unique sera anime par Philippe DESFRAY, spcialiste mondialement reconnu des Technologies Objets et Architectures Orientes Services. Membre contributeur de lOMG, il a particip llaboration des standards UML, UML2 et BPMN2, et travaille aujourdhui sur le futur standard de convergence SOAML de lOMG.
Inscrivez-vous en ligne
www.softeam.fr
Formation ligible au DIF, OPCVA etc. Nous contacter.
Tl. : 01 53 96 84 00 Fax : 01 53 96 84 01 Paris : 21 avenue Victor Hugo - 75016 Rennes - Nantes - Sophia Antipolis
actu \\ en bref
omme pour la CS3, la CS4 arrive en diffrentes ditions, selon les utilisateurs (graphiste, dveloppeur, vido, flasheur). Nous avons install la version la plus complte : Adobe Creative Suite 4 Master Collection. Son installation intgrale ncessite pas moins de 15 Go ! Elle inclut : Acrobat Pro, Flash, Illustrator, Photoshop, Premire, Dreamweaver, Contribute, Fireworks, AfterEffects, Soundbooth, Encore, Bridge, Version Cue, Media Encoder, On Location. Pour exploiter au mieux cet ensemble, mieux vaut disposer dune solide machine avec 4 Go de mmoire vive minimum et une car te graphique rcente. Par contre, si la version Windows aura le support du 64-bit ce ne sera pas encore le cas pour la version Mac. Adobe essaie aussi damliorer les flux de productions entre les diffrents environnements (audio, vido, authoring, flash, dveloppement web, etc.) cela passe notamment par des outils comme Cue, Bridge et Encore. Cependant, sur la partie purement dveloppement, il manque un vrai intgrateur, ce sera un des rles de Thermo au niveau RIA. Si les interfaces des diffrents outils convergent il ne faut pas non plus sattendre des changements radicaux comme nous avons pu le constater. Mais le mouvement va dans le bon sens. A noter que le format SWF (Flash) est support par toutes les applications
(processus dj entam avec la CS3). De son ct Fireworks complte lui aussi ses fonctions avec lexper t PDF, limpor t CSS, un moteur de typographie plus volu et le support maintenant de AIR.
Et arriva Flash 10 !
La version 10 de Flash est lune des grosses nouveauts de la CS4. Connu sous le nom de code Astro, nous lavions vu en avant premire lors dAdobe Max en octobre dernier Barcelone. Pour mmoire, Flash 10 apporte les effets 3D, la personnalisation des effets et filtres, un moteur de texte volu, de nouvelles API de dessin, et des performances revues la hausse. Cette version promet beaucoup sur la partie desktop et notamment pour Flex ! Reste maintenant voir du ct mobilit toujours un peu la trane.
12
Tlchargez sans conditions une copie gratuite de Perforce sur www.perforce.com. Un service dassistance technique gratuit est offert pendant toute la priode dvaluation.
Tous droits rservs. Toutes les marques cites sont des marques ou des marques dposes de leurs propritaires respectifs.
vnements \\ google
En direct du.
dispose dun SDK multi-plate-forme avec son mulateur, et les premiers terminaux arriveront dans quelques semaines. Avec Android, Google souhaite proposer une approche plus lgre que les systmes actuels, ouvert, dot dun modle de dveloppement connu et simplifi, un dploiement facilit pouvant prendre plusieurs formes (USB, rseau, etc.), une plate-forme hautement personnalisable. Mais un des paris est de savoir comment va ragir le march et notamment les principaux constructeurs. Et Google nhsite pas reprendre les bonnes ides dApple, crer une boutique limage de AppStore !
14
vnements \\ internet
i on sest beaucoup focalis sur Chrome depuis sa sortie, il ne faudrait pas oublier plusieurs lments vitaux sur lesquels il tourne. Chrome est le nom du navigateur " cl en main " que lutilisateur tlcharge et installe, et ce, bientt sur les trois systmes majeurs : Windows, OS X et Linux. En ralit, Chrome repose directement sur la fondation technique appel Chromium, qui est le vritable projet open source contenant larchitecture et lensemble des lments techniques permettant Chrome dtre lger et rapide. Dans cet ensemble, plusieurs lments sont relever : - Webkit pour le moteur de rendu et plus particulirement de WebCore. - V8 : moteur dexcution JavaScript
embarqu dans une application C++. Il implmente ECMAScript 3 et fonctionne sur XP Vista, Linux, OS X sur , processeurs ARM et IA-32. Le 64-bit nest pas prsent (et il ne semble pas prvu cour t terme). Etant un ensemble open source (sous licence BSD) vous pouvez loisir utiliser V8. Il est disponible sur le site officiel : http://code.google.com/p/v8/. Vous pouvez donc rcuprer le projet et le builder sur votre machine ! Toutes les instructions sont fournies sur le wiki du projet. Un Framework de test est disponible, inclus dans le moteur. Il est capable dexcuter les tests dfinis en standard mais aussi dautres jeux de tests, actuellement ceux de Mozilla. Il incorpore des tests unitaires crits en C++ et un autre jeu JavaScript. Cela peut sexcuter par un script de test Python. V8 est donc le moteur optimal pour les frameworks Ajax divers et varis et javascript en gnral. Or aujour-
Schma 1
Passer au V8
Ce qui fait la force de V8 se situe dans sa conception. Il est crit en C++ et peut tre excut seul ou
dhui, un souci majeur existe sur les performances des sites massivement Ajax / javascript, cause des problmes de performances ! Pour arriver tre performant, V8 comporte trois lments cls : un accs rapide aux proprits, une machine de gnration de code dynamique et enfin un bon " garbage-collector ". Javascript tant un langage objet ne disposant pas de mcanisme de classes (c'est un langage dit " prototypes "), la gestion des objets et de leurs proprits est trs complique optimiser : chaque objet a ses caractristiques, et aucun ne peut tre reconnu comme semblable un autre. Tout le gnie des quipes de V8 a t d'imaginer un mcanisme analysant les objets, dterminant leurs similitudes et les rangeant dans des " familles " : V8 cre ainsi des " hidden classes " (dans la mesure o ce sont des classes invisibles pour le dveloppeur) qui rend ds lors pos-
16
vnements \\ internet
Une interface utilisateur simplifie
L'interface (qu'on appelle " Chrome " dans tout navigateur web) est dpouille au maximum, ce qui limite bien entendu la consommation de ressources. Google a de plus ralis un kit graphique sur mesure afin de matriser au mieux cet aspect plutt que den laisser la responsabilit Windows ou un kit graphique tiers. Ce choix du minimalisme est souvent critiqu, en particulier par certains utilisateurs avancs de Firefox qui apprcient de bnficier de nombreuses fonctionnalits porte de clic... mais remettre en cause cela serait jeter par dessus bord un des principes de conception essentiels la russite de Chrome. Jean-Baptiste Boisseau
sible une vritable optimisation de l'accs aux proprits. Et chaque " nouveaut " dans un mme objet , une hidden class se cre, base sur la prcdente. Voir le mode de fonctionnement dans le schma ci-dessus. Lquipe de V8 met en avant le fait que le moteur na pas besoin dutiliser une structure de donnes sur le principe du dictionnaire pour stocker les proprits objets. Cela ncessite un accs au dictionnaire chaque modification dune proprit. Dautre part, V8 compile directement le code javascript quand celui-ci est excut pour la premire fois.
pour le moment, il nexiste pas de systme dextension la Firefox. Un tel rajout est dores et dj prvu. Et cela pourra se faire rapidement car Chromium supporte NPAPI (Netscape Plugin Application Programming Interface).
17
Le Resource Governor
Jusqu prsent, nous navions pas la possibilit dallouer plus de ressources" telle ou telle catgorie dutilisateurs ou dapplications et " moins de ressources " dautres. Avec le " Resource Governor ", il est dsormais possible dallouer tout ou partie des processeurs de la machine hbergeant votre instance SQL Server 2008. De la mme manire, une rpartition de la mmoire utilise peut tre envisage. Il est noter que chaque instance SQL Server 2008 ne peut affecter lutilisation que des seuls processeurs et ressource mmoire qui lui sont allous. La comprhension du fonctionnement du " Resource Governor " passe imprativement par la comprhension des concepts suivants : Pool Workload Group Fonction de classification
1re partie
Dans le numro prcdent, nous avions brass lensemble des nouveauts de SQL Server 2008. Ce mois-ci nous poursuivons notre dcouverte technique, avec Pascal Belaud, en mettant le focus sur le Resource Governor, un outil surpuissant !
Create Resource Pool [Pool1] With (Min_Cpu_Percent=30, Max_Cpu_ Percent=100, Min_Memory_Percent=0, Max_Memory_Percent=100) Create Resource Pool [Pool2] With (Min_Cpu_Percent=30, Max_Cpu_ Percent=100, Min_Memory_Percent=25, Max_Memory_Percent=100) Create Resource Pool [Pool3] With (Min_Cpu_Percent=60, Max_Cpu_ Percent=100, Min_Memory_Percent=0, Max_Memory_Percent=100)
Workload group
Un " workload group " reprsente un " conteneur " pour des sessions SQL Server 2008 permettant de les regrouper ensemble, ceci bas sur un critre de classification dfini par ladministrateur lui-mme (voir plus bas). A chaque " workload group " est associ un et un seul " pool ". Ce " workload group " excutera lensemble des sessions qui lui seront rattaches en respectant la lettre les impratifs dutilisation des ressources dcrits dans les caractristiques du " pool ". Comment le moteur SQL Server 2008 peut-il dcider daffecter telle session tel ou tel autre " workload group " ? Et bien, quon se rassure, il ny a aucun arbitraire ici. Vous tes le seul, et le plus mme de prendre cette dcision ! Cest tout lobjet de la fonction de classification.
Pool
Un " pool " reprsente les ressources physiques du serveur hbergeant linstance SQL Server 2008. Dans cette version, seules la (ou les) CPU et la mmoire physique peuvent tre gres dans ce pool (il nest pas exclu que dautres ressources physiques soient rajoutes cette notion de " pool " dans des versions ultrieures). Pour chacune de ces ressources, il est possible daffecter une valeur " Min " et une valeur " Max ". Ces valeurs vont permettre daffiner lutilisation des ressources pour telle ou telle catgorie dapplication/utilisateur. La valeur " Min " correspondra la valeur minimum garantie tandis que la valeur " Max " ne pourra tre honore que si les ressources disponibles au moment de la demande le permettent. Il est noter quil existe deux " pools " qui sont crs linstallation de linstance SQL Server 2008 : internal pool : ce pool correspond aux ressources utilises en interne par linstance. Il ne peut en aucun cas tre altr. default pool: ce pool sera celui utiliser si linstance SQL narrive pas dterminer la catgorie (" workload group ", voir plus bas) laquelle appartient lappelant. La somme de toutes les valeurs " Min " de lensemble des " pools " dfinis ne pourra pas dpasser la valeur 100%. Chaque valeur " Max " devra quant elle tre comprise entre la valeur " Min " et 100%. Voici un exemple de cration de " pools " :
Fonction de classification
En effet, pour prendre cette dcision, il vous suffit dcrire vousmme la fonction de classification qui va permettre au systme de dterminer que la session demande doit tre rattache au bon " workload group ". Imaginons que nous ayons deux utilisateurs dclars dans linstance SQL Server 2008 : Create Policy Create Policy Login Utilisateur1 With Password = 'MotDePasse1', Check_ = Off Login Utilisateur2 With Password = 'MotDePasse2', Check_ = Off
Un exemple de fonction de classification pourrait tre : Create Function FonctionClassification() returns sysname with Schemabinding Begin
Fig.1
Fig.2
Fig.3
18
Declare @Val sysname Declare @LogonActuel sysname = Lower(Suser_Sname()) If @LogonActuel = 'utilisateur1' Set @Val='Workload1'; If @LogonActuel = 'utilisateur2' Set @Val='Workload2'; Return @Val End Ici nous dcidons que toute requte excute sous le compte Utilisateur1 sera affecte au workload1, tandis que celle ralise sous le compte Utilisateur2 sera affecte au workload2. Cette classification est extrmement simple et permet de rpartir les ressources de votre instance SQL Server 2008 entre diffrents utilisateurs ou groupes dutilisateurs. Il ne reste plus qu indiquer au " Resource Governor " de linstance SQL Server 2008 quelle est la bonne fonction de classification utiliser : Grant Execute On FonctionClassification To Public Alter Resource Governor With (Classifier_Function = Fonction Classification) Alter Resource Governor Reconfigure On peut dsormais tester le fonctionnement de notre paramtrage en utilisant une requte trs gourmande en temps processeur : Set Nocount On Declare @I int = 100000000 Declare @S varchar(100) While @I > 0 Begin Select @S = @@Version Set @I = @I - 1 End Nous allons excuter cette requte simultanment sous les deux comptes prcdents, savoir Utilisateur1 et Utilisateur2. Pour juger de lefficacit du " Resource Governor ", nous allons utiliser " Performance Monitor (perfmon) " et constater que deux nouveaux compteurs sont apparus suite la cration des deux " workload group " prcdents : [Fig.1] Nous allons maintenant excuter les tches suivantes : Etape 1 : excution de la requte sous le compte Utilisateur1 dans un premier temps Etape 2 : excution, en parallle, de la requte sous le compte Utilisateur2 [Fig.2] Avant daller plus loin, il est noter que visiblement, nous nutilisons pas 100% de la CPU de la machine mais seulement 50%. Ceci est absolument normal dans le cadre de cette dmonstration car, en
Fig.6
fait, la machine sur laquelle ces requtes sont excutes possde deux processeurs (CPU0 et CPU1). Linstance SQL Server 2008 a t configure pour nutiliser que le premier processeur (CPU0). Il est affich en bleu et on voit bien quil est utilis 100%. Lorsque la premire requte est excute, le systme lui alloue 100% de la CPU0 (soit 50% de lensemble du temps processeur du systme). A la deuxime tape, nous dcidons de lancer en parallle la seconde requte et lon voit que le systme rpartit immdiatement la charge CPU de manire quitable, soit 50% de CPU0 pour la premire requte et 50% de CPU0 pour la seconde requte (traduit ici par 25% du temps total processeur pour chacune delle). Nous allons maintenant changer la rpartition de lutilisation de la CPU entre les deux utilisateurs. Nous avons la possibilit de modifier toutes les caractristiques de notre " resource governor " via loutil dadministration de SQL Server 2008 appel " Management Studio ".[Fig.3], [Fig.4]. Il est galement possible deffectuer ces paramtrages par script T-SQL (Etape 4) : Alter Resource Pool Pool1 With (Max_Cpu_Percent = 30) Alter Resource Pool Pool2 With (Max_Cpu_Percent = 70) Alter Resource Governor Reconfigure Comme le montre la figure suivante, un changement de paramtrage devient actif immdiatement et chaud, c'est--dire que les requtes, alors quelles sont encore en train de tourner, bnficient de la nouvelle rpartition ds que cette dernire est enregistre dans le systme : [Fig.5] Pour rappel, voici les valeurs de rpartition constates sur le " Performance Monitor " compte-tenu du fait que la machine possde 2 processeurs : [Fig.6] Comme vous venez de le voir, le Resource Governor permet darriver un niveau de personnalisation intressant. Cette fonctionnalit peut galement rpondre au cas les plus complexes. [Fig.7]
Pascal Belaud, Microsoft France Pascal est en charge, depuis plus de 10 annes, de la relation technique avec les dveloppeurs chez Microsoft France. Vous pouvez le retrouver sur son blog ladresse : http://blogs.msdn.com/Pascal
20
Eclipse - NetBeans :
comment choisir loutil idal ?
Quand on dbute la programmation Java ou que lon est dj un bon torrfacteur de caf javanais, un moment ou un autre, se pose la question de loutillage. Il ne faut pas oublier de revenir aux fondamentaux de la programmation : les outils ! Sans eux, vous pouvez tre un expert en toute technologie vous ne ferez pas grand chose
ans le monde merveilleux du dveloppement Java, il y a encore quelques annes, nous avions un trs grand choix : JBuilder, JetBrains, Eclipse, Netbeans, VisualCaf, jcreator, jde, etc. On connat ce quil en est advenu : Eclipse a tout cras ou presque. JBuilder a connu des heures sombres et est pass sur Eclipse. JetBrains rsiste tant bien que mal, JDev se " contente " de dveloppeurs Oracle. Netbeans, issu de Sun, ntait pas au point : lent, peu performant, lacunes fonctionnelles. En peine 3 ans, cet IDE a russi le dfi de rejoindre Eclipse et de connatre une reconstruction totale de son environnement et cela paie ! Netbeans est redevenu une vraie alter-
native Eclipse mme si, notamment, en France, il demeure souvent mal considr et encore assez peu utilis. Est-ce pour autant que lon va refaire un Eclipse vs Netbeans pour la nime fois ? Oui et non. Oui dans le sens o nous allons comparer fonction par fonction les avantages et inconvnients de chaque IDE. Non, car le but ici nest pas de comparer brut de fonderie les deux outils. Ce dossier doit vous permettre de mieux savoir ce que lon trouve, ou ne trouve pas, dans ces environnements. Et au final, vous saurez comment mieux choisir en fonction de vos besoins et impratifs techniques. Nous vous dvoilerons aussi le futur dEclipse, avec le projet e4. Franois Tonic
22
d'instances de ces listener. La fiabilit doit galement tre amliore, notamment grce la dfinition d'une architecture commune pour la gestion de la concurrence.
dclarative ou en se basant sur des modles) la fois en phase de dveloppement et l'excution. Cela passe par l'introduction du support de la gestion de scripts et de styles dans la plate-forme. L'implmentation Web de la plate-forme Eclipse et de SWT est un autre grand thme dEclipse 4.0. Plusieurs pistes sont l'tude. La premire approche consiste excuter le code Java sur un serveur et le rendu de l'interface graphique sur le client. C'est l'approche du projet RAP (Rich Client Platform). La seconde piste suivie consiste excuter un langage de type Java (Flex, Dojo ou Silverlight) sur le client la " Google Web Toolkit ". De nombreuses autres fonctionnalits sont prvues ou en cours d'tude, comme la possibilit d'avoir des workspaces distants, l'uniformisation des frameworks de connexion (ceux de projets CVS, WTP ECF, DTP ...). , , En novembre prochain, Eclipse Summit Europe sera loccasion dchanger et de prciser larchitecture de e4. Ainsi le comit de programme constitu de Ralph Mueller (Responsable Europe de la fondation Eclipse), Cdric Brun (Obeo), Hendrick Hoefer (Microdoc), Daniel Megert (IBM), Jeff McAffer (Code9) et Juergen Wiesmaier (Compeople) a tout particulirement soign la place laisse e4 au sein de la confrence. Nul doute que l'vnement Eclipse le plus important en Europe va encore dvoiler de nombreuses nouveauts lies e4. Pour en savoir plus : http://wiki.eclipse.org/E4
Les quatre principaux IDE Java sont Eclipse, Netbeans, IntelliJ IDEA et Oracle JDevelopper, sans compter les distributions Eclipse comme MyEclipse. JBuilder fut longtemps une rfrence et est depuis pass sur un socle Eclipse. JDevelopper est plus destin un usage interne ou pour les utilisateurs des produits Oracle. De tous ces outils, Eclipse et Netbeans sont les seuls tre gratuits et open source.
exporter en Ajax ! Tout comme NetBeans, Eclipse est aussi une plateforme riche avec Eclipse RCP .
Linstallation
Eclipse 3.4 : dans la continuit Eclipse est depuis juin dernier en version 3.4, nom de code Ganymde. La dernire grande refonte dEclipse date de 2004, avec la v3, qui reconcevait compltement le moteur dexcution de lEDI, en le basant sur la plate-forme OSGi. Depuis lors, les diffrentes versions ne reprsentent pas une aussi grande volution que Netbeans 6. Elles sont plutt faites de changements internes et dintgration de diffrents projets de la florissante fondation Eclipse. La fondation Eclipse comprend environ 90 projets et Ganymde en regroupe 23. Chacun de ces projets tant autonome, Ganymde reprsente donc un dfi organisationnel, mais aussi technique avec ses 18 millions de lignes de code. Ganymde propose notamment de meilleures performances grce au support pour les machines multi-core, un principe de collection de donnes comportementales sur lutilisation dEclipse (permettant ainsi de connatre prcisment lutilisation faite) et une plate-forme de dveloppement permettant de programmer des applications en SWT/JFace et de les Au niveau de linstallation, Netbeans et Eclipse viennent chacun sous diffrentes formes. Lide commune est de partir dun environnement de base que lon peut alors habiller finement avec des plug-in ou alors avoir un environnement pr-packag selon les dveloppements que lon fait (web, clients lourds). Dans le premier cas, on tlcharge la distribution la plus simple et lon peut alors passer du temps paramtrer finement les plug-in que lon veut, pour avoir un environnement sur mesure. Dans le deuxime cas, chacun des sites nous propose des " bundles ", cest--dire le noyau enrob de plug-in selon nos besoins. Les bundles proposs par Netbeans et Eclipse sont relativement similaires : un environnement simple pour le dveloppement Java, un autre environnement pour les dveloppements Web avec un support pour des serveurs dapplications (Tomcat et Glassfish pour Netbeans). Il existe aussi un bundle " complet ", incluant la plupart des plug-in officiels de la communaut. Le principe des bundles est intressant puisquil vite la chasse aux plug-in et propose dj une bonne granularit pour avoir un EDI adapt lutilisation que lon veut
Netbeans 6.1 : toujours en progrs Sun sest lanc dans un chantier ambitieux pour proposer un outil hautement productif et parfaitement intgr Java. Le rsultat est plutt impressionnant : ldition du code source avec Netbeans laisse une trs bonne impression, lintgration avec de nombreux outils est transparente. Dans sa version 6.1, Netbeans apporte un grand nombre damliorations : un meilleur support pour le JavaScript (compltion et du refactoring simple), un suppor t natif pour Spring, un meilleur support des serveurs JEE, de la compltion pour la JavaDoc, une gnration CRUD pour JSF et JPA partir dune base de donnes et des performances amliores ! Bref, lquipe de Netbeans est trs active. La version 6.5 de Netbeans est prvue pour
24
Lespace de travail
Eclipse lance directement une invitation un peu laconique concernant le choix dun " workspace " (" espace de travail "). Cette notion est un peu perturbante au dbut. Lespace de travail stocke en effet les projets sur lesquels on travaille et le paramtrage de tous les plug-in. Ainsi, si lon travaille sur plusieurs sujets (des applicat i o n s m t i e r We b p o u r v o t r e entreprise ou des clients, des frameworks open source, des valuations de diffrentes technologies), chaque contexte peut tre sauvegard dans un espace de travail distinct et votre EDI ne devient pas un fouillis de toutes vos activits. On touche l une caractristique rcurrente dans Eclipse : une fonctionnalit trs utile offrant de la flexibilit mais prsente abruptement sans vraiment dexplications. Eclipse est en effet trs souple et trs puissant mais il ncessite toujours un paramtrage un peu plus pouss. Ct Netbeans, on dispose aussi de lespace de travail. Netbeans propose un lment similaire (peut-tre moins puissant) lespace de travail dEclipse : les groupes de projets. Cependant cette notion nest pas introduite immdiatement et on peut utiliser Netbeans pendant des mois sans en connatre lexistence. Les deux outils proposent des wizards pour la cration de projets. Le fonctionnement reste le mme : choix dun type de projet (Java classique, application Web, EJB) et les deux EDI se talonnent pour cette fonctionnalit trs importante. Linterface graphique de Netbeans est trs soigne : icnes, look-andfeel proche du systme dexploitation, diteurs de code avec coloration syntaxique pour de nombreux types de fichiers, palettes de vues (projets, structure de lobjet dit, bibliothques de composants glisser/dplacer). Bref, le look est
Le support pour le refactoring ne sarrte pas l, il est aussi possible dajouter des paramtres une mthode et de choisir une valeur par dfaut pour tous les appels existants, dextraire du code pour en faire une mthode part entire ou encore dextraire une classe abstraite partir dune classe existante Selon les oprations de refactoring, les EDI sont aussi capables de gnrer un aperu, afin dvaluer les consquences de lopration. Eclipse dispose dune lgre avance, certainement due sa maturit. Certaines oprations assez complexes sont supportes : cration dindirections dappel, cration et application de scripts de refactoring Sur la partie dition de code, les deux outils sont globalement gaux.
Outils de RAD
Ils permettent de dvelopper en quelques clics. Ces outils se justifient pour des phases de tests ou de prototypages. Eclipse propose un outillage RAD limit. Ct client lourd, il nexiste plus de support officiel open source, le plug-in Visual Editor ntant plus support depuis Eclipse 3.3. Ct web, Eclipse propose de ldition visuelle de composants, notamment pour HTML, JSP et JSF. Netbeans propose en revanche un trs bon support, avec notamment la possibilit de gnrer des applications JSF ou Swing, aussi bien pour la partie vue que persistance des donnes. Le prototypage avec Netbeans est donc grandement facilit. Matisse, ddi Swing, fait maintenant rfrence et permet de dvelopper des crans avec un code de bonne qualit. A noter quil existe un portage de Matisse pour Eclipse mais payant. Avantage : Netbeans.
Performances
Les EDI ont la rputation dtre gourmands en ressources. Netbeans ne faillit malheureusement pas cette rputation. Malgr des amliorations, il reste relativement lent, aussi bien pour dmarrer que pour le dveloppement de tous les jours. Cette lenteur ne gne pas aux tches de dveloppement de tous les jours mais savre parfois agaante. La consommation
Dveloppement mobile
Netbeans se concentre sur Java Micro Edition dont limplmentation est particulirement bonne : diteur graphique (visual Mobile designer) pour grer graphiquement lenchanement et le design des crans. Le
26
Aide et documentation
Devenant de plus en plus complexe, la documentation est un lment capital ! Netbeans, ladoption se fait sans problme : laide prsente dans le logiciel est bien fournie (systme JavaHelp). Chaque plug-in dispose dune partie ddie. Le site officiel regorge de tutoriaux et de vidos pour comprendre les bases de tous les outils natifs de Netbeans. Il est donc pos-
versions dune mme bibliothque. Netbeans a, lui aussi, adopt une architecture plug-in. Celle-ci se montre trs convaincante et quasi quivalente celle dEclipse, notamment avec le gestionnaire de plug-in permettant des installations distantes et dynamiques partir dun catalogue. [Fig.3] La communaut Netbeans propose mme des plug-in gratuits qui nont pas leur quivalent (au moins en qualit), par exemple Matisse. Il ny a cependant pas que laspect utilisateur pour les plug-in. Il faut en
25 32
Richard Basque
29
Rudi Bruchez
www.dunod.com
MAOGANI 080902
12,80
ages 9782100 518630 336 p ages
Franois Cointe
27
dun EDI nest pas exclusive : on peut utiliser chacun dentre eux pour ses points forts, par exemple Netbeans pour dvelopper les vues dune application Swing et Eclipse pour la partie persistance. Il ne faut pas se priver ni de lun, ni de lautre !
Le bilan
Il est indniable que Netbeans dans sa version 6.x constitue une vraie alternative. Les deux outils sont de trs bonne qualit et proposent des fonctionnalits trs proches. Cependant, ils ont une philosophie un peu diffrente. Eclipse savre gnralement plus souple, en contrepartie, il peut ncessiter plus de configuration. En bref, Netbeans 6.1 ne devrait pas convaincre les pro-Eclipse de changer. Les autres doivent sans conteste lessayer pour voir sil peut rpondre certains de leurs besoins en dveloppement.
Fonctionnalits
Refactoring Reporting Support PHP CVS Subversion Mercurial Support pour frameworks Profiling SOA Modlisation Support JEE Gnration CRUD Designer WYSIWYG Swing Client base de donnes Programmation oriente " tche "
Eclipse 3.4
Oui Oui (BIRT) Oui Oui Non (pas natif) Non (pas natif) Non (pas natif) Non (pas natif) Oui Oui Oui Non (pas natif) Non Oui Oui (Mylyn)
Netbeans 6.1
Oui Oui (JasperReports) Non ( venir) Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Oui Non
Commentaires
Sensiblement quivalents BIRT est sous projet Eclipse Dans Netbeans 6.5 Trs bon support Trs bon support, mais plugin ncessaire pour Eclipse Fortement utilis chez Sun Ncessit dinstaller les plug-in pour Eclipse Pour Eclipse, ncessit de tlcharger TPTP, assez complexe Plug-in tlcharger sparment ou distributions spcifiques Plug-in tlcharger sparment ou distributions spcifiques Netbeans focalise plus sur les standards de Java Netbeans propose la gnration dapplications CRUD pour Swing et JSF Matisse est port pour Eclipse mais nest pas gratuit Trs bon support des deux cts. Eclipse est capable dadapter son interface lactivit du dveloppeur
28
Infragistics NetAdvantage
sales-europe@infragistics.com
more
Copyright 1996-2008 Infragistics, Inc. All rights reserved. Infragistics, the Infragistics logo and NetAdvantage are registered trademarks of Infragistics, Inc. All other trademarks or registered trademarks are the respective property of their owners.
dossier \\ 10 ans
" Rendez-vous
dans
www. pro gramm
10ans !
18:28 Page 1
N um
ro S p cial 10
AVANT
a ns ! Nouvelle Formule
Le m agaz
ine d u d ve
loppe
techniq
Les de rn Tout sa ires versions voir su r Eclipse compares 4.0 SQL S 2008 erver Flash Dco
uvrez le Resour Govern ce or
Le mat
Exclusif ! Ve
Enqute
ment
l!
iPhone
Et au ssi : Lin
paces Crer vot : re grid computin g Jeux Dvelop : per des jeux en Java M 04319 - 112 - F: 5,95 E
- Cana da 8,95
JavaS
Aspec
Java
k@l@b@c@a;
APRS
ue
- DOM
Surf 6,90
3:HIKONB=^UZ^Z]:?
$ CAN TOM 940
XPF - MARO C 50 DH
Les premiers lecteurs du magazine se souviennent de la naissance de la revue, dabord numro " hors srie " de la revue Compatibles PC magazine. A lpoque, une revue comme " PC mag " comportait des pages de listings. " Comment programmer en Basic lhorloge de votre ordinateur " , et autres articles de code, ont constitu le hobby du week end de toute une gnration . Tous les amateurs dinformatique (ou presque) taient des programmeurs amateurs. Le numro hors srie stant arrach dans les kiosques, votre magazine tait lanc, en 1998. Lquipe tait divise en ce qui concerne le titre. " Dvelopper " faisait trop " informaticien professionnel ", nous voulions continuer de toucher la masse des amateurs. " Programmez " faisait moins peur !
prochains cadres en entreprise. De programmeurs, vous tes devenus dveloppeurs. Vous rvez dun poste darchitecte, de chef de projet, ou pour les plus ambitieux dentre vous, de directeur informatique.
DE JAVA .NET
Le Numro 1 faisait la part belle Java. En 2000, .NET tait en vedette. Linux tait prsent depuis le dbut, mais la notion dopen source restait vague. En 2004, le dessin de Piedoue montrant le militant " open-source.org " devenu un prospre " open-source.com ", marquait la reconnaissance de lopen source en entreprise. Dailleurs dans lenqute " 10 ans " diffuse sur programmez.com, vous dsignez nettement le phnomne open-source comme le changement le plus marquant de la dcennie. Apache, Linux, Open Office devancent Microsoft et Java !
Jean Kaminsky
30
dossier \\ 10 ans
Grande enqute
Vos langages favoris
Dix ans de Programmez ! cela se fte. Quoi de mieux que de vous laisser la parole en votant pour vos langages prfrs et donner votre point de vue sur les dix dernires annes du dveloppement, les faits marquants, et esquisser le futur de linformatique.
Les langages les plus utiliss
HTML et consorts reste assez largement le langage le plus utilis, cela sexplique par lexplosion des applications web qui utilisent toujours massivement HTML, XHTML, DHTML. Mais on constate une grande perce dAjax alors que Php perd une place mais reste majoritairement utilis. XML est en deuxime position, ce qui sexplique par son utilisation pour les donnes, les changes. Ct plate-forme .Net, VB.net rgresse de 8 points alors que C# reste quasi stable, VB confirme sa fin en chutant de 13 points, ce qui, tonnamment, ne profite pas .Net. Java perd quelques points mais reste un excellent 54 % ! Toujours ct web, notons la bonne tenue de Flash qui ne souffre pas (-5 %) de larrive de Silverlight. Ruby ralise une petite perce mais reste assez marginal. Pour combien de temps ?
2008
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 HTML XML Php Java C++ Ajax C# VB VB.Net ASP.Net Flash Assembleur Delphi Perl Python WinDev Ruby Cobol Fortran 70 60 57 54 53 41 38 37 29 26 22 21 20 16 14 12 10 9 6
2006
83 65 65 57 58 29 40 50 37 33 27 22 24 21 14 13 6 9 5,5
Tendance
F F F F F S F F F F F D F F D F S D D
Enqute langages
1 2 3 4 4 6 7 8 8
69 61 59 56 56 53 51 46 46 39 33 31
13 Cobol 13 Ruby 13 ADA 16 Lisp 16 OCaml 18 Simula 18 D 18 Powerscript 21 Eiffel 21 Haskel 22 Erlang 22 Smalltalk
29 29 29 27 27 24 24 24 22 22 21 21
Octobre 2008 \\ PROgrammez ! 31 Venez tmoigner de votre exprience sur le forum www.programmez.com
dossier \\ 10 ans
Total des utilisateurs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 HTML XML Php Java C++ Ajax C# VB VB.Net ASP.Net Flash Assembleur Delphi Perl Python WinDev Ruby Cobol Fortran 70 60 57 54 53 41 38 37 29 26 22 21 20 16 14 12 10 9 6
Dveloppeurs professionnels
XML HTML Java Php C++ Ajax C# VB ASP.Net VB.Net Flash Assembleur Delphi Perl Python WinDev Ruby Cobol Fortran 74 73 61 59 53 50 45 41 33 31 22 21 21 18 13 12 10 9 6
Etudiants
C++ 78 HTML 70 Php 65 Java 59 XML 51 Ajax 36 C# 28 VB 24 Flash 23 Assembleur 21 VB.Net 20 ASP .Net 18 Delphi 13 Python 13 Ruby 13 Perl 12 WinDev 9 Cobol 4 Fortran 2
matrise
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Ajax ASP.Net Assembleur C# C++ Cobol Delphi Flash Fortran HTML Java Perl Php Python Ruby VB VB.net WinDev XML 14 22 8 35 34 9 17 3 4
se perfectionner 43
16 6 22 14 0 3 18 0
envisage de l'utiliser
14 10 4
15
2 1 2
15
0 1 8 9 9
60 36
7 35 6 3 30 21 11
23
21 10 21 9 8 4 10 2
Chez les dveloppeurs professionnels, XML passe devant HTML et Java arrive 3e, devant Php. Donn pour moribond par beaucoup, voire quasi mort, C++ redevient un langage phare. Pour preuve, les tudiants le placent en premier et globalement, C++ termine 5e , un trs beau rsultat. Les langages .Net restent, par rapport 2006, dans le milieu du classement avec un croulement de VB (passant de 50 % 37 %). C# passe devant. Mais comme Java, C# connat une baisse dans son utilisation chez les dveloppeurs professionnels. On peut constater quil y a un rquilibrage des langages, mme si certains sont plus utiliss que dautres. Le dveloppement web reste particulirement fort en plaant quatre langages dans les 10 premiers.
16 21
1 7 5 4
45
38
Il est intressant de distinguer dans lutilisation des langages ceux que lon matrise et ceux que lon utilise mais que lon voudrait approfondir et enfin ceux que lon envisage dutiliser. Si XML est utilis par presque 50 % des dveloppeurs, la moiti dentre eux veulent se perfectionner et peu disent le matriser. Et Ruby arrive en tte des langages envisags dans lavenir
Enqute 10 ans
VOTRE MTIER
Nous vous avions laiss une large panoplie de choix dans les mtiers. Les dveloppeurs professionnels (en entreprise, SSII, freelance) arrivent en tte avec 37 %. A la deuxime place, nous trouvons les tudiants (13 %) puis les chefs de projets, 10 %. Les webmasters sont peut tre plus timides que les autres avec seulement 3 % des participants Les architectes font un peu mieux, 6 % !
32
dossier \\ 10 ans
% exprims
facilit
VB WinDev Php HTML VB.net Python C# Ruby XML ASP .Net Perl Java Delphi Fortran Cobol Flash Ajax Assembleur C++ 76 74 67 66 61 61 56 56 49 48 46 38 36 36 29 29 28 16 14
productivit
WinDev C# Ruby ASP .Net VB.net Python Java Php Perl VB C++ XML Ajax HTML Delphi Assembleur Flash Cobol Fortran 79 68 61 61 52 50 50 45 42 39 37 35 31 30 30 26 26 24 18
portabilit
Java XML Delphi Python Perl HTML Php Ruby Flash C++ Ajax Fortran WinDev C# Assembleur ASP .Net Cobol VB.net VB 81 70 67 64 60 58 56 52 49 47 32 28 25 23 21 18 16 14 6
communaut
Php Java C++ HTML Flash ASP .Net Perl C# VB VB.net Python Ruby XML Ajax Cobol Assembleur Fortran WinDev Delphi 81 74 68 68 58 58 56 51 46 45 44 43 42 35 29 28 26 24 23
reconnaissance
C# 80 Java 78 C++ 73 ASP .Net 72 Cobol 69 Assembleur 56 Flash 55 XML 55 Php 54 Ajax 53 HTML 49 Fortran 49 WinDev 42 VB.net 41 Perl 35 Ruby 28 VB 27 Python 24 Delphi 14
En 2006, Php et Java arrivaient premiers 5 fois sur 6. En deux ans, quelle volution ! Ces deux langages monopolisent 3 catgories sur 6 mais WinDev, C# et VB reviennent en force ! Php reste selon vous le langage le plus simple, avec HTML mais WLangage (WinDev) passe 3e et amliore mme son rsultat par rapport 2006 ! Surtout, il est reconnu pour sa facilit (deuxime) et 1er pour la productivit ! En deux ans, WinDev a russi convaincre les dveloppeurs. VB et VB.Net continue tre considr comme simple et facile coder, ce qui est moins le cas de C#, Ruby par contre nest que 7e et 9e, soit grosso modo le mme rsultat quen 2006. Si Java reste dans le milieu du classement il amliore son pourcentage de vote, en triplant. Windev langage le plus productif ! Lapproche cl en main de lenvironnement y est sans doute pour quelque chose. Les langages .Net russissent un bon tir group, Java marque le pas la 7e place. Ajax est loin derrire, pchant par la complexit de Javascript et la multitude de frameworks. Cependant, sans surprise l non plus, Java arrive largement devant pour la portabilit. .Net ptit par contre de cela (mme sil faut relativiser pour ASP .Net et C# avec des piles tiers comme Mono). L encore Ajax souffre de sa complexit, du grand nombre de Frameworks, pas toujours trs interoprables entre eux. Les Communauts et la " Reconnaissance sur le march et les employeurs " constituent des lments cls pour les langages. Ct communautaire, Php, Java et C++ (exaequo avec HTML) sont sur le podium. Identique celui de 2006 ! Flash reste aussi sa place, preuve que la technologie dAdobe a su trouver une bonne communaut. A noter aussi un tir group des langages .Net entre la 6e et la 10e place. Ct reconnaissance, C# est dsormais parfaitement reconnu par le march (alors quil tait 10e en 2006). VB plonge dans le classement et Ruby peine saffirmer.
en % exprims
68 63 60 58 58 49 46 45 43 40 40 38 33 30
Avec larrive dAjax sur le dveloppement web depuis plus de 2 ans, il tait normal quil soit en tte en nombre de votants (68 %). On trouve ensuite les librairies standard C++, winform, librairies C, Swing et consorts. Par contre en intrt, les librairies C++ arrivent en tte (7,62 / 10) puis suivent Ajax et Winform. Swing arrive 5e. La notorit de C++ et son importance dans le dveloppement est une nouvelle fois confirme ici. Le langage est toujours trs bien plac depuis le dbut de lenqute puis on retrouve le duo insparable Java - .Net mais le dveloppement web est lui aussi bien prsent ici avec Ajax. Les mta langages ont-ils eu une influence sur linformatique ? Oui ! Pour preuve, les 88 % de XML ou encore les 82 % pour HTML. Etonnamment, SGML se contente de 21 %. Pour mmoire, SGML est la base de HTML
34
dossier \\ 10 ans
CHANGEMENTS
innovants
% exprims
69 61 59 56 56 54 51 46 46 39 33 31 29 29 29 27 27 24 24 24 22 22 22 21
Quelles
applications dveloppez-vous ?
Utiliser un langage cest bien, mais dans quel but ? Majoritairement vous ralisez des applications web et desktop. Les sites web sont fortement reprsents, les sites purement web 2 reprsentent environ un tiers des dveloppements. Les technologies web 2 pouvant sintgrer sans difficults dans les sites et applications web " traditionnels ". La mobilit reste marginale tout comme le jeu. Jeu / multimdia Mobilit Intgration Extranet Industriel / embarqu Sites web 2 intranet Sites web Application desktop Applications web
A la grande majorit, vous pensez que le langage le plus innovant est Java avec une bonne note gnrale et un fort taux de votants ! Puis nous trouvons Php, C#, C++, SQL, Javascript. C++ est 2e si on considre la note moyenne, mais il a obtenu moins de votes. Les langages objets monopolisent les premires places. Les langages fonctionnels restent en retrait, sans doute par manque dapprentissage.
1 2 3 4 5 6 7
79 73 71 67 56 53 45
.Net est la plate-forme qui a le plus marqu ces dernires annes selon vous, mais Eclipse, Java SE et Java EE sont trs bien placs !
35
dossier \\ 10 ans
Apache
83%
Bill Gates
62% 72%
Le mouvement Open Source / logiciels libres se confirme quand on vous demande les phnomnes, les personnes qui ont marqu, influenc le monde informatique. Apache et le mouvement open source arrivent premiers ! Seul Apple sintercale. Bill Gates arrive seulement 15e Et Sourceforge, Wikipedia ou Richard Stallman ne vous ont pas particulirement marqu !
1 Apache 2 Open source 3 Apple 4 Openoffice 5 Linus Torvald 6 Microsoft 7 Offshore 8 Google 9 GNU 10 Linux 11 Mozilla 12 Wikipedia 13 IBM 14 Richard Stallman 15 Bill Gates 16 Steve Jobs 17 Sourceforge
83 80 80 78 78 75 75 72 72 70 67 66 65 63 62 50 47
Apple 80%
Linus Torvald
78%
Mozilla
67% 78%
Vive lopen source ! Cest par cette exclamation que lon peut rsumer votre opinion. Windows reste, certes devant, mais vous tes 89 % considrer Linux comme le plus marquant depuis 10 ans !
Force est de constater que vous navez pas dides tranches sur le futur de linformatique et du dveloppement. Mme si quelques tendances, actuelles ou non, se dtachent, on ne peut pas dire que ce soit un raz de mare ! Cela prouve la difficult de voir ce qui va se passer et la confusion actuelle dans les annonces, les tendances. Plus que jamais, la veille technologique sera un lment capital pour mieux comprendre les volutions et les tendances futures qui vont conditionner fortement le mtier ! Lopen source reste votre tendance de choix (76 % de votants), avec la programmation objet et Linux, mais la gnration automatique de code arrive juste derrire avec le nomadisme. Par contre, vous ne croyez pas beaucoup W indows Seven, loffshore et mme aux langages fonctionnels ! Franois Tonic
1 Open source
2 3 4 5 6 7 8 9 10 11 Programmation objet Linux Gnration automatique du code Informatique nomade Multicore Qui peut le dire ? Windows Seven Langages fonctionnels Offshore DSL
76
76 71 69 66 63 61 58 57 51 49
36
dossier \\ 10 ans
Paralllisme et puissance
La matrise du paralllisme est galement un dfi pour les annes qui viennent. Seule une meilleure matrise des traitements parallles permettra de continuer profiter de l'volution technologique avec de plus en plus de curs par processeur. Le calcul haute performance (HPC) devra progresser pour faire face aux besoins de simulations sur des modles multichelles de plus en plus complexes capables d'assimiler des quantits de donnes de plus en plus vastes.
es possibilits d'excution distance et de por tabilit des codes (technologies Java) ont modifi radicalement la distribution des traitements travers le rseau. Aujourdhui, nous achetons moins de logiciels comme objets et davantage comme services sur le rseau. Le web a un impact considrable : nouveaux modles conomiques d'changes, de cration de biens et de ser vices, et mme nouvelles modalits d'interaction sociale. La quantit dinformations disponibles a cr de faon exponentielle (elle passe aujourdhui les 1020 octets). Les possibilits dindexation de ces donnes sont de plus en plus fines (Google a dix ans aujourd'hui) ouvrant un large accs au grand public et donnant lieu une crativit foisonnante de nouvelles pratiques.
intgrant des reprsentations htrognes et des donnes issues de systmes d'observation et d'imagerie de plus en plus fins.
Langage commun
Linteroprabilit entre composantes (machines et codes) de grands systmes devra tre amliore : dans un environnement o les modles et les codes sont de plus en plus nombreux et doivent communiquer entre eux, il sera essentiel que chaque composante dispose dun modle explicite de son propre fonctionnement et sache interprter les modles des autres composantes pour changer des donnes et services. Dans le mme temps, le web et les moteurs de recherche volueront vers une matrise smantique des contenus. En laborant des ontologies (lments smantiques associs aux concepts), les chercheurs facilitent l'indexation et la recherche de documents par leur contenu. Enfin, beaucoup de progrs sont attendus du traitement du langage naturel et des modalits d'interaction vocales, visuelles, etc. Vers la fin du trop rducteur clavier-cran-souris ?
Le logiciel intelligent
Lapprentissage automatique des machines reprsentera sans doute une grande avance. La programma-
38
dossier \\ 10 ans
noblesse milieu des annes 90 avec lapparition dun protocole tout bte, http, et dun langage de description tout aussi simple, html. Le dveloppeur crit moins de code, il dcrit de plus en plus. Les technologies telles que CGI et ASP permettent dajouter de lintelligence ct serveur. Ouf, le code est de retour ! Le dveloppeur Web est donc aussi un dveloppeur qui crit de vraies lignes. Troisime gnration. Mais le Web expose surtout des applications entires qui peuvent tre consommes par dautres applications riches de la deuxime ou troisime gnration. Bienvenue dans la quatrime gnration, gnration toujours en cours. Dbandade de ressources sur le Web : " Mga Datacenter ", fermes de s e r v e u r s , Te r r a octets, nous voil. Et lobjet qui vibre et sonne, que tout le monde a dans la poche, il ne faudrait pas loublier ! Ces micro machines qui sont plus puissantes que les ordinateurs dil y a 10 ans peine. Oui, cest la cinquime gnration, proche de la quatrime, qui se base sur des concepts de la seconde et peut consommer des logiciels de la troisime et de la quatrime. Tiens, cest la premire fois que jutilise le mot logiciel. Pourtant cest ce que produisent tous les dveloppeurs de la plante. Le logiciel cest le fondement de toutes ces gnrations et de celles venir. Et maintenant, que se passe-t-il ? La complexit est telle quil est de plus en plus difficile dcrire du code per-
formant, propre (nous avons tous notre dfinition), scuris, volutif. Et surtout comment faire pour offrir lutilisateur les bnfices de toutes ces gnrations ? Difficile de lire dans une boule de cristal Et pourtant, pour crire mieux et plus, il faut crire moins. Paradoxal. Oui, en ralit, il faut laisser la machine crire du code, laisser la machine loptimiser, et crire des spcifications, assembler des composants pour faire fonctionner des logiciels entre eux. Le dveloppeur crira toujours du code mais sera plus un ingnieur de production quun technicien les mains dans le cambouis. Il y aura des briques, les poutres, les tuiles et ceux qui les assemblent. Et comme tous les composants ne sont pas rels, changer le type de tuile pour offrir une meilleure tanchit ou changer la couleur du toit devient possible. Cette rvolution qui se base sur toutes les prcdentes est pleine de termes tels que Software + Services de Microsoft, Cloud Computing, industrialisation des logiciels, vir tualisation, SOA et jen passe. Le logiciel de la sixime est partout et doit pouvoir tre dvelopp de la mme faon quelle soit de la deuxime, troisime, quatrime ou cinquime rvolution. Cest la promesse que Microsoft fait au dveloppeur. A travers Visual Studio, .NET et toute sa plate-forme. Vive le dveloppement, vive le code, vive le dveloppeur !
39
dossier \\ 10 ans
mis disposition gratuitement, permettant aux dveloppeurs de davantage se concentrer sur leurs concepts applicatifs novateurs, sans se proccuper des questions d'infrastructure, transfres aux centres de donnes grce au Cloud Computing (ou nuage informatique). Avec ces basiques, il est possible denvisager la mise en place de standards, une compatibilit entre les navigateurs, ou les systmes d'exploitation, voire mme les langages de programmation. Jetant un pont au-dessus des incompatibilits, et des difficults de dveloppement, Google Web Toolkit (GWT) permet par exemple de dployer des front-end applicatifs en JavaScript, mais maintenus en Java. Aujourdhui, une nouvelle offre d'outils de dveloppement et de services permet aux
entreprises de se jouer des obstacles techniques au dveloppement et au dploiement. Les plates-formes de dveloppement et d'hbergement de Salesforce (Force.com), d'Amazon (EC2) ou de Google (AppEngine) permettent galement la prise en charge et l'administration de ces infrastructures. Les entreprises qui utilisent les PaaS peuvent ainsi recentrer leurs services informatiques sur des projets de conception, plus forte valeur ajoute, et enrichir leur offre sans avoir la grer. Le principe dorigine du web, doffrir tous un environnement de cration et de dcouverte libre, est ici respect et plus encore, au cur de l'effort des dveloppeurs du monde entier envers la communaut.
innovantes. Toutefois, en regardant en arrire, je ne pense pas que lindustrie technologique ait rellement avanc. Dans le mme temps, beaucoup davances ont t ralises loin de la lumire, des media. Je citerais lmergence des services web. Ils ont rellement permis de faire dmarrer la rutilisation des composants, au lieu de juste en parler. Aujourdhui, au lieu de rcrire les anciens logiciels mainframe, on expose, on les connecte via des web services. Tout le monde sattendait la mort du mainframe mais il a rellement tendu son esprance de vie ! En outre, la programmation de systmes distribus devient beaucoup plus efficace notamment grce la rutilisation ! Une autre volution intressante noter : beaucoup de personnes sattendaient la mort du C et C++. Ce qui ne fut pas le cas ! Bien au contraire, il y
eut une (vritable) rsurrection. Il existe une nouvelle gnration de dveloppeurs et dditeurs qui comptent sur le C et C++ pour dvelopper le logiciel embarqu ! Le C est utilis dans les systmes embarqus pour lesquels il ny a pas de support (ncessaire) pour un systme temps rel. Cela comprend la plupart des terminaux. C + + est actuellement le langage de choix pour les terminaux de plus en plus complexes, comme ceux utiliss dans l'arospatiale, le militaire, le mdical, etc. Ces appareils doivent fournir une puissance de calcul et le C++ les aide dans les applications complexes et critiques. Le rsultat est que le march du dveloppement logiciel est profondment divis en deux : dun ct (IT surtout) Java, et de lautre C et C++ pour lembarqu. Il y a dix ans, de nombreuses quipes travaillaient avec VB. Et finalement, une grosse part du march a t prise par Java ! Le dveloppement avec la solution Microsoft est (plus) rare maintenant. Il existe la marge. Je suis vraiment impatient de regarder les dix prochaines annes, partir de maintenant. Nous regarderons en arrire et verrons que les web services et les processus mtiers ont rellement rvolutionn linformatique. Ensemble, ces technologies aident automatiser beaucoup de processus humains, et font faire un bond considrable la productivit dans lensemble de lentreprise.
40
dossier \\ 10 ans
pement Web en plein boum et qui demande souplesse, adaptation et ractivit. Pour cela le langage de script est idal et cette dcennie a vu la conscration des Python, Ruby, PHP langages tous ns la dcennie , prcdente, comme quoi, dans ce monde de l'informatique qui volue si vite, il faut beaucoup de temps pour que les ides simples parviennent s'imposer :)
"
Ct technique
Si l'on regarde ct technique, on peut dire que cette dcennie est celle de la programmation objet qui remplace, et c'est tant mieux, le style spaghetti. C'est aussi le retour des langages de scripts. Ceux-ci ont toujours exist mais ils trouvent leurs lettres de noblesse dans un dvelop-
que cette dcennie passe est celle de la fracture. Les cartons de nos universits dbordent de crations remarquables, mais qui restent ignores. On prfre avoir plusieurs fois la mme solution dans sa trousse outils: Java, C# = Java.clone('Microsoft'), etc. Et les dveloppements restent coteux, alors on les exporte. Quitte ce qu'ils soient mal raliss (et encore ! Ce n'est pas toujours le cas...) autant qu'ils cotent le moins cher possible. A quoi pouvons-nous nous attendre pour la dcennie venir ? Il semble certain que l'volution du matriel, la gnralisation des processeurs multicoeurs et l'impatience des utilisateurs feront que la programmation parallle, ou concurrente sera omniprsente et deviendra probablement un nouveau paradigme. Des langages et des outils de modlisation verront le jour. Toutes choses qui existent dj, dans le domaine d'Erlang par exemple. Mais s'il y a quelque chose de bien constant dans notre cher monde, c'est cette mauvaise habitude de toujours rinventer la roue. Alors finalement, plus que des langages vraiment nouveaux, nous verrons sans doute des Java et des C# remanis, enrichis de librairies. Cela existe dj, C_ par exemple. Les plates-formes resteront lourdes, les langages les plus en vogue verbeux, les applications concurrentes seront toutes remplies de deadlocks et comme tout cela va coter extrmement cher, les dveloppements seront ncessairement offshore. Cet offshore spcialis depuis si longtemps dans la concurrence...
41
dossier \\ 10 ans
mique bas sur les services, la survie du produit dpend compltement de la motivation dun noyau dur de dveloppeurs, mais le logiciel libre a encore de beaux jours devant lui. Enfin je mentionnerai la rsurrection du Mac dans les cinq dernires annes comme un signal supplmentaire du march contre lhgmonie du systme Windows. Quant au futur, point besoin de boule de cristal pour prdire un brillant avenir aux Smartphones, tablettes, eBooks et autres dispositifs mobiles. Leur expansion sera proportionnelle celle des forfaits illimits daccs des rseaux trs haut dbit, sur des zones de couvertures toujours plus larges. De nouveaux services seront inventer pour accompagner les prochaines mutations des mentalits et des modes de vie. Le push rciproque simposera, tout appareil connect tant la fois client et serveur de centaines dautres. A la simplicit croissante des modes dutilisation rpondra une complexit tout aussi croissante
des briques mises en uvre dans le plus simple des projets : autour dun noyau proche de la machine, en C, C++, foisonnera une collection hybride de langages de scripting de plus en plus difficiles maintenir, ou mme connatre. Face des millions de lignes de code, le programmeur aura un dfi de plus en plus lourd relever. Fort de sa philosophie dintgration des standards, 4D continuera, je lespre, faire entendre sa diffrence et dmontrer son utilit dans ce challenge. En effet, comme notre pass le prouve, non seulement nous cherchons simplifier lacquisition des nouvelles technologies, en jouant au passage un vritable rle de prescripteur, mais nous sommes extrmement attentifs la prennit des dveloppements de nos clients et donc de leurs investissements. Au fond, la prochaine dcennie ressemblera fortement la prcdente : le niveau de qualit des applications, et donc des organisations qui les fabriquent, est condamn crotre, pour le plus grand bnfice de lutilisateur final.
PRO grammez !
Le magazine du dveloppement
LINFO permanente
Lactu : le fil dinfo quotidien des journalistes de Programmez La newsletter hebdo : abonnez-vous, comme 30 000 professionnels dj. Cest gratuit !
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 \\ 10 ans
es informaticiens ont toujours la cote, comme en tmoignent les tudes du Syntec Informatique, qui recensent les mtiers des diteurs de logiciels, des socits de services et du conseil en informatique. Mme sil y a eu des fluctuations conjoncturelles dans cette demande. Leurs mtiers et les comptences requises ont volu avec les mutations technologiques, mais aussi avec le contexte historique, conomique et gopolitique.
(ateliers de gnie logiciels). " Les mutations du gnie logiciel ont suivi les volutions technologiques avec, dans les annes 1980, les bases de donnes, applications batch, mthode Merise, puis lapparition des concepts objets, des SGBD relationnels, du middleware et aujourdhui, une grande diversit de technologies ", explique Jean-Louis Bernaudin.
Le dveloppement de logiciels de type PGI reste toujours en bonne place dans les offres demploi. En 2008, lcosystme SAP en Allemagne reprsente 30% des projets et la moiti des services en informatique de gestion (source : Syntec Informatique). Lesjeudis.com placent en deuxime position (derrire les nouvelles technologies lies internet) le dveloppement de logiciels de type ERP " Avec une acclration de la . demande lie la mondialisation, aux fusions dentreprises, au besoin de pilotage et de partage des donnes dans un contexte mondial ", prcise Marie Ozier -Lafontaine, charge de communication pour Lesjeudis. com. " Les postes demands sont des ingnieurs et consultants ERP notamment SAP " , . Par ailleurs, le modle client-serveur implique un poste client " actif ", dot de suites bureautiques et autres applications clientes. Do lapparition de nouveaux mtiers ddis lutilisa-
Figure 1 : Evolution de lemploi des informaticiens, chercheurs et ingnieurs, de 1985 2015 - (extraite de ltude Pasc@line)
43
dossier \\ 10 ans
Webmestre, un mtier aux multiples facettes
Le webmestre est charg de ladministration de site, son mtier est proche de ladministrateur de bases de donnes ou de serveurs. Ce qui est nouveau, cest laspect graphique et la gestion de contenus multimdias. En tant quadministrateur de site, il est le chef de lquipe web. Responsable du bon fonctionnement et coordinateur des diffrents sites, il garantit un contenu ditorial conforme limage de marque de la socit, ses objectifs et sa stratgie ; ct infrastructure, il dcide des serveurs, logiciels, technologies et services mis en uvre ; il est responsable de la performance, de la fiabilit et de la disponibilit du site. Les autres fonctions qui lui sont lies sont : - responsable ditorial ou " webditeur " : responsable de la publication de contenu (marketing, commercial, RH, production, R&D, etc.) ; - infographiste, ou responsable artistique du site web, mtier caractris par crativit et le souci dergonomie ; - dveloppeur web, charg dassembler les composantes du systme et de raliser linterface avec les applications de back-office ; - gestionnaire de contenu, utilisateur de techniques de type GED (gestion lectronique de documents). tion de projets. Le chef de projet est un manager : il constitue un ensemble destin rpondre un cahier des charges prcis dans un temps limit, en fdrant les ressources (humaines, financires, matrielles et logicielles) ncessaires, suivant un processus cohrent. Il ne peut pas approfondir les techniques autant que le font les dveloppeurs, mme sil est souvent un ancien dveloppeur, mais il doit tre capable de suivre leur travail et darbitrer entre diffrentes options. Laspect communication et le dialogue, aussi bien avec lquipe projet quavec les utilisateurs, est aussi trs important : cest lui qui traduit les lments techniques dans le mtier des utilisateurs et inversement. Pour laider dans sa tche, il a sa disposition des outils de gestion de projets ou de gestion de portefeuilles de projets.
Figure 2 : Origine scolaire des tudiants en formations dingnieurs (extraite de ltude Pasc@line)
teur, tels que help desk, hotline, gestionnaire de parc, ergonome, dveloppeur dinterfaces homme-machine.
uvre des dates et des valeurs, notamment dans les banques et socits dassurance, taient crits dans ce langage. Dautres entreprises en ont profit pour faire voluer leur systme dinformation, et notamment adopter un PGI. Consquence de ces projets de migration : la fin des annes 1990, les informaticiens sont une denre rare, et la demande est trs importante, concernant aussi bien les " vieux " cobolistes, mobiliss pour faire voluer les programmes existants, que les spcialistes SAP et autres PGI pour faire migrer des systmes propritaires vers des progiciels intgrs. Fin 1998, linvestissement pour lan 2000 reprsentait entre 10 et 20% du budget informatique des entreprises.
44
dossier \\ 10 ans
Rvolution de linterface
Cette seconde vague va largement mobiliser les comptences des spcialistes rseaux et tlcoms, scurit en mettant un fort accent sur les interfaces homme-machine et linteractivit, notamment avec lapparition fin 2004 du web 2.0. " 50% de leffort de dveloppement est consacr la construction de lIHM ", indiquait dj en 2001 Thomas Baudel, ingnieur de dveloppement chez lditeur Ilog. Et Alain Derycke, responsable du DESS Multimdia et Internet pour le commerce lectronique Lille, ajoutait la mme poque : " Les IHM sont passes de ltat de lart celui de science, fonde sur des mthodes de conception, la rutilisation et les patterns. XML est devenu une technologie cl. " Ce que confirme Jean-Claude Rault, consultant indpendant et organisateur de confrences sur le gnie logiciel : " La composante interface prend de limportance : elle associe lergonomie, la psychologie, ltude des compor tements. Cest un mtier qui devrait se dvelopper. "
nes. Ses outils sont le rfrentiel de composants ; le gestionnaire de configuration et de documents ; le langage UML pour la description interne des composants et XML pour la description des donnes et mtadonnes, ainsi que des mthodes pour permettre de modifier ou daccder aux composants
Aujourdhui et demain
Les profils lis aux rseaux sont toujours trs recherchs. " Depuis 2002, on demande des profils expriments type ingnieur pour les technologies de convergence tlphonie-informatique avec expertise voix sur IP et scurit ", constate Marie Ozier-Lafontaine. " Les profils recherchs sont des informaticiens forms aux tlcoms ou des spcialistes tlcoms ayant acquis une comptence en informatique. " Sans oublier les aspects scurit (cryptage, firewalls, paiement scuris, etc.) : en 1999, une enqute de lApec (Agence pour lemploi des cadres) prvoyait que la croissance du march de lemploi dans le domaine de la scurit informatique augmenterait de 10% par an. En 2001, elle reprsentait prs de 24% du march de lemploi informatique.
45
dossier \\ 10 ans
implmentation. Il propose des " frameworks " ou squelettes darchitecture, qui permettent de dfinir la structure globale, les collaborations entre composants et les tches de contrle dune application pour le domaine concern. Il doit aussi prendre en compte la performance, ladaptabilit et lvolutivit, afin que larchitecture ainsi conue constitue un ensemble facile prendre en main par les dveloppeurs. " Ce nest pas un mtier rellement nouveau, mais au dbut, il y avait confusion totale entre chef de projet et architecte ", constate Jean-Louis Bernaudin, qui souligne les diffrences entre les deux mtiers : " Le chef de projet a une dimension relationnelle et commerciale ; il est charg de grer les dlais, budgets, ressources. Il peut tre assist dun architecte. Celui-ci est le bras droit du chef de projet. " Pour Marie OzierLafontaine, " les architectes et urbanistes de systme dinformation interviennent surtout dans des projets long terme (environ 5 ans). " Ils doivent grer la complexit des nouveaux SI, ce qui ncessite une expertise solide et une exprience de 5 10 ans, avec des profils orients plutt consultants. les grandes entreprises, qui demandent souvent une comptence sur un logiciel particulier (Business Objects, notamment) ", commente Marie Ozier-Lafontaine. Lintitul du poste est " ingnieur en informatique dcisionnelle ". Enfin, aujourdhui, le temps rel et linformatique enfouie connaissent un regain. En effet, des systmes de plus en plus nombreux et varis embarquent de lintelligence, quil sagisse de rseaux de capteurs et dactionneurs, RFID, cartes puces, domotique, M2M, etc. ; grands systmes dinformation (tlcoms, militaire, trafic arien, rseaux de distribution dnergie) chez les industriels et quipementiers, et autres grands chantiers mens grce aux applications de linformatique : Airbus A380, Ariane 5, Gnople, gestion des rseaux GSM et UMTS, systme Sirius, GPS, loisirs numriques (musique, photo, cration), intelligence contextuelle (rendue clbre par le film Minority Report), applications de la vie quotidienne (achats en ligne, carte de transport ou daccs sans contact). " Linformatique enfouie est en explosion du point de vue quantitatif, mais nvolue pas fondamentalement du point de vue qualitatif ", constate Jean-Louis Bernaudin. JeanClaude Rault insiste lui aussi sur limpor tance des mtiers lis lingnierie de systmes : " Les informaticiens qui conoivent ces systmes doivent avoir une vision globale du projet : cots, performances, mcanique ", souligne-t-il. " Pour faire de la gestion de projet, gestion de configuration, dfinition et validation des exigences, il faut avoir une culture plus pousse que la seule connaissance des outils informatiques. Cest ce qui fait souvent dfaut aux ingnieurs systmes. " Les mtiers de linformatique daujourdhui, et surtout de demain, voluent ainsi vers des comptences plus pointues, mais aussi une pluridisciplinarit : associer pratiques technologiques et cration graphique, informatique classique et mtier de lentreprise (banque, industrie), connaissances des progiciels et de la physique ou de la biologie, etc.
(source INSEE, cit par Pasc@line) : Les emplois du secteur Logiciels et Services en informatique de gestion. On peut identifier 5 grands mtiers dingnieurs et cadres techniques :
SSII Tous secteurs
Dveloppeurs et cadres dtudes 137 830 Maintenance, services aux utilisateurs 11 000 Chefs de projet 3 281 Technico-commerciaux 18 802 Spcialistes Tlcoms 924 Total : 171 837
et 5 mtiers de niveau technicien : Techniciens commerciaux et technico-commerciaux en informatique Techniciens de dveloppement en informatique Techniciens de production en informatique Techniciens maintenance et support (informatique) Techniciens tlcoms rseaux Total :
46
reportage \\ concours
ImagineCup 2008
le tourdu monde
Durant la comptition ImagineCup de juillet dernier Paris, lquipe de Programmez ! a cum les stands des participants, suivi les comptitions, la prparation et a longuement rencontr des quipes du monde entier. Le mois dernier, nous avions surtout mis laccent sur les quipes franaises et les vainqueurs, ce mois-ci, jetons un regard intress sur dautres quipes, europennes ou dailleurs. Elles ont toutes concouru dans la catgorie du " software design ", sauf lquipe indienne.
Claire Rmy
EUROPE
Projet PoinT Power in Time (Allemagne)
Le projet PoinT-Power in Time consiste dans un botier lectrique pour conomiser lnergie des imprimantes et ordinateurs en rseau. Le systme dtecte si les appareils ne sont pas utiliss et les teint compltement, de sorte quils ne consomment plus du tout dnergie. Ds quun appareil est de nouveau requis, le systme le reconnat et le rallume " temps ". Le matriel et le logiciel ont t dvelopps avec un analyseur de trafic. Lquipe, pluridisciplinaire, comprend quatre tudiants de luniversit de sciences appliques dEsslingen, proche de Stuttgart : un spcialiste interface utilisateur graphique ; un spcialiste analyse de rseau ; un spcialiste matriel ; un spcialiste logiciel et gestion de donnes. Ils sont tous en quatrime anne dtudes suprieures. Leur professeur leur a propos de participer la comptition, cest la deuxime fois pour cette universit. " La principale difficult du projet a t le temps limit. Lquipe se runissait tous les jours pour programmer. Actuellement nous recherchons une coopration avec un fabricant de commutateur. La cible pour ce systme est plutt lindustrie ", expliquent-ils. Trois dentre eux avaient dj lhabitude de travailler en quipe. Quant aux dbouchs, aucun problme : " A Stuttgart, il y a beaucoup de socits dinformatique. "
Daniel Franke
" Mon pre ma montr, jai fait des petits programmes. "
Les autres membres de lquipe ont commenc plus tard : Vasilios Filippidis vers 16 ans. Jrn Schindler a commenc vers 16-17 ans et Axel Ernst vers 20 ans.
Vasilios Filippidis
Ct technique
Power in Time sappuie sur le Framework .Net 2.0 et sa dclinaison embarque, Compact Framework. Pour les langages, une grande diversit : ASP .Net, C, C++ et C#. Pour la partie change de donnes et message, on retrouve SOAP et XML.
Jrn Schindler
48
Axel Ernst
reportage \\ concours
ASIE
Projet Windows Light (Thalande)
Lquipe de Kasetsart University (Thalande), baptise SKE, a men un projet de contrle automatique dclairage pour la maison (home automation), pour lutter contre leffet de serre. " En teignant 1 milliard dampoules lectriques pendant 1 heure, nous pouvons sauver 717 696 arbres ", ont-ils calcul. Lquipe (Udomsak Donkhampai, Tanthwat Khemavast, Saroot Udomkarn et Krithee Sirisith) est en quatrime et dernire anne dtudes. " On commence linformatique vers 15-16 ans au lyce. Lide, cest de travailler 2-3 ans aprs le diplme, puis de faire un master degree ". Pour la partie purement technique, lquipe a utilis une large panoplie de technologies et doutils Microsoft et non Microsoft : .Net 3.0, Visual Studio, Windows SDK, WPF, Vir tual Earth, Framework de calcul de lempreinte carbone.
Matjaz Horvat, Jernej Goricki, Domen Grabec, avec Martin Breskvar leur mentor (en polo ray). " Nous sommes un groupe de personnes qui voulons faire quelque chose dextraordinaire dans la vie. Et nous nous efforons tous de faire quelque chose qui soit utile au bien commun. Lorsque nous avons vu le thme dImagine Cup 2008, nous nous sommes dit : Cest fait pour nous ! "
Ct technique
Du trs lourd pour la partie dveloppement : Siliverlight 2, C#, ASP .Net 3.5 et Popfly. A cela se rajoute C#, REST et LINQ. Ct outils, lquipe a utilis toute la panoplie dveloppeur designer : Visual Studio 2008, SQL Server 2005, Expression Blend 2.5 et les fonctions Activities de IE8.
49
reportage \\ concours
vers lge de 11 ans. Leur projet met en uvre un capteur de CO2 reli un mobile, lidentification par RFID et un systme de golocalisation GPS. Il vise renforcer la conscience des gens et les impliquer autant que possible pour protger la terre. Le capteur fournit des donnes qui sont reportes sur une carte gographique, ce qui permet de voir quelles parties sont pollues, lesquelles ne le sont pas. Le systme peut tre utilis pour le gouvernement et pour le public. Lquipe a ralis une maquette du Tajmahal : lorsque la concentration en CO2 atteint un certain seuil, un feu rouge sallume pour arrter la frquentation du public et donc rduire la concentration en CO2 localement. Cela peut aussi tre utilis pour encourager les conducteurs garer leur voiture et utiliser les transports en commun. " Nous esprons proposer ce projet au gouvernement. " Pour accompagner leur projet, ils ont cr un site (http://men.yeelok.com) avec une devise " Unite people to protect our earth ! ", un logo, un pins Bref, de vrais petits professionnels de linformatique et du marketing ! La diversit du projet (embarqu, tiago Nieves, Enrique Lira Vargas, Fernando Aguilar Reyes, avec leur mentor, Gabriel Ibarra Romero) a dvelopp le projet Pepenator (www.cmirg.com/pepenator) en vue de changer les habitudes des gens et de les aider recycler. Ils sont informaticiens, sauf Fernando Aguilar Reyes qui est tudiant en mcanique (Mechanical Engineering). Bas sur le web, le systme est destin aux coles, supermarchs, gouvernements Il intgre logistique, codes barres, hotmail, systme dinformation gographique.
RFID, GPS, desktop, web) a oblig lquipe intgrer dans un mme projet des technologies diverses pour ces diffrents aspects. On retrouve dans la panoplie technique : Virtual Earth, WPF, Silverlight 2, un kit RIFD, Windows Mobile 5, .Net 3.5, ASP.Net Ajax, SQL Ser ver 2005 Express, des gadgets, Visual Studio 2008 ainsi que lensemble de la gamme Expression !
AMERIQUE LATINE
- Projet Pepenator (Mexique)
Lquipe Chicos Karel (Felix Rafael Horta Cuadrilla, Rodrigo Rubn San-
Equipe
L
50
quipe DCEites (Kumar Ankit, Siddharth Singhal, Sunil Kumar), juste diplme de luniversit de Delhi (Delhi College of Engineers), tait dj candidate en 2007. Ils ont 22-23 ans. Lquipe comprend des ingnieurs de diffrents domaines un lectricien, un sp-
cialiste de lordinateur, un informaticien. " Nous tions dj candidats en 2007 et nous avons lhabitude de travailler ensemble. " Le projet JAL concerne la pollution des rivires. " Jal signifie eau en hindi. " Le systme est bas sur deux types de capteurs de pollution : des capteurs fixes placs dans leau prs des industries pour informer les gouvernements ; des capteurs sur des petits bateaux pour mesurer la pollution alatoire " car les gens continuent jeter des impurets dans les rivires, et a cote trs cher de dpolluer. " " Nous sommes en relation avec les responsables de la dpollution. " Pour ce projet, ils ont travaill en collaboration avec le gouvernement sur la rivire Yamuna qui passe Delhi. Ensuite, le systme sera test avec les autorits municipales. Lune des difficults tait linterface gographique. Les membres de lquipe se sont initis linformatique depuis lge de 14 ans en moyenne. Les parents leur achtent un ordinateur pour le travail, le jeu et internet. Lun deux a pris des cours lcole et a commenc coder 16 ans.
bonnes feuilles \\ E X C L U S I F
2e partie
synergies entre Windows et Windows Live. Cest ce quexplique clairement un mmo rdig au cours de lt 2007 sur le planning de Windows Live Wave 3 : " Pendant que nous allons cibler une exprience continue sur Windows Vista, nous allons parier sur lexprience et la plate-forme Windows 7, et crer la meilleure exprience quand on est connect avec Windows 7. Nous allons travailler avec lquipe Windows 7 pour devenir le meilleur dveloppeur de solutions sur la plate-forme Windows 7. Nos expriences seront conues de telle sorte que lorsque lon est connect Windows 7 on tend lexprience Windows de manire continue, et nous allons travailler suivre les prconisations de style Windows 7 pour les applications. " ()
(1) Il ny a pas dinformations publiques sur Cosmos. Il y a cependant beaucoup dinformations anciennes sur WinFS, le systme de fichiers de Windows que Gates a dcrit il y a quelques annes comme lun des meilleurs arguments de vente de Windows Longhorn (http://msdn.microsoft.com/msdnmag/issues/04/01/WinFS/). Aprs plusieurs annes de promesses non tenues, Microsoft a finalement arrt WinFS en juin 2006, en promettant de livrer la plupart des fonctionnalits du systme dexploitation dans les futures versions de SQLServer et dautres produits.
(2). Vous trouverez beaucoup dinformations sur le projet Singularity sur http://research.microsoft.com/os/singularity/. Les citations proviennent dune tude davril 2007 intitule " Rethinking the Software Stack ", qui est disponible sur http://research.microsoft.com/os/singularity/publications/ OSR2007_RethinkingSoftwareStack.pdf. Il est intressant de noter quil nest pas fait mention de " Midori " dans cette tude.
Mary Jo FOLEY, Extrait de : Microsoft laprs Bill Gates, Avec laimable autorisation des ditions Dunod. Parution le 24 Septembre 2008.
Aprs le dpart de son fondateur, qui dirigera demain cette socit de 80 000 employs ? Des extraits sont galement en ligne sur
www.programmez.com
- Conditions Gnrales de Vente sur le site www.amen.fr. AMEN RCS PARIS : B 421 527 797. IN WEB WE TRUST : Nous croyons au web.
7,80 HT/an
soit 9,33 TTC/an
PARTIR DE
AVEC LE PACK LA CARTE D'AMEN, VOTRE HBERGEMENT S'ADAPTE SIMPLEMENT L'VOLUTION DE VOS BESOINS.
Votre nom de domaine inclus Espace d'hbergement de 0 20 Go Php4, Php5, Perl, Python, Ruby De 0 20 bases de donnes avec espace de stockage flexible de 25 Mo 1 Go De 0 200 comptes email 2 Go webmail/pop/imap Paramtrage de l'envoi de mails php Outil de cration de site inclus Outil de cration de boutique e-commerce inclus
HBERGEMENT
CRATION DE SITE
- E - COMMERCE -
RFRENCEMENT
code \\ modlisation
" Contact " qui reprsente lentit du contact et une classe " Civilite " qui dfinit la civilit du contact [Fig.1]. de 2 classes Business Object (BO) drives des entits dfinies ci-dessus et places dans un package strotyp " PK_BUSINESS_OBJECT ". Ces classes sont celles qui sont manipules par lapplication. Ceci permet denrichir le modle mtier avec des lments non persists. dun service " ServiceContactCreate " dclar laide dune interface (au sens UML) et inclus dans un package strotyp " PK_SERVICE ". Ce package peut contenir autant de services que ncessaire. Ces services dfinissent les traitements mtiers dune application. Chaque service manipule des " Business Objects " (BO). Ces services sont de trois familles : - Services standards : oprations de traitements primitifs (CRUD, recherche, etc.). Ils sont strotyps : create, delete, update, find by id, etc., - Services complexes : squences de traitements primitifs incluant des conditions et des itrations. Ils sont strotyps " complex " puis dcrits dans des diagrammes de squences, - Services spcifiques : rutilisation de bibliothques dj disponibles (capital existant chez un client). Ils sont strotyps " specific ".
Fig.2
dun acteur au sens UML. Cet acteur correspond un rle disponible pour les utilisateurs de lapplication. Dans notre cas, nous avons un rle nomm " simpleUser " de uses cases inclus dans des packages UML permettant de dfinir lorganisation fonctionnelle de lapplication. Les rles dfinis plus haut sont associs aux packages par des relations de dpendance qui permettent de dterminer les droits daccs. Chaque uses cases contient un ou plusieurs diagrammes dactivit correspondant une page de lapplication. Ces diagrammes dcrivent les traitements raliss suite aux actions excutes sur la page, par exemple " clic sur sauvegarder ". Chaque diagramme dactivit est dcompos en 4 " swimlines " permettant de classifier les traitements. Le diagramme dactivit prsent ici [ Fig.2 ] dcrit laffichage de la page " creer " puis lexcution du traitement dinsertion en base suite au clic du bouton " btnSauvegarder ", c'est--dire lexcution du service " ServiceContactCreate " avec comme paramtre lobjet " myContact " instance de " ContactBO ". Une fois le service excut, la page
Fig.3
Fig.1
56
code \\ modelisation
" play " est servie au client. Cette page " play " possde aussi son propre diagramme dactivit. Dans notre exemple, le diagramme dactivit est trs simple car il ny a quune seule action de type primitif (insertion en base) raliser. Toutefois, BLU AGE permet de grer des actions multiples et mme dajouter des conditions. Vous pouvez tlcharger les lments du modle ladresse http://www.bluage. com/programmez et faire copier/coller des contenus des dossiers.
Nous allons maintenant crer un projet sur lenvironnement BLU AGE BUILD. Aprs avoir install et excut BLU AGE (voir encadr), vous pouvez crer un projet : " file>new>other " puis slectionnez " BLU AGE Project>Project ". Cliquez ensuite sur " next ". Sur la bote de dialogue dfinissez le nom de votre projet, par exemple " leCarnet " puis cliquez sur " next ". Compltez les informations demandes : [Fig.4] - SGBD : serveur de base de donnes, - Driver : automatique, driver pour la connexion la base, - User et Password : utilisateur et mot de passe dun utilisateur de la base de donnes autoris, - Url Connexion : chane de connexion la base de donnes, remplacez le nom de la base par le nom que vous utiliserez, - hibernateHbm2DDLAuto : mode de cration des tables. Si ce champ est gal " update ", alors la premire excution de lapplication, les tables seront automatiquement cres dans la base.
Paramtrez la maquette XHTML en appliquant des tags BLU AGE afin dassocier les lments du modle la prsentation. Cette action est ralise laide de lenvironnement BLU AGE BUILD. Dans lexemple de la [Fig.5] nous avons paramtr le champ de saisie du formulaire laide du tag BLU AGE <bluage:TextField> en prcisant que ce champ permet de renseigner lattribut " Contact.nom " de linstance " myContact ". Une fois la maquette entirement paramtre, configurez la gnration. Pour cela, allez dans le menu " run>run configuration ", sur la bote de dialogue faites un clic droit sur " BLU AGE Generation Launcher ", slectionnez " new " et paramtrez les lments : [Fig.6] - Name : nom de la configuration, - Project : nom du projet sur Eclipse, - Select model : nom du modle UML disponible dans le dossier " model " du projet.
Sauvegardez en cliquant sur " Apply " puis excutez la gnration en cliquant sur " Run ". Vous pourrez voir la progression de la gnration dans une console Eclipse. Aprs quelques secondes, lapplication est gnre. 3 projets ont t ajouts au workspace Eclipse : leCarnet-entities, leCarnet-service et leCarnet-web.
BLU AGE BUILD permet de dployer les applications gnres sur un environnement Apache Tomcat 5.5 pour les tester. Faites un clic droit sur le projet " leCarnet-web ", slectionnez " run as " puis " run on server ", choisissez Apache Tomcat 5.5 Server, paramtrez le serveur (choisissez le JRE et localisez le rpertoire Tomcat). Une fois le paramtrage finalis, lapplication sexcute. Vous trouverez sur la distribution prsente sur le CD de nombreux autres exemples. Ils sont accessibles en slectionnant " Help>Cheat Sheets " puis en slectionnant " BLU AGE Tutorial ". A ladresse http://www.bluage.com/ programmez plusieurs tutoriels en ligne sont disponibles.
Installation et pr-requis
- Windows XP/2003, 2Go mmoire, disque dur disponible avec 500Mo despace. - JDK 1.6 (http://java.sun.com/javase/downloads/index.jsp) - Tomcat 5.5.25 (http://tomcat.apache.org/) - SGBD (SQL Server ou autre SGBD) - Modeleur UML permettant lexportation au format EMF 2.0 (ici nous utilisons MagicDraw 15.5, vous pouvez demander une version dvaluation par mail : magicdraw@bluage.com ou par tlphone au +33 0 1 56 05 60 91) Installation : - Double cliquez sur le .jar du rpertoire du CD. Si ceci ne fonctionne pas, faites un clic droit
Cliquez sur " finish " et le projet sera cr dans lenvironnement BLU AGE BUILD. Il contient 2 dossiers : - mockup : pour stocker lensemble des pages XHTML du modle, - model : pour stocker le modle UML au format EMF.
sur le fichier et slectionnez " ouvrir avec ", choisissez " Java Platform SE binary " (vous pouvez aussi cliquer sur " Parcourir " et slectionner " java.exe " dans le dossier sur lequel est install votre JDK 1.6). Lancement : - Excutez le raccourci " BluageDiscovery " sur votre bureau ou lancez " C:\Program Files\BLUAGEDISCOVERY\BLUAGE\eclipse\eclipse.exe ". Pour contacter le support BLU AGE : - Par tlphone : +33 1 56 05 60 91 (de 10h00 18h00) - Par e-mail : programmez@bluage.com
Fig.4
Fig.5
Fig.6
57
www.solutions-logiciels.com
OUI, je mabonne (crire en lettres capitales)
Envoyer par la poste : Solutions Logiciels, service Diffusion, 22 rue ren Boulanger, 75472 PARIS - ou par fax : 01 55 56 70 20 1 an, 6 numros : 25 au lieu de 30 , prix au numro (Tarif France mtropolitaine)
Autres destinations : CEE et Suisse : 30 - Algrie, Maroc, Tunisie : 33 , Canada : 39,50 - Dom : 38 Tom : 50
M. Titre : Mme Mlle Socit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Directeur informatique Responsable informatique Chef de projet Admin Autre . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . Fonction :
Adresse mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
................................................................
SL004
Editeur : K-Now sarl au cap de 8000 sige social : 6 rue Bezout, 75014 Paris
code \\ fash
APPLICATION : Flash
// cration de l'objet Bitmap var affichage:Bitmap = new Bitmap ( monNuancier ); // cration du conteneur interactif var conteneur:Sprite = new Sprite(); conteneur.addChild ( affichage ); addChild ( conteneur ); Il est intressant de noter que la classe flash.display.BitmapData n'est pas une classe interactive. Celle-ci ne peut recevoir des vnements souris, et donc dtecter la slection de l'utilisateur. Afin de rendre une image bitmap interactive, il suffit d'imbriquer celle-ci dans un conteneur interactif de type flash.display.Sprite ou flash.display.MovieClip. [Fig.3] Afin de pouvoir slectionner une couleur nous devons ajouter diffrents vnements interactifs.
DGRADONS !
Afin de raliser notre "nuancier" appel plus couramment "color picker", nous devons tout d'abord raliser un dgrad. Il serait possible de crer ce dernier par programmation mais une solution plus efficace consiste capturer sous forme d'image n'importe quel nuancier appartenant une application de manipulation de pixels, puis d'utiliser ce dgrad comme source de couleurs.[Fig.1] Pour cela, nous importons l'image reprsentant le nuancier au sein de la librairie de Flash CS3, puis nous lui associons un nom de classe par l'intermdiaire du panneau Proprits de liaison. (Clic droit sur l'image, puis Liaison). [Fig.2] En lui associant un nom de classe, nous pouvons par la suite instancier cette image. Il est important de noter qu'en ActionScript 3, toute image est assimile un objet BitmapData. Nous pouvons donc alors trs facilement accder aux pixels composant cette image par les mthodes d'accs aux pixels comme getPixel, ou getPixel32. Dans le code suivant, nous instancions l'image bitmap reprsentant le nuancier puis nous l'affichons : // cration de l'objet BitmapData var monNuancier:Nuancier = new Nuancier(0,0);
Fig.1 Fig.2
LES INTERACTIONS
La premire tape consiste couter l'enfoncement de la souris afin de dclencher l'coute des mouvements de celle-ci : // interactivit conteneur.addEventListener( MouseEvent.MOUSE_DOWN, ecouteSouris ); stage.addEventListener ( MouseEvent.MOUSE_UP, relacheSouris ); function ecouteSouris ( evt:MouseEvent ):void { trace("souris enfonce"); // nous dmarrons l'coute de l'vnement MouseEvent. MOUSE_MOVE evt.currentTarget.addEventListener ( MouseEvent.MOUSE_MOVE, selectionneCouleur ); }
Fig.3 Fig.4
59
code \\ flash
function relacheSouris ( evt:MouseEvent ):void { trace("souris relche"); // lorsque la souris est relche, quel que soit l'objet en cours de survol // nous supprimons l'coute de l'vnement MouseEvent. MOUSE_MOVE conteneur.removeEventListener ( MouseEvent.MOUSE_MOVE, selectionneCouleur ); } function selectionneCouleur ( evt:MouseEvent ):void { trace("souris en mouvement"); } En testant l'application, nous pouvons remarquer les diffrents vnements lis l'interactivit souris. Nous devons prsent ajouter la logique ncessaire la slection de la couleur au sein du nuancier. Afin d'y parvenir, nous allons utiliser une mthode d'accs aux pixels nomme getPixel. Cette mthode est dfinie par la classe BitmapData et permet d'accder aux pixels composant celle-ci. Nous crons un champ texte sur la scne nomm legende_txt puis nous modifions la fonction couteur selectionneCouleur de la manire suivante : function selectionneCouleur ( evt:MouseEvent ):void { legende_txt.text = "0x"+monNuancier.getPixel ( evt.localX, evt.localY ).toString ( 16).toUpperCase(); } } function relacheSouris ( evt:MouseEvent ):void { // lorsque la souris est relche, quel que soit l'objet en cours de survol // nous supprimons l'coute de l'vnement MouseEvent. MOUSE_MOVE conteneur.removeEventListener ( MouseEvent.MOUSE_MOVE, selectionneCouleur ); } function selectionneCouleur ( evt:MouseEvent ):void { // affichage de la couleur slectionne // la mthode getPixel32 extrait la couleur au format 32 bits // la mthode toString permet d'exprimer la couleur dans une base diffrente ici hexadcimale legende_txt.text = "0x"+monNuancier.getPixel32 ( evt.loca lX, evt.localY ).toString ( 16).toUpperCase(); } La figure 4 illustre l'application. // cration de l'objet Bitmap var affichage:Bitmap = new Bitmap ( monNuancier ); // cration du conteneur intractif var conteneur:Sprite = new Sprite(); conteneur.addChild ( affichage ); addChild ( conteneur ); // interactivit conteneur.addEventListener( MouseEvent.MOUSE_DOWN, ecoute Souris ); stage.addEventListener ( MouseEvent.MOUSE_UP, relacheSouris ); function ecouteSouris ( evt:MouseEvent ):void { // nous dmarrons l'coute de l'vnement MouseEvent.MOUSE_MOVE evt.currentTarget.addEventListener ( MouseEvent.MOUSE_MOVE, selectionneCouleur );
Note : La mthode toString permet de convertir la couleur slectionne (en base 10) en base 16.
En testant notre application, nous remarquons que la couleur slectionne ne contient que les composants vert, rouge et bleu et non l'alpha. Afin d'extraire une couleur 32 bits et non 24 bits, nous devons utiliser la mthode d'accs aux pixels getPixel32 : function selectionneCouleur ( evt:MouseEvent ):void { legende_txt.text = "0x"+monNuancier.getPixel32( evt.localX, evt.localY ).toString ( 16).toUpperCase(); } Voici le code complet de notre nuancier : // cration de l'objet BitmapData var monNuancier:Nuancier = new Nuancier(0,0);
EN ATTENDANT LA SUITE
Nous avons ainsi ralis en quelques minutes un "color picker". Libre vous d'ajouter de nouvelles fonctionnalits ce dernier. Cet article avait pour but de nous familiariser avec la classe BitmapData dans un cas d'application concret. Nous nous retrouverons trs vite pour un nouvel article orient "optimisation" l'aide de la classe BitmapData. A trs bientt !
60
FORUM
code \\ java
Cet article se destine aux dveloppeurs Java expriments. Il sera galement utile aux dveloppeurs .NET mme si nous nabordons que succinctement les outils disponibles pour cet environnement. Nous allons nous intresser au concept de programmation oriente aspect ainsi qu son implmentation avec AspectJ. Nous aborderons galement les autres outils du monde Java.
Dans le monde du dveloppement logiciel, le paradigme orient objet a fait une LANGAGE : Java arrive fracassante en DIFFICULTE SOURCE : non AVANCEE apportant des concepts qui ont amlior la productivit des dveloppeurs et la maintenabilit des applications. Aujourdhui cette approche se retrouve dans tous les secteurs du dveloppement : applications dentreprise, jeux vidos, embarqu La programmation oriente aspect (POA ou AOP en anglais), tente de rpondre une problmatique que ne permet pas de couvrir la programmation par objet : la modularisation des fonctionnalits transversales des applications. On parle beaucoup de sparation des proccupations. La POA permet dapporter une rponse pragmatique en sappuyant sur les langages de programmation existants. Il ne faut pas le voir comme une nouvelle approche mais bien comme une extension de la programmation oriente objet. La sparation des proccupations permet dviter un effritement de la conception " pur objet ". Cette dviance intervient dans la phase de ralisation lorsque le dveloppeur se retrouve au pied du mur pour implmenter une fonctionnalit transversale. Il va souvent choisir le plus simple, et pas forcment le plus correct. La POA encapsule ces fonctionnalits pour faciliter le travail du dveloppeur. Pour tre un peu plus concret voici les fonctionnalits que la POA permet de simplifier et mme damliorer : messagerie applicative (log), gestion de la scurit (authentification), persistance (transaction...), cache, etc. le code mtier galement : logique et domaine. Le nombre de lignes de code est en gnral rduit lorsquun projet a recours ce paradigme.
APPLICATION : Toute
fait ce choix. Par exemple, on peut souhaiter intercepter toutes les mthodes toString(), toutes les mthodes contenant get ou set, etc. Lintroduction est une composante particulire de la POA qui permet dajouter une mthode une classe. Bien que trs proche du mcanisme dhritage, celui-ci est bien plus souple et moins contraignant. Ainsi plusieurs introductions peuvent tre effectues sur un mme objet. Lobjectif tant toujours dimplmenter une fonctionnalit transversale plutt que denrichir le modle.
LE TISSAGE DASPECT
Le tissage daspect est une tape primordiale en programmation oriente aspect. Cest elle qui permet de crer le lien entre un greffon et son point de jonction. Cette tape peut tre ralise soit la compilation soit lexcution. La plupart des outils vous laissent choisir, cependant ce critre peut influencer votre choix doutil. AspectJ ralise cette tape la compilation par dfaut.
Historique
Gregor Kiczales et son quipe sont lorigine des concepts de la programmation oriente aspect. Cette quipe qui travaillait au sein de la socit Xerox a dvelopp le premier langage POA : le langage D. IBM a galement investi beaucoup dans la recherche sur ce sujet, ce qui la amen au produit HyperJ qui se proccupe essentiellement de la modularit. Cette solution est cependant moins utilisable bien que plus puissante. Aujourdhui, le projet AspectJ appartient la communaut Eclipse et IBM. Depuis, de nombreuses solutions dont JBoss AOP et Spring AOP on vu le jour.
61
code \\ java
bien. Avec AspectJ, les points de jonction sont dvelopps en Java, ce qui permet de les crer plus facilement. Cependant, pour certains dveloppeurs ne matrisant pas Java il peut tre plus facile dutiliser le langage XML. Dans certains cas, XML permet doffrir une meilleure configuration pour mieux couvrir les fonctionnalits de la POA. ba.setBalance(1000); // on initialise le compte 1000_ } }
PREMIER ASPECT
Nous allons crer un aspect dont le rle est de tracer les modifications du compte client. Les appels de tous les modificateurs seront affichs dans la console. import java.util.logging.Logger; import java.util.logging.Level; public aspect BankAspect { pointcut changeBalance() : call (public * BankAccount.set*(..)); before() : changeBalance() { Logger.getLogger("Bank").log(Level.INFO, "Modification du compte du client " + ((BankAccount)thisJoinPoint.getTarget()).getOwner()); } } Le plug-in Eclipse compile automatiquement le code. Vous pouvez donc excuter lapplication, les aspects sont dores et dj tisss. La vue Cross Reference permet de visualiser les mthodes qui correspondent votre point de jonction. Cela peut tre droutant dans un premier temps, mais lexcution, on constate que notre systme de logging est effectivement bien en place : 2 mai 2008 16:34:36 $1$bc65f0d INFO: Modification du 2 mai 2008 16:34:36 $1$bc65f0d INFO: Modification du BankAspectLog ajc$before$BankAspectLog compte du client null BankAspectLog ajc$before$BankAspectLog compte du client Dupont
LOUTIL ASPECTJ
Afin de mettre en pratique lapproche POA, nous allons crer une petite application de gestion de comptes en banque. Bien quun classique dans le genre, son intrt reste dactualit. Cela permettra galement ceux qui ont vu et revu le sujet de faire le comparatif avec les solutions quils avaient mis en uvre. Notre environnement de dveloppement sera Eclipse. Je vous recommande galement linstallation du plug-in AspectJ qui va nous faciliter grandement la tche. Nous crons un projet AspectJ. Nous pouvons prsent crer notre objet mtier : le compte en banque. La classe contient deux attributs : owner et balance. Le premier dfinit le propritaire du compte par une chane de caractres et le second dcrit le solde du compte en banque. Lobjet a t volontairement simplifi afin de nous focaliser rapidement sur la programmation des aspects qui vont scuriser notre application et lui apporter des fonctionnalits transversales. public class BankAccount { private String owner; private int balance; public BankAccount() { } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public int getBalance() { return balance; } public void setBalance(int balance) { this.balance = balance; } } Voici la classe de lancement qui va se contenter pour le moment de crer un compte et dinitialiser celui-ci. public class Main { public static void main(String[] args) { BankAccount ba = new BankAccount(); ba.setOwner("Dupont"); // Le propritaire du compte est Monsieur Dupont
INJECTION DEXCEPTIONS
Nous allons maintenant ajouter une couche de scurit. Nous allons vrifier que le compte en banque est suffisamment approvisionn. On commence par crer notre exception qui sera leve en cas dopration refuse. public class OperationNotAllowedException extends Exception { } Puis nous ajoutons le greffon et le point de jonction qui correspond au modificateur setBalance : pointcut changeBalance() : Account.setBalance(Integer) Exception); execution (public void Bank throws OperationNotAllowed
before() throws OperationNotAllowedException : changeBalance() { Integer balance = ((Integer)thisJoinPoint.getArgs()[0]); if(balance.intValue() < 0) throw new OperationNotAllowedException(); }
62
code \\ java
On noubliera pas de modifier la dfinition de la mthode setBalance pour prendre en compte la leve de lexception : public void setBalance(Integer balance) throws OperationNot AllowedException { this.balance = balance; } On ajoutera galement les try/catch sur notre classe lanceur : // On essaye un dcouvert try { ba.setBalance(new Integer(-250)); } catch (OperationNotAllowedException e) { e.printStackTrace(); } Lexcution de lapplication produira le rsultat suivant : 2 mai 2008 17:11:54 BankAspect ajc$before$BankAspect$1$59039054 INFO: Modification du compte du client : Dupont OperationNotAllowedException at BankAspect.ajc$before$BankAspect$2$bc65f0d(BankAspect.aj:26) at BankAccount.setBalance(BankAccount.java:32) at Main.main(Main.java:25) large. AspectJ limplmente, mais ce nest pas le cas de tous les outils. Lexemple suivant est indpendant de notre application bancaire : import java.io.File; public aspect FileIntroduction { declare parents: UneClasse implements FileInside; private File UneClasse.file; public Date UneClasse.getDate(){ return file; } public void UneClasse.setDate(Date f){ file = f; } after(): initialization(UneClasse.new(..)){ UneClasse obj = (UneClasse)thisJoinPoint.getTarget(); obj.file = new File(); } } On voit que cet aspect vient ajouter un fichier ainsi que son accesseur et son modificateur la classe UneClasse.
HANDLER
La POA permet de positionner des handlers tout endroit du code. Ainsi, il est possible de surveiller les entres sorties sur la console et il est galement possible de rcuprer les exceptions. Ceci est trs pratique pour centraliser la gestion des exceptions, ainsi on pourrait amliorer notre application bancaire en rcuprant les exceptions grce au point de jonction suivant : pointcut throwsNotAllowedException(): call(* *(..) throws *..*NotAllowedException*); Le greffon throwsNotAllowedException viendra traiter lexception et effectuer laction approprie.
INTRODUCTION
Aborde en dbut darticle, lintroduction est un mcanisme qui permet linsertion dune mthode au sein dun ou plusieurs objets. Une introduction peut galement ajouter des attributs, des constructeurs ou encore des interfaces ou une classe parente. Les introductions sont donc particulirement complexes matriser tant leur spectre dutilisation est abstract aspect AbsLog { abstract pointcut toBeTraced(); Object around(): toBeTraced() { ... } }
JBoss AOP
JBoss AOP est une solution mise en uvre par la communaut JBoss, bien connue pour son serveur dapplication du mme nom. Le fonctionnement est relativement proche dAspectJ et on y retrouve lutilisation dannotations. Il existe beaucoup de frameworks AOP mais JBoss AOP est lun des seuls fournir une bibliothque daspects prts tre utiliss. Ceux-ci proviennent directement du wiki de la communaut et sont intgrs par les dveloppeurs responsables du projet. On retrouve les grands classiques : gestion de la scurit, des transactions, du cache, des communications asynchrones etc. Il est galement possible de sappuyer sur un document XML.
.NET et POA
Java et .NET sont souvent compars. Ici, nous nchapperons pas la rgle : .NET dispose galement doutils pour mettre en uvre la POA. Il semble que parmi la multitude de solutions, AspectDNG soit celle qui est la plus rpandue et la plus adapte aux applications dentreprise. Linspiration des dveloppeurs de lAPI provient directement du monde Java avec la reprise de concepts quavait instaurs AspectJ. Son objectif est cependant dtre simple dutilisation. Il permet le tissage daspects sur les versions 1.1 et 2.0 du framework .NET. NAspect est une autre solution.
63
code \\ java
Laspect suivant tend laspect prcdent. On peut ajouter des fonctionnalits ou en redfinir sans limitation : aspect MyLog extends AbsLog { pointcut toBeTraced(): Command.new(..); } Lorsque plusieurs aspects sappliquent un mme objet, lordre des oprations nest pas garanti. AspectJ implmente donc la composition daspect pour pallier ce problme. Ainsi, on va dfinir un aspect tiers dont lobjectif sera dtablir lordre dutilisation des aspects. Seul celui-ci devra tre utilis pour le tissage daspects. Ici, on souhaite que lauthentification intervienne avant le logging. aspect OrdreGlobal { declare precedence: Authentication, Log; } aspect Authentication { ... } aspect Log { ... } public aspect SongCountObserver extends ObserverProtocol { declare parents : Song extends Subject; declare parents : SongPlayCounter implements Observer; pointcut titleUse(Song song) : this(song) && execution(public void Song.play()); public pointcut subjectChange(Subject subject) : titleUse(Song) && this(subject); public void updateObserver(Subject s, Observer o) { SongPlayCounter counter = (SongPlayCounter) o; counter.incrementPlays((Song) s); } private SongPlayCounter defaultCounter = new SongPlayCounter(); public void setCache(Map cache) { this.cache = cache; } abstract pointcut cachedOperation(Object key); Object around(Object key) : cachedOperation(key) { Object ret; if (cache.containsKey(key)) { ret = cache.get(key); } else { ret = proceed(key); cache.put(key,ret); } return ret; } } Cet aspect permet dillustrer limplmentation dun mcanisme de cache. Ici, laspect est abstrait tant donn quil sagit dun aspect gnrique. On ne sait pas quelle donne doit tre mise en cache. Il sera donc ncessaire dtendre cette classe pour tre mme de lutiliser. Malgr tout, lalgorithme dinsertion et de rcupration de donnes est dj implment. pointcut songCreation(Subject s) : execution(public Song.new(..)) && this(s); after(Subject s) returning : songCreation(s){ addObserver(s, defaultCounter); } }
Spring AOP
Spring permet la mise en uvre de la programmation oriente aspect grce au module Spring AOP Celui-ci, bien que moins puis. sant quAspectJ, couvre la majorit des cas dutilisation avec un certain pragmatisme. Il permet de tirer pleinement avantage du conteneur de Spring. Spring AOP effectue le tissage daspect la vole, lors de lexcution de lapplication et peut se baser soit sur des schmas XML soit sur des annotations comme le fait AspectJ. Spring utilise en interne la POA pour la gestion de la scurit, des transactions, de JMX et des accs distants.
CONCLUSION
Une fois le concept de programmation oriente aspect assimil, lutilisation dAspectJ reste relativement simple et on parvient rapidement le matriser. Il existe dautres outils. Pour les applications web, Spring peut tre une solution alternative plus simple et plus pragmatique. Rappelons simplement que la POA permet daugmenter la qualit du code et daugmenter la productivit. Elle permet galement de rduire le besoin domniscience et apporte un dcouplage entre mtier et technologies. Loc Guillois
64
code \\ java
APPLICATION : Grid
Class [] classes = new Class[]{net.jini.space.JavaSpace.class}; Name sn = new Name(spaceName); ServiceTemplate tmpl = new ServiceTemplate(null,classes,new Entry[]{sn}); // Locate the JavaSpaces service and create a JavaSpace proxy attached to it. LookupLocator locator = new LookupLocator("jini://localhost"); ServiceRegistrar sr = locator.getRegistrar(); JavaSpace space = (JavaSpace)sr.lookup(tmpl); Le plus dur est fait. Notez que pour faire le lookup, il est ncessaire de positionner un gestionnaire de scurit RMI, celui-ci aura besoin d'un fichier policy qu'il faudra passer en argument de la JVM via la proprit java.security.policy. Pour crire dans l'espace (!), c'est tout simple. Crons d'abord la classe que nous allons mettre dans l'espace. public class Message implements Entry { public String content; public Integer ID; public String toString(){ return "Message ID:" + ID + " ,Message content: " + content; } public Message(){} } Et maintenant crivons le message dans l'espace : Message msg = new Message(); msg.ID = 1; msg.content = "Bonjour le monde !"; space.write(msg, null, Lease.FOREVER); Le premier argument est bien sr l'objet, le second est la transaction dans laquelle l'appel de mthode doit avoir lieu (aucune ici), le dernier est le temps pendant lequel l'espace doit garder l'objet. Pass ce dlai, l'espace jette l'objet. Pour lire ou prendre un objet, c'est un peu plus particulier : il faut d'abord crer un objet du type que l'on recherche et renseigner les champs qui identifient cet objet de faon unique. Cet objet est appel un template : Message template = new Message(); template.ID=1; Message result = (Message)space.read(template, null, JavaSpace. NO_WAIT); Le premier argument de la mthode read est le template, le second est la transaction dans laquelle s'excute l'appel (ici aucune), le der-
EN PRATIQUE
Pour nos exemples, nous allons utiliser GigaSpaces, une implmentation Open Source. Pour cela, rendez-vous sur le site www.gigaspaces.com et tlchargez la version communautaire. La faon standard d'obtenir une rfrence sur un espace est de faire un lookup. if ( System.getSecurityManager() == null ) System.setSecurityManager(new RMISecurityManager()); //Create a template to lookup the JavaSpaces service.
65
code \\ java
nier est le temps pendant lequel l'appel doit attendre si l'objet n'est pas trouv immdiatement. Pour prendre un objet, c'est la mme chose : Message template = new Message(); template.ID=1; Message result = (Message)space.take(template, null, JavaSpace.NO_WAIT); Comme vous avez pu le voir, JavaSpaces supporte les transactions, indispensable dans des environnements de production avec de nombreux accs concurrents. Le gestionnaire de transactions (Mahalo), qui tourne indpendamment de l'espace et des applications, est distribu, permettant d'avoir des transactions qui "spannent" plusieurs espaces et applications. Nous allons donc crer deux Processing Units ou PU (l'une crivant, l'autre lisant). Une PU est juste un rpertoire se trouvant dans le rpertoire Deploy de GigaSpaces et contenant les sources, un rpertoire META-INF contenant un descripteur XML Spring, un rpertoire 'lib' contenant les dpendances de votre application et un rpertoire 'shared-lib' contenant les dpendances partages par d'autres PU (ici notre classe Number). Notre premire PU est juste un InitializingBean Spring qui, aprs dmarrage, lance une tche planifie crivant dans l'espace : public void run() { try { Double val = Math.floor(Math.random()*1000); gigaSpace.write(new javaspaces.Number(val.intValue())); } catch (Exception e) { e.printStackTrace(); } } Notez que nous utilisons ici un objet GigaSpace plutt que directement JavaSpace, cet objet tant directement inject dans notre bean. Le fichier Spring est tout ce qu'il y a de plus simple (les dclarations des namespaces ont t omises) : <beans> <os-core:giga-space-context/> <os-core:space id="space" url="jini://*/*/SpacePP" /> <os-core:giga-space id="gigaSpace" space="space"/> <bean id="primeApp" class="javaspaces.PrimeApplication" /> </beans> Ce fichier dclare l'utilisation d'un espace nomm SpacePP L'objet . JavaSpace rcupr est envelopp dans un objet GigaSpace qui est inject dans notre application grce l'annotation @GigaSpaceContext(name = "gigaSpace") Ct consommateur, les choses sont identiques. Une classe utilise les capacits de notification de l'espace pour tre mise au courant de l'ajout d'un nouvel objet Number dans l'espace : public class DataProcessor{ @GigaSpaceLateContext private GigaSpace gigaSpace; @SpaceDataEvent public void processData(javaspaces.Number data) { Long div = checkPrime(data.value, 1, data.value); }
Fig.2
Fig.3
66
code \\ java
public Long checkPrime(long val, long minRage, long maxRange) { for (long divisor=minRage; divisor<=maxRange && Thread. currentThread().isInterrupted()==false; divisor++) { if (divisor != 1 && divisor != val && val % divisor == 0) { return divisor; } } return null; } } L encore, plutt que de passer par les API JavaSpaces et ses listeners, GigaSpaces nous mche le travail en appelant une mthode de notre bean. Ceci est dclar dans le fichier Spring : <beans> <os-core:giga-space-context/> <os-core:giga-space-late-context/> <os-core:space id="space" url="jini://*/*/SpacePP" /> <os-core:local-tx-manager id="transactionManager" space="space"/> <os-core:giga-space id="gigaSpace" space="space" tx-manager ="transactionManager"/> <bean id="dataProcessor" class="DataProcessor"/> <os-events:polling-container id="dataProcessorPollingEvent Container" giga-space="gigaSpace"> <os-events:tx-support tx-manager="transactionManager"/> <os-core:template> <bean class="javaspaces.Number" /> </os-core:template> <os-events:listener> <os-events:annotation-adapter> <os-events:delegate ref="dataProcessor"/> </os-events:annotation-adapter> </os-events:listener> </os-events:polling-container> </beans> Plusieurs choses sont importantes ici. D'abord, nous dclarons l'utilisation d'un transaction manager. Ensuite, nous utilisons un polling container qui coute l'espace GigaSpace nomm SpacePP et capte transactionnellement les vnements pour un template de type Number et les envoie un delegate, en l'occurrence notre classe DataProcessor. L'utilisation de transactions permet d'viter une consommation double de certains objets.
Fig.4
Il nous faut maintenant dployer tout cela. Dans le code source, des fichiers ant sont disponibles pour faire le dploiement dans le rpertoire Deploy de GigaSpaces. Une fois cela fait, lancez gsm.bat (ou .sh) depuis le rpertoire bin de Gigaspaces. Ceci lance un manager d'espaces. Puis lancez au moins deux instances de conteneurs Gigaspaces en utilisant l'excutable gsc.bat. Les conteneurs vont s'enrler automatiquement auprs du manager. Enfin, lancez l'interface d'administration des espaces en excutant gs-ui.bat. Passez dans l'onglet Deployment de l'interface d'admin et choisissez 'Deployment > deploy application'. Slectionnez 'Enterprise Data Grid'. Dans le champ 'DataGrid Name' indiquez SpacePP slection, nez 'None' pour le champ 'cluster schema' et cliquez sur Deploy. Ceci va dmarrer un espace non rpliqu nomm SpacePP dans l'un des conteneurs. A prsent, dployez la PU crivant dans l'espace (javaspaces-demo-app) en choisissant Processing Unit dans la bote de dialogue de dploiement, puis en slectionnant la PU dans la liste droulante et en cliquant sur Deploy. Enfin, dployez la PU de consommation des demandes (javaspaces-demo-primer) de la mme faon. La console d'administration devrait maintenant ressembler ceci : [Fig.4] Dans un conteneur est dploy l'espace et la PU de traitement des nombres, et dans l'autre conteneur se trouve la PU mettant les demandes de calcul. Si tout fonctionne correctement, vous devriez voir dans la console de l'un des conteneurs le rsultat des calculs. A prsent, nous allons augmenter notre capacit de calcul : toujours dans l'onglet Deployment de la console d'administration, slectionnez dans l'arbre du 'Service Grid Network' la PU de consommation et traitement et cliquez sur le bouton 'increase' autant de fois que vous voulez. Il ne vous reste plus qu' dmarrer suffisamment d'instances de conteneurs (via le script gsc.bat) pour permettre le dploiement de ces instances de PU. A chaque dmarrage d'un nouveau conteneur, celui-ci rejoint le manager qui lui assigne une PU et la charge se rpartit naturellement entre les conteneurs. Vous pouvez prsent vous amuser couper l'un ou l'autre conteneur ou encore relocaliser les PU. Vous pouvez galement couper toutes les PU de traitement des nombres et aller dans l'onglet Spaces de la console, naviguer dans l'espace 'SpacePP > classes' et voir le nombre d'objets Number augmenter. Vous pouvez mme cliquer sur le nom de la classe et cliquer sur le bouton Query afin de voir toutes les instances actuellement dans l'espace.
Quelques rfrences http://java.sun.com/developer/Books/JavaSpaces/introduction.html http://www.jini.org http://ww%w.dancres.org/blitz http://incubator.apache.org/river/ Fabrice Dewasmes Blog : http://fdewasmes.free.fr Fabrice.dewasmes@gmail.com
67
code \\ .net
1re partie
APPLICATION : iPhone
Note : cet article suppose quelques connaissances de base sur WCF ainsi qu'une bonne connaissance du langage C#. L'exemple a t dvelopp avec VSTS 2008, le framework 3.5, WMC SDK 5.3 sur Windows Vista Ultimate US. LiPhone utilis possdait le Firmware 1.1.4.
OBJECTIF FONCTIONNEL
Lobjectif fonctionnel de cet article est de dvelopper les fonctionnalits dune tlcommande pour WMC et de les utiliser partir dun iPhone. Lexploitation de ces services via liPhone sera ralis en utilisant les possibilits de requtage offertes par Safari (et par tous les navigateurs du march), savoir lutilisation de lAPI " XmlHttpRequest " attaquant des services REST (" Representational State Transfer ").
UN PEU DE THORIE
Les points cls techniques autour de cet exemple sont : Dveloppement de services REST avec WCF Utilisation du SDK WMC 5.3 Dveloppement dun client lger en Javascript avec compatibilit Safari Mobile, Safari Windows Fig.2 et Internet Explorer
Fig.1
68
code \\ .net
Microsoft.MediaCenter : classe " AddInHost ", la cl de vote du modle objet de WMC Microsoft.MediaCenter.UI : classe de base " ModelItem " dont hrite la classe " Application " Au dmarrage de ladd-in, la classe suivante est appele par WMC : [Fig.1] Linterface " IAddInModule " permet de sabonner aux appels de WMC au dmarrage de ladd-in (initialisation des variables) et son arrt (enregistrement des informations relatives ltat et libration des ressources mmoire). Limplmentation de linterface " IAddInEntryPoint " est obligatoire pour le dmarrage de lapplication via lappel de la mthode " Launch ". Le paramtre envoy par WMC la mthode " Launch " permet daccder aux services fournis dans ladd-in ainsi dvelopp. via un type numr (dcor " DataContract " et " EnumMember "). Les contrats de service Les contrats de services viennent dcrire les contrats dans le sens " Interface " du terme. Ils seront implments par la couche service et seront rendus accessibles via WCF : Le contrat de gestion de WMC : [Fig.4] Le contrat permettant de rcuprer via un service WCF la page HTML contenant linterface de la tlcommande. [Fig.5] Le Framework .NET 3.5 ajoute de nouveaux attributs positionner, rendant accessibles les services via une architecture de type REST : [Fig.6] Jai choisi dutiliser lattribut " WebInvoke " en lieu et place de " WebGet " afin de raliser les appels en HTTP/POST plutt quen HTTP/GET. En effet, les requtes HTTP/GET sont mises en cache du ct du navigateur ( requte identique). Certains contournent ce problme en greffant lURL de base un n alatoire, mais je naime pas particulirement cette manire de faire. Vous noterez aussi sur le service de rcupration du guide (" GetGuide ") : jai dfini deux surcharges de la mthode " GetGuide ", ce qui nest pas possible dun point de vue contrat de service, do lattribut " OperationContract " paramtr avec un renommage (" GetGuideByDate ") du service visible des clients Le format de la rponse est paramtr au niveau de lattribut " WebInvoke " en XML (JSON possible)
LIMPLMENTATION
Le mtier associ aux services est globalement divis en : Gestion du son Gestion du guide Gestion de la mise en veille Gestion des autres touches Gestion de lIHM Toute cette gestion est implmente dans le schma de classe suivant : [Fig.7]. La classe qui supporte limplmentation des contrats de services dfinis est " MediaCenterManagement ". La classe " Application " sert faire le lien entre les informations fournies par ladd-in MediaCenter (donc le modle objet de WMC) et la couche Services. Les structures " KEYBDINPUT ", " INPUT " et la classe " SendInputCommand " servent grer les autres commandes lies la navigation dans les menus. Enfin, la classe " ChannelEqualityComparer " servira dans les requtages Linq To Object afin de dterminer une manire de comparer les chanes TV (" Channel "). Gestion du son La classe " Application " fournit une proprit " MediaCenterEnvironment.AudioMixer " afin de grer tous les services en relation avec le
Fig.6 Fig.7
LES CONTRATS
Les contrats de donnes Pour lexemple, jai simplement reproduit un sous-ensemble du modle objet fourni par WMC sur la notion de Guide. Le Guide reprsente la liste des programmes TV associs aux chanes. Il y a deux types de contrats : Le contrat concernant le guide des programmes TV [Fig.3] Dun point de vue technique, les contrats de donnes sont rendus srialisables dans le sens WCF du terme par dcoration avec les attributs " DataContract " et " DataMember " issus de lAssembly " System.RuntimeSerialization ". Le contrat de donnes de gestion de la tlcommande permet de dcrire la liste des commandes du contrle distance acceptes
Fig.4
Fig.5
code \\ .net
son (Mute, VolumeUp, VolumeDown, Volume). Par exemple : public void VolumeUp() { CurrentApplication.MediaCenterEnvironment.AudioMixer.VolumeUp(); } Gestion du guide Jai cherch reprsenter le modle objet du guide des programmes de manire fidle du point de vue des classes, mais incomplte du point de vue des proprits dans le contrat de donnes : 1. Rcupration de la liste des chanes : (from chan in Guide.CurrentEPG.Channels.Distinct(new ChannelEqualityComparer()) where chan.PrimaryService != null orderby chan.Number select createChannel(chan, fromDate, toDate)).ToList(); Vous noterez lutilisation de la mthode dextension " Distinct " avec une classe " comparer " permettant de comparer les chanes. La mthode de comparaison employe est base sur le " CallSign " (nom en clair de la chane). WMC renvoie des chanes dupliques, probablement sur des frquences diffrentes cause des deux metteurs proches de chez moi, do la ncessit dun filtrage. public bool Equals(ehiProxy.Channel x, ehiProxy.Channel y) { if (x.PrimaryService == null || y.PrimaryService == null) return (x.PrimaryService == y.PrimaryService); return (x.PrimaryService.CallSign == y.PrimaryService. CallSign); } La mthode " createChannel " tant spcialise dans la cration des instances de type " Channel " de mon contrat de donnes 2. Cration de la chane private DataContracts.Channel createChannel (ehiProxy.Channel channel, DateTime fromDate, DateTime toDate) { return new DataContracts.Channel() { Id = channel.Id, Number = channel.Number, IsActive = channel.IsActive, PrimaryService = createService(channel.Primary Service), Scheduling = ( from s in channel.ShowsAt(fromDate.ToUniversalTime(), toDate.ToUniversalTime()) where s.Program != null select createScheduleEntry(s) ).ToList() }; } Les points intressants: Utilisation des initialiseurs par dfaut System.Reflection.Assembly assemb = System.Reflection.Assembly.Load("ehepg"); String s = assemb.GetType("Microsoft.Ehome.Epg.Helper.EpgFileHelper", false,true).GetProperty("CurrentEpgFile").GetValue (null, null); La valeur ainsi rcupre pour ma machine est : " C:\ProgramData\Microsoft\eHome\EPG\f1b2556dee484c7f8a3ff50ebd0acfc2.sdf " Il sagit dune base " SQLLite " dont les moyens daccs ont t dvelopps dans lassembly " ehepg.dll " (" MicroFig.8 soft.Ehome.Epg.Database ") spcifiquement par Microsoft en implmentant les interfaces ADO.NET qui vont bien : [Fig.8] Nous continuerons limplmentation et aborderons le hosting WCF le mois prochain ! En attendant amusez-vous avec iPhone et WCF et noubliez pas de regarder et tester le code source ! Frdric Colin - Bewise - frederic.colin@bewise.fr Cration de linstance du service via une mthode spcialise Le requtage des lments dun grille via lutilisation de la mthode " ShowAt " Cration de linstance dun lment de la grille via une mthode spcialise 3. Pour la cration des services, des grilles de programmes et des programmes, il ny a rien de particulier signaler Pour tout cela, il faut penser initialiser correctement le modle objet avant de pouvoir requter : Utilisation de la classe " LineUp " afin dinitialiser la liste des services et de la rcuprer Microsoft.MediaCenter.TV.Epg.Lineup lu = new Microsoft.MediaCenter.TV.Epg.Lineup(); _programs = lu.GetServiceIds(); Paramtrage du rpertoire de travail et initialisation de la grille des programmes DirectoryInfo info = new DirectoryInfo( Environment.GetFolderPath(Environment.SpecialFolder.System)); if (Directory.Exists(info.Parent.FullName + @"\ehome")) { Environment.CurrentDirectory = info.Parent.FullName + @"\ehome"; Microsoft.Ehome.Epg.Guide.Initialize(); Etc. } Si vous vous demandez o sont stockes les informations du Guide une fois tlcharges, vous pouvez rflecter lAssembly " ehepg.dll ". En poursuivant ltude minutieuse du code, il devrait tre possible de " calculer " ce chemin daccs. Toutefois, pour des raisons de facilit, jai fait un peu de " reflection " pour lafficher :
70
code \\ c
Le standard MPI ne date pas d'hier. Des LANGAGE : C experts en programmaDIFFICULTE SOURCE : oui tion parallle ont traAVANCEE vaill sur sa premire mouture MPI-1 en 1992. En 1995 des conclusions ont t tires de son utilisation et le standard a t tendu sous le nom de MPI-2 en 2003. On appelle application parallle distribue une application dont le code s'excute simultanment sur plusieurs ordinateurs. En 1992 cette approche acrobatique n'intressait essentiellement que les milieux scientifiques qui palliaient ainsi la faible puissance des machines en rpartissant les calculs effectuer sur des groupes de machines, ou clusters. Aujourd'hui, la programmation parallle trouve un intrt pour le grand public. Rien de plus facile que de s'installer un petit rseau de machines, et, surtout, toutes les machines modernes sont quipes de microprocesseurs multi-coeurs avec lesquels les implmentations de MPI peuvent pleinement s'exprimer. MPI est conu pour les langages C, C++ et Fortran. Nous travaillerons avec C. D'autre part, MPI est une librairie trs complexe comptant des centaines de fonctions. Dans cet article nous nous limiterons aux fonctions MPI1, principalement utilises en programmation MPI. Une fois que les principes de base seront assimils, le lecteur intress pourra facilement s'attaquer au moins populaire MPI-2
dont on dispose. Un communicateur est tout simplement un ensemble de processus collaborant entre eux. On a une communication point point quand un processus envoie un message un autre, que ce dernier le reoit, le traite puis retourne la rponse au premier tandis que celui-ci attend ladite rponse. On a une communication collective lorsqu'un groupe de processus est impliqu.
1 LES CONCEPTS
MPI s'articule autour de quatre concepts: les processus, les communicateurs (communicator dans la documentation en anglais), la communication point point et la communication collective. Un processus est une application qui s'excute en tant chapeaute par le runtime MPI. Du point de vue du systme d'exploitation hte, il s'agit d'un processus normal. Surtout cela ne devrait jamais tre un thread. Lancer quatre processus MPI sur un microprocesseur quatre coeurs a du sens. Dans le cas de deux ordinateurs monocoeurs en rseau, lancer un processus sur chacun a du sens. En revanche, lancer, par exemple, cinq processus sur un microprocesseur 4 coeurs n'a pas de sens. Dans un tel cas, le runtime lancerait un thread supplmentaire. Non seulement un tel thread ne fera rien gagner en terme de performances, mais le mcanisme de passage de messages reprsentera simplement un cot supplmentaire. Donc MPI doit s'utiliser intelligemment, en fonction du matriel
71
code \\ c
#include <mpi.h> #include <stdio.h> int main( int argc, char* argv[]) { int rang, p; /* Initialisation de MPI. Aucune fonction MPI ne peut tre appele avant l'appel a cette fonction */ MPI_Init(&argc,&argv); /* Obtention du nombre de processus qui excutent ce programme */ MPI_Comm_size(MPI_COMM_WORLD, &p); printf("Nombre processus: %d\n", p); /* Quel est mon numro de processus ? */ MPI_Comm_rank(MPI_COMM_WORLD,&rang); printf("Mon rang: %d\n", rang); /* Aprs l'appel a cette fonction, plus aucun appel la biliothque MPI n'est possible */ MPI_Finalize(); return 0; } On remarque que tout code MPI doit tre encadr par les appels aux API MPI_Init et MPI_Finalize. Entre ces appels nous obtenons la taille du communicateur par dfaut, autrement dit le nombre de processus instancis, puis le rang, autrement dit le numro du processus instanci. Du code MPI ne se compile pas comme du code C, on doit recourir au compilateur ddi. mpicc -Wall basic.c -o basic Autant dire que gcc est remplac par mpicc :) Une application MPI ne se lance pas non plus comme une application normale, on recourt ici un lanceur mpirun -np 4 basic Lancera 4 fois le programme basic.et produira l'affichage : Nombre processus: Mon rang: 0 Nombre processus: Mon rang: 3 Nombre processus: Mon rang: 2 Nombre processus: Mon rang: 1 4 4 4 4
Avec MPI on peut lancer des applications MPI dont le code diffre entre elles. Supposons que nous ayons des applications basic1 et basic2 mpirun -np 4 basic1 : -np 2 basic2 lancera basic1 quatre fois et basic2 deux fois. Jusqu'ici tous les processus sont lancs sur la machine locale. Nous verrons plus loin comment rpartir l'excution sur le rseau.
72
code \\ c
MPI_COMM_WORLD, &status); /* puis on construit la chaine qui constitue la rponse */ sprintf(repbuffer, ", Le processus %d ", monid); strcat(repbuffer, "rpond: Programmez!\n"); strcat(buffer, repbuffer); /* Et on envoie la rponse au processus 0 */ MPI_Send(buffer, BUFFERSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); } MPI_Finalize(); return 0; } On excutera ce code par exemple par la commande mpirun -np 4 helloworld Ce code est facile comprendre. Aprs obtention du nombre de processus et du rang de l'instance courante, on teste si on se trouve dans le processus root (ou 0); Si oui, on envoie, dans une boucle, un message chacun des autres processus via l'API MPI_Send, puis dans une autre boucle, on attend, via l'API MPI_Recv la rponse de chacun des processus. Voil pour le cas du processus root, dans le bloc if. Les autres processus excutent seulement le bloc else. Dans ce bloc les APIs MPI_Send et MPI_Recv sont invoques symtriquement: on commence par attendre le message provenant de root, puis on lui rpond. Nous n'entrerons pas dans le dtail des paramtres que reoivent ces APIs, ni dans le dtail des types MPI. Nous estimons que le lecteur est suffisamment averti pour puiser lui-mme ses informations dans la documentation, par exemple http://www.mpi-forum.org/docs/mpi-11-html/mpi-report.html. Nous prfrons nous concentrer sur les grandes lignes de la programmation MPI, ce qui donne dj pas mal de grain moudre :) Il est par exemple temps de faire une remarque fondamentale. Toutes les donnes des applications MOI sont dupliques, raison dune copie par processus. Ainsi en est-il du tampon baptis 'buffer' dans le code ci-dessus. C'est d'ailleurs trs logique, chaque processus disposant de son propre contexte d'excution. Les API s'occupent du conditionnement (marshalling) des donnes transmettre et de la gestion complte du mcanisme de message. Il importe encore de remarquer que les API de communication point point, telles MPI_Send et MPI_Recv, sont bloquantes. numre les htes. Nous baptisons ce fichier my_hostfile et il contient simplement deux lignes: venus soleil Moyennant quoi nous pouvons lancer notre application distribue: mpirun --hostfile my_hostfile -np 4 mpihosts : -np 1 /home/ fred/bin/mpihosts Les htes sont pris selon leur ordre d'apparition dans le fichier. Donc avec notre commande, quatre processus seront instancis sur venus, et un sur soleil. On suppose que la commande a t lance depuis le rpertoire contenant mpihosts sur venus. Il n'y a donc pas de chemin particulier spcifier. En revanche le processus sur soleil va tre lanc via ssh. C'est pourquoi il faut donner le rpertoire absolu de la localisation de l'application sur les htes distants. Il est possible de peaufiner le fichier my_hostfiles, par exemple en y indiquant le nombre de processus par hte: venus slots=4 soleil Il est encore possible d'viter la saisie d'une longue commande dans la console, au moyen d'un deuxime fichier. Baptisons celui-ci my_appfile. Il contiendra: # sur venus -np 4 ./mpihosts # sur soleil -np 1 /home/fred/bin/mpihosts Et on dmarrera alors l'application distribue tout simplement: mpirun --hostfile my_hostfile --app my_appfil
73
code \\ c
#define ROOT 0 int main(int argc, char *argv[]) { int numprocs; int monid; int valeur; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&monid); if(monid == 0) valeur = 10; MPI_Bcast(&valeur, 1, MPI_INT, ROOT, MPI_COMM_WORLD); printf("Valeur + monid: %d\n", valeur+monid); MPI_Finalize(); return 0; } Le point dlicat apprhender ici rside dans le fait que nous n'avons plus de partie de ping-pong. Tout simplement, l'appel MPI_Bcast bloque tout le monde jusqu' ce que tous les messages soient expdis, aprs quoi tout le monde reprend son excution, chacun travaillant avec son buffer. Une fois que l'on a saisi le principe, c'est tout simple. On peut dire que MPI_Bcast est une sorte de barrire par anticipation. MPI propose, ce n'est pas surprenant en programmation parallle, une barrire classique: /* Demo MPI_Barrier L'appel MPI_Barrier n'est franchi que lorsque tous les processus existants atteignent cet appel */ #include <mpi.h> #include <stdio.h> #include <unistd.h> #define ROOT 0 int main(int argc, char *argv[]) { int numprocs; int monid; int valeur; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&monid); if(monid == 0) valeur = 10; MPI_Bcast(&valeur, 1, MPI_INT, ROOT, MPI_COMM_WORLD); sleep(monid); } Ici le buffer est tout simplement la variable contenant le rang du processus. Nous demandons MPI_Reduce de faire la somme de toutes ces variables. Si nous avons quatre processus instancis, nous aurons pour rsultat: 0+1+2+3 = 6 La programmation MPI est trs vaste, souvent subtile et parfois mme ardue. Les quelques bases exposes dans cet article doivent toutefois permettre au lecteur intress de s'exprimer. Dans un prochain article nous dcouvrirons d'autres implmentations de MPI ainsi que d'autres aspects de cette librairie. Frdric Mazu - fmazue@programmez.com //MPI_Barrier(MPI_COMM_WORLD); printf("Valeur + monid: %d\n", valeur+monid); MPI_Finalize(); return 0; } Sans MPI_Barrier, l'affichage produit par cet exemple suit les valeurs de temporisation croissantes calcules d'aprs le rang de chaque processus. Enlevez le commentaire devant l'appel MPI_Barrier, recompilez et essayez. Cette fois l'affichage de tous les processus est simultan, ne se produisant qu' partir du moment o tous les processus ont atteint la barrire. En revanche l'ordre de l'affichage devient incertain... les joies de la programmation parallle ;) Regardons, pour terminer une API qui permet d'appliquer un traitement une collection de rsultat. Ces APIs sont nombreuses dans l'univers MPI. Nous considrons MPI_Reduce, qui applique une opration arithmtique: /* Demo MPI_Reduce */ #include <mpi.h> #include <stdio.h> int main(int argc, char *argv[]) { int numprocs; int monid; int result; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&monid); MPI_Reduce(&monid, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if(monid == 0) printf("Total des rang de processus: %d\n", result); MPI_Finalize(); return 0;
74
code \\ linux
APPLICATION : Gnome
Nom
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
Description
Liste des fichiers slectionns dans Nautilus au moment de l'appel du script. Le sparateur est un saut de ligne. Liste des URIs des fichiers slectionns dans Nautilus au moment de l'appel du script. Le sparateur est un saut de ligne. URI du rpertoire courant. position et taille de la fentre Nautilus courante.
NAUTILUS_SCRIPT_SELECTED_URIS
NAUTILUS_SCRIPT_CURRENT_URI NAUTILUS_SCRIPT_WINDOW_GEOMETRY
1 PRINCIPES DE BASE
N'importe quel utilisateur d'un systme Linux peut crire un script et l'utiliser sans devoir pour autant disposer des droits de l'administrateur. Les scripts Nautilus doivent tre dposs dans le rpertoire .gnome2 de l'utilisateur qui souhaite les utiliser. Ainsi si l'utilisateur a pour nom fred, le script que veut utiliser fred doit tre dpos dans : /home/fred/.gnome2 Ceci prsente l'avantage d'tre immdiat et facile, surtout dans le cas d'un systme avec un seul utilisateur. Sur un systme avec de nombreux utilisateurs, cela oblige copier tous les scripts que l'on veut mettre disposition dans le rpertoire .gnome2 de chaque utilisateur, ce qui deviendra vite ingrable surtout en cas de modification du code des scripts. Dans ce cas, le mieux pour l'administrateur du systme est sans doute de crer un rpertoire tel que /usr/share/nautilus-scripts, d'y dposer tous les scripts Nautilus existants et de crer selon les besoins des liens symboliques sur ces scripts dans les rpertoires .gnome2 des utilisateurs. Un script Nautilus s'crit avec n'importe quel langage ... de script. Le langage Shell est tout dsign, mais on utilisera tout aussi bien Perl, Ruby, ou Python selon ses prfrences. Un fichier de script n'a pas besoin d'avoir une extension particulire (.sh, .py etc). Il est simplement ncessaire que le fichier puisse tre excut : chmod +x le_script et qu'il soit dot d'une ligne shebang afin que le systme sache quel interprteur invoquer. Pour rappel une ligne shebang doit se situer en toute premire ligne d'un script et elle doit dbuter par #! Par exemple : #! /bin/bash ou encore #! /usr/bin/python ou, si l'on est pas certain du rpertoire d'installation de l'interprteur : #! /usr/bin/env python
75
code \\ linux
variable d'environnement (en faisant abstraction de NAUTILUS_SCRIPT_WINDOWS_GEOMETRY) initialise dans cette situation. Nous verrons plus loin comment exploiter une URI travers les fonctionnalits du Shell. Slectionnez maintenant les deux rpertoires alpha et bta et relancez le script depuis le menu contextuel de Nautilus. Maintenant, le fichier debug-file contient : Programmez! /home/fred/tmp/alpha /home/fred/tmp/beta file:///home/fred/tmp/alpha file:///home/fred/tmp/beta file:///home/fred/tmp 607x427+170+389 Cette fois nous avons en plus la liste des chemins des fichiers/rpertoires slectionns. C'est le moment de faire une remarque. Le moins que l'on puisse dire est que Nautilus est hlas peu document. Ainsi la maigre documentation que l'on peut trouver sur Internet concernant les scripts Nautilus affirme que les lments contenus par les variables d'environnement NAUTILUS_SCRIPT_SELECTED_FILE_PATHS et NAUTILUS_SCRIPT_ SELECTED_URIS sont spars par un saut de ligne. Pourquoi avonsnous ici des lments spars par des espaces ? La documentation Nautilus est-elle errone ou bien est-ce notre faute ? La documentation Nautilus est bel et bien correcte. Nous sommes simplement confronts un traquenard classique du Shell. Dans le jargon de celui-ci on dit que nous n'avons pas protg notre variable d'environnement, ce qui quivaut donner l'autorisation un remaniement du contenu de la variable. Dans le cas prsent, le Shell remplace les sauts de lignes par des espaces. Si l'on veut prserver la mise en forme initiale du contenu de la variable d'environnement, on doit protger celle-ci en l'encadrant de guillemets. Par exemple : echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" >> debug-file Le Shell est plein de subtilits... Nous concluons de tout ceci que, au moins pour la mise au point d'un script Nautilus, crire les rsultats intermdiaires dans un fichier de dbogage est une sage prcaution :)
Fig.1
Ds que Nautilus reconnat la prsence d'un script, il enrichit son menu contextuel.
for REP in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS do if [ -d "$REP" ] then echo "L'objet slectionn EST un rpertoire" >> $DEBUG gnome-terminal working-directory=$REP & #exit 0 # alors seul le premier rpertoire sera trait else echo "L'objet slectionn n'est pas un rpertoire" >> $DEBUG fi done Ce script (fichier "Console ici" sur le CD-Rom) est une bonne occasion de rviser quelques notions de base de Shell :) Nous commenons comme il se doit par le shebang. Ensuite, nous dclarons des variables d'environnement contenant le nom du rpertoire temporaire de travail et le nom du fichier de dbogage. Puis, nous crivons dans ce fichier le contenu des variables d'environnement susceptibles de nous intresser. Ensuite dans le premier bloc if, nous testons si quelque chose est slectionn dans la fentre Nautilus. Pour cela, nous examinons si la chane contenue par NAUTILUS_SCRIPT_SELECTED_FILE_PATHS est vide ou non. Pour ce test nous choisissons sagement de protger la variable, comme expliqu au paragraphe prcdent. Remarquons encore que la syntaxe Shell veut que les crochets qui encadrent le test soient suivis et prcds d'un espace respectivement. Si la chane est vide, nous lanons tout simplement le programme gnome-terminal. Le rpertoire courant du terminal sera automatiquement positionn correctement. Puis nous mettons fin l'excution du script l'aide de la commande exit. Si des lments sont slectionns dans la fentre Nautilus, le premier test choue et nous entrons alors dans la boucle for. On remarquera que cette fois nous ne protgeons pas la variable d'environnement par des guillemets, car nous voulons que le Shell remette en forme la variable en supprimant les sauts de ligne parasites qui nuiraient au bon fonctionnement du script. Le lecteur peu convaincu est invit faire un essai ;) Ensuite pour chaque lment slectionn dans la fentre nous vrifions, dans le bloc test if inclus dans la boucle for, si cet lment est ou non un rpertoire. Si c'est le cas, nous invoquons gnome-terminal en lui passant ce rpertoire en paramtre et nous n'oublions pas l'esperluette afin que le script puisse ouvrir plusieurs terminaux de suite le cas
4OUVRIR UN TERMINAL
Nous nous proposons maintenant d'crire un script capable d'ouvrir un terminal Gnome. Nous voulons que le rpertoire explor par la fentre Nautilus devienne le rpertoire courant du terminal si rien n'est slectionn dans cette fentre. Si un ou plusieurs fichiers sont slectionns, nous voulons qu'il ne se passe rien. Si un ou plusieurs rpertoires sont slectionns, nous voulons ouvrir autant de terminaux que de rpertoires, avec chacun des terminaux ayant son rpertoire courant positionn sur chacun des rpertoires slectionns. #! /bin/bash TMPDIR=~/tmp DEBUG=$TMPDIR/debug-file echo "Dbogage du script 'Console ici'" > $DEBUG echo $NAUTILUS_SCRIPT_CURRENT_URI >> $DEBUG echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS >> $DEBUG if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ] ; then gnome-terminal exit 0 fi
76
Nouvelle Formule
Le magazine du dveloppement
Nouvelle Formule
Le magazine du dveloppement
Numro Spcial 10 ans ! www. programmez.com EXCLUS IF Nouvelle Les rvlations www. programmez.com EX du livr CLUSIF Formule
mensuel n112 - octobre 2008
www. programmez.com
Le magazine du dveloppement
Enqute
La Rvolution du La Rvolution du
langages Les Olympiques du Les favoris dveloppement Vers Microsoft 3.0 Exclusif ! ! Olympiques du ImagineCupLes projets secrets rvle dveloppement ! les nouveaux talents
ImagineCup rvle les nouveaux talents
Jeux Jeux
Vos
de Microsoft
ActionScript 3 M 04319 - 111 - et5,95programmation par Crer avec OpenMP PHP F: la E votre grid computing Multicur Google Dcouvrez le Resource Mozilla composants Programmer Intgrer Google Maps et JSFcharge processeur vos curs GovernorLa Crer votre extension XUL Jeux : Et avec OpenMP aussi : M Dvelopper des jeux en Java 04319 - 111 - F: 5,95 E avec WMI pour Firefox ! Mozilla iPhone / .net Linux : Dvelopper La charge processeur Nautilus Crer votre extension XUL Piloter votre des extensions M 04319 - 112 - F: 5,95 E avec WMI pour Firefox ! Windows Media Center avec iPhone
technique
programmation par SQLMulticur Server Flash PHP et la de template en PHP 5 Google UML JavaSpaces : composants Matriser le bitmap avec et PHP : le duo d'enfer Intgrer Google Maps et JSF Programmer vos curs 2008
ENFIN DISPONIBLE !
GAGNER template en PHP 5 PHP 5.3 Les dernires versions compares Les nouveauts de Tout savoir sur Eclipse 4.0 UML et Crer AspectJ : PHP : leson moteur duo d'enfer
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
45 *
Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 57 Tarif France mtropolitaine Abonnement PDF / 1 an : 30 - Tarif unique
Inscription et paiement exclusivement en ligne www.programmez.com
Numros
pour toutes zones gographiques). Pendant la dure de leur abonnement, ils ont ainsi accs, en supplment, tous les anciens numros et articles /dossiers parus.
1 par mois !
OUI, je mabonne
PROGRAMMEZ
www.programmez.com
Abonnement 1 an au magazine : 45 (au lieu de 65,45 tarif au numro) Tarif France mtropolitaine Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 57 Tarif France mtropolitaine Abonnement Etudiant : 1 an au magazine : 39 (au lieu de 65,45 tarif au numro) Offre France mtropolitaine
M. Mme Mlle
Entreprise :
........................................................................................
Fonction : ...................................................
Le renvoi du prsent bulletin implique pour le souscripteur l'acceptation pleine et entire de toutes les conditions de vente de cette offre. Conformment la loi Informatique et Liberts du 05/01/78, vous disposez d'un droit d'accs et de rectification aux donnes vous concernant. Par notre intermdiaire, vous pouvez tre amen recevoir des propositions d'autres socits ou associations. Si vous ne le souhaitez pas, il vous suffit de nous crire en nous prcisant toutes vos coordonnes.
Code postal : Tl :
...............................................
Ville :
...................................................................................................................................................................
........................................................................................
E-mail :
....................................................................................................................................
Je joins mon rglement par chque lordre de Programmez ! Je souhaite rgler rception de facture A remplir et retourner sous enveloppe affranchie : Programmez ! - Service Abonnements - 22 rue Ren Boulanger - 75472 Paris Cedex 10. abonnements.programmez@groupe-gli.com
PRO grammez !
Le magazine du dveloppement
PROG 112
code \\ linux
chant. Si l'objet n'est pas un rpertoire, nous le signalons simplement dans le fichier de dbogage. Pour terminer, remarquons la commande exit en commentaire dans le code. Si nous enlevons le commentaire alors le script n'ouvrira qu'un seul rpertoire mme si plusieurs sont slectionns. Cela peut tre un comportement souhait, mais le bt risque de blesser un petit peu. En effet, sauf erreur de votre serviteur, les essais montrent que Nautilus ne gre pas l'ordre de slection des lments dans la fentre et du coup, on peut se retrouver avec un terminal positionn sur le mauvais rpertoire. Le script ci-dessous ("Console ici bis" sur le CD-ROM ou le site) illustre comment travailler avec des URIs. Remarquez notamment la suppression des prfixes file:// entre les accolades dans le code. #! /bin/bash TMPDIR=~/tmp DEBUG=$TMPDIR/debug-file echo "Dbogage du script 'Console ici'bis" > $DEBUG echo $NAUTILUS_SCRIPT_CURRENT_URI >> $DEBUG echo $NAUTILUS_SCRIPT_SELECTED_URIS >> $DEBUG if [ -z "$NAUTILUS_SCRIPT_SELECTED_URIS" ] ; then gnome-terminal exit 0 fi for URIREP in $NAUTILUS_SCRIPT_SELECTED_URIS do REP=${URIREP#file://} if [ -d "$REP" ] then echo "L'objet slectionn EST un rpertoire" >> $DEBUG gnome-terminal working-directory=$REP & #exit 0 # alors seul le premier rpertoire sera trait else echo "L'objet slectionn n'est pas un rpertoire" >> $DEBUG fi done Comme nous l'avons vu dans les exemples en Shell pur, l'excution d'un script Nautilus se droule en aveugle: aucune sortie sur console. Nous avons donc besoin d'un moyen pour comprendre les raisons d'un ventuel chec d'un script crit en Python, par exemple une erreur de cl de dictionnaire. Lorsqu'il rencontre une erreur dans un script classique, Python lve une exception et imprime la trace de celle-ci sur la console. Ce que nous voulons faire est donc tout simplement d'imprimer cette trace dans notre fichier de dbogage. Pour cela, nous importons le module traceback en tout dbut de script. Puis tout le code est excut dans un bloc try. L'exemple ci-dessus, pour des raisons de simplicit comporte un petit dfaut: si le fichier debug-file lui-mme ne peut tre cr au tout dbut de l'excution, la trace de l'exception correspondante ne pourra pas tre crite dedans. Toutefois, ce dfaut mineur est ici acceptable et nous laissons les choses en l'tat dans cet article. Nous voyons ensuite comment accder aux variables d'environnement via le module os. Tel qu'il est ce script produit le mme rsultat dans debug-file que notre premier script Shell. Mais si nous changeons une ligne : debug_file.write(os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS']) en : debug_file.write(os.environ[NAUTILUS_SCRIPT_SELECTED_FILE_PATHS]) pour produire une erreur, voici ce que le fichier debug-file contient alors : Programmez! Python Traceback (most recent call last): File "/home/fred/.gnome2/nautilus-scripts/PremierScriptPython", line 16, in ? debug_file.write(os.environ[NAUTILUS_SCRIPT_SELECTED_FILE_PATHS]) NameError: name 'NAUTILUS_SCRIPT_SELECTED_FILE_PATHS' is not defined Ce qui est bien conforme nos attentes. Il est maintenant temps de voir comment envoyer un mail avec fichier attach. Toujours par souci de simplicit notre script se contente d'envoyer un mail une adresse prdfinie. Le ou les fichiers attachs seront bien videment les fichiers slectionns dans la fentre Nautilus. On suppose qu'il s'agit de fichiers de type MIME text/plain. Etoffer ce script par exemple sur la base de Tkinter afin d'offrir une interface graphique l'utilisateur pour la slection du destinataire est une formalit. Nous laissons cela la sagacit du lecteur, la programmation Tkinter sortant du cadre de cet article. La manipulation d'autres types MIME galement. #! /usr/bin/env python # -*- coding: latin-1 -*os.chdir(debug_rep) debug_file = open('debug-file', 'w+') debug_file.write('Programmez! Python\n') debug_file.write(os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS']) debug_file.write('\n') debug_file.write(os.environ['NAUTILUS_SCRIPT_SELECTED_URIS']) debug_file.write('\n') debug_file.write(os.environ['NAUTILUS_SCRIPT_CURRENT_URI']) debug_file.write('\n') debug_file.write(os.environ['NAUTILUS_SCRIPT_WINDOW_GEOMETRY']) except: traceback.print_exc(file=debug_file)
try:
78
code \\ linux
import import import import import import traceback os os.path string smtplib MimeWriter body = part.startbody("text/plain", [("charset", "iso-8859-1")]) body.write(texte) # Intgration du ou des fichier(s) attach(s) fichiers = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'] debug_file.write(fichiers) fichiers = string.split(fichiers, '\n') debug_file.write(str(fichiers)) debug_file.write("\n") for fichier in fichiers: if os.path.isdir(fichier): continue if not os.path.isfile(fichier): continue debug_file.write('Fichier attach: ') debug_file.write("\n") debug_file.write(fichier) debug_file.write("\n") part = mime.nextpart() part.addheader("Content-Transfert-Encoding", "8bit") part.addheader("Content-Disposition", "attachment") autrebody = part.startbody("text/plain", [("name", fichier), ("filename", fichier), ("charset", "iso-8859-1")]) autrebody.write(open(fichier).read()) # on dit que c'est fini mime.lastpart() tempfile.close() # pour assurer le vidage de tout tampon ventuel # il ne reste plus qu' expdier le mail :) server = smtplib.SMTP(host) message = open(tempmailstr).read() server.sendmail(fromstr, tostr, message) server.quit() if __name__ == '__main__': try: os.chdir(debug_rep) debug_file = open('debug-file', 'w+') debug_file.write("Programmez! MailTo\n\n") SendMail() except: traceback.print_exc(file=debug_file) Ce script, pour efficace qu'il soit, ne pose pas de difficult. Sa logique est la suivante: On commence par prparer le dbogage comme dans l'exemple prcdent. Ensuite on cre les en-ttes du mail envoyer, puis le corps du mail. En soi, ce corps dfinit une partie du mail. Un mail avec fichier attach est un mail comportant, hormis les en-ttes, plusieurs parties. La premire partie est, c'est logique, le corps du mail, et chaque fichier attach constitue une autre partie. Bien remarquer que la librairie MimeWriter doit tre informe de la prsence de parties multiples : mime.startmultipartbody("mixed") Ceci fait, on boucle tout simplement sur la liste des fichiers indiqus par la variable d'environnement NAUTILUS_SCRIPT_SELECTED _FILE_PATHS et le mail est constitu. Frdric Mazu - fmazue@programmez.com
# Ci-dessous, adapter selon vos besoins: debug_rep = '/home/fred/tmp' debug_file = None host = "smtp.wanadoo.fr" fromstr = "frederic.mazue@wanadoo.fr" senderstr = "Frdric Mazu<frederic.mazue@wanadoo.fr>" subjectstr = "Expdi depuis Nautilus" tostr = "frederic.mazue@wanadoo.fr" tempmailstr = "temp-mail" # le fichier temporaire n'est pas dtruit car son contenu est instructif :) texte = """ Fred , Ceci est un message avec fichier attach, expdi par Nautilus et Python @+ Fred """ def SendMail(): # on construit le mail, d'abord on cre un objet MimeWriter # dont la sortie s'effectue dans un fichier temporaire tempfile = open(tempmailstr, 'w+') mime = MimeWriter.MimeWriter(tempfile) # # # # # puis on travaille en quatre phases - cration de l'entte du mail - dclaration d'un mail en plusieurs parties - insertion du corps du mail - attachement du ou des fichier(s)
# Cration de l'entte mime.addheader("To", tostr); mime.addheader("From", senderstr) mime.addheader("Sender", senderstr) mime.addheader("Subject", subjectstr) mime.addheader("MIME-Version", "1.0") # Dire que le mail a plusieurs parties mime.startmultipartbody("mixed") # Ajout du corps du mail part = mime.nextpart() part.addheader("Content-Transfert-Encoding", "8bit")
ludique \\ programmation
[1re partie]
Un JFrame vide
80
ludique \\ programmation
public Jeu() { } Dans le constructeur, il faut ajouter ces quatre lignes de code pour crer le JFrame et en indiquer le titre et la taille : super("voici le titre"); setSize(400,400); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE); Vous avez cr votre toute premire interface graphique ! Il sagit dun canevas blanc auquel vous pouvez facilement ajouter des formes, des images, des boutons, des champs de texte ou tout ce que vous pouvez imaginer. Dans ce qui suit, nous expliquerons comment inclure des ennemis menaants, des hros audacieux ou des aliens dgotants. Tapez le code suivant lextrieur du constructeur, mais lintrieur de la classe : public void paint(Graphics g) { super.paint(g); } Cette mthode permet de dessiner des formes quelconques : des rectangles, des carrs, des cercles, des arcs ou mme des lettres gantes. Pour linstant, nous allons nous intresser deux commandes pour choisir une couleur et dessiner un rectangle. Pour choisir une couleur, on utilise le code suivant (il faut aussi ajouter une ligne import java.awt.*) : g.setColor(Color.<une couleur>); <une couleur> est le nom dune couleur en anglais ; NetBeans afche la liste des couleurs disponibles lorsque vous tapez "Color.". Cette liste est illustre la Figure 2. Pour dessiner un rectangle, il faut utiliser cette syntaxe :
Fig.3
g.fillRect(<x>, <y>, <largeur>, <hauteur>); <x>, <y>, <largeur> et <hauteur> sont des variables de type int. Dessinez un rectangle vert comme celui de la Figure 3, la position 100, 100, large de 100 et haut de 200. Vous savez maintenant comment tracer une piste de course simple ! Attention, il arrivera un moment o vous devrez vrier si la voiture sort des limites du rectangle. Pour anticiper cela, sauvez les points dans un objet Rectangle. Cela rendra les collisions plus faciles dtecter. Vous pourrez ensuite tracer le rectangle en rcuprant ses valeurs, comme ceci : Rectangle r1 = new Rectangle(100,100, 100,200); g.fillRect(r1.x, r1.y, r1.width, r1. height); Et, pour redessiner le JFrame, il suft dutiliser le code suivant dans votre programme : repaint(); Le code public void paint... est toujours excut au dmarrage du programme.
<type de retour> doit tre remplac par void si la mthode ne renvoie pas de rsultat. Si elle retourne un lment de type int, il doit tre remplac par int. Si elle retourne un objet de type Integer, il doit tre remplac par Integer. <type de retour> peut tre un type primitif (int, double, char, etc.) ou un objet. <nom> est le nom de la mthode. Ce nom est votre convenance, pour autant quil commence par une lettre. arguments reprsente les variables en entre de la mthode lorsquelle est appele. Ces arguments sont spars par des virgules. Si votre mthode prend deux arguments, un de type int et un de type double, vous devez crire ceci : public void exemple (int i, double d){} lintrieur de la mthode, i et d sont les noms de variables via lesquels les arguments sont accessibles. Pour renvoyer une valeur, utilisez ceci : return <variable>; <variable> doit tre du type que vous avez indiqu lorsque vous avez dclar la mthode. Pour appeler une mthode, en loccurrence la mthode exemple, il faut utiliser cette syntaxe pour passer les arguments 1 et 4.563. : exemple(1, 4.563) Si exemple renvoie une valeur de type int, vous pouvez rcuprer la valeur renvoye comme ceci : int i = exemple(1, 4.563);
Mthodes
Les mthodes contiennent du code qui peut tre excut plusieurs fois. On utilise des mthodes pour pouvoir rpter du code plus facilement. Vous pouvez appeler (cest-dire excuter) une mthode partir du constructeur ou depuis une autre mthode, mais pas depuis la mthode main. Une mthode peut prendre en entre une variable (aussi appele argument) ou renvoyer une variable, non exclusivement et non obligatoirement. Pour crer une mthode, on utilise cette syntaxe : public <type de retour> <nom> (arguments) { //code }
Fig.4
Crer le jeu
Pour crer le jeu prsent ci-dessus reportez-vous au code source sur le CD-Rom ou le site web de Programmez. La Figure 4 prsente une copie dcran de la piste complte. La suite le mois prochain.
Extrait de : Ian Cinnamon, Devenez un petit gnie des jeux vido, Pearson, 2008
Avec laimable autorisation de lditeur.
La piste complte
81
livres \\
Java et Eclipse
CSS
Difficult : *** Editeur : Micro Application Auteur : collectif Prix : 15
Les CSS, on en parle partout sur le web, dans le dveloppement web mais comment matriser ces feuilles de style qui sont tout sauf simples. Ce guide se propose de vous apprendre tout dabord les bases dun CSS, son architecture, son fonctionnement puis daborder le contenu (mise en page, positionnement, interaction, la hirarchie). Les auteurs continuent sur comment utiliser les liens, les formulaires, la manipulation des images et encore les fonctions denrichissement des feuilles CSS. Point apprciable : une liste de bonnes pratiques et des trucs et astuces foison. Et pour finir, le livre fournit quantit de liens pour en savoir plus en ligne !
Expression Web
Difficult : ** Editeur : Eni ditions Auteur : Louise Villeneuve Prix : 9,90
Expression Web est loutil de dveloppement web de Microsoft dans la gamme expression, il succde Front Page. Ce petit livre est avant tout un aide-mmoire pour le dveloppeur web et non un manuel de prise en main, de dveloppement. Lauteur y explique linterface de loutil, prsente lensemble des fonctions, des possibilits de lenvironnement. Utile et bien fait !
Dreamweaver CS3
Difficult : *** Editeur : Eyrolles Auteur : collectif Prix : 36
En attendant de vous attaquer Dreamweaver CS4 disponible depuis peu de temps, il nest pas trop tard pour vous perfectionner en CS3 qui restera la base de la nouvelle version. Outil de dveloppement web de rfrence depuis plusieurs annes, son utilisation ncessite parfois une bonne dose de patience et de persvrance. Volumineux, louvrage est la hauteur de loutil. Les auteurs abordent lensemble des fonctionnalits de Dreamwaever : CSS, image, Framework Spry, tableaux, listes, mise en forme, javascript, intgration flash, vido, sites dynamiques, etc. Nombreux exemples et trs
volume 1
FreeBSD 7.0
Difficult : *** Editeur : Pearson Auteur : Michael W. Lucas Prix : 49
Dans Programmez ! nous parlons peu des systmes BSD et pour tant ils sont fiables et performants. Pour ceux qui voudraient se lancer dans laventure, voici un ouvrage pour eux. Il aborde le systme FreeBSD (un des BSD du march). On revient dabord sur la gense du systme, les l-
82
*Le Plug-in PowerBuilder pour Serveur d'Application et PocketBuilder ont t incorpors sans surcot dans PowerBuilder 11.5 pour encore plus de valeur ajoute
Distributeur VAD :