Академический Документы
Профессиональный Документы
Культура Документы
Multi-plate-forme
Votre code fonctionne-t-il
sur tous les systèmes ?
Qt, compilation croisée, Web 2.0
les outils, le problème des
navigateurs web. Spécial
SILVERLIGHT
● Bien
débuter
avec Silverlight
● Tout savoir
©istock.com/77DZIGN
Le Programmation
développeur MULTICOEUR
Devenir un développeur parallèle
devient AGILE !
● Adopter une méthode agile.
Les enjeux des processeurs multicore
3:HIKONB=^UZ^Z]:?a@b@m@k@a;
Langage Concurrence
F# : le nouveau visage de .Net Maîtriser le Concurrency and
Cloud Computing Coordination Runtime
Déployer Java sur Amazon EC2
SGBD
Méthode LINQ et MySQL : c’est possible !
Créer vos DSL sous Eclipse
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
01/02-83/84-120 20/05/2009 9:41 Page 2
PLATEFORME PROFESSIONNELLE
Nouvelle DE DÉVELOPPEMENT (AGL)
version
Windows, .Net, Java
Développez 10 fois plus vite Windows 98, 2000, NT, 2003, XP, Vista, 2008
*: WINDEV a été élu «Langage le plus productif du marché» par les lecteurs de la revue «Programmez!», octobre 2008
sommaire\\ \\ actus
L’actualité en bref ..............................................................................8
Agenda ..............................................................................................8
\\ événements
12
\\ développement web 46
\\ technique
Cloud Computing : déploiement d’applications Java ................................56
Pourquoi passer à la programmation parallèle ..........58 60
Intel Parallel Studio débarque ..............................................................60
\\ code
Comprendre les Design Pattern Fabrique ..............................................62 70
CCR, une API de programmation concurrente pour .net ..........................66
Introduction à la construction d’un DSL sous Eclipse ..............................70
Eclipse Tools for Silverlight : Silverlight sur Eclipse, c’est possible ! ..........73
Utilisation de Linq avec différentes bases de données ............................75
F# : l’avenir de .net et du développement Windows ? w(1re partie) ..........78
\\ temps libre
En direct des labos (2e partie) ............................................................81
Les livres du mois ..............................................................................82
CD ROM
NOUVEAU
© 2009-2010, Intel Corporation. Tous droits réservés. Intel et le logo Intel sont des marques d’Intel Corporation, déposées ou enregistrées aux États-Unis et dans d’autres pays.
*Les autres noms et désignations peuvent être revendiqués comme marques par des tiers.
PRO grammez !
Le magazine du développement
Rédaction : redaction@programmez.com
Le développeur
édito\\ serait-il un chat ?
3 %. C’est le pourcentage de développeurs ayant sur
ces derniers mois introduit une fonction parallèle dans un
Directeur de la Rédaction : Jean Kaminsky
Rédacteur en Chef :
François Tonic - ftonic@programmez.com
Ont collaboré : F. Mazué, J.B. Boisseau, G Vidal.
Experts : B. Boucard, P. Guermonprez, O. Lance,
A. Dupuis, J. Mezhrahid, F. Queudret, L. Laslaz,
O. Juncu, H. Harrath, A. Peter, S. Boigelot,
L. Bar, J. Bernard, D. Vojtisek, T. Jaskula,
N. Biedermann, C. Durand, R. Pierquin, P. Blayo.
Publicité : Régie publicitaire, K-Now sarl
code source. Une petite poignée! Voilà un chiffre bien intriguant, non ? Et
Pour la publicité uniquement :
pourtant, depuis plus de 18 mois, Programmez ! s’investit autour de la Tél. : 01 41 77 16 03 - diff@programmez.com
programmation multicore / parallèle pour vous sensibiliser sur un sujet Editeur : Go-02 sarl, 6 rue Bezout
hautement stratégique et d’une complexité non négligeable. 75014 Paris - diff@programmez.com
Dépôt légal : à parution - Commission
paritaire : 0712K78366 ISSN : 1627-0908
Aujourd’hui, l’écrasante majorité des PC vendus possède au moins 2 Imprimeur : ETC - 76198 Yvetot
cœurs. Et cela monte très vite à 8, 16 cœurs. D’ici à 2010, les fondeurs Directeur de la publication : J-C Vaudecrane
Ce numéro comporte 1 CD-Rom
estiment à 100 % les nouvelles machines qui seront multicoeur, que se
soit dans le desktop, le serveur, le portable, et même les téléphones por- Abonnement : Programmez 22, rue René Boulanger,
75472 Paris Cedex 10 - Tél. : 01 55 56 70 55
tables ! L’argument anti-parallèle est cependant non négligeable : la plus mail : abonnements.programmez@groupe-gli.com
part des PC actuellement en activité ne sont pas multicores. Mais d’ici Fax : 01 40 03 97 79 - du lundi au jeudi de 9h30 à
12h30 et de 13h30 à 17h00, le vendredi de 9h00 à
5 ans, le parc explosera. Et cinq ans ce n’est pas grand chose… 12h00 et de 14h00 à 16h30. Tarifs abonnement
C’est donc aujourd’hui qu’il faut comprendre la programmation parallèle. (magazine seul) : 1 an - 11 numéros France
métropolitaine : 49 € - Etudiant : 39 € - CEE et
Car cette programmation est loin d’être " friendly " comme vous le verrez Suisse : 55,82 € - Algérie, Maroc, Tunisie :
rapidement dans notre grand dossier à paraître sur plusieurs numéros. 59,89 € - Canada : 68,36 € - Tom : 83,65 €
Dom : 66,82 € - Autres pays : nous consulter.
On change de philosophie de code. Il faut penser multi dimension du code PDF : 30 € (Monde Entier) souscription exclusive-
en quelque sorte : exécuter plusieurs tâches parallèlement. Avec toute la ment sur www.programmez.com
complexité de gestion, de concurrence, de mémoire, etc. Les risques de
bugs se multiplient et, en programmation multicore, ces erreurs ne par- L’INFO
donnent pas. Cependant, n’allons pas croire qu’il faille paralléliser son
PERMANENTE
code à outrance. Au contraire, un code trop parallèle peut s’avérer plus WWW.PROGRAMMEZ.COM
lent qu’un code " normal " ! Il faut donc définir les portions du code à paral-
léliser. La priorité sera donnée aux fonctions très exigeantes en puissan-
ce de calcul comme les traitements Audio / Vidéo, les requêtes de don-
nées, la compression, la cryptographie, etc.
Demain, les outils, les langages vont offrir de puissantes fonctions paral-
lèles directement dans la machine virtuelle (ex. : Java et .Net) et des
librairies vont aider le gentil développeur à paralléliser en quelques
minutes un code. Mais, n’attendez pas non plus la solution miracle ! Le
parallélisme nécessite une solide compétence technique et une rigueur de
codage extrême. Cependant, le développeur parallèle est réellement l’ave- PROCHAIN
nir et là, il apporte une valeur, une compétence.
NUMÉRO
Autre sujet chaud du moment, lui aussi récurrent me direz-vous, l’agilité. N°121
Non pas que le développeur doive devenir aussi souple physiquement juillet-août 2009,
qu’un acrobate… mais il doit intégrer le merveilleux monde des méthodes parution 30 juin
agiles. Depuis quelques mois, le couple Scrum / eXtreme Programming
connaît un succès fulgurant dans les équipes de développement. Et pour
cause, Scrum offre un cadre organisationnel, et XP redonne joie et plai-
✔ Développement
sir aux développeurs. Et oui, fini le temps du programmeur à la chaîne, Attention le futur
codant sans réellement réfléchir… ! Le développeur revient au centre du est déjà là !
projet, avec de nouvelles responsabilités. Où, quand, comment ? C’est ce
que l’on verra dans notre grand dossier du mois. ✔ Préparez-vous cet été :
- Windows 7, Android, iPhone,
Si nous avions prédit la survie, la mort puis la résurrection de notre ami Surface, Java 7
le développeur, aujourd’hui, nous lui prédisons sa réincarnation. Comme le - OpenVibe : l'informatique
chat, le développeur n’aurait-il que neuf vies ? Rendez-vous au numéro pilotée par la pensée
150 de Programmez ! pour le savoir. Le suspense sera insoutenable…
■ François Tonic
✔ Enquête carrière :
Rédacteur en chef - Etes-vous satisfait
de votre job ?
PM
06-07 20/05/2009 9:49 Page 6
14/04/09 17:50:56
08-09 20/05/2009 9:46 Page 8
actu \\ en bref
D
epuis un mois, les rachats se suc-
codes Java et SQL depuis la couche cèdent ! Est-ce la crise qui accélère
applicative Java jusqu’à la base de don- les rapprochements et la nécessité
nées, facilitant ainsi le développement de de croissance externe des éditeurs ? Quoi
codes et la détection des problèmes qu’il en soit en quelques semaines, deux
avant qu’une requête applicative ou de grandes figures du développement ont été
base de données ne soit envoyée à la absorbées : Sun et Borland. Pour Sun, on
production. attendait depuis des mois le rachat. Si IBM
tenait la corde, c’est finalement Oracle qui
■ JetBrains a dévoilé un IDE Ruby : rafle une fois de plus la mise pour plus de 7
RubyMine 1.0. L'un des avantages clés milliards de dollars. Oracle avait déjà une
de RubyMine réside dans la compréhen- forte implication dans Java, cela ne fait que
sion poussée des spécificités du langage renforcer cette tendance. Mais au-delà,
de Ruby, sa nature dynamique, et les Oracle complète ses offres logicielles notam-
conventions de code. Il a connu un beau ment avec Glassfish et les outils de sécurité
succès depuis sa disponibilité. RubyMine de Sun ou encore sur le matériel notam-
apporte une gamme de refactorisation ment les lignes de serveurs et de stockage,
efficace compatible avec Rails, simpli- tout en mettant la main sur un système d’ex-
fiant considérablement par là-même le ploitation fiable et robuste : Solaris. Et sur-
processus de modification des codes. tout, MySQL tombe sous la coupe d’Oracle. ce, en se délestant totalement des outils de
Ce rachat pose aussi des questions de développements, de CodeGear à Embarca-
■ Quest annonce l’intégration de vWork- pérennité de certaines offres, notamment dero. La concurrence accrue des outils de
place, gestionnaire de poste de travail dans le logiciel car elles font doublon avec cycle de vie y est sans doute pour quelque
virtualisé, aux environnements Micro- les gammes actuelles d’Oracle comme pour chose, ainsi que la profusion d’outils de
soft. Cela signifie que cette solution est le serveur d’application, la base de données. modélisation, marché sur lequel, Borland
désormais compatible avec System Cen- De quelle manière, MySQL sera-t-il positionné Together avait du mal à rester un acteur
ter Virtual Machine Manager et App-V par rapport à Oracle Database ? L’autre significatif. Cette opération se monte à envi-
(virtualisation d’application). question concerne l’implication des dévelop- ron 75 millions de dollars. Reste à savoir si
peurs Sun dans les projets open source. l’ensemble des gammes actuelles seront
■ Perforce a dévoilé un nouveau compo- L’effort sera-t-il poursuivi, par exemple dans poursuivies. Micro Focus a aussi mis la main
sant : Perforce Server Log Analyser. Il OpenOffice ou encore Netbeans. Mais pour sur une partie des outils de Compuware :
permet aux administrateurs de téléchar- Oracle, il s’agit aussi de mieux se positionner gamme test et de qualité. Compuware
ger leurs fichiers de log pour une analyse sur le cloud computing et la virtualisation, cherche là aussi à recentrer son activité sur
instantanée. Ils disposent pour cela d’un deux marchés qui étaient très mal adressés les performances et optimisation sur main-
accès sécurisé à leurs fichiers de log et par l’éditeur. frame et la gestion du portefeuille applicatif.
à leurs résultats d’analyses, qui peuvent L’autre surprise du mois est le rachat pur et Ces rachats modifient le marché du dévelop-
être stockés jusqu’à dix jours. Disponible simple de Borland par Micro Focus. Borland pement et il faut encore s’attendre à d’im-
gratuitement sur la Base de Connaissan- avait déjà cherché à se recentrer sur le portants rachats dans les mois à venir, en
ce du site Perforce : cycle de vie, la modélisation et la gouvernan- particulier, côté Microsoft…
https://kb.perforce.com/psla.
Réaliser vos projets dans les délais nécessites des équipes supports
prêtes à vous aider quand vous en avez besoin. Vous pouvez compter
sur le système de GCL rapide Perforce et son support technique
réputé, pour vous donner un atout gagnant.
Tous droits réservés. Toutes les marques citées sont des marques ou des marques déposées de leurs propriétaires respectifs.
10-11 OBJECT pub 20/05/2009 10:30 Page 10
actu \\ en bref
L a version bêta, dispo- tion, outils améliorés pour sion Architect de Team
nible à l’écriture de la documentation…). System, le projet Oslo sera
l’article, pèse 3,6 Go en Visual Studio 2010 sup- aussi sans doute présent.
environnement .Net (4,6 porte l’ensemble des der- Oslo est la pierre angulaire
Go avec C++). Bonne nou- nières évolutions de .Net de l’approche transversale
Une fois inscrit, il faut installer un client velle dès l’installation : la et tout particulièrement et verticale de la modélisa-
desktop sur son Ubuntu. On dispose d’un présence de F# (article .Net 4.0 que nous détaille- tion chez Microsoft.
" desktop " virtuel comme avec Mesh mais dans ce numéro), de Dot- rons dans les prochains
en moins ergonomique. Dommage que le fuscator, des outils de numéros. Retenons ici le Une version
client desktop ne soit disponible que sous tests unitaires, du .Net 4, support natif et en managé prometteuse
Ubuntu. La version de base (2 Go de stocka- du framework Sync. (.Net) de Windows 7, A l’heure actuelle, il n’y a
ge) est gratuite. La version 10 GB est payan- d’une mise à niveau des pas de date officielle de
te (10 dollars par mois). 100% WPF outils de développement sortie. On évoque souvent
Ce qui frappe d’emblée, pour Office, du support de une disponibilité fin 2009,
■ Eclipse 3.5 sera disponible fin juin. Cette c’est une interface assez Sharepoint, de Silverlight début 2010, sans plus de
version apporte pas mal de changements : largement modifiée. Elle se (uniquement 2.0 dans la précision. Il est probable
support de Solaris 86x pour SWP, nouveau veut plus claire, moins bêta testée). Autre grosse que cette sortie se déroule
module d’installation de logiciels, changement complexe, dotée d’éditeurs nouveauté, la présence du plusieurs semaines après
d’éditeurs et de pages dans les éditeurs par plus ergonomiques. On cloud computing avec une Windows 7. Nos premiers
des raccourcis claviers, nouvelles optimisa- constate aussi la présence intégration transparente tests montrent qu’il faut
tions entre Eclipse et Cocoa (MacOS X), d’une nouvelle fonction des kits de développement tout de même une machi-
comparateur d’API (pratique en cas de chan- zoom surpuissante, preuve Azure. Jusqu’à présent, il ne puissante avec une
gement). Site : www.eclipse.org que Visual Studio s’appuie était parfois délicat de les grosse réserve de mémoi-
sur le framework Windows installer avec Visual Studio re vive. Les lenteurs
■ SpringSource a rendu disponible Spring- Presentation Foundation 2008. Autre surprise bien- constatées ici et là (notam-
Source tc Server, une version entreprise de (WPF). L’un des focus de venue, l’arrivée du support ment sur la toolbox) appa-
Tomcat. Elle se destine aux Datacenters, aux cette version concerne le de DB2 et d’Oracle dans raissent normales pour
environnements virtuels et cloud computing. cycle de vie des applica- les bases de données, en une bêta. Attendons les
Il est prévu de livrer ce serveur sous forme tions que Microsoft veut plus du classique SQL Ser- évolutions de perfor-
d’appliance virtuelle optimisée pour VMware. démocratiser auprès des ver ! Autre grosse nou- mances dans les pro-
Site : www.springsource.com développeurs. Team Sys- veauté : le suppor t par chaines versions pour
tem 2010 se dote en effet défaut du développement mieux juger.
actu \\ sécurité
Sécurité
Microsoft relance SDL
En 2002, après une série retentissante de vulnérabilités détectées
dans les logiciels Microsoft, Bill Gates siffle la fin de la récréation.
Les failles d’Internet Explorer et celles du système d’exploitation
inquiètent les entreprises utilisatrices, et certaines commencent à
tester sérieusement les offres alternatives. Bien sûr, un simulateur
de vol dissimulé dans Excel n’est pas la fin du monde.
Sous le nom de Security Development Lifecycle (SDL), soit Cycle de
développement sécurisé, l’initiative Microsoft a pour objectifs de
mettre la sécurité au cœur des développements de tous les produits,
et de partager les résultats de cette politique avec ses partenaires. Il A la mi-mai, Microsoft a lancé un " nouveau SDK " comprenant :
ne faut pas croire que le premier objectif soit si simple : en effet, - Le guide SDL version 4.1.
pour des responsables de lignes de produits, la sécurité dans un pre- - Une intégration d’outils SDL dans Team System, l’environnement
mier temps coûte cher. Il n’est donc pas surprenant de devoir de développement intégré de Microsoft. (via un template)
attendre 2004 pour voir la démarche SDL généralisée à l’ensemble - Un partenariat stratégique : SDL Pro Network avec SANS (25
de Microsoft, et 2005 pour être rendue disponible au reste de l’éco- erreurs de programmation) et SAIC (une entreprise de cyber-sécu-
système. Où en somme-nous aujourd’hui, 7 ans après le lancement rité travaillant pour le gouvernement US).
de ce processus ? Si vous vous rappelez le dossier dans Program- Elle répond donc aux trois objectifs : éduquer (les équipes), automati-
mez ! concernant les 25 erreurs de programmation les plus cou- ser (les processus) et assister (les projets). Les contraintes de sécu-
rantes, il semblerait que nous soyons encore à l’âge de pierre en ce rité s’intègrent donc désormais de façon transparente aux
domaine ! D’après les statistiques citées par Microsoft, 70% des édi- développements, et permettent enfin le suivi en temps réel des failles
teurs de logiciels font leurs tests de sécurité… après la mise en de sécurité, tout en donnant une vue synthétique au moment de la
vente de leur logiciel. On se heurte en fait à deux types de mentalité : revue finale du projet. Un exemple à suivre pour les autres éditeurs ?
le sempiternel " la sécurité coûte " et également " le système d’ex-
ploitation devrait être là pour nous protéger ". Faux, et faux. ■ Gilbert Vidal
Intégration
aux outils tiers
Génération
de Rapports &
Génération Documentation
BPEL, WSDL
Génération de Code
Multi cibles, pour Frameworks
sales@modeliosoft.com
www.modeliosoft.com Tél. : 01 30 12 18 40
Juin 2009 \\ PROgrammez ! • 11
12-13 20/05/2009 12:06 Page 12
événements \\ interface
I
l est rare que la présentation d’un logiciel la possibilité de communiquer avec une per-
attire de nombreuses caméras de télévi-
sion. C’était pourtant le cas, ce 13 mai,
sonne dans le coma, afin d’essayer de la sortir
de son état végétatif ", explique Jean-Philippe
OpenVibe :
au siège de l’Inserm (Institut National de la Lachaux, un des responsables du projet, à 9 années/homme
Santé et de la Recherche Médicale). Il est vrai l’Inserm. Le concept de neuro-feedback ouvre Yann Renard est l’ingénieur responsable
que la promesse attirait légitimement la curio- par ailleurs des champs thérapeutiques infinis. du développement d’OpenVibe, à L’Inria. Il
a œuvré avec deux autres développeurs
sité des médias et de la communauté scienti- La personne essaie de modifier le " signal " :
pendant 3 ans. Il nous a livré quelques
fique. Nous étions là et n’avons pas été déçus. les applications concernent la douleur, ou des détails sur cette application de
Aujourd’hui, l’équipement nécessaire est un gênes de type accouphènes. Ou encore des 9 années/homme : " Le code est en C++.
sytème simple d’électrodes au niveau du cuir troubles de l’attention chez l’enfant hyperactif L’application comporte plus de 150 000
chevelu, permettant de capter l’activité élec- ou encore la rééducation post-traumatique. lignes de code. Elle est très modulaire, à
base de composants connectés par une
trique cérébrale, analogue au dispositif de
interface graphique drag&drop. L’architec-
l’électro-encéphalogramme. Le P300 speller : ture est planifiée pour le multi-coeur, et
Plusieurs expériences ont été présentées, L’écriture par la pensée prête pour les clusters, permettant
dans des domaines de réalité virtuelle et de Grâce au logiciel OpenViBE, l’Inserm a dévelop- d’agencer les modules existants et ceux
santé. pé une interface simple et conviviale qui offre qui seront ajoutés " Anatole Lécuyer, direc-
teur du projet, l’a initié en 2005, dans le
la possibilité d'écrire des phrases en sélection-
cadre d’une unité de l’Inria dédiée aux
REALITE VIRTUELLE nant, simplement par la pensée, des lettres mondes virtuels, basée à Rennes. L’ouver-
L’expérience a permis de montrer que l’appli- présentées sur un écran. L’expérience a mon- ture de la forge de OpenVibe représentait
cation détectait que le sujet avait l’intention de tré que, au cours de l’affichage successif pour lui et pour l’équipe le commencement
déplacer sa main gauche ou sa main droite. de lignes et colonnes de lettres, surlignées, la dans la vie réelle d’un projet qui ira loin.
L’application passe par une phase d’apprentis- personne focalise son attention sur une lettre
sage, correspondant à celui nécessaire pour à épeler. Lorsque la ligne ou la colonne qui apparaît de manière imprévisible. Elle sur-
un logiciel de reconnaissance de la parole. contient la lettre choisie, une réponse céré- vient environ 300 ms après la stimulation,
Après une série de traitements des signaux, il brale particulière est générée. Cette réponse, d’où son nom de P300. Il est de cette manière,
est possible de savoir quelle était la main utili- connue des chercheurs, est déclenchée possible de savoir sur quelle lettre la personne
sée pour le mouvement imaginé par exemple, quand l’individu a détecté un stimulus attendu focalisait son attention.
l’onde cérébrale provoquée par l’imagerie
mentale du sujet est détectée et commande
un déplacement sur l’écran. On reconstitue en
CONTRIBUEZ
3D, et en temps réel, l’activité cérébrale. La
au Projet OpenVibe !
démonstration était dans le domaine du jeu Sur le site officiel, les développeurs dis-
vidéo. Les handicapés moteur pourront ainsi posent de plusieurs outils. Un Designer
plus facilement accéder à l’univers virtuel. permet de modéliser et de tester son
Interface Cerveau-Ordinateur. Acquisi-
L’application peut également être un outil
tion Server permet de communiquer
d’entraînement cérébral, souligne Anatole entre le matériel d’acquisition (= casque)
Lécuyer, responsable du projet à l’Inria et l’application OpenVibe.
Disponible en open source, OpenVibe
NEURO-FEEDBACK évoluera et se complètera grâce à vous,
les développeurs. Programmez ! suivra
L’apport de l’Inserm a été notamment le repé-
régulièrement les évolutions ! Le code source et les binaires (137 Mo) sont disponibles
rage des " marqueurs électro-encéphalogra- sur Linux et Windows. Le projet est sous licence LGPL 2. A vous de jouer. Site :
phiques " : j’écoute avec l’oreille gauche ou http://openvibe.inria.fr. (Rendez-vous également sur www.programmez.com !)
l’oreille droite. " Nous explorons actuellement
actu \\ en bref
■ Windows 7 est désormais disponible en version RC. La version Alter Way, intégrateur Open Source de référence,
finale devrait être disponible vers octobre ou novembre si tout va
couvre les besoins de l’ensemble du système
bien. Pour débuter dès maintenant les tests de compatibilité des
d’information avec ses quatre offres
applications, Microsoft France a ouvert un site spécifique : Windows 7
Applications et Compatibilité. Cette excellente initiative concerne
aussi bien les développeurs, éditeurs que les utilisateurs. Site :
http://www.microsoft.com/france/windows/windows7/compatibilite/default.aspx
CONSULTING
Conseil en architecture
■ Kapitec, distributeur exclusif de Web Performance Load Tester, Choix d’outils
annonce l’arrivée de la version 3.6. Cette version intègre de nom-
Industrialisation
breuses nouveautés : nouvelles analyses utilisateurs, nouveau
Best practices
module des cas de tests, reporting amélioré, nouvelles méthodes
pour les tests de charge. Audits
TECHNOLOGIES
PHP / Python / Java / ECM
JasperSoft / Talend / Bases de données
Open-Xchange…
www.alterway.fr
Le libre, autrement
14-25 complil croisée 20/05/2009 10:54 Page 14
Le casse-tête
du multi-plate-forme
Aujourd’hui, la programmation est de moins en moins mono plate-forme (= mon
application fonctionne sur un seul système) mais de plus en plus
multi-plate-forme. Le site web en est le meilleur exemple.
L’arrivée du cloud computing et des services en ligne (le
SaaS) transforme radicalement la manière de concevoir et
d’utiliser les logiciels. Demain, le développeur se souciera de
moins en moins du système cible (sur quoi tourne mon
application) pour se concentrer sur l’interface, les fonctions.
Dans ce dossier nous allons aborder différents thèmes car
sous le vague terme multi-plate-forme, se cachent de
nombreuses réalités. La cross compilation, ou compilation
croisée, est un de ces aspects, peut être le plus intéressant à
connaître et surtout à maîtriser. Il facilite grandement la
création d’applications exécutables pour différents systèmes.
Cette compilation multiple peut prendre différentes formes,
comme nous le verrons. Elle peut être directement intégrée à
l’environnement de développement ou alors passer par des
outils tiers. Des environnements de développement sont conçus
pour être multi-plates-formes et réaliser des logiciels pouvant
fonctionner sur plusieurs systèmes.
Java est le langage le plus
connu même si des
limitations, des problèmes
surgissent souvent. Des
langages comme C++, les
langages dynamiques et certains
basic le peuvent aussi.
Avec l’interopérabilité omniprésente, le
fait d’avoir un langage portable partout ou
presque est devenu un réel enjeu. Si
Windows demeure le système le plus utilisé,
le paysage change rapidement et MacOS X et
Linux prennent tous les ans des parts de
marché.
Le multi-plate-forme apparaît crucial quand on parle
de web, de web 2.0, de RIA. Et il est aussi source de
cauchemars pour le développeur web. Nous verrons que cette
problématique reste complexe dans une approche multi navigateur.
©istock.com/77DZIGN
■ François Tonic
Multi-plate-forme :
où, quand, comment, pourquoi ?
Le multi-plate-forme n’a jamais été un modèle très prisé des développeurs. Par contre
le développeur web se trouve tous les jours, en principe, confronté à la variété des
navigateurs et des technologies à supporter pour être le plus universel possible. Mais
rien n’est jamais simple en informatique et vous verrez dans ce dossier que le multi-
plate-forme demande rigueur et structure.
C
omme dans tout développement, belle place, notamment grâce à la pile sur toutes les cibles. Il ne faut surtout pas
le multi-plate-forme ne s’improvi- open source Mono qui permet de dévelop- attendre la fin du développement pour le
se pas ! Il faut déjà connaître le per un peu partout avec le même langage faire. Car en cas de bugs importants, la
contexte de l’application à développer, les (voir article Delphi Prism). Nous n’oublie- correction sera plus longue et plus diffici-
technologies, langages envisagés, le type rons pas Java qui fonctionne partout. Si la le, surtout si la structure de l’application
d’utilisateur, et le ou les systèmes cibles por tabilité s’améliore constamment, n’est pas réalisée en couches strictement
possibles. attention tout de même aux disparités des distinctes, au moins séparer l’interface du
JVM et aux différences de comportement code fonctionnel. Et plus un code sera
Les langages selon les systèmes. Notamment sur tout structuré, modulaire, plus il sera aisé de
et le problème du RIA ce qui est interface native et appels natifs. corriger les imperfections de portage.
Qui dit multi-plate-forme, dit aussi langage Reste l’incontournable basic. Et oui il Les environnements de virtualisation
de programmation. Dans un contexte demeure bien vivant ! Plusieurs environne- appor tent aujourd’hui une souplesse
web, privilégiez les standards reconnus : ments permettent de faire de la compila- inégalée pour le développeur. Il peut facili-
HTML, xHTML, CSS, REST, Atom, Javas- tion multi cible à partir du même code ter créer des machines virtuelles spéci-
cript, Ajax. Cependant attention, sur basic. Le plus connu dans ce domaine est fiques à chaque scénario d’utilisation.
HTML, évitez de trop vous focaliser sur Real Basic de Real Software. Ensuite vous
HTML 5 tant que les navigateurs ne le avez un grand nombre de langages, de ■ François Tonic
supporteront pas entièrement et de façon langages dynamiques et de scripts faisant
optimale. Sur Ajax, le choix du framework parfaitement du multi-plate-forme, souvent
ne sera pas non plus anodin. Dans tous dans le domaine web et non desktop :
les cas, une grosse phase de test sera PHP, Python, Ruby, Rails, etc.
nécessaire (voir plus loin dans ce dossier).
Bonnes
Par contre on peut rencontrer des soucis Et les outils ? pratiques
sur un développement RIA (Rich Internet L’outillage pour le multi-plate-forme est dès le départ
Application). Le plus universel reste vaste. Encore une fois, tout va dépendre
Adobe Flash / Flex fonctionnant aussi sur du projet envisagé. Aujourd’hui de nom- Sogeti met en avant 3 clés :
Windows, MacOS X et Linux. Sa déclinai- breux outils, notamment open source, - ne pas se jeter directement sur le
son desktop, AIR, fonctionne aussi sur les sont disponibles sur plusieurs plates- code, regarder les besoins, l’envi-
trois systèmes. Donc peu de souci à se formes. Si on prend les classiques Eclipse ronnement sur lequel tournera l’ap-
faire. Par contre avec Silverlight, si Win- et Netbeans par exemple mais aussi dans plication.
dows et MacOS X sont bien supportés, les outils Qt, Adobe, etc. En dehors de - Avoir un code lisible, modulaire,
Linux reste en retard malgré l’arrivée du l’éditeur, de l’IDE, il ne faut pas omettre les facile à maintenir
projet Moonlight. Et sur l’utilisation de outils de tests, l’intégration continue, etc. - Quand la compilation est terminée,
JavaFX, le projet demeure trop immature Et les choix sont nombreux : Maven, Ant, le travail n’est pas terminé !
et peu reconnu. XUL sera aussi une JUnit (ou autres), etc. On peut aussi opter - A cela se rajoute bien entendu la
bonne solution mais limitée aux univers pour des environnements totalement inté- séparation des couches (interface,
Mozilla. Sur le RIA, il n’existe pas de grés et multi-plates-formes, orientés don- code fonctionnel).
réponse universelle. nées ou non tels que 4D, Omnis. Pour les aider, Sogeti utilise un
C++ (ANSI) est le langage le plus portable modèle de type MDA pour modéliser
même s’il demande de la rigueur et une Tester, tester, tester, tester ! les couches et réaliser le découpage
bonne compétence. Cependant, aujour- Pour réellement vérifier que son code des applications. Les développeurs
d’hui, C++ est LE langage référence du fonctionne de la manière attendue sur les utilisent des langages et spécifica-
multi-plate-forme (voir article sur Qmake). environnements cibles, il faut donc tions matures du web.
C# commence lui aussi à se faire une constamment réaliser des build et tester
Développer multi-plate-forme
en .Net avec Delphi PRISM
Il n’y a pas si longtemps, lorsqu’il était question de développement cross-platform, on
pensait surtout au couple Windows/Linux. Aujourd’hui MacOS X —qui est un système
UNIX— devient de plus en plus une cible de prédilection.
P
etit problème cependant : offrez à tion. Si lors de la génération vous obtenez dialoguera avec l’interface graphique par
un utilisateur Mac une application une erreur de la tâche MacPack disant que le biais d’actions —définies comme des
au look GTK ou WinForms, et voyez " le répertoire n’est pas vide ", supprimez à méthodes et correspondant aux événe-
ses réactions ! L’effort d’intégration gra- la main le contenu du répertoire " bin " de ments utilisateur— et d’outlets, points
phique à l’OS ne doit surtout pas être négligé. votre solution et recommencez. d’accès aux composants de votre interfa-
C’est à ce stade que Delphi PRISM entre en ce, définis comme des champs de votre
jeu. Grâce à Mono et Cocoa#, vous pouvez Premier projet PRISM classe. Nous y reviendrons.
utiliser PRISM pour développer des applica- Vous êtes maintenant prêt à créer votre pre-
tions Delphi.NET se comportant en tout mière application MacOS X avec Delphi PRISM. Design de l’interface
point comme une application Cocoa (le fra- Créez un nouveau projet Mono (Fichier > Nou- graphique
mework fourni par MacOS). Cet article vous veau > Projet) de type " Application Cocoa (Leo- Laissez de côté Delphi PRISM et, sous
mettra sur les rails de tels développements, pard) " ou " Application Cocoa (Tiger) ", suivant MacOS, rendez vous dans le répertoire de
en vous présentant les bases de la coopéra- votre version de MacOS. Créez le répertoire de votre projet nouvellement créé. Ouvrez le
tion entre Delphi PRISM et MacOS X. la solution dans votre répertoire de travail par- fichier Interface.nib avec Interface Builder.
tagé entre Windows et MacOS. Plusieurs Si vous ne connaissez pas encore le logiciel,
Prérequis fichiers sont générés. Seuls deux d’entre eux vous serez peut-être dérouté au premier
MacOS X 10.4 (ou supérieur) retiendront ici notre intérêt : abord par ses nombreuses fenêtres. Voici
• Les Apple Developer Tools : http://develo- • Interface.nib : il apparaît comme un réper- une rapide présentation : [Fig.1]
per.apple.com permettent de disposer d’Inter- toire contenant, entre autres, le fichier Dans l’idée, cette fenêtre montre ce que
face Builder, l’éditeur d’interface graphique " designable.nib " dans l’explorateur de solu- contient votre fichier NIB. Pour faire un
de MacOS X. tion de Visual Studio. Il apparaîtra comme parallèle avec Delphi, les objets qui appa-
• Mono 1.2.6 ou plus récent : un fichier sous MacOS. Il s’agit du fichier raissent ici pourraient être comparés aux
http://www.mono-project.com que vous éditerez avec Interface Builder composants non visibles que vous placeriez
Windows XP (minimum) pour créer votre interface utilisateur. dans un DataModule. Cette comparaison
• Delphi PRISM • ApplicationController.pas : il s’agit du n’est qu’approximative, puisqu’apparaît éga-
• Mono 1.2.6 ou plus récent contrôleur de votre application, que vous lement un objet pour chaque fenêtre de
Pour des questions pratiques, il est préfé- implémenterez avec Delphi PRISM et qui votre NIB. Le dernier objet, nommé " Appli-
rable que MacOS et Windows puissent
communiquer en réseau, afin de partager Fig.1 Fig.3 Fig.4
un répertoire de travail. Bien sûr, vous pou-
vez utiliser une solution de virtualisation
comme VMWare ou Parallels pour exécuter
Windows sur votre Mac, par exemple.
Vous rencontrerez peut-être des pro-
blèmes de permissions entre MacOS
et Windows, suivant la configuration de
votre partage de fichiers. Assurez-vous que Figure 1 - Contenu du fichier NIB
votre dossier de travail est accessible en Fig.2
écriture à votre compte Mac et au compte
utilisé par Windows par le réseau (ou inver-
sement). Si l’application MacOS générée
(fichier .app, dans " bin/Debug " ou
" bin/Release ") se termine immédiatement
après son lancement, ajoutez-lui les droits
d’écriture et d’exécution : sudo chmod –R
a+wx monapplication.app. Vous devrez alors
refaire cette opération à chaque généra- Figure 3 - Inspecteur d'objets Figure 4 - Bibliothèque de
Figure 2 - Fenêtre par défaut contrôles
jusqu’à
4 promotions exceptionnelles
Si vous possédez Visual Studio Professionnel, Visual Studio avec MSDN ou encore Visual Studio Team
System, vous avez la possibilité d’accéder au produit supérieur de la gamme à un prix préférentiel.
cationController ", est un pont vers le fichier rentes, parfois seulement à des design dif- de créer. Le selector du bouton, qui est l’ac-
" ApplicationController.pas ". Nous y défini- férents. Ici il s’agit d’un simple Push Button. tion exécutée lorsqu’il est cliqué, est mainte-
rons les actions et outlets nécessaires au Le but de l’application sera très basique : nant dirigé vers la méthode onClick: que
fonctionnement de notre interface. [Fig.2] afficher une boîte de dialogue avec un mes- vous allez implémenter dans votre Applica-
Cette fenêtre est tout simplement celle sur sage incluant le nom entré dans le TextField tionController. [Fig.6]
laquelle vous travaillerez, à l’instar des outils lorsque l’utilisateur clique sur le bouton. Vous pouvez vérifier toutes ces connexions
présents dans Delphi ou Visual Studio. Par Le comportement de votre application est en examinant l’onglet " connections " de
défaut, elle comporte une simple barre d’ou- implémenté dans votre objet Application- l’inspecteur (cinquième onglet) et en sélec-
tils contenant quelques boutons. Nous la Controller, défini dans le fichier " Applica- tionnant les différents objets affectés.
modifierons sous peu en y déposant des tionController.pas ". Afin d’interagir avec
contrôles depuis la bibliothèque. votre interface, la classe est en réalité Implémentation
Les deux fenêtres suivantes sont, respecti- déclarée de manière partielle dans un de l’application
vement, la bibliothèque de contrôles (visuels fichier " designable.pas ", lui-même inclus Tout est maintenant prêt pour implémenter
ou non) et de médias disponibles pour votre dans le fichier " designable.nib " contenu l’application. Sauvegardez le fichier NIB et
interface, et ce qui se rapproche de l’inspec- dans " interface.nib ". Ainsi, toute modifica- revenez à Delphi PRISM sous Windows. Afin
teur d’objets. Cet inspecteur propose plu- tion apportée dans Interface Builder à l’objet de s’assurer que tout est bien synchronisé,
sieurs vues permettant d’éditer les " ApplicationController " sera répercutée effectuez un clic droit sur le fichier " desi-
propriétés de l’objet sélectionné dans l’une dans cette classe partielle, et vous pourrez gnable.nib " (enfant de " Interface.nib ") dans
des deux fenêtres précédentes. [Fig.3] coder en toute tranquillité dans " Applica- l’explorateur de solution, et cliquez sur
Pour notre exemple, nous allons modifier la tionController.pas " en profitant de ce pont " Exécuter un outil personnalisé ". Cela regé-
fenêtre pour obtenir ceci : [Fig.5] vers votre interface. nère le fichier " designable.pas " avec les
• Cliquez sur la barre d’outils incluse par Continuons justement notre chemin vers dernières modifications apportées au fichier
défaut dans la fenêtre et supprimez-la. l’implémentation. Pour que la classe Appli- NIB. Dans " ApplicationController.pas " ajou-
• Redimensionnez la fenêtre à la taille voulue cationController puisse agir comme nous le tez la déclaration de la méthode onClick en
• Dans la bibliothèque, trouvez le label. Il souhaitons, il faut lui indiquer deux choses : public de la classe ApplicationController :
s’agit du premier composant dans Cocoa > • Un outlet vers le TextField, grâce auquel
Views & Cells > Inputs & Values. Déposez un nous pourrons récupérer le texte entré par public
label dans votre fenêtre grâce à un l’utilisateur. method onClick(sender: Object); partial;
drag&drop et double-cliquez dessus pour en • Une action, nommant la méthode à exécu- end;
changer l’intitulé. Validez par " Entrée ". Vous ter lorsque le bouton est cliqué.
remarquerez que des guides vous aident à Sélectionnez l’objet " ApplicationController " Puis implémentez la méthode :
placer correctement le composant dans son et, dans l’inspecteur, affichez l’onglet " iden-
conteneur lorsque vous le déplacez. tity " (l’avant-dernier onglet). Vous pouvez method ApplicationController.onClick
• Ajoutez un TextField en dessous du label. voir une section " Class Actions " et une sec- (sender: Object);
• Enfin, ajoutez un bouton. Tous les types de tion " Class Outlets ". Dans la première, begin
boutons se trouvent dans Views & Cells > ajoutez une action onClick: dont vous laisse- Alert.AlertWithMessage('Bonjour !', 'OK',
Buttons. Les différents types de boutons rez le type à id. nil, nil, 'Bonjour à vous, ' + edName.
sont parfois destinés à des utilisations diffé- Dans la seconde, ajoutez un outlet que vous Value + ' !').RunModal;
nommerez edName et qui doit avoir pour end;
Fig.5 type NSTextField. Pour connaître le type d’un
objet, sélectionnez-le et vérifiez le champ Sauvegardez et générez l’application. Si tout
" Class " dans l’onglet " identity " de l’inspec- se passe correctement, vous devriez avoir
teur. Reste maintenant à indiquer à la clas- dans le dossier " bin/Debug " ou
se à qui (ou quoi) correspondent ces " bin/Release " un fichier " CocoaApplica-
éléments dans l’interface. Pour cela, il faut tion1.app " (suivant le nom de votre projet
créer des connexions entre les objets grâce bien sûr). Lancez l’application depuis MacOS :
Figure 5 - Fenêtre finale à un drag&drop effectué avec un clic droit. vous avez alors sous les yeux une véritable
Cliquez droit sur l’objet " ApplicationControl- application MacOS X, s’intégrant parfaite-
Fig.6 ler " et en maintenant le bouton pressé, glis- ment à l’OS. Vous avez maintenant entre les
sez le lien bleu qui s’affiche jusqu’au mains un outil qui vous permettra de cibler
TextField. Lâchez alors le bouton : s’affiche un OS en vogue tel que MacOS X de manière
une liste des outlets disponibles et de type tout à fait sérieuse, tout en conservant la
compatible avec l’objet visé. Ici, seul edNa- possibilité d’un portage vers d’autres plates-
me devrait s’afficher ; cliquez dessus. formes grâce au framework .NET.
Effectuez la même opération en partant du
bouton vers l’objet " ApplicationController ". ■ Olivier Lance
Cette fois, une liste des actions disponibles Etudiant ingénieur SI
s’affiche. Choisissez onClick: que vous venez www.codegearfrance.com
Figure 6 - Création d'un lien entre deux composants
C
ompiler depuis un système A pour produire un exécutable, using namespace std;
ou une librairie, pour un système B est souvent bien pra- int main(){
tique. Supposons que l'on développe une application en C++ cout << "Programmez!" << endl;
avec Qt ou wxWidgets en guise de toolkit graphique. Supposons que return 0;
l'on travaille seulement avec les plates-formes Linux et Windows, }
mais le raisonnement est bien sûr valable avec un autre choix de
Sa compilation est non moins simple
plates-formes. C++ permet d'écrire du code source portable. Très
i386-mingw32-g++ -o hello.exe hello.cpp
bien. Qt ou wxWidgets, ou même d'autres toolkits permettent d'écri-
re du code portable. Toujours très bien. Mais compiler un projet sur et produit un exécutable Windows. Nous ne devons pas omettre de
chacune des plates-formes risque fort d'obliger à travailler avec des mentionner l'extension .exe au fichier produit. Celui-ci est plutôt volu-
outils de développement différents, éventuellement chacun avec mineux. La raison est que l'édition de liens avec le runtime a été
leurs spécificités et gérer de multiples projets. La compilation croi- effectuée statiquement par défaut, le but étant de produire un exé-
sée est une réponse à ce problème. On écrit le code et on le compile cutable totalement autonome sur la plate-forme cible.
sur une plate-forme seulement, en produisant des exécutables pour
chaque plate-forme cible. Voyons comment pratiquer cela de Linux
vers Windows et réciproquement, et déjouer quelques pièges. 3 CONSTRUIRE ET UTILISER
UNE LIBRAIRIE
Une grosse application est rarement monolithique, mais utilise des
2 CONSTRUIRE UN EXÉCUTABLE }
return valeur*2;
4 EDITION DE LIENS STATIQUE sus, de toujours forcer le bon ordre d'inclusion des librairies.
et maintenant nous pouvons faire l'édition de liens de la librairie pro- Avec l'API Windows GetProcAddress nous obtenons un pointeur sur
prement dite : la fonction à partir du nom de celle-ci. C'est le moment de constater
l'effet pernicieux de l'omission de la directive -kill-at dont nous avons
i386-mingw32-ld -dll -kill-at -o madll.dll madll.o
parlé plus haut. Sans cette directive le nom de notre fonction est
La directive -dll parle d'elle-même. Quant à -kill-at nous y reviendrons décoré et devient "fois2@4" comme on le voit dans la capture ci-
plus loin. Il est .maintenant possible de construire notre application contre, obtenue avec l'utilitaire Dependency Walker de Microsoft.
autonome en compilant use-madll.cpp : Bien sûr si nous utilisons ce nom (cf. la ligne de code en commentai-
re ci-dessus) cela fonctionne, mais ce n'est pas l'esprit de la pro-
i386-mingw32-g++ -L./ -o use-madll.exe use-madll.cpp -lmingw32
grammation Windows. La bonne manière est d'employer -kill-at qui
-lmadll
comme son nom l'indique supprime le symbole at (@)
Il y a ci-dessus une petite subtilité. Pourquoi ajoutons-nous la librairie
mingw32 qui est liée automatiquement de toute façon ? Ici nous
n'avons pas du tout besoin de le faire en fait. Mais c'est une bonne 6DE WINDOWS VERS LINUX
habitude à prendre que de forcer la lecture de cette librairie en pre- Le plus simple est d'installer un environnement Cygwin
mier. Sans trop entrer dans les détails dans ce court article, disons (http://www.cygwin.com/) sous Windows, puis d'installer le compilateur
qu'il est possible, dans de grosses applications, que vous rencon- c r o i s é m i n g w 3 2 , e n c o r e l u i : ) Vo u s l e t r o u v e r e z à
triez un message d'erreur agaçant disant que pour une application http://sourceforge.net/project/showfiles.php?group_id=135860&package_id=15
GUI, la fonction WinMain n'est pas définie, alors qu'elle l'est pour- 3563. Son utilisation ne pose aucune difficulté.
tant bel et bien dans votre code. Casse-tête courant qui en a énervé
plus d'un :) Une particularité de l'éditeur de liens ld est de chercher
un symbole requis par une librairie dans les librairies qui la suivent ■ Frédéric Mazué
dans l'ordre d'inclusion. Or il se trouve que mingw32 a besoin de fmazue@programmez.com
Q
make n'est pas, à proprement parler un système de build. effet de générer le Makefile, lancez-le en tapant " make ", vous ver-
C'est un outil qui permet de simplifier considérablement le rez alors votre programme se construire.
processus de création des fichiers de build. Typiquement, Vous constaterez aussi que votre programme se retrouve lié à Qt
Qmake va être utilisé pour générer les fichiers Makefile nécessaires (et à toutes ses dépendances)... cela fait beaucoup pour notre " Hel-
à la construction d'un projet. Actuellement, Qmake permet de géné- loworld "... D'autant plus que nous n'utilisons pas Qt ! C'est donc le
rer des Makefiles pour toutes les plates-formes supportées par Qt. moment d'expliquer à Qmake que nous ne voulons pas qu'il lie notre
Il est aussi capable de générer les fichiers projet pour Microsoft application à Qt. Revenons donc sur le fichier projet. Nous consta-
Visual studio ou Xcode permettant ainsi d'utiliser les outils propres à tons d'abord qu'il ressemble énormément à un fichier de configura-
certaines plates-formes. L'intérêt de cet outil réside dans son utili- tion et que chaque ligne présente un schéma identique :
sation pour des projets écrits ou non en Qt. Pour les projets Qt,
VARIABLE = VALEUR
Qmake génère automatiquement les cibles pour Moc (Meta Object
Compiler) et Uic (User Interface Compiler). D'autres types d'instructions existent mais la majeure partie d'un
fichier projet est constituée de déclarations de variables. La premiè-
Les bases... re disponible est la variable TEMPLATE, celle-ci contient le template
Commençons par les bases, Qmake se repose sur un fichier texte qui sera utilisé pour générer le projet et peut prendre les valeurs sui-
(UTF8 pour bien faire) dit “fichier projet”. Ce fichier est une suite de vantes :
variables ou de directives qui seront utilisées pour générer les ins- • app : crée un Makefile pour générer une application ;
tructions de compilation. La façon la plus simple d'obtenir un sque- • lib : crée un Makefile pour générer une librairie ;
lette de fichier projet est de faire appel à Qmake dans le répertoire • subdirs : crée un Makefile par répertoire déclaré dans la variable
racine de votre projet : SUBDIRS ;
• vcapp : spécifique à Windows, crée un fichier de projet Visual stu-
qmake -project
dio pour une application ;
Prenons un premier exemple simpliste. Créez un répertoire • vclib : spécifique à Windows, crée un fichier de projet Visual studio
exemple1. Dans celui-ci, créez un répertoire src. pour une librairie.
Dans notre cas nous utilisons le template app. La variable suivante
mkdir -p exemple1/src
est TARGET, qui est, par défaut, vide (la cible générée prend alors le
Créez dans le répertoire src, un fichier main.cpp contenant le " pro- nom du répertoire). Viennent ensuite :
gramme " suivant : • DEPENDPATH : la liste des répertoires qui vont être scrutés pour
résoudre les dépendances ;
#include <iostream> • INCLUDEPATH : la liste des répertoires contenant les fichiers d'en-têtes ;
• SOURCES : la liste des fichiers sources du projet ;
int main(){ • si nous avions des fichiers d'en-têtes, ils seraient listés dans la
std::cout << "HelloWorld\n" ;
variable HEADERS.
return 0;
Lors de la construction précédente du binaire vous avez pu constater
}
que celui-ci était compilé et lié contre Qt alors que nous ne l'utilisons
Maintenant, dans le répertoire exemple1, lancez " qmake -project ". pas. Ceci n'est pas anodin et un " ldd exemple1 " vous fera constater
Celui-ci va créer un fichier appelé exemple1.pro contenant ceci : l'étendue des dégâts ! Pour remédier à ce problème rien de plus
simple : il suffit d'ajouter la définition suivante à notre fichier projet :
TEMPLATE = app
TARGET = CONFIG -= qt
DEPENDPATH += . src Relancez la compilation. Le Makefile est automatiquement regénéré
INCLUDEPATH += .
(Qmake prend soin de mettre en place la règle adéquate). Constatez
# Input
aussi que, cette fois, aucune librairie superflue n'est incluse, et ldd
SOURCES += src/main.cpp
vous dit merci ! Qu'avons-nous fait avec la variable CONFIG ? Nous
Nous reviendrons sur ce fichier, pour le moment transformez-le en avons simplement demandé à Qmake de ne pas générer les règles
fichier de build en tapant " qmake exemple1.pro ". Cela aura pour qui lient Qt à notre application.
Dans un premier temps, voyons comment gérer la compilation des # Les fichiers concernés par cet objet sont les .h du répertoire
sources spécifiques à chaque OS. Qmake met à notre disposition un include/
système de " scopes " très pratique. Les scopes sont des condi- includes.files = include/*.h
tions qui permettent de prendre en compte les spécificités de # ceux-ci seront installés dans le répertoire /usr/include
chaque situation. Une des utilisations vraiment intéressante des includes.path = /usr/include
scopes est la configuration du build en fonction de l'OS. Ainsi il suffit, Une fois ceci fait, il est nécessaire d'ajouter l'objet includes
pour ne compiler que le fichier source relatif à un OS, d'ajouter les à la variable INSTALLS :
définitions suivantes au fichier projet : INSTALLS += includes
QT -= gui
Nous n'utilisons pas cette possibilité dans notre exemple.
La variable QT permet de configurer les modules de Qt utilisés par J'espère que cet article d'introduction vous aura convaincu que la
notre projet. La déclaration par défaut (lorsque rien n'est spécifié) est : construction multi-plate-forme n'est pas l'enfer fréquemment décrit,
QT = core gui du moment que l'on choisit les bons outils...
Le multi navigateur :
le guide de survie du développeur web
Autant le dire tout de suite : il n'existe aucune
méthode miracle pour faire fonctionner un site ou une
application web sur les principaux navigateurs du
marché. La quantité de problèmes engendrés par le
seul Internet Explorer 6 est d'ailleurs effrayante...
mais elle est aussi incontournable quand on sait que
ce navigateur représente encore 18% des utilisateurs
(et plus encore en contexte d'entreprise). La
démarche et les quelques astuces qui suivent vous
permettront donc d'être mieux armés face à ces
petites galères quotidiennes. La fonction d'inspection de Firebug en action
M
unissez-vous d'abord d’un bon Redéfinir le style des balises par défaut
éditeur HTML : vous éviterez Même si un code conforme aux standards Les balises ne sont pas interprétées par
ainsi quelques erreurs silen- et propre ne garantit pas en soi la compati- défaut avec le même style suivant le naviga-
cieuses sous certains navigateurs et très bilité entre navigateurs, vous imposer cette teur. Forcer le style de toutes les balises (en
gênantes ailleurs. Pour bien visualiser ce rigueur vous facilitera les choses. Commen- particulier border, margin et padding) vous
que vous codez, Firefox et son extension cez donc par réaliser votre squelette économisera quelques migraines.
Firebug s'avèrent indispensables. XHTML, sans style ni javascript, mettant en Utiliser les commentaires conditionnels
Les fonctions d'inspection et d'édition en place la structure logique et sémantique de pour les styles spécifiques à IE
ligne de Firebug vous permettront de mieux la page. Positionnez ensuite vos blocs à l'ai- Il y a de très fortes chances que vous deviez uti-
comprendre ce qui se passe dans votre de des différentes propriétés CSS en sépa- liser les styles spécifiques à telle ou telle ver-
page et faciliteront considérablement votre rant scrupuleusement les responsabilités : sion d'IE pour fixer votre mise en page. Les
travail de débogage – y compris en dehors toute la mise en forme doit se trouver dans commentaires conditionnels sont faits pour ça :
de Firefox. des fichiers CSS (pas de style " inline " direc-
Il vous faut aussi de quoi tester régulière- tement dans le HTML). C'est à cette étape <!--[if IE]>
ment vos pages web sur les trois navigateurs que l'essentiel des problèmes va se poser, le <link type="text/css" rel="styles
les plus utilisés par les internautes : IE 7, positionnement sous IE suivant des règles heet" href="ie.css" />
Firefox 3 et IE 6. assez différentes de la norme (voir les <![endif]-->
C'est là que cela se complique : si vous ne astuces plus bas à ce sujet) : contrôlez
travaillez qu'avec un seul poste de travail, il intensément les différences IE6/IE7/Fire- La transparence des PNG
vous faudra mettre en place une ou plu- fox à cette étape. La transparence des PNG n'est pas gérée
sieurs machines virtuelles pour faire vos Occupez-vous ensuite de la décoration et du nativement par IE6, mais plusieurs hacks
tests à la fois sur les versions 6 et 7 d'IE qui javascript. Un site qui utilise beaucoup de permettent de contourner cette limitation.
ne peuvent fonctionner sur le même systè- javascript peut poser de gros problèmes de Par exemple : www.twinhelix.com/css/iepngfix
me. Une autre option est l'utilisation de ver- compatibilité, mais l'utilisation adéquate Les bugs de positionnement IE6
sions émulées d'Internet Explorer, mais elle d'une bibliothèque JS de référence (Prototy- IE6 comporte de nombreux petits bugs (ou
est loin d'être parfaite. Notons enfin qu'IE 8 pe, Jquery, Dojo, Mootools) vous en évitera différences avec les standards) dans l'inter-
permet de se passer d'IE 7 grâce à son l'essentiel. prétation du positionnement des blocs, en
mode de compatibilité très pratique et particulier avec les flottants. Un excellent
apporte aussi quelques bons outils de débo- Les astuces à connaître site en fait le recensement et fournit les
gage. La bonne nouvelle, c'est que les Un bon doctype solutions adéquates : www.positionisevery-
autres navigateurs vous poseront relative- Mettez toujours un doctype valide au début thing.net/explorer.html
ment peu de problèmes une fois la compati- de vos pages et n'écrivez surtout rien avant Et pour finir, rappelez-vous les trois com-
bilité IE6/IE7/Firefox assurée. (même pas le prologue xml pourtant autori- mandements de l'intégrateur web : tester,
Rappelez-vous tout de même que quelques sé par XHTML), dans le cas contraire IE tester, tester !
tests sur Safari (7% des visiteurs) doivent passe en mode de rendu " quirks " qui rend ■ Jean-Baptiste Boisseau
être effectués, au moins en fin de projet. l'affichage tout simplement absurde. Eutech SSII
Développeur AGILE
Pour retrouver
le goût du
développement
Les méthodes agiles sont des méthodologies de petites tailles, adoptent et adaptent ces
travail et d’organisation aidant à être plus effica- méthodes et clairement, cela redonne l’envie de
ce dans le développement et l’organisation d’un développer car le développeur retrouve une place
projet informatique. Aujourd’hui, l’agilité n’est pas de choix dans l’organisation. Il n’est plus un
un mot en l’air, tout particulièrement dans les simple exécutant, un " pisseur de code " comme
SSII, et chez les équipes de développement. Deux on a souvent cherché à le limiter. Mais cela s’ac-
méthodes, complémentaires, se détachent compagne aussi d’un développement moins soli-
assez nettement : Scrum et le eXtreme Pro- taire et avec de nouvelles responsabilités. Pour
gramming. L’une concerne plutôt l’organisation un développeur habitué à coder dans son coin, à
des équipes et la manière de mener un projet, avoir entre les mains des spécifications, un
l’autre se concentre sur le développement des cahier des charges figés dans le marbre, le
fonctionnalités. Combinées, cela donne un cock- couple Scrum / XP déroute. Car la visibilité sur le
tail détonnant ! De nombreuses équipes, de projet est à court terme, avec des itérations
courtes et des développements de petites tâches
où savoir communiquer, travailler, échanger avec
le reste de l’équipe est nécessaire. Le dévelop-
peur doit aussi s’habituer à l’art délicat de l’esti-
mation. C’est-à-dire que c’est à lui d’évaluer la
difficulté de la fonction à développer et surtout de
donner un temps de développement. Ces
contraintes et libertés obligent à avoir des
équipes relativement homogènes et à encadrer
les nouveaux venus. Une bonne maîtrise des
technologies est également indispensable.
Le développeur agile est une réalité même si cela
se limite essentiellement aux développements en
©i-stockphoto.com/Stephanie Horrocks
■ François Tonic
A
lors…implication des utilisa- tions prioritaires et essentielles pour
Fig.2
teurs, soutien de la direction, l’utilisateur final. Elle incarne les
exigences clairement défi- dimensions coordination et puissance ;
nies, planning bien adapté, jalons plus la référence au rugby n’est pas inno-
fins, compétences des équipes et leur cente... Enfin, la mise en oeuvre des
engagement, vision et objectifs clairs, pratiques d’eXtreme Programming
sont des facteurs clés de succès adresse complètement les notions de
connus et partagés d’un projet infor- développement piloté par les tests,
matique et pourtant… Aujourd’hui, ils intégration continue, règles et
ne peuvent appliqués qu’en prenant normes de codage avec mesure de la différents n’est plus un obstacle. Les Figure 2 :
en compte le meilleur des méthodes qualité en continu. Elle symbolise les impacts sur le mode de développe- Valeur ajoutée
du produit
" Agiles " pour appréhender toutes les réflexes à acquérir … ment du produit sont par ailleurs mul-
dimensions d’un projet de développe- Quelles sont donc leur condition de tiples. [Fig.2]
ment. [Fig.1] mise en œuvre ? L’organisation La relation MOA/MOE est modifiée
" Unité de temps, unité de lieu et unité pour produire la plus grande valeur
Comment choisir la bonne d’action " chère aux écrivains clas- métier au plus tôt. Les choix et arbi-
méthodologie et les siques est elle l’unique solution ? La trages sont partagés au début et tout
impacts / conséquences caractéristique d’une équipe (d’une au long du projet pour absorber les
de celle-ci bonne…) au delà de la valeur indivi- perturbations extérieures (difficultés
La dimension organisationnelle est duelle de chacun se traduit par les techniques, évolutions du besoin….)
celle qui est très, trop ?, souvent valeurs essentielles partagées par
Figure 3 :
mise en avant pour aborder les ses membres : la communication, le Fig.3
la communication
méthodes agiles dans le développe- retour d'information, la simplicité et le et la transparence
ment. Parlons tout d’abord process, respect. Ces valeurs ont toutes pour
je sais c’est iconoclaste, mais le choix objectifs d'améliorer l'équipe et de
et la bonne utilisation d’un langage de développer le bon produit.
modélisation et de spécifications basé L’espace par tagé est un facteur
sur UML et centré sur l’architecture important, il peut être physique ou vir-
permettent une définition et une ges- tuel suivant la répartition des activités
tion rigoureuse des cas d’utilisation et entre différentes localisations, la
exigences. Le critère de la force est plate-forme collaborative prend tout
alors illustré. son sens en termes de référentiels et apporter ainsi aux utilisateurs la
Poursuivons par la dimension collabo- techniques, données, normes… garantie de disposer des fonctionnali-
ration, la méthode Scrum devient Dans ces conditions, le mode de pro- tés indispensables. [Fig.3]
incontournable en focalisant l’en- duction distribué et/ou centralisé Pour l’équipe de développement, cha-
semble des équipes MOA/MOE sur la est alors complètement pris en comp- cun, même si il n’est pas directement
poursuite des objectifs, avec en pre- te et organisé ; la réalisation d’un pro- impliqué, doit être à tout moment
mier le respect du délai pour les fonc- duit sur des lieux géographiques informé des activités en cours. De ce
eXtreme Programming :
les fondamentaux du développeur agile
L'eXtreme Programming est la première méthode de développement agile appliquée
en France. Contrairement à Scrum, elle prescrit des pratiques d'ingénierie logicielle.
Nous allons présenter ici les plus marquantes.
L
es experts de Scrum l'affirment :
les pratiques d'ingénierie
décrites dans l'eXtreme Pro-
gramming sont indispensables pour
réussir de manière durable un projet
de développement incrémental, en
voici quelques-unes :
Tests automatisés : comment s'assu-
rer que le logiciel livré à chaque fin
d'itération fonctionne correctement ?
© Emmanuel Chenu
Il n'est pas question de tester à la
main toutes les fonctions du logiciel à
chaque fin d'itération : cela finirait par
prendre plus de temps de tester que
de développer, jusqu'à un moment où
la totalité du temps de l'itération ne
suffirait plus pour tester suffisam-
ment l'application. La solution préconi-
sée par l'eXtreme Programming est Développement Piloté par loppeur; Orange Business Services -
d'automatiser autant de tests que les Tests (ou TDD) Online Multimedia) : on se place en
possible, et pour tous les types de Pour chaque fonctionnalité que je premier lieu comme utilisateur des
tests. Pour chaque type, il existe des veux ajouter dans le code : API en cours de développement, et le
outils en facilitant l'automatisation, 1) je code le test (automatisé) qui design n'est plus une phase préalable
par exemple : les tests unitaires (Xunit montrera que j'ai réussi, au développement : il émerge en per-
:: junit, nunit...); les tests d'interface 2) je fais le développement le plus manence pendant le développement.
web (Selenium, webdriver...), ou enco- simple possible pour que ce test Au début, on a l'impression de perdre
re les spécifications exécutables (fit- passe, beaucoup de temps C'est difficile de
nesse, greenpepper). Ainsi, le 3) je remanie (refactoring) le code définir la suite de tests qui permettra
développement et le paramétrage du pour réduire la duplication. de coder ce qu'on a en tête, et même
harnais de test deviennent partie inté- Appliquer systématiquement et rigou- nommer un test semble fastidieux.
grante du travail de développement. reusement ce principe permet de Puis on perçoit graduellement les
Intégration continue : le système en produire du code couvert par des bénéfices, on modifie sa tournure de
cours de construction est intégré en tests automatisés. Mais les dévelop- développement, et on comprend que
permanence. En pratique, les peurs témoignent que les bénéfices passer plus de la moitié du temps de
sources sont compilées, les tests vont au delà - " le TDD pousse à bien codage sur les tests est efficace pour
déroulés automatiquement, aussi fré- coder " (Laurent Cobos, développeur le projet. " Si on arrête le TDD, je quit-
quemment que possible. Ainsi, l'équi- chez Pyxis Technologies France) : des te l’entreprise ! " (Jean-Philippe
pe est informée très rapidement dès principes tels que le découplage, la Caruana, développeur, Orange).
qu'une erreur s’introduit dans le cohérence forte, où la responsabilité
code, et les corrections rendues plus unique sont encouragés, les API Remaniement
faciles puisque les modifications sont développées sont faciles à utiliser, le ou refactoring
encore " fraîches ". On peut s'appuyer code et les tests sont expressifs, Remanier le code, c'est le modifier
sur des outils comme Hudson, Conti- faciles à lire et à comprendre, auto- sans en changer les fonctionnalités,
nuum ou Bamboo pour mettre en documentés. " l'approche du design dans l'objectif de le rendre plus facile
place un tel mécanisme. est inversée " (Bruno Thomas, déve- à comprendre et à faire évoluer. L'eX-
treme Programming encourage des plus tout seul face au problème pourra évoluer longtemps, tout en
activités de remaniements fré- devant la machine " (Jean-Philippe apportant régulièrement de la valeur
quentes, à plusieurs échelles (métho- Caruana), " quand on code, on peut à ses utilisateurs.
de, objet, composant, système s'égarer, l'autre, c'est ta boussole "
complet), y compris dans le harnais (Thomas Dufourd), " coder à 2, c'est Un art martial
de test lui-même. C'est une hygiène à diviser le nombre d'erreurs par 5 " du développement ?
respecter pour lutter contre l'entro- (Radhouane Gourchene). L'eXtreme programming est une
pie dans le code. Quelques conseils pratiques : faire méthode agile complète, applicable
Sans remaniement, le même cycle se circuler fréquemment les individus sans référence à Scrum. Elle prescrit
reproduit toujours. Au fur et à mesu- dans les binômes, jouer au ping pong en tout 13 pratiques et s'appuie sur
re que le logiciel évolue, il devient si (" j'écris un test, tu le fais passer, tu le respect de 4 valeurs. Pour chaque
gros et si complexe qu'il s'écroule écris un test, je le fais passer, j'écris individu, comme pour l'équipe dans
sous son propre poids : il est extrê- un test... "), ne pas hésiter à se sépa- son ensemble, les adopter demande
mement long pour tout nouvel arri- rer quand être en face à face n'est courage et persévérance.
vant d'en comprendre la structure; et pas efficace (pour les activités explo- Au tout début, cela peut être un choc,
très coûteux de le faire évoluer pour ratoires par exemple, explorer en les habitudes sont bousculées, les
répondre aux nouvelles demandes de parallèle et faire le point régulière- automatismes remis en question. Les
ses utilisateurs. A ce stade, on décide ment). Pour certains, binômer, c'est premières semaines peuvent être dif-
de lancer une refonte " from scratch ", agréable et plutôt naturel, cela per- ficiles, avec l'impression que le projet
ou bien le logiciel finit par être oublié met de faire connaissance, et même piétine. Après le premier apprentissa-
au profit d'un concurrent plus jeune et les tâches les plus ingrates devien- ge, les résultats apparaissent. Enfin,
plus performant. nent motivantes. Mais ce n'est pas l'investissement s'avère payant, de
Grâce à un refactoring régulier et sys- toujours facile, surtout quand on ne manière durable : le logiciel développé
tématique, on peut enfin faire la pro- connait pas son binôme : au début, continue à évoluer à un rythme quasi
messe que le logiciel pourra vivre c'est un bras de fer, on veut démon- constant que l'équipe peut soutenir
pendant 10 ou 20 ans. trer sa compétence et cacher ses indéfiniment; les développeurs pren-
Ce sont les tests automatisés et l'in- lacunes, on a peur de ralentir l'autre. nent plaisir à travailler ensemble et
tégration continue qui le rendent pos- Puis on apprend à se faire confiance, sont fiers du code qu'ils produisent.
sible : on n'a plus peur de " casser " le à exposer ses faiblesses et à s'ap- Pour chaque individu, ça passe ou ça
code quand on y touche. Si cela arri- puyer sur les forces de l'autre, et le casse : des développeurs rejettent en
ve, un test automatique échoue, travail devient un enrichissement bloc certaines pratiques. Notam-
l'alerte est levée immédiatement, et il mutuel. ment, le binômage ne convient pas à
est encore facile de revenir en arriè- Binômer rend l'activité de développe- certains tempéraments. En revanche,
re. Le remaniement est l'activité la ment très intense : face à un problè- ceux qui ont adopté l'eXtreme Pro-
plus complexe du développement, me dif ficile, pas d'échappatoire gramming ne jurent que par lui : " J'ai
mais c'est aussi la plus gratifiante. possible, pas question de l'éviter, ni l'impression d'avoir changé de métier
" Le refactoring, c'est la récompense " de faire des compromis sur la qualité. " (Thomas Dufourd) " XP m'a redonné
(Antoine Contal, coach xp, Orange). Quand on est deux, on est plus disci- le goût du développement" (Jean-Phi-
pliné, et le regard de l'autre pousse à lippe Caruana), " c'est l'avenir du
Le binômage donner le meilleur de soi-même, en développement " (Bruno Thomas).
ou pair programming permanence. A la fin de la journée, on
Le binômage, c'est la plupart du est épuisé. Heureusement, l'eXtreme Ressources
temps, un clavier, un écran, et 2 Programming engage par ailleurs à Test Driven Development: By Example
Kent Beck
développeurs derrière! Le travail de travailler à un rythme soutenable
Refactoring
développement devient un dialogue indéfiniment : les heures supplémen-
Martin Fowler
permanent. Le bénéfice immédiat est taires doivent rester exceptionnelles.
L'Extreme Programming - Avec deux
la qualité du code produit, et la diffu- études de cas, 2002
sion des compétences dans l'équipe. Pour quel projet ? Jean-Louis Bénard, Laurent Bossavit,
Les développeurs qui ont adopté L'eXtreme Programming est un mode Régis Médina et Dominic Williams
cette pratique ne tarissent pas de développement demandant
d'éloges : " Chaque fois que je binô- rigueur et discipline. Il est recomman-
me, j'apprends " (Radhouane Gour- dé pour les développements logiciels
■ Raphaël Pierquin
chene; développeur, Orange), " Cela réalisés en équipes colocalisées, où la
coach d'équipes de
m'a permis de m'intégrer rapidement qualité du code (en particulier son développement chez
au projet " (Laurent Cobos), " Tu évolutivité à long terme) est la préoc- Pyxis Technologies
nivelles la compétence de l'équipe par cupation première. C'est cette qualité France
rpierquin@pyxis-tech.com
le haut " (Bruno Thomas), " Tu n'es qui permet de s'assurer que le logiciel
Avis d’expert
Standardiser la résolution de
problèmes dans une équipe agile
Jeff Sutherland a créé la première équipe Scrum en mettant en
oeuvre un article écrit par deux japonais. Des démarches Lean
venues du Japon, nous pouvons tirer des outils pour aider à améliorer
la qualité dans une équipe agile. Voyons comment une équipe
XP/Scrum utilise un de ces outils pour la résolution de problèmes.
Soyez prêts logiciels. SOA est une nouvelle façon de faire qui s’appuie sur un
ensemble de technologies existantes : UML, J2EE, .Net, XML, etc.
Maîtriser SOA implique de maîtriser ces technologies pour les associer
efficacement au sein d’une nouvelle approche.
pour les nouvelles architectures SOFTEAM Formation, forte de son expérience en Méthodologie, Architecture et
Développement, a construit un cursus complet de formation SOA qui vous permet
MDA Architecture
Patterns Développement d’applications JEE 5 Back End avec EJB 3 . . . . . . . . . . . . . . . . . . . . . . . 3 j
ESB
SOA Maîtrise du framework (Struts / JSF / Spring / Hibernate) . . . . . . . . . . . . . . . . . . . . . . . . .
Développement d’applications .NET / C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Développement d’applications RIA avec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
2
j
j
j
Java .NET Web 2.
0 (Ajax / Dojo / GWT / FLEX3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
EAI XML
Frameworks Convergence SOA, UML2, BPMN, EA
Web services
J2EE Modélisation EA, BPMN, SOA avec Objecteering SOA Solution . . . . . . . . . . . . . . . . . 2 j
Analyse et Conception UML2 avec Objecteering Modeler . . . . . . . . . . . . . . . . . . . . . . 5 j
Expression de besoins en UML2 avec Objecteering Scope Manager . . . . . . . . . . . . . 1 j
Architecture MDA avec Objecteering MDA Modeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Génération de code Java, .NET C#, C++ avec Objecteering Developer . . . . . . . . . . 1 j
Vendre SCRUM
à une équipe en cycle V
Passer à la méthode SCRUM pour une équipe de développement de
logiciel appliquant une méthode classique (de type cycle en V) est un
challenge en vue d'une bien meilleure efficacité, mais nécessite de grands
changements organisationnels et une remise en question des pratiques de
l'équipe. Nous présentons dans cet article un bref résumé de la méthode,
ses avantages, ses difficultés, et quelques recettes simples pour aider à
franchir le pas.
P
our rappel, la méthode de • D’optimiser le travail du groupe: de les sensibiliser sur les enjeux et
travail doit être adaptée à la faire ce qui est nécessaire et suffi- réalités pratiques auxquels il est
réalisation d’un nouveau pro- sant pour l’utilisateur, favoriser le nécessaire de faire face dans le
duit complexe pour lequel il n'est pas partage des savoirs et des compé- cadre du développement de logiciel.
possible de faire des spécifications tences et mettre en avant les com-
fonctionnelles et techniques détaillées pétences de chacun. Quels sont les principes
et exhaustives. Les tâches sont • D’établir un dialogue de qualité avec de scrum ?
découvertes progressivement, les l’utilisateur: comprendre ce qu’il dit, lls sont simples.
changements sont la norme et doi- parler un langage qu’il comprend et • Les personnes qui interviennent sur
vent être considérés comme une l’impliquer dans la réussite du projet le projet sont réparties en seule-
opportunité: un besoin, une solution • De s’organiser en s’appuyant sur ment 3 rôles :
technique qui n’ont pas été identifiés des estimations fiables: un plan pré- - Le Product Owner / directeur de
lors du lancement du projet, mais qui cis, mais faux, est plus qu’inutile: il produit : il représente les utilisa-
sont pertinents, doivent être pris en est dangereux! Il est important d’es- teurs, définit et priorise les
compte. A l’inverse, un choix non timer la qualité de l’information dont demandes produit.
adapté doit être remis en question et on dispose. - L’équipe SCRUM: avec moins de 7
retiré si nécessaire. personnes regroupant tous les
Ainsi, il importe que la méthode de Les méthodes de travail qui respec- rôles traditionnels (architecte, déve-
travail permette à l’équipe de s’adap- tent ce besoin de grande réactivité loppeur, testeur, administrateur).
ter aux changements et imprévus, sont appelées les méthodes agiles. Cette équipe développe le produit et
qu’ils soient techniques, fonctionnels Le " manifeste agile " formalise la se gère en toute autonomie.
ou organisationnels (par exemple un notion d’agilité en la déclinant sous la - Le Scrum master, qui n’est pas le
changement de la constitution de forme de 4 valeurs et de 12 prin- chef de projet mais qui a un rôle de
l’équipe). Il est donc nécessaire d’utili- cipes. Il est intéressant de présenter coach: sa mission est de tout
ser des outils et une organisation qui et parcourir avec les membres de mettre en oeuvre pour que l'équipe
Gestion des
besoins et des permettent : l’équipe ces valeurs et principes afin travaille dans de bonnes conditions
tâches. et se concentre sur l'objectif du
projet.
Fig.1
• Le Product BackLog (cf figure 1)
liste les besoins produits. Il est géré
par le Product Owner mais est par-
tagé avec l’ensemble du groupe. Les
besoins sont priorisés et l’accent
est mis sur les besoins les plus prio-
ritaires et devant être adressés à
court terme. Ils sont associés à des
critères d’acceptance qui permet-
tent de définir, sans ambiguité, les
critères qui permettront de considé-
rer que le besoin est couvert.
d'intégration continue et le Test Dri- la nouveauté. Elles ne travaillent pas pe a un historique de cycle en V. Par
ven Development (TDD) exclusivement sur leur domaine de exemple, la non affectation de tâches
• Initialiser un product backlog en se compétence ou selon leurs aspira- lors du sprint planning est sujet à dis-
concentrant sur les besoins haute- tions: par exemple, un développeur cussion. Si, malgré une explication, la
ment prioritaires. Mettre l'accent va être amené à contribuer aux majorité n'est pas convaincue de l'in-
sur les critères d'acceptance de tests pour atteindre l'objectif du térêt de cette approche, il est pos-
chaque besoin. Le découpage est sprint. Son rôle ne se limite donc sible dans un premier temps
un exercice difficile et pour lequel il plus simplement à produire du code. d'affecter les tâches lors du sprint
est impor tant de consacrer du • Chaque membre n'a pas une liste planning. On démontre ainsi à l'équi-
temps puisque c'est à partir de ce de tâches affectées mais prend des pe qu'en se focalisant sur les objectifs
découpage que l'équipe va travailler. tâches parmi les plus prioritaires du sprint, le turn over des tâches est
• Se poser la question de la nécessité tout au long du sprint. Toutefois, il tel qu'il n'y a pas d'intérêt à les assi-
d'opérations faites habituellement existe des limites puisque certaines gner. Après quelques sprints, il est
en mode cycle en V tant d'un point tâches sont liées à un corps de plus facile de les convaincre d'es-
de vue technique qu'organisationnel métier et ne peuvent être réalisées sayer (et d'adopter :-) ) le fait de ne
(nécessité d'un rapport, d'un docu- par n’impor te quel membre de pas affecter les tâches.
ment...). l’équipe. C’est le cas, par exemple, Il est important d’essayer de nou-
• Si le projet est en cours et a com- de certaines tâches de déploiement velles pratiques et de se faire un juge-
mencé en mode cycle en V, arrêter en production. ment après les avoir testées:
toutes les nouvelles tâches de déve- • Les membres de l'équipe qui avaient l'utilisation du tableau scrum (qui
loppement et de spécifications et un rôle décisionnel (notamment le contient l'objectif du sprint, les tâches
terminer en testant et intégrant les chef de projet) ou qui avaient obtenu à faire, en cours et terminées) et du
fonctionnalités commencées. un " titre " convoité depuis long- planning poker pour faire des estima-
temps peuvent ressentir un senti- tions font partie des pratiques les
Les difficultés ment de frustration. plus courantes pour appliquer rapide-
qui peuvent être • A l'inverse, les personnes qui ne sont ment les valeurs et règles de
rencontrées lors pas habituées à se prononcer auront SCRUM.
de la mise en place besoin d'une phase d'adaptation. Pour conclure, bien que la méthode
de scrum De ce fait, du temps et de l'adaptation SCRUM réponde à des règles relati-
SCRUM remet en question : à plusieurs niveaux peuvent être vement précises, il est important de
La façon de travailler de l’équipe : nécessaires pour obtenir une cohé- bien garder à l’esprit que chaque
• Les fonctionnalités doivent être sion optimale de l'équipe. équipe, chaque projet et chaque
exprimées sous forme de besoins Pour passer outre ces difficultés, le contexte sont différents. La solution
qui ont de la valeur pour l’utilisateur rôle du scrum master est essentiel. Il retenue sur un projet n’est pas forcé-
et qui sont adressables en un doit pour cela : ment celle qui doit être appliquée sur
sprint: trouver le bon niveau de gra- • Etre à l'écoute de l'équipe et attentif tout autre projet. Le cadre de
nularité et le bon découpage aux obstacles rencontrés qui peu- SCRUM est suffisamment large pour
demande de la pratique. vent être de nature très variée permettre à chaque équipe de trou-
• L'équipe doit être capable de déli- (conflits internes, problèmes d'infra- ver l'organisation et les solutions adé-
vrer des fonctionnalités avec un structure, administratifs...), quates.
coût de tests, de packaging et de • Faire appliquer les valeurs et les
déploiement acceptables. La mise pratiques de SCRUM,
en place de l'outillage peut nécessi- • Superviser l’activité des membres, ■ Laurent Laslaz
ter un effort important pour des • Communiquer au client l'avance- Scrum Master
projets existants ayant peu ou pas ment et les problèmes, Objet Direct
de tests automatisés ou des procé- • Protéger l’équipe de tous les élé-
dures de déploiement manuelles et ments perturbateurs externes, A propos de Objet Direct
fastidieuses. • Encourager la coopération entre les Objet Direct (filiale de Homsys Group) déve-
• Des critères d'acceptance doivent personnes, loppe depuis plus de 10 ans son expertise
dans la modélisation, les architectures objet
être définis avant d'adresser le • Aider le product owner à sélection-
(Java, .NET, RIA) et les Méthodes Agiles,
besoin. L'équipe doit s'habituer à ner les fonctionnalités qui ont la pour accompagner ses clients dans le pilo-
terminer (en accord avec les cri- plus-value maximale. tage de leurs projets, depuis la conception
tères d'acceptance définis) les fonc- jusqu’au déploiement des applications, et
tionnalités adressées avant d'en Quelles solutions peuvent optimiser leurs systèmes d’information,
leurs méthodes de développement logiciel et
commencer d'autres. être mises en place ? leurs processus métiers.
L'organisation de l'équipe : Il peut être nécessaire de procéder
• Il faut faire accepter aux personnes par étapes, notamment lorsque l'équi- www.objetdirect.com
P
our démarrer un projet agile de l’équipe de développement pour ting, le TDD, le " Kanban ", etc.) est
ou pour " rendre agile ” un chaque nouvelle itération. Il est bien essentiel.
projet en cours de dévelop- plus facile d’intégrer la nécessité de Adopter ces nouvelles pratiques pour
pement, il faut agir sur les mêmes trouver le profil adéquat comme pré- un nouveau projet est " naturel ". En
axes : organisation spécifique de requis pour un démarrage, que effet, il est plus facile de définir des
l’équipe, mise en place de l’usine de d’identifier ce profil dans un dispositif règles du jeu sur " une feuille blanche "
développement nécessaire pour les avec des habitudes de travail instal- que de changer les habitudes et le
tests, gestion de la configuration de lées. Un mauvais casting du Product processus de gestion d’un projet en
travail itératif, avec comme objectif Owner peut compromettre un projet cours. Plus le projet est important et
l’amélioration continue. Définir une Agile. Ce risque est d’autant plus le processus mature, plus il sera diffi-
organisation en début de projet pré- important dans le cas de l’agilisation cile de changer. A ce moment, une
sente bien des avantages: si l’équipe d’un projet existant. question s’impose: pourquoi adopter
choisie connaît les principes de l’Agili- Le Product Owner est le responsable le mode de fonctionnement agile pour
té elle fonctionnera facilement en et le principal contributeur du conte- un projet déjà démarré ? Souvent la
mode agile (SCRUM, XP, Lean ou nu du backlog. Ce terme SCRUM est réponse est liée au dysfonctionne-
autre mixage opportun de méthodes). une liste non hiérarchisée des fonc- ment du groupe, un manque de visibi-
Si elle n’est pas encore à l’aise avec tionnalités simples (" stories "). L’équi- lité sur l’avancement, une motivation
les pratiques agiles, elle sera motivée pe de développement, qui interprète faible des équipes de développement.
d’explorer des nouvelles voies qui et décline techniquement les fonc- Ces dernières subissent une pression
–selon les règles de l’art de l’agilité- tionnalités, alimente aussi le backlog. selon des urgences qu’elles ne com-
devraient valoriser son travail. Sa constitution est consentie comme prennent pas. Si le mode urgence est
De la même façon, l’adoption des un élément d’entrée pour le démarra- instauré, la communication entre les
méthodes agiles en cours de route, ge d’un projet agile, et peut être per- divers acteurs du projet censés tra-
est globalement perçue par les çue comme une surcharge de travail vailler ensemble est faible, voir inexis-
équipes de développement comme bureaucratique sans bénéfice immé- tante.
une aide à l’amélioration. Sur l’axe diat dans le cas de l’adoption de l’agili-
organisationnel, la difficulté la plus té en cours de route. Dans ce 2e Le Planning Game : un
fréquente en cas de mise en place de cas, le backlog risque de ne pas avoir outil de responsabilisation
l’Agilité sur un projet déjà démarré, assez de profondeur et de ne pas Il s’agit d’un instrument de régularisa-
est l’intégration des profils préférant donner assez de visibilité sur l’avance- tion du r ythme de réalisation. Il
travailler en solitaire. ment du projet. De leur côté, les consiste à définir la liste des fonction-
équipes de développement peuvent nalités à développer pendant la pro-
De la " MOA " au perdre en motivation et confiance, chaine itération (le " sprint backlog ").
" Product Owner " car elles ne peuvent pas se projeter Elle est évaluée sur la base d’une
et des spécifications suffisamment dans l’avenir. charge de travail soutenable, définie
fonctionnelles au backlog par l’ensemble de l’équipe, et mesu-
Un acteur majeur dans la dynamique Le rythme itératif rée en " complexité ". Le système de
Agile est le représentant des utilisa- C’est la pierre angulaire des projets planification collaborative responsabi-
teurs (Product Owner). C’est lui qui agiles. Le respect de ce rythme et lise l’équipe de développement et la
est mandaté pour définir les priorités des bonnes pratiques énoncées par motive davantage à tenir un engage-
métier et remplir la " feuille de route " les méthodes agiles (la stand-up mee- ment qu’elle a pris elle-même. Au
contraire, le planning estimé et impo- position divers outils open source à (toute l’équipe se met autour de la
sé par le management est souvent cet effet : FitNesse, Selenium, Sahi, table pour programmer), les tests
subi par l’équipe de développement, Greenpepper, etc. Les serveurs d’in- croisés (les membres de l’équipe tes-
qui se désolidarise des objectifs qu’el- tégration continue peuvent aujour- tent réciproquement le code) sont
le estime loin de la réalité du terrain. d’hui intégrer des outils des pratiques qui s’appuient sur la
Adoptée en début de projet ou inté- d’automatisation de la recette, mais progression par le retour des pairs.
grée dans un projet en cours, cette pour cela il faut tenir compte que la Autres pratiques importantes qui faci-
pratique est appréciée par les déve- machine de tests automatisés peut litent l’échange : les points d’analyse
loppeurs, qui ont l’opportunité nouvel- être utilisée seulement si l’architectu- commune comme le " Stand-up Mee-
le de remonter régulièrement les re de l’application est compatible ting ", mise au point quotidienne d’une
retours " du terrain ". La mécanique avec le codage des tests unitaires. durée de 10 minutes environ, et la
met en évidence la capacité réelle de Pour un projet à concevoir, il est pro- " rétrospective ", réunion régulière
production. bable qu’il y a peu ou pas de (par exemple en fin de chaque itéra-
contraintes d’architecture. Pour un tion) qui permet d’analyser le travail
L’usine de développement, projet en déroulement, la revue du d’équipe et d’identifier les axes d’amé-
les tests et la qualité code, l’ajout des tests unitaires, et lioration. Bien sûr, ces activités
logicielle l’installation d’une nouvelle configura- demandent un investissement de
Les principes de l’Agilité s’appuient tion de développement, peuvent temps que parfois ni l’équipe ni les
sur des pratiques (le TDD, l’intégra- s’avérer complexes. Selon le contexte managers ne sont prêts à faire, mais
tion continue, etc.) à outiller. Pour réel du projet, les réponses aux ques- dont à l’usage, l’ensemble des
cela, l’installation de l’usine de déve- tions suivantes sont déterminantes : acteurs reconnaît les bénéfices. Dans
loppement est une action clé du l’application a-t-elle été conçue pour le cas d’un projet qui démarre, définir
démarrage d’un projet. être testable ? Le " product owner " a- ce type de fonctionnement fait partie
Qu’est ce que la " Software Factory " t-il la possibilité d’assumer la définition du " plan d’assurance qualité " du pro-
doit inclure ? Tout d’abord il faut défi- des tests fonctionnels automatiques ? jet et il sera accepté, même si la réti-
nir la solution d’intégration continue L’avancement du projet permet-t-il cence sur le " temps passé en
pour automatiser le build. Le monde d’absorber l’investissement nécessai- réunion " par l’équipe de développe-
Unix le fait depuis très longtemps, la re pour le développement de tests de ment reste présente. A l’opposé, le
communauté Java a développé Ant et tout type ? Plus le projet est avancé, changement d’un fonctionnement
celle .net, Nant et MSBuild. L’automa- plus l’effort de " refactoring " du code connu, impliquant la participation à
tisation permet d’implémenter deux existant - le remboursement de la des " nouvelles réunions ", est plus dif-
pratiques de l’eXtreme Programming : " dette technique "- risque d’être ficile à assumer. L’équipe et les lea-
le " commit" quotidien et la construc- grand. Parfois l’écart entre l’existant ders ne sont pas prêts à renoncer au
tion d’un build " auto-testable ". L’es- et la cible est tellement important que mode de travail habituel, il a un côté
sor du TDD (test driven development) le " refactoring " devient plus coûteux rassurant, car connu, même si un
a permis de créer des techniques que la refonte de l’application. Dans ce accord existe sur le besoin d’ac-
d’intégration des tests unitaires dans cas extrême, devant un logiciel vrai- croître son efficacité. Pour ces rai-
le code. Les serveurs d’intégration semblablement non maintenable, une sons, il semble judicieux de rendre
peuvent gérer les tests automatisés revue des objectifs s’impose. agile un projet en mode " échantillon "
du monde Java (JUnunit) et .net plutôt qu’en mode " Big-bang ". Autre-
(NUnit), la construction du build com- Le travail collaboratif ment, un phénomène de rejet peut
prend l’exécution de ces tests. Parmi et l’amélioration continue s’installer et mettre en péril la bascu-
les plates-formes d’intégration conti- La mise en œuvre des pratiques liées le Agile.
nue les plus utilisées, citons Hudson, à l’amélioration continue est une
Cruise Control, Continuum. Dans la autre action clé d’un projet Agile.
démarche agile, le contrôle de la qua- L’Agilité s’appuie massivement sur
■ Oana Juncu
lité logicielle passe aussi par l’automa- " l’intelligence du groupe ". La " pro- Direction
tisation des tests fonctionnels grammation en binôme " (coder à de Projets - SFEIR
(recette). La " XU family " met à dis- deux), la " programmation par l’équipe " www.sfeir.com
Abonnez-vous à e -
2,7 € seulement par numéro au format PDF (pour le monde entier)
S
a simplicité et son intégration avec la plate-forme .Net Le fichier App.xaml est généralement utilisé pour déclarer des res-
représentent les principales raisons de son adoption par un sources, comme les pinceaux (Brush) et les styles qui sont partagés
grand nombre de développeurs à travers le monde. De entre les composantes de l'application. La classe code-behind du
plus, on ne manque pas d’outils, il y a des environnements adaptés fichier App.xaml peut être utilisée pour gérer les événements de
aux besoins spécifiques des développeurs et des designers, et des niveau application - comme Application_Startup, Application_Exit et
mécanismes de collaboration fluides. Application_UnhandledException.
Silverlight 2.0 partage la technologie de WPF en se basant sur le Après compilation, le projet est transformé en fichiers " .xap " asso-
langage XAML " Extensive Application Markup Language ". Le langa- ciés à des assemblies .Net standard. Les fichiers " .xap " utilisent
ge XAML est un dialecte XML qui peut être utilisé pour spécifier de l’algorithme de compression zip standard pour réduire la taille de
manière déclarative l'interface utilisateur d'une application Silverlight téléchargement de client.
ou WPF. XAML peut également servir plus largement pour repré- Pour héberger et exécuter une application Silverlight 2, vous pouvez
senter des objets .NET. ajouter une balise <object> dans toute page de HTML standard qui
Silverlight reprend aussi le modèle ASP.Net en intégrant les fichiers pointe vers le fichier .xap. Ce fichier sera alors automatiquement
de classe " Code-behind " pour gérer la séparation du code et la pré- téléchargé et instancié par le plugin Silverlight du navigateur :
sentation. Ces fichiers peuvent être écrits en plusieurs langages
dont C#, VB.NET, Python et Ruby.
[ ]
44-55 20/05/2009 12:00 Page 45
(listing A) (listing C)
(listing D)
Et le résultat :
(listing B)
[ ]
44-55 20/05/2009 12:00 Page 46
Expression Web 3 Super Preview : un avez installé une version plus récente
Mix 09 ne nous aura pas beaucoup afficheur multi-navigateur d’Internet Explorer sur votre machine
plus éclairés sur les nouveautés qui L’une des principales nouveautés -puisque celle-ci fonctionne comme
seront intégrées dans la prochaine mise en avant par Microsoft sur la une mise à jour Windows-, vous avez
mouture d’Expression Web. On peut prochaine version d’Expression Web désormais la possibilité avec ce nou-
néanmoins s’attendre à des améliora- est sans aucun doute Super Preview. vel outil d’avoir un aperçu de votre
tions sur le support des CSS dans la Pour expliquer rapidement cette nou- site Internet depuis Super Preview
fenêtre de Design. Silverlight 2 et velle fonctionnalité incluse dans sous le moteur de rendu d’Internet
MVC devraient venir aussi s’ajouter à Expression Web 3, on pourrait dire Explorer 6.
la liste des technologies supportées grossièrement qu’il s’agit d’un affi- Bien sûr pour l’accompagner, vous
par Expression Web. Il a également cheur multi-navigateur de site Inter- pouvez intégrer d’autres navigateurs
été dit que le support de systèmes de net, accompagné de fonctions de Web dans Super Preview [Fig.2]. Dans
gestion de versions comme Microsoft débogage très utiles. Super Preview un premier temps, vous avez à dispo-
Visual SourceSafe, ou plutôt Team ne vient pas remplacer la fenêtre de sition les navigateurs installés sur
Foundation Server, n’était pas prévu à Design d’Expression Web, mais c’est votre ordinateur (Internet Explorer 7
l’heure actuelle dans la version 3 d’Ex- une fonctionnalité qui peut être utili- ou 8, Firefox et Safari). Mais il est
pression Web. L’une des raisons étant sée en parallèle avec celle-ci. Exami- également possible de pouvoir relier
que la priorité a été donnée au sup- nons donc plus précisément ce que Super Preview avec des navigateurs
port des technologies citées plus haut. nous pourrons faire avec [Fig.1]. présents sur d’autres machines -
Mais rien n’empêche Microsoft de comme un Mac- pour bénéficier de
revenir sur certains éléments avant sa Aperçus sous divers navi- leur aperçu dans celui-ci. La naviga-
sortie en version finale. Contre toute gateurs locaux ou distants tion entre ces prévisualisations se fait
attente et malgré le fait qu’ils aient été Tout d’abord, comme dit plus haut, d’une manière instantanée après le
fortement sous-entendus lors des ses- celui-ci permet d’avoir un affichage chargement de la page du site Inter-
sions, ce n’est pas ce genre de nou- des pages d’un site Internet sous dif- net. Il est possible aussi de faire une
veautés qui ont été dévoilées lors de férents moteurs de navigateur Web. comparaison avec une image de votre
l’évènement de Las Vegas. Outre le fait Une des principales qualités de Super site Internet, pour correspondre au
de revenir sur des possibilités déjà Preview est d’embarquer avec lui une mieux avec votre maquette gra-
existantes (affichage simplifié des version portable d’Internet Explorer 6. phique.
CSS, utilisation de Seadragon Ajax En effet, cela permet de bénéficier
dans votre site Web, etc.), Microsoft des éléments de débogage que pro- Quelques outils en plus
a plutôt insisté sur un nouvel outil qui pose Super Preview pour les appli- Super Preview met également à votre
fera son apparition dans Expression quer sur un site Internet sous disposition quelques éléments de
Web 3 : SuperPreview. Internet Explorer 6. Donc, si vous débogage. Pas de quoi le comparer
équitablement avec Firebug ou le rer 6 présent dans Super Preview. SketchFlow : Donner vie
débogueur intégré dans Internet Par exemple, cela ne permet pas de à vos concepts et vos
Explorer 8, mais il reprend néan- traiter les PNG transparents avec prototypes
moins les bases de ces derniers. La DXImageTransform. On peut égale- SketchFlow vous permet avec une
sélection d’éléments, pour les compa- ment noter que certains éléments seule et même application intégrée à
rer entre eux, peut se faire directe- HTML, comme les balises object, Expression Blend 3 de réaliser vos
ment depuis les prévisualisations ou embed et applet, peuvent ne pas être maquettages ou prototypages. En
encore depuis un arbre DOM du site affichés avec les bonnes dimensions effet, ce nouvel outil permet aux desi-
Internet visualisé [Fig.3]. si IE8 n'est pas installé. Une autre uti- gners de dessiner des esquisses, les
En effet, Super Preview ne fait pas lisation de Super Preview, qui aurait mettre en forme, les simuler, leur
qu’afficher une prévisualisation, il en pu être d’une très grande utilité, donner vie pour enfin les déployer, et
reprend aussi les informations géné- aurait été le support de moteurs de cela d’une façon beaucoup plus inter-
rales HTML. En sélectionnant un élé- rendu de messagerie mail comme active que via PowerPoint ou d’autres
ment sur la prévisualisation, on Outlook 2007. méthodes.
retrouve des informations comme : En effet, Microsoft n’utilise plus le Avec SketchFlow vous avez la possibili-
son type de balise, sa position, ses moteur d’Internet Explorer pour affi- té de donner de l’interactivité à vos
dimensions, sa classe CSS ou son ID cher les mails HTML dans Outlook croquis de prototypes car celui-ci per-
directement depuis la barre d’état. 2007, ce qui peut générer quelques met à tout moment d’y ajouter des
Parmi ces outils, on peut noter la pos- soucis d’affichage avec une structure contrôles WPF. Pour faire simple, il
sibilité d’ajouter une règle autour des HTML/CSS classique. Il faut cepen- permet la même chose que ce que
visualisations ou encore d’ajouter des dant souligner que cette version est vous pouvez faire dans un projet WPF
repères de la même façon que sur une Bêta et que des modifications normal. Et afin de rester dans l’esprit
Photoshop ou Expression Design. sont encore à venir. Il s’agit là de de prototype et de maquettage, ces
SuperPreview nous donne la possibili- quelques limitations, mais qui ne contrôles ont droit à une apparence
té de visualiser notre site Internet devraient pas empêcher Super Pre- spécifique se rapprochant d’une
sous différentes méthodes. Cela peut view de devenir un outil aussi incon- esquisse [Fig.4]. Cela permet de se
se faire côte à côte, l’une en-dessous tournable que Firebug ou encore le focaliser principalement sur le fonc-
de l’autre ou via une superposition débogueur d’Internet Explorer 8. tionnement de votre application plutôt
des prévisualisations. que de s’attarder sur des détails gra-
Expression Blend 3 phiques. Néanmoins, il vous est à
Quelques limitations Les nouveautés annoncées pour tout moment possible de basculer
également Blend sont, quant à elles, beaucoup d’apparence depuis les propriétés de
Dans cette version bêta de Super plus nombreuses que pour Expres- vos contrôles.
Preview, on sent tout de même qu’il sion Web 3. Outre une interface légè- Vos esquisses peuvent être lancées
reste encore beaucoup à faire pour la rement revue mais qui ne changera comme une application WPF depuis
version finale. en rien vos habitudes, on peut souli- le SketchFlow Player [Fig.5]. Ce lecteur,
Comme indiqué précédemment, seuls gner la présence d’éléments comme inclus automatiquement dans votre
Firefox et Safari sont pris en compte le support de Visual Studio Team projet de maquettage, donne la possi-
par Super Preview. Qu’en est-il alors Foundation Server ou encore l’ajout bilité à d’autres personnes de navi-
d’Opera ou encore de Chrome ? de nouveaux éditeurs XAML, C# et guer facilement entre vos différents
Microsoft promet néanmoins qu’ils VB, avec notamment la présence ou écrans. Si vous le souhaitez, des ani-
seront intégrés prochainement dans l’amélioration de l’IntelliSense pour mations peuvent être jouées depuis
cette fonctionnalité. ces langages. Ceci évite désormais ce lecteur. Cela permet de se faire
Un autre point gênant reste que les l’emploi de Visual Studio pour profiter une idée sur la façon dont les élé-
filtres et transitions ne sont pas dispo- de ces fonctionnalités avec ces lan- ments interagissent entre eux. Sket-
nibles sur le moteur d’Internet Explo- gages-là. chFlow Player permet aussi à ses
utilisateurs d’ajouter des commen- choisi adoptera de cette manière un semble des éléments Photoshop sous
taires ou des annotations sur les cro- comportement logique associé à la sa bonne version. Ceci étant dû au
quis de vos écrans. Une fois partie du composant sélectionnée. fait que certains éléments ne sont
enregistrés sous forme de fichier, pas encore supportés, comme par
vous pouvez ouvrir ces commentaires Importer un fichier exemple l’opacité d’un élément ou les
et annotations dans votre projet Adobe Photoshop effets de Photoshop. Le but de Micro-
Expression Blend 3. ou Illustrator soft étant que le support des élé-
SketchFlow permet d’associer facile- Une autre nouveauté qui a déjà pu ments d’un fichier Photoshop soit
ment des données à vos maquettes faire son apparition en partie dans la total.
pour leur fournir plus de contenu. Ces version 2 d’Expression Web est l’im-
données et leur modèle d’affichage port d’un fichier de type Adobe Photo- Une version Bêta
sont éditables de la même manière shop ou Illustrator. A la différence disponible
qu’un projet WPF de base. Il est inté- qu’ici, son utilisation est beaucoup Pour couronner le tout et pour un
ressant de noter que votre projet plus poussée et surtout beaucoup poids de plus ou moins 289.4 MB,
SketchFlow est expor table sous plus utile. Dans ce qui suit, je décrirai vous avez désormais la possibilité de
forme de fichier Word. Durant l’opé- principalement l’import de fichier Pho- vous faire une idée de ces nouveautés
ration d’export, Expression Blend 3 toshop car le fonctionnement de l’im- avec la version Preview d’Expression
vous crée un document complet com- por t de fichier Illustrator est Web 3 dont le lien est disponible à la
prenant une table de contenu, des globalement le même que l’import de fin de cet article. Néanmoins, veuillez
images de vos écrans, les annota- fichier d’Expression Design. noter quelques petites remarques
tions associées à ceux-ci, etc. Lorsque l’on importe un fichier Photo- avant de vous ruer sur cette version
shop, Expression Blend 3 permet de Preview !
Créer des comportements sélectionner les calques à inclure Tout d’abord et le plus important à
et des composants sans dans les données que l’on désire ajou- mon sens, si vous ouvrez un projet Sil-
code ter à son projet [Fig.6]. Il est également verlight 2 dans Expression Blend 3
Expression Blend 3 introduit désor- possible de créer de nouveaux Preview, celui-ci vous demandera à
mais une bibliothèque de comporte- groupes d’éléments depuis l’arbores- être converti en projet Silverlight 3.
ments de base pour vos contrôles. cence de sélection des calques à Une fois ceci fait, vous ne pourrez
Cela permet notamment au graphiste importer. Pour ce qui est du respect plus revenir en arrière.
de ne pas avoir besoin d’un dévelop- des éléments Photoshop, Expression Prenez en compte aussi le fait que
peur pour créer des interactions utili- Blend 3 est assez généreux pour SketchFlow n’est pas disponible dans
sateurs. Néanmoins, un développeur cette nouvelle fonctionnalité. En effet, cette version Preview. Donc, si vous
aura toujours la possibilité de créer il respecte les calques, leur arbores- comptiez voir d’un peu plus près cette
des comportements supplémentaires cence, leur position, les bitmap, les fonctionnalité, il vous faudra prendre
pour que le graphiste puisse les utili- formes vectorielles, les textes, les votre mal en patience !
ser de son côté depuis sa biblio- masques et les formes ayant un rem-
thèque. plissage solide ou dégradé. Expres- Ressources
Cette nouvelle version d’Expression sion Blend 3 s’occupe aussi de - Internet Explorer 8 :
Blend permet aussi une création de générer le XAML qui correspond à ce http://www.microsoft.com/ie8/
composants beaucoup plus aisée. En que vous lui avez importé. Pour ce qui - Seadragon Ajax :
effet d’un simple clic, vous avez désor- est des masques et des formes vec- http://livelabs.com/seadragon-ajax/
mais la possibilité de créer des com- torielles, dès qu’ils sont importés - Silverlight 3 Bêta :
posants à par tir d’éléments dans votre projet, ils sont tout à fait - http://silverlight.net/getstarted/silver-
graphiques existants. Il introduit par modifiables à votre guise. light3/default.aspx
la même occasion la notion de La manipulation des éléments Photo- - Expression Blend 3 Bêta :
ControlParts : Vous pouvez attribuez shop importés ne diffère pas des élé- http://www.microsoft.com/expression/try-
un élément graphique comme une ments déjà présents et il vous sera it/blendpreview.aspx
par tie de contrôle. Si on prend également possible de créer des - Expression Studio 2 (Evaluations dis-
comme exemple le Slider, vous pouvez composants directement depuis un ponibles) :
facilement définir un élément gra- élément ou un groupe d’éléments. http://www.microsoft.com/expression/
phique existant comme curseur. Pour pallier au problème de la taille - Sessions du MIX09 sur Expression :
De ce fait, une nouvelle fenêtre fait de pixels sous Adobe Photoshop (72 http://videos.visitmix.com/MIX09/Tags/Expr
son apparition pour vous permettre DPI) et Expression Blend (96 DPI), ession
de choisir simplement un élément celui-ci vous propose de les redimen-
comme étant une partie du compo- sionner si nécessaire. Dans le cas où
■ Axel Peter
sant. Cette fenêtre vous donne accès des problèmes de compatibilité se
Intégrateur .NET & Web Designer
à une liste prédéfinie du composant présentent, il est possible de sélec- http://www.wygwam.com
que vous souhaitez créer. L’élément tionner un calque qui fusionne l’en- http://blogs.codes-sources.com/chronos
Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requêtes sur la version en cours de commercialisation. . WINDEV, WEBDEV et WINDEV Mobile sont compatibles.
- Online ou offline. dans le dossier " Properties " de votre application. [Fig.4]. Pour pro-
• Récupérer des données à partir du site hôte de l’application céder, décommentez le nœud " Deployement. ApplicationIdentity ".
Avant de commencer, notez que les pré-requis pour cet article sont :
• Connaître les bases de la plate-forme .Net <Deployment xmlns="http://schemas.microsoft.com/client/2007/
• Installer Visual Studio 2008 (dont la version express est gratuite) deployment"
Attention, installez la version anglaise, les Tools et SDK existent seu- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
lement en anglais pour l’instant ! >
• Installer les Silverlight 3 Tools et SDK ainsi que les .Net RIA ser- <Deployment.Parts>
vices (http://www.silverlight.net/GetStarted/silverlight3) </Deployment.Parts>
Bases de l’application <!-- Uncomment the markup and update the fields below to make
• Démarrez Visual Studio 2008 your application offline enabled -->
• Ouvrez le menu File -> New Project … <Deployment.ApplicationIdentity>
• Dans la boîte de dialogue " New Project " qui apparaît, choisissez <ApplicationIdentity
" .Net Framework 3.5 " et sous le type de projet " Silverlight " : ShortName="Out of Browser Silverlight Application"
" Silverlight Application " [Fig.1]. Title="Window Title of Your Silverlight Application">
• N’oubliez pas de lui donner un nom, dans ce cas-ci : " OutOfBrowser " <ApplicationIdentity.Blurb>Description of your
• Cliquez sur Ok. Silverlight application</ApplicationIdentity.Blurb>
• Une nouvelle boîte de dialogue apparaît : " New Silverlight Appli- </ApplicationIdentity>
cation ". Prenez soin de cocher l’option " Link to ASP.Net server </Deployment.ApplicationIdentity>
project ". Cette option activera le lien .Net RIA Services entre l’ap-
plication Silverlight et son site ASP.NET host [Fig.2]. </Deployment>
• Cliquez sur Ok.
• Visual Studio va générer automatiquement toute la structure de la solution. Ce nœud contient 3 paramètres d’origine :
• Dans le fichier MainPage.xaml du projet Silverlight, ajoutez un • ShortName : est le nom de l’application, c’est ce nom qui sera uti-
texte " Hello World ". lisé pour les icônes du bureau, les raccourcis, etc.
• Title : est le titre de l’application, ce titre sera utilisé en en-tête de
<Grid x:Name="LayoutRoot" Background="White"> fenêtre par exemple.
<TextBlock>HelloWorld</TextBlock> • ApplicationIdentity.Blurb : est la présentation de votre application.
</Grid> Cependant, un autre nœud est intéressant à ajouter : le nœud
" ApplicationIdentity.Icons"
Voici le résultat obtenu lors d’un débogage de la solution créée ci-
dessus : [Fig.3] <ApplicationIdentity.Icons>
<Icon Size="16x16">Icons/icon_16.png</Icon>
<Icon Size="32x32">Icons/icon_32.png</Icon>
public MainPage()
{
InitializeComponent();
if (App.Current.RunningOffline)
Fig.5 {
WebOrDeskTextBlock.Text = "Bureau";
DownAndInstallBtt.Visibility = Visibility.Collapsed;
}
else
{
WebOrDeskTextBlock.Text = "Navigateur";
DownAndInstallBtt.Visibility = Visibility.Visible;
}
}
public MainPage()
{
InitializeComponent();
(…)
OnOrOff();
NetworkChange.NetworkAddressChanged +=
new NetworkAddressChangedEventHandler(NetworkChange_
NetworkAddressChanged);
}
void OnOrOff()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
OnOrOffTextBlock.Text = "Online";
OnOrOffTextBlock.Foreground = new SolidColorBrush
(Colors.Green);
• Ouvrez MainPage.xaml.cs
• Dans le constructeur de la page, juste après l’initialisation des
composants, ajoutez ce code :
public MainPage()
{
InitializeComponent();
(…)
Fig.10 SuperHeroContext context = new SuperHeroContext();
MyDataGrid.ItemsSource = context.SuperHeros;
context.LoadSuperHero();
}
Les autres options vous
permettent de demander
à la plate-forme de Cette méthode passionnante d’accès aux données est bien plus
générer automatiquement complète que le peu que je viens de vous montrer. Pour les lecteurs
toute l’opération d’édition, intéressés, je conseille grandement une lecture du document relatif
d’insertion et de résolution
de conflits, mais nous n’en aux .Net RIA Services disponible sur http://www.silverlight.net/GetStar-
aurons pas besoin dans ted/silverlight3.
cet exercice. ■ Simon Boigelot & Loic Bar - HEODE.com
technique \\ cloud
1re partie
Cloud Computing :
déploiement d’applications Java
C
ette série d’articles a pour but d’expliquer comment effec- ec2-run-instances ami-5647a33f –k ma-keypair
tuer un déploiement d’applications Java sur la plate-forme
Amazon EC2. La première étape consiste à préparer votre Cette commande lance un serveur de type SMALL. Il vous est pos-
compte Amazon pour disposer d’un environnement exploitable. Pour sible de lancer plusieurs serveurs en même temps ou de spécifier le
cela, connectez-vous à votre compte et inscrivez vous à EC2 si cela type de machine à démarrer. Le démarrage d’une machine EC2
n’est déjà fait (http://aws.amazon.com/ec2). prend un peu de temps (jusqu’à quelques minutes). Vous pouvez
Sur le site, cliquez sur l’onglet " Your Account ", puis le lien " Access consulter le statut de la machine via la commande suivante :
Identifiers ". Notez bien votre " Access Key ID " et votre " Secret
ec2-describe-instances
Access Key " car vous en aurez besoin plus tard. Dans la section
" X.509 Certificate ", cliquez sur le bouton " Create New " et sauvez Quand le statut de votre machine indique " running ", elle est prête à
sur votre poste les 2 fichiers qui seront générés (cert-XXXXX.pem l’emploi. Notez l’adresse de la machine (ec2-xx-xxx-xx-xx.compute-
et pk-XXXXX.pem) dans un répertoire nommé " .ec2 " (attention à 1.amazonaws.com) et son identifiant (i-XXXXXXXX).
bien garder le caractère ‘.’) à la racine de votre compte. Sous Win- Afin de pouvoir se connecter à ce serveur, vous devez autoriser les
dows le plus simple consiste à exécuter les commandes suivantes : connections SSH (port 22) et Web (port 80) :
Une fois ces fichiers récupérés, installez les outils proposés par Cette commande n’est à faire qu’une seule fois car elle modifie les
Amazon dans le répertoire " .ec2 " précédemment créé : http://develo- règles du pare-feu nommées " default " en ouvrant les ports 22 et
per.amazonwebservices.com/connect/entry.jspa?externalID=351&categoryID=88 80. Si vous utilisez Putty pour vous connecter via SSH, vous devez
Les outils Amazon nécessitent que plusieurs variables d’environne- convertir le fichier ma-keypair en un fichier exploitable par Putty.
ment soient initialisées : Pour cela, utilisez l’outil " PUTTYgen ". Ouvrez le fichier
%EC2_HOME%/ma-keypair via cet outil et sauvez la nouvelle clé pri-
set EC2_HOME=%USERPROFILE%/.ec2
vée. Vous devez en suite définir correctement la clé à utiliser lors de
set PATH=%PATH%:%EC2_HOME%/bin
la connexion au serveur (cf http://docs.amazonwebservices.com/Amazo-
set EC2_PRIVATE_KEY=%EC2_HOME%/pk-XXXXX.pem
nEC2/gsg/2006-06-26/putty.html). SSH vous demandera si vous souhai-
set EC2_CERT=%EC2_HOME%/cert-XXXXX.pem
tez vous connecter. Tapez " yes " et ce sera chose faite.
Attention à bien remplacer les " XXXXX " par les noms de fichiers Maintenant installez le serveur Apache. Puis, démarrez-le :
que vous aurez récupérés précédemment.
Pour vérifier le bon fonctionnement de votre compte EC2, vous pou-
vez lancer la commande suivante : Vous pouvez maintenant vous connecter via votre navigateur au site
http://ec2-xx-xxx-xx-xx.compute-1.amazonaws.com (en remplaçant bien sûr
ec2-describe-images –o amazon
les ‘xxx’ par ceux qui correspondent à l’instance de votre machine
Cette instruction liste toutes les images système préparées par tels qu’affichés par la commande ec2-describe-instances). Pensez à
Amazon (AMI). Vous allez utiliser l’image Fedora Core 8 proposée bien éteindre votre serveur une fois que vous n’en avez plus besoin
par Amazon (" ami-5647a33f " au moment de la rédaction de cet via la commande lancée sur votre machine :
article). Pour vous connecter à la machine, vous devez disposer
ec2-terminate-instances i-XXXXXXXX
d’une " keypair " qui véhicule vos accès aux serveurs afin de vous
permettre de vous connecter. Pour cela, lancez la commande : Les articles à suivre expliqueront comment construire sa propre
image Amazon EC2 (AMI) ainsi que comment mettre à jour des
ec2-add-keypair ma-keypair
applications sur EC2. Enfin, une fois les premiers déploiements sur
Cette commande génère une clé privée de type RSA. Vous devez EC2 effectués, vous verrez comment le projet Open Source Elastic
copier le résultat affiché (en incluant les lignes -- BEGIN RSA PRIVA- Grid vous permettra de maintenir une application en production
T E K E Y - - e t - - E N D R S A P R I VAT E K E Y- - ) d a n s l e f i c h i e r selon des critères de qualité de service (QoS) que vous spécifierez.
%EC2_HOME%/ma-keypair. Vous allez maintenant démarrer un ser-
veur sur l’infrastructure EC2 (n’oubliez pas que ce faisant, Amazon ■ Jerôme Bernard - Director, EMEA Operations, Elastic Grid, LLC.
vous facturera 0.10 $ par heure). Site: http://www.elastic-grid.com - Blog: http://blog.elastic-grid.com
56
✔ Développement : Attention le futur est déjà là !
• PROgrammez ! \\ Juin 2009
56-57 20/05/2009 11:31 Page 57
Etudes
&
Statistiques
Vidéos
L’INFORMATION EN CONTINU
www.solutions-logiciels.com
12-14 outils 20/05/2009 11:37 Page 58
technique \\ multicore
1re partie
Pourquoi passer à la
programmation parallèle
A l’occasion de la sortie d’Intel Parallel Studio et des nombreuses avancées que les
éditeurs préparent pour 2009 et 2010, Programmez ! vous propose de mieux comprendre
la programmation adaptée aux processeurs à plusieurs cœurs. C’est ce que l’on appelle
la programmation parallèle. C’est- à-dire capable d’exécuter plusieurs opérations,
instructions, parallèlement sur plusieurs processeurs ou plusieurs cœurs. Complexe à
maîtriser, le parallélisme est le mont Everest du développement. Nous vous proposons de
l’aborder méthodiquement en posant les fondamentaux pour bien l’assimiler et éviter les
erreurs les plus classiques. Vous verrez alors que l’on peut faire exploser les
performances de certaines portions de son code ! Bonne découverte !
■ François Tonic
E
n 1965, Gordon Moore (co- tecture multi-cœur. Autrement dit, dinateurs. Les ordinateurs de demain
fondateur d’Intel) observait cette évolution matérielle n'est pas seront donc massivement multi-
que le nombre de transis- forcément vécue comme un gain cœurs (supérieur à 8 cœurs), les
tors contenus dans un semi-conduc- important par les utilisateurs. américains parlent du passage du
teur disponible sur le marché, Multi-core au Many-core, ce qui peut
doublait tous les 18 à 24 mois. C'est Pourquoi les fondeurs sembler une bonne nouvelle.
de ce constat empirique qu'est née la ont-ils changé
loi de Moore. En d’autres termes, les de paradigme ? Les systèmes
capacités techniques des ordinateurs Depuis quelques années les construc- d'exploitation sont
s’amélioraient régulièrement, permet- teurs ont été confrontés à des déjà en cours d'adaptation
tant aux programmes informatiques contraintes physiques fortes (chaleur De leur côté, les éditeurs de sys-
d'en tirer parti sur le & consommation) qui ne permet- tèmes d'exploitation sont conscients
plan de la rapidité d’exé- taient plus d'améliorer leurs offres en que leurs produits ne sont plus adap-
cution sans grandes restant sur les mêmes bases tech- tés pour exploiter correctement ces
modifications (souvent niques. Par exemple, Intel avait prédit nouvelles architectures matérielles.
aucune). Ce constat a dès 2006 que la température de ses Les prochains systèmes profiteront
fait le bonheur de plu- puces reposant sur la microarchitec- de ces nouvelles offres qui aujourd'hui
sieurs générations d'in- ture Netburst (Pentium IV) atteindrait peuvent sembler exagérées au regard
formaticiens, au point environ 6000 degrés en 2015, soit des besoins actuels, mais n'oublions
que certains appelaient environ la température à la surface pas que le monde change et que les
ce phénomène le " free du soleil. Ne pouvant plus croître sur progrès techniques ont toujours été
Windows 7 en 64 lunch ". A cette époque, les fondeurs le plan des Hertz, les constructeurs porteurs d'innovations qui aujourd'hui
bits sera pleinement basaient le plus gros de leur discours ont choisi de répartir la puissance sur nous apparaissent normales. A titre
capable de gérer
256 cœurs. marketing sur une course au Giga- plusieurs cœurs au sein d'un même d’exemple, dans sa version 64 bits, le
Hertz, chacun se vantant d’aller plus processeur (architecture multi-cœur). prochain système Windows sera
vite que l’autre La course aux Hertz est donc termi- capable de gérer pleinement 256
Depuis quelque temps, vous avez née, place à la course au nombre de cœurs. Nous comprenons mieux avec
sans doute remarqué l'apparition de cœurs ! Dès aujourd'hui, les cet exemple la nouvelle appellation
processeurs multi-cœurs allant de constructeurs de microprocesseurs Many-core pour qualifier des maté-
deux à quatre cœurs dans les offres disposent de nouvelles plates-formes riels regorgeant de cœurs.
constructeurs grand public. Cepen- sachant grandir facilement en
dant, vos applications ne tournent nombre de cœurs tout en améliorant The free lunch is over
sans doute pas plus vite sur ce type les performances de l'infrastructure Dès 2005, Herb Sutter, célèbre
de matériel. En effet les systèmes interne du processeur lui-même. Le architecte C++ de Microsoft, annon-
d'exploitation, les applications d'au- tout dernier processeur Intel Core i7 çait "The free lunch is over". Autre-
jourd'hui ne sont pas adaptés pour (Nehalem) rencontre déjà un franc ment dit, les gains de performances
tirer parti efficacement d'une archi- succès auprès de constructeurs d'or- de vos applications constatés sur les
technique \\ multicore
technique \\ multicore
Sur le CD
du numéro !
Version finale
Intel Parallel Studio débarque
La programmation est l’art de schématiser et simplifier un processus pour
l’automatiser. Nous aboutissons donc le plus souvent à un code sériel. Avec l’arrivée de
puces multi-core, et bientôt massivement multi-core cette approche atteint ses limites :
Il vous faut passer à la programmation parallèle. N’ayez crainte, Intel est là pour vous
aider avec un ensemble logiciel aussi convivial que complet : Intel Parallel Studio.
Chasser les bugs
L
e parallélisme se conçoit à plu- rez aussi savoir quel temps est pris
sieurs niveaux, mais celui qui Avec la programmation parallèle dans la synchronisation d’une variable
nous intéresse ici est le " thread ". apparaissent des bugs spécifique- partagée.
Intel Parallel Studio est un ensemble de ment parallèles. Ils sont sournois et
logiciels pour vous aider à introduire du complexes à tracer. Il est alors très Compilateur et IPP
multi-threadisme dans votre logiciel, utile d’avoir un outil comme Parallel Intel Parallel Studio a beau mettre en
corriger les éventuels bugs parallèles Inspector. Cet outil instrumente et avant ses logiciels de parallélisation, il
et enfin améliorer la performance. En analyse de manière extrêmement fournit aussi tout ce qui est nécessai-
pratique, Parallel Studio se présente avancée l’exécution de votre logiciel re pour obtenir la meilleure perfor-
comme un ajout à Microsoft Visual Stu- pour trouver des bugs, et ce même mance en sériel avant même de
dio avec lequel il est fortement intégré. s’ils ne s’exécutent pas dans les paralléliser. L’outil clé est le compila-
conditions particulières du test. Le teur Intel. Bien intégré dans Visual
Introduire résultat est un simple tableau très Studio il est le fruit d’une intense colla-
du multi-threadisme complet pointant vers les bugs dans boration avec les architectes proces-
La première étape est l’ajout de sec- votre code. Il faut cependant com- seurs. Nul autre compilateur ne sait
tions parallèles dans votre code. Choix prendre quelles sont les classes de mieux tirer parti des derniers jeux
cornélien tant les technologies propo- bugs parallèles pour pouvoir com- d’instructions. Apprenez la significa-
sées sont variées. Intel recommande prendre les indications et corriger. tion des principaux flags et vous
et fournit une très bonne implémenta- Les bugs parallèles sont certes sour- gagnerez à coup sûr, sur le temps
tion d’OpenMP et de la librairie Threa- nois mais ils ont souvent le même d’exécution. Le compilateur Intel ne
ding Building Block. Le standard mécanisme et des causes similaires. respecte pas seulement le standard,
OpenMP est le bon choix pour les pro- Les corriger est donc souvent simple il le devance. Ainsi vous trouverez le
grammeurs orientés C qui préfèrent une fois que l’outil les a pointés. support pour les fonctions lambda et
garder un style sériel et minimiser les autres innovations syntaxiques dans
changements de code. La librairie TBB La touche finale la dernière version. Il serait triste de
est, elle, destinée aux adeptes du C++ Vous avez un logiciel parallèle, bravo, consacrer du temps à l’optimisation
qui ne sont pas contre une incursion mais en pratique encore faut-il qu’il de votre code et d’utiliser par ailleurs
dans la programmation fonctionnelle. utilise correctement tous ces mer- des librairies peu performantes.
Avec ces deux solutions vous devriez veilleux cœurs. Dans une équipe, Aussi Parallel Studio est fourni avec la
pouvoir résoudre une grande partie de ajouter des développeurs ne sert que librairie Intel Performance Primitives.
vos besoins. Une fois la méthode choi- si la méthode de travail permet un Derrière ce nom se cachent en fait
sie, paralléliser une partie simple de partage efficace du travail. Pour vous des codecs audio ou vidéo ultra opti-
votre code est étonnamment rapide. aider à comprendre comment fonc- misés, des fonctions d’imagerie par
Mais il ne s’agit que d’un début. tionne votre logiciel en parallèle, Intel pipeline, de cryptographie, mathéma-
propose Parallel Amplifier. tiques … et bien d’autres.
Cet outil mesure comment chaque
instruction de votre logiciel interagit Conclusion
avec le processeur à une échelle infi- Les concepteurs de Parallel Studio
me lors de l’exécution, puis agglomè- avaient pour ambition de démystifier et
re les données pour en faire un simplifier la programmation parallèle.
résumé simple. Vous pouvez alors Je pense qu’ils ont réussi. Jugez en
trouver les régions chronophages en par vous-même avec la version d’essai.
allant jusqu'à l’échelle de la ligne de
code, et les régions qui n’utilisent ■ Paul Guermonprez
qu’une partie des cœurs. Vous pour- Ingénieur logiciel - Intel
OFFRE LIMITÉE
Numérowww.Spécial programmez.com 10
EXCLUS
Les elle
uvrév
L e m a g a z i n e d u d é v e l o p p e m e n t Nodu
mensuel n°112 - octobre 2008
ans !
IF
élations
Accès illimité de 10 jours
PROGRAMMEZ !
e
à la Bibliothèque Numérique
livr
ul
! !
Form choc e
PROPRO grammez
grammez www. programmez.com
www.programmez.com mensuel n°118 - avril 2009 Le magazine du développement
Plongée
des Editions ENI
au cœur
Tout ce qu’il faut savoir pour des Mozilla Enquête L’équipe
Consultez : www.eni-bibliotheque.fr
The Shads,
langages Les Jeux • Développement : Plus de 30 livres numériques disponibles, de ADO.Net 3.5 à Flex
Linux MULTI-TOUCH
Olympiques du • Microsoft : Plus de 30 livres numériques disponibles, de Windows Server 2008 à Silverlight
favoris développement !
sur Web 2.0 Comment choisir
Exclusif ! Vers Microsoft 3.0
ImagineCup révèle • Open Source : Plus de 20 livres numériques disponibles, de Nagios à Java EE
• Maîtriser les standards : son framework Ajax ? Les projets secrets
les nouveaux talents
Comment ça marche ? de Microsoft
LSB, AppChecker
Pour tout abonnement au magazine Programmez un accès de 10 jours à la
Spécial
• Développer vos Les outils, les technologies disponibles
premières applications Coder pour l'iPhone 2.0
Bibliothèque Numérique de votre choix vous est offert.
PHP
• Les développeurs Au coeur du e-lab de Bouygues
UML
SQL
Le futur de la modélisation
Tout savoir sur Eclipse 4.0
Server
Google
Flash
AspectJ : WinDev : l’atelier
Multicœur
de développement
■àProgrammer
■ PHP
La programmation par aspect
tout faire vos cœurs
et la! programmation par
facile
composants
■ UML et PHP : le duo d'enfer
■ Abonnement 1 an au magazine : 49 €
Linux : Développer
© John Schreiner/illustrationOnLine.com
Piloter votre des extensions Nautilus M 04319 - 112 - F: 5,95 E
Windows Media Center
Serveur
Terracotta : simplifiez-vous leavec
Coding4fun
iPhoneFaites parler vos applications avec MS Speech !
3:HIKONB=^UZ^Z]:?k@l@b@c@a;
(au lieu de 65,45 € tarif au numéro) Tarif France métropolitaine
cluster
+ Printed in France - Imprimé en France - BELGIQUE 6,45 € - SUISSE 12 FS - LUXEMBOURG 6,45 € - DOM Surf 6,90 € - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
3:HIKONB=^UZ^Z]:?a@l@l@i@a;
Maîtriser la puissance de Cuda Les fondamentaux de PHP
Economisez 16,45 €*
* au lieu de 65,45€ prix de vente au numéro, Tarif France métropolitaine
■ Abonnement PDF / 1 an : 30 € - Tarif unique
Inscription et paiement exclusivement en ligne
www.programmez.com
■ Abonnement Etudiant : 1 an au magazine : 39 €
+ Abonnement INTÉGRAL (au lieu de 65,45 € tarif au numéro) Offre France métropolitaine
✁
quel que soit le type d’abonnement (Standard, Numérique, Etudiant). ils ont ainsi accès, en supplément, à tous les anciens numéros et articles/
Le prix de leur abonnement normal est majoré de 10 € (prix identique dossiers parus.
OUI, je m’abonne Vous pouvez vous abonner en ligne et trouver tous les tarifs www.programmez.com
PROGRAMMEZ avec Accès 10 jours à la Bibliothèque Numérique des Éditions ENI ! (offre limitée)
■ Abonnement 1 an au magazine : 49 € (au lieu de 65,45 € tarif au numéro) Tarif France métropolitaine
■ Abonnement Intégral : 1 an au magazine + archives sur Internet et PDF : 59 € Tarif France métropolitaine
■ Abonnement Etudiant : 1 an au magazine : 39 € (joindre copie carte étudiant) Offre France métropolitaine
Choisissez votre Bouquet de la Bibliothèque Numérique : ■ Développement ■ Microsoft ■ Open Source
■ M. ■ Mme ■ Mlle Entreprise : ........................................................................................ Fonction : ................................................... Offre limitée,
valable jusqu’au
PROG 120
30 juin 2009
Nom : ........................................................................................ Prénom :.................................................................................................................................... Le renvoi du présent bulletin implique
pour le souscripteur l'acceptation
pleine et entière de toutes les
Adresse : .........................................................................................................................................................................................................................................
conditions de vente de cette offre.
Conformément à la loi Informatique et
Code postal : ............................................... Ville : ................................................................................................................................................................... Libertés du 05/01/78, vous disposez
d'un droit d'accès et de rectification
aux données vous concernant.
Tél : ........................................................................................ E-mail : .................................................................................................................................... Par notre intermédiaire, vous pouvez
être amené à recevoir des propositions
d'autres sociétés ou associations.
■ Je joins mon règlement par chèque à l’ordre de Programmez ! ■ Je souhaite régler à réception de facture Si vous ne le souhaitez pas, il vous
suffit de nous écrire en nous précisant
A remplir et retourner sous enveloppe affranchie à : toutes vos coordonnées.
PRO grammez !
Le magazine du développement
Programmez ! - Service Abonnements - 22 rue René Boulanger - 75472 Paris Cedex 10.
abonnements.programmez@groupe-gli.com
62-65 Code Design Pattern 20/05/2009 11:40 Page 62
code \\ patron
1 SIMULONS UN WARGAME }
init();
62
FORUM
• PROgrammez ! \\ Juin 2009 dialogue et assistance www.programmez.com
62-65 Code Design Pattern 20/05/2009 11:40 Page 63
code \\ patron
class PanneauJeu { sur le type de l'unité à créer. Lorsque le type est trouvé, l'unité est
Vector<Entite> pieces = new Vector<Entite>(); créée via l'opérateur new.
Ce code semble tout à fait convenable, et pour notre exemple très
public void creerEntite(TypeEntite type) { simple il l'est. D'ailleurs pour les cas très simples à peu près tout
switch(type) { convient. Mais les choses se gâtent sérieusement pour les situations
case TYPESOLDAT: non triviales, ce qui en informatique pratique sont les seules situa-
pieces.add(new Soldat()); tions que l'on rencontre. Ensuite il y a les deux ennemis jurés du
break; développeur: le chef de projet et le client :) Ennemis parce qu'à coup
case TYPETANK: sûr ils vont demander une modification du code. De mémoire de
pieces.add(new Tank()); codeur le contraire ne s'est jamais vu. "Le jeu serait enrichi si on
break; avait des entités camion" dit le chef de projet. Pour faire face à cette
default: modification il suffit d'ajouter un test sur le type. On s'en tire encore
break; facilement. Mais voilà que le client dit : " je voudrais avoir deux zones,
} sur lesquelles cliquer pour créer des unités soit terrestres soit mari-
} times et je voudrais avoir aussi trois niveau de jeux, des panneaux de
jeu différent autrement dit, utilisant a priori leur ensemble propre
public void jouer() { d'unités ". Ca y est, cette fois nous sommes fichus ! Nous nous
for(Entite e : pieces) { retrouvons potentiellement avec 6 méthodes creerUnite à gérer. Et
e.display(); le chef de projet revient: "Nous avons oublié les sous-marins!". Modi-
e.action(); fier le code de 6 méthodes qui font sur le fond la même chose,
} créer des entités, est pénalisant. Beaucoup de travail, du temps
} perdu, sans doute du code à la fois redondant et difficile à maintenir,
} et une forte probabilité de bugs sont les ennuis qui nous guettent.
Tout cela, fondamentalement, parce que la classe PanneauJeu n'est
public class JeuBasic { pas découplée des classes Entité. Il est maintenant clair que nous
devons rationaliser nos créations d'entités, et nous le faisons au
public static void main(String[] args) { moyen du Pattern Fabrique simple.
PanneauJeu pj = new PanneauJeu();
// Ici le joueur clique sur l'interface
// et crée des entités 4 LE PATTERN FABRIQUE
pj.creerEntite(TypeEntite.TYPESOLDAT); Son but est de déléguer la création d'objet à une ou plusieurs
pj.creerEntite(TypeEntite.TYPETANK); classes dont ce sera le seul rôle. Lorsqu'il y a plusieurs classes
// puis le jeu se déroule celles-ci seront utilisées selon le contexte ainsi que nous le verrons
pj.jouer(); plus loin. Voyons d'abord le bien fondé d'une classe unique, ce qui
// et ainsi de suite correspond au Pattern Fabrique Simple. Nous commençons par
} assainir les unités qui dériveront d'une classe abstraite, et dans
} cette classe nous factorisons le code redondant de notre premier
exemple. Ensuite nous créons notre fabrique qui dans l'exemple ci-
Commentons notre code, qui s'il est écrit d'une manière naturelle, package demofactorypattern;
est très mauvais :) Commençons par les classes des unités combat- import java.util.Vector;
tantes. Chacune comporte trois méthodes en plus du constructeur.
La méthode init comme son nom l'indique initialise les membres de enum TypeEntite {
la classe, la méthode display s'occupe de l'affiche de l'unité et la TYPESOLDAT,
méthode action s'occupe de l'action de l'unité au plus fort de la TYPETANK,
bataille. Déjà nous remarquons du code redondant. Le corps de la }
méthode display est trois fois le même. Ne riez pas, pareille horreur
s'est déjà vue en situation réelle. Et si ceci ne concerne pas directe- abstract class Entite {
ment notre Pattern Fabrique, nous constaterons que la mise en protected String categorie;
oeuvre de celui-ci contribue à éradiquer ce défaut. Ensuite, la protected int pv; // Points de vie
méthode init. A chaque fois son corps contient ce qui est nécessaire
à l'initialisation de l'objet. C'est logique, direz-vous, qu'un objet sache public void init(String categorie, int pv) {
s'initialiser. Oui, c'est logique. Mais c'est une logique. Il n'est pas obli- this.categorie = categorie;
gatoirement requis qu'il en soit ainsi. Enfin la méthode action, dans this.pv = pv;
la classe Entité, n'est qu'une coquille vide. C'est peu élégant. Regar- }
dons maintenant la classe PanneauJeu. Sa méthode jouer n'appelle
pas de commentaire. Sa méthode creerEntite est une suite de tests public void display() {
code \\ patron
}
}
6LE PATTERN FABRIQUE ABSTRAITE
Nous arrivons à la définition complète du Pattern qui est: offrir une
class PanneauJeu { interface pour la création d'objets, mais en laissant aux sous-
Vector<Entite> pieces = new Vector<Entite>(); classes le choix des classes à instancier. Revenons à notre warga-
SimpleFabrique fabrique = new SimpleFabrique(); me. Notre chef de projet soucieux de donner du réalisme à notre
jeu, s'écrie tout à coup: "personne ne fait la guerre sans res-
public void creerEntite(TypeEntite type) { sources. Notre jeu doit comporter un panneau civil dont les acteurs
pieces.add(fabrique.creerEntite(type)); produiront les ressources nécessaire à la guerre!". Et il ajoute: "En
} outre, les interfaces utilisateur des panneaux civils et militaire sont
similaires, nous devrions nous en tirer sans rien coder de plus à ce
public void jouer() { niveau". En effet, nous le pouvons... parce que notre code est basé
for(Entite e : pieces) { sur la Pattern Fabrique. Le rôle de celui-ci est d'offrir une interface.
e.display(); Le terme est à prendre au sens de la programmation objet. Dans
e.action(); notre exemple cette interface se réduit à une méthode: creerEntite.
} Les classes fabriques implémenteront cette interface ou selon l'usa-
} ge habituel dériveront d'une classe abstraite comportant cette
} méthode. Le diagramme ci-dessous est notre Pattern Fabrique Abs-
traite vu par UML. Pour ce qui est de notre jeu, c'est tout simple.
public class JeuSimpleFabrique { Nous créons des unités civiles, une fabrique d'unité civile et... c'est
tout :) Voici ce que cela donne (code complet sur notre site) :
public static void main(String[] args) {
System.out.println("Demo Simple Factory"); abstract class JeuFabrique {
PanneauJeu pj = new PanneauJeu(); abstract Entite creerEntite(TypeEntite type);
// Ici le joueur clique sur l'interface }
code \\ patron
}
class FabriqueMilitaire extends JeuFabrique{
public void creerEntite(TypeEntite type) {
//etc pieces.add(fabrique.creerEntite(type));
} }
Ce qui est remarquable avec cet exemple c'est que la classe Pan-
neauJeu est unique. Nous l'instancions deux fois et nous lui passons
la fabrique en adéquation avec son contexte d'utilisation. Le code est
unique tout simplement parce qu'il ne travaille avec aucune classe,
mais seulement avec une interface. Le boulanger et le mécanicien
sont des citadins. Voulons-nous un panneau de jeu pour des entités
campagnardes ? La classe PanneauJeu restera la même. Simple-
ment nous lui passerons une autre fabrique, adaptée à ce contexte.
On peut se poser la question de savoir si, pour une application plus
réelle, on pourrait vraiment utiliser un même code de panneau.
Après tout le code l'affichage serait différent dans chaque cas et il
faudrait bien s'en occuper. La réponse est pourtant oui. On réglerait
ce problème avec le Pattern Stratégie vu dans Programmez! 94 :)
Les Pattern collaborent volontiers ensemble. Simple à comprendre,
simple à mettre en oeuvre, le Pattern Fabrique Abstraite est très
puissant. Dans les applications complexes il est impossible de s'en
passer. Attention! Voici notre chef de projet qui revient avec une
nouvelle idée géniale en tête. Heureusement nous avons quelques
Pattern en réserve... pour une prochaine fois :)
code \\ concurrence
code \\ concurrence
}
Console.ReadLine();
4NOMBRE DE THREADS ET COEURS
DE PROCESSEUR
Il est important de bien noter que les threads lancés par CCR sont
void Rappel(int valeur) des threads systèmes. Ils ne sont pas gérés et planifiés par le runti-
{ me comme c'est le cas par exemple en Erlang. Que l'on ait des
Console.WriteLine(valeur); threads systèmes implique une limitation: Windows ne supporte
} qu'un maximum de 64 threads pour une application. Lancer un
grand nombre de threads ne présente d'ailleurs que peu d'intérêt en
static void Main(string[] args) général. Il est plus intéressant de répartir le code parallélisé sur les
{ coeurs d'un processeur. Voici un code qui demande explicitement à
Program p = new Program(); exploiter de la machine hôte. Le code parallélisé n'a pour rôle que de
p.Go(); dévorer du temps d'exécution gloutonnement :
}
} using System;
} using System.Threading;
using Microsoft.Ccr.Core;
Il y a plusieurs façons de passer le code parallélisé à Arbiter.Recei-
ve. Si l'on préfère, on peut passer une fonction anonyme :
La valeur 1 représente, nous dit la documentation de CCR, le for (int i = 0; i < 10; i++)
nombre de threads systèmes que peut utiliser le runtime CCR pour {
traiter les tâches en attente dans la ou les queues qu'il gère. Avec lePort.Post(i);
un seul thread permis, nous avons un comportement asynchrone à }
la Win32. Remplacez 1 par 10 et là vous verrez que les 10 entiers Console.ReadLine();
ne s'affichent plus dans l'ordre. Cette fois le runtime a bien démarré }
plusieurs threads simultanément, et nous avons le comportement
caractéristique des applications concurrentes: les résultats dans le void Rappel(int valeur)
désordre, de façon imprévisible, ou du moins non garantie par l'API. {
code \\ concurrence
leDispatcher = new Dispatcher(10, Pour autant que cette sortie sur console décrive fidèlement les opé-
ThreadPriority.Normal, rations, ce qui n'est pas forcément certain en environnement
DispatcherOptions.UseProcessorAffinity, concurrent, le résultat des courses est assez surprenant et donne à
"Mon Dispatcher"); réfléchir. D'abord les threads sont lancés dans un beau désordre.
Mais après tout comme rien n'est garanti à ce niveau, pourquoi pas ?
Nous lui demandons de gérer les threads par paquets de 10. Nous Preuve est faite que l'ordre des postages dans un port n'influence
donnons aux threads une priorité normale. Cette notion de priorité par l'ordre de lancement des threads. Quand même... cet ordre est
étant à prendre au sens "programmation Win32" du terme. Enfin étonnant :) L'ordre de fin d'exécution, sans rapport avec celui de lan-
nous demandons explicitement au runtime de répartir les threads cement ne l'est pas moins, mais bon, concurrence oblige.... Mais la
sur les coeurs du processeur de la machine. Quoique selon les vraie surprise, si on considère que chaque thread a un temps d'exé-
observations faites pas votre serviteur, ce comportement est de cution très long, c'est de voir que le dernier est lancé après qu'un se
toute façon le comportement par défaut. Essayons notre code sur soit déjà terminé. Tout semble se passer comme si en interne,
un Dual-Core. La capture ci-dessous montre nettement le pic de c'était un thread qui se charge de lancer les autres. Dans notre
charge: les deux coeurs travaillent au maximum. Le programme exemple, les coeurs des CPU étant vampirisés, le supposé thread de
émet cette sortie sur la console lancement doit attendre qu'un peu de ressource soit libérée pour
faire son travail. On est tenté de conclure qu'avec CCR il convient
d'éviter les situations avec un système très chargé sous peine d'ob-
tenir un fonctionnement très besogneux, problème qui ne se ren-
contre pas avec Erlang que nous avons déjà cité plus haut. Il est vrai
que notre exemple est un cas extrême de mauvais usage de code
parallélisé :)
code \\ concurrence
double, une chaîne et un flottant (Tiens le flottant est traité comme La tâche est retournée au planificateur du runtime, qui peut alors
un double. C# n'est pas Haskell en ce qui concerne la rigueur sur les l'activer. L'instruction yield return devient une sorte de point de syn-
types :). Puisque nous ne pouvons avoir qu'un seul thread à la fois, chronisation. Dans notre exemple la partie de code qui poste dans
nous nous attendons à obtenir une sortie dans le même ordre. La le port ne fait pas partie de la section parallèle. La documentation
surprise est que nous obtenons : de CCR va plus loin et propose un exemple où c'est le code paralléli-
sé lui-même qui poste dans le port. Voici ce code extrait de DemoI-
teratorSequential.
6DE LA PROGRAMMATION
CONCURRENTE SÉQUENTIELLE
8CONCLUSION
Comment ? Le code est soit parallèle soit concurrent! Non, plus
avec CCR :) Celui-ci propose un usage original des itérateurs C#. Au Nous sommes très loin d'avoir fait le tour de CCR. Ainsi n'avons-
lieu d'avoir une fonction de code parallélisé ne retournant rien, on nous, par exemple, pas parlé des fonctionnalités de synchronisation
retourne un itérateur de tâches par une instruction yield return. de threads (autre que le mécanisme de l'itérateur) Mais nous avons
Voici une fonction parallélisée extraite de l'exemple DemoIterator vu qu'il s'agit d'une API originale. Son comportement réserve son lot
que vous trouvez complet sur notre site : de surprises, mais c'est un peu la loi du genre.
Nous pensons que CCR, s'il obtient la popularité qu'il mérite, est de
IEnumerator<ITask> Rappel(int valeur) taille à révolutionner l'approche de la programmation concurrente
{ sous .Net. Pour preuve de son potentiel, il est à la base de DSS
while (lePort.ItemCount != 0) (Decentralized Software Services), une API pour l'écriture d'applica-
{ tions concurrentes, distribuées et tolérantes aux fautes, ce qui n'est
yield return lePort.Receive(); pas rien. Dans des articles à venir, nous approfondirons notre
result += lePort; connaissance du maniement de CCR et nous découvrirons DDS,
Console.WriteLine(result); autre univers passionnant.
}
Console.WriteLine("Résultat final {0}", result); ■ Frédéric Mazué
} fmazue@programmez.com
Abonnez-vous : EN CADEAU
Accès illimité de 10 jours à la Bibliothèque Numérique
A choisir parmi les Bouquets de la Bibliothèque Numérique des Editions ENI : Développement, Microsoft, Open Source
Pour tout abonnement au magazine Programmez un accès de 10 jours à la Bibliothèque Numérique de votre choix vous est offert.
Offre Limitée aux 1000 premiers souscripteurs. (voir page 61 Abonnements)
70-72code DSL Eclipse 20/05/2009 11:42 Page 70
code \\ eclipse
Introduction à la construction
d'un DSL sous Eclipse
Créer un langage spécifique à un domaine permet de proposer à vos utilisateurs un
environnement de travail adapté à ce domaine, c'est-à-dire manipulant directement les
concepts de celui-ci. Nous verrons aujourd'hui comment l'Ingénierie Dirigée par les
Modèles (IDM) va nous aider à construire un tel langage et son environnement.
Avec les outils disponibles les concepts du cœur du langage que l'on se base (la syntaxe abs-
APPLICATION : TOUTES
aujourd'hui dans Eclipse, il traite). Ces concepts de base servent de fondations sur lesquelles
LANGAGE : DSL est possible de choisir entre nous allons bâtir autant de vues que nécessaire.
DIFFICULTE réutiliser et adapter un lan- Nous allons profiter ici des facilités offertes par un outil Eclipse
SOURCE : OUI
MOYENNE gage existant générique comme Kermeta. Tout d'abord parce qu'étant un Langage Orienté
comme UML, ou bien directe- Modèle, Kermeta offre nativement des fonctions qui en facilitent la
ment créer un langage dédié (ou Domain Specific Language). En choi- manipulation, mais surtout parce qu'il nous permet de tisser et d'as-
sissant cette seconde solution, l'un des avantages sera pour sembler les éléments nécessaires sans modifier le cœur du langage
l'utilisateur final d’être naturellement guidé dans l'utilisation de ses que l'on souhaite construire. Nous verrons par la suite que cette
modèles. Pour construire un DSL, nous vous proposons de suivre un fonctionnalité est intéressante car elle nous permet de viser plu-
processus qui permet une boucle de prototypage entre chaque étape sieurs usages et outils autour du langage. Cela nous permettrait
de construction. Cela permet donc d'expérimenter facilement le langa- même d'envisager plusieurs variantes de sémantiques si le cœur
ge avant de l'outiller complètement. Suivant notre expérience, cela nous en disait !
assure une meilleure progression et permet d'en améliorer la fiabilité.
DÉFINITION DES CONCEPTS
PRÉSENTATION DE L'EXEMPLE DU LANGAGE
Pour illustrer nos propos, nous nous appuierons sur l'exemple du lan- Ainsi, dans le monde IDM, les DSL sont communément représentés
gage de la tortue Logo (que certains d'entre nous ont peut-être déjà avec ce que l'on appelle un méta-modèle. En fait, c'est un diagram-
connu sur leur MO5). Logo est un petit langage permettant de diri- me de classe qui définit les concepts de notre langage : dans Eclip-
ger une tortue équipée d'un crayon pour lui faire dessiner une figure se, cela se fait avec un modèle Ecore.
là où elle est passée. Ce langage a d’abord été destiné à initier les Avec notre exemple Logo, les concepts seront typiquement les ins-
enfants aux concepts de la programmation. Nous allons décrire tructions que l'on voudra faire exécuter à notre tortue. Par exemple,
comment l’IDM va nous aider à construire un environnement de pro- lever le crayon, avancer d’un certain nombre (entier) de pas ou tour-
grammation pour Logo, et au final l'appliquer concrètement pour ner d’un certain angle (exprimé, pour simplifier, comme un nombre
effectivement piloter un petit robot construit en Lego Mindstorm. entier de degrés). Nous allons donc créer et relier les concepts cor-
respondants : une classe PenUp, une classe Forward, et une classe
UN PEU DE THÉORIE Right. Les instances de ces classes représenteront les instructions
Traditionnellement, quand on pense à concevoir un langage, on est d u p r o g r a m m e L o g o d e l ’ u t i l i s a t e u r, p a r e x e m p l e
tenté de réfléchir d'abord à la syntaxe concrète qu'on va donner à " FORWARD 10 " ou " RIGHT 3*30 ". Les classes Forward, et Right
celui-ci, et donc en terme de grammaire et de parser. En IDM, la étant paramétrées par une expression arithmétique, elles sont
syntaxe concrète n'est qu’un aspect secondaire. C'est d’abord sur reliées à une classe " Expression ", qui peut être par exemple soit
Figure 1. Version minimaliste du méta-modèle du langage Logo Figure 2. Machine Virtuelle pour le simulateur Logo
code \\ eclipse
une expression binaire (ie. qui compose deux expressions par un lité de rouvrir les définitions Ecore pour ajouter des éléments néces-
opérateur de type +, *, etc.), soit une constante entière, ce qui est saires au besoin courant. Par exemple, pour vérifier que les argu-
représenté par de l’héritage. L'éditeur arborescent de base fourni ments des procédures Logo ont des noms uniques, il suffit d'ajouter
avec Ecore est certes fonctionnel, mais n'hésitez pas à lui adjoindre l'invariant suivant :
un diagramme de classe (fichier avec l'extension ecorediag) grâce à
l'éditeur fourni par le projet Eclipse Ecore Tools. package kmLogo::ASM;
Afin de profiter des avantages de génération des outils basés sur require kermeta
EMF, il faut penser à ajouter une notion de conteneur sur certains // importe les définitions du fichier logo.ecore
liens pour créer une hiérarchie. En effet, même si les concepts de require "http://www.kermeta.org/kmLogo"
notre langage sont bien là et forment un modèle valide, la plupart
des générateurs s'appuient sur cette notion pour automatiser l'affi- // réouvre la classe ProcDeclaration du méta-modèle Logo pour
chage de certaines vues. C'est le cas par exemple de la vue "outline". lui ajouter un invariant
Pour rendre la tortue plus intéressante à piloter, nous compléterons aspect class ProcDeclaration{
ces instructions avec quelques structures de contrôle telles que inv unique_names_for_formal_arguments is do
Block, If ou Repeat… [Figure 4] Celles-ci permettent de structurer et args.forAll{ a1 | args.forAll{ a2 |
d'ordonner les séquences d'instructions. De même, l'instruction a1.name.equals(a2.name).implies(a1.equals(a2))}}
ProcCall donnera la possibilité d'appeler des blocks définis dans end
ProcDeclaration avec des paramètres. }
CRÉATION DES PREMIERS MODÈLES Obtenir un vérificateur de modèle revient alors à charger un modèle
LOGO AVEC L'ÉDITEUR RÉFLEXIF Logo et appeler la méthode checkAllInvariants sur les éléments à la
Pour débuter avec votre nouveau langage, le plus simple maintenant racine du modèle. Cet invariant aurait aussi pu être écrit en OCL, (le
est d'utiliser l'éditeur arborescent réflexif. Depuis votre méta-modèle langage officiel de l'OMG) et importé de la même manière, d'ailleurs
logo.ecore, il vous suffit de sélectionner l'élément racine de votre lan- Kermeta en reprend les facilités de navigation dans les modèles exis-
gage et de créer une nouvelle instance. Vous pouvez maintenant tant en OCL. Néanmoins, Kermeta nous sert surtout de système
ajouter des instructions pour créer vos premiers programmes Logo. d'assemblage et lui ajoute d'autres fonctions qui seront utiles pour
les besoins des autres activités d'ingénierie des méta-modèles.
TISSER DES CONTRAINTES
COMPLÉMENTAIRES EXTENSION DES CONCEPTS POUR FOURNIR
En expérimentant un peu votre langage, vous vous apercevrez UNE SIMULATION (SÉMANTIQUE OPÉRATIONNELLE)
qu'Ecore ne vous permet pas d'exprimer certaines contraintes, par Maintenant nous souhaitons rendre ce modèle plus "vivant" et voir
exemple que les paramètres formels d’une procédure doivent avoir notre tortue bouger. Pour en définir le comportement, le plus simple
des noms différents. C'est normal puisqu'il n'en définit que la struc- et le plus rapide est de fournir un simulateur. La première étape
ture. Comme l'objectif d'un DSL est d'aider les utilisateurs du futur consiste à définir une représentation du domaine d'application (une
langage, nous allons ajouter des contraintes qui vont les aider à ne sorte de Machine Virtuelle) sur laquelle le langage va s'appliquer.
pas faire ces erreurs. Le langage Kermeta nous donne ici la possibi- Pour notre exemple, ce sera tout simplement une ... tortue et les
traits qu'elle trace sur son terrain de jeu.
Cela peut ici encore être représenté avec
un diagramme Ecore. Ensuite, nous allons
donner un peu de comportement à notre
tortue en lui fournissant des primitives
telles que move ou rotate qui sont spéci-
fiques à cette représentation. Pour cela, il
suffit d'indiquer que l'on a besoin
d'étendre les classes du domaine d'appli-
Figure 5 : Tortue robot en Lego cation et de leur ajouter directement les
code \\ eclipse
actions que l'on souhaite sous forme d'opérations. Enfin, créer le Gérer des syntaxes implique d'utiliser une ou plusieurs techniques,
simulateur pour le langage Logo revient donc à ajouter des chacune d'entre elles pouvant nécessiter de longues explications.
méthodes evaluate(context : Context) sur chacune des instructions Nous nous contenterons ici d'évoquer les pistes utilisant des outils
du langage. Cette méthode fait appel au contexte pour avoir des de l'IDM visant à vous faciliter cette tâche :
interactions avec le domaine d'application et enchaîner sur l'évalua- - Générer et customiser l'éditeur arborescent par défaut. Cela se
tion des instructions suivantes. En fait, c'est tout simplement une fait grâce au genmodel d'EMF. En général, on commence par là,
variation du patron de conception "Visiteur" qui a été simplifiée cela permet très facilement d'avoir une extension de fichier qui est
grâce à l'utilisation du tissage d'aspect de Kermeta. propre à notre modèle, d'utiliser des libellés et des icônes plus par-
lantes. C'est d'autant plus intéressant que ces informations seront
package kmLogo::ASM; reprises par d'autres éditeurs plus évolués (typiquement dans la
require kermeta vue "outline" qui leur sera associée)
require "../1.MetaModel/ASMLogo.ecore" - Générer un éditeur graphique. Cela se fait grâce à un modèle
require "../4.VirtualMachine/LogoVMSemantics.kmt" permettant de faire le lien entre le langage et l’éditeur graphique.
... L'outil, (GMF ou Topcased) génèrera alors la plupart du code pour
aspect class Block fonctionner dans Eclipse.
{ - Obtenir un éditeur textuel. Traditionnellement cela consiste à fournir
method eval(context : Context) : Integer is do un parser et un pretty printer pour notre langage (typiquement avec
instructions.each{instruction | result := instruction. des outils comme sableCC ou antlr).Plus récemment, des outils
eval(context)} suivant la même philosophie que pour les éditeurs graphiques ont
end commencé à apparaître pour obtenir des éditeurs plus intelligents à
} moindre coût, mais ceci est hors du spectre de cet article.
aspect class Forward
{ CONNECTONS-LE AU MONDE RÉEL
method eval(context : Context) : Integer is do Nous avons choisi un robot construit avec Lego Mindstrom. Il est
context.turtle.forward(steps.eval(context)) équipé de trois moteurs indépendants : deux pour piloter les roues,
result := void un pour actionner le stylo. Il faudra que nous transformions nos
end modèles de programme Logo en du code compréhensible par la
} machine. Pour cette tâche, il existe de nombreuses techniques et
... langages de transformations de modèle qui ont leurs avantages et
inconvénients. Le choix dépend généralement de la complexité et du
Pour lancer une simulation, il suffit de charger un modèle Logo et de niveau de maintenabilité voulus pour la transformation à développer.
lancer l'évaluation de la première instruction. Notre robot peut être programmé en NXC (Not eXactly C). Cette
fois encore, nous utilisons ici les capacités de tissage pour complé-
AMÉLIORATION DU SIMULATEUR ter notre méta-modèle de langage avec un compilateur. En effet,
Le langage Kermeta étant principalement dédié à la manipulation de pour une compilation simple comme celle dont nous avons besoin
modèles, il ne propose pas par défaut de fonctions graphiques qui ici, il suffit de traverser ce modèle pour générer directement le code
seraient trop spécifiques à un domaine et nuiraient à sa compacité. NXC correspondant. Si la transformation avait été plus complexe
Néanmoins, il offre la possibilité d'accéder à du code java. C'est ainsi nous serions passés par un modèle intermédiaire spécifique au NXC
que nous pouvons réaliser une petite interface par exemple en AWT avant de générer le code. Dans tous les cas, la structure de base du
pour compléter les sorties textes du simulateur logo. langage nous sert de trame directrice.
Parfois, vous pouvez vouloir augmenter les performances de votre A notre avis, la construction d'un compilateur doit être faite après
simulateur. Dans ce cas, plutôt que d'utiliser la version dynamique avoir fait un simulateur. Il y a bien évidement des exceptions mais la
de Kermeta (qui interprète le code Kermeta), vous pouvez utiliser mise au point et la maintenance d'un compilateur est sensiblement
son compilateur pour obtenir le code java EMF de votre simulateur. Il plus coûteuse que celle d'un simulateur et doit donc être faite seule-
pourra ainsi être déployé directement sans Kermeta lui-même dans ment quand le langage est suffisamment stable. De plus, votre
l'environnement de l'utilisateur final. simulateur vous servira de version de référence pour tester les dif-
A ce stade de la mise au point de la sémantique du langage, le coût férentes implémentations concrètes. Dans notre exemple, nous
des évolutions reste raisonnable. Ceci ne sera probablement plus visons une plate-forme Lego Mindstorm, mais déjà sans même par-
vrai une fois que vous aurez avancé dans les étapes suivantes et en ler d'un autre robot, nous pouvons envisager plusieurs dialectes et
particulier si vous avez construit un compilateur car leur coût de bibliothèques de programmation pour celui-ci !
maintenance est généralement plus élevé. Ainsi il est possible de mettre au point des programmes dans notre
nouveau langage tortue Logo sans avoir à dépendre de la lenteur du
VOUS AVEZ DIT SYNTAXE CONCRÈTE ? robot réel ou de la santé des batteries qui le meuvent. On voit ici
Maintenant que les concepts de notre langage sont stables, nous vraiment tout l'intérêt des modèles qui donnent
pouvons commencer à capitaliser sur son usage. En particulier pour une abstraction de la réalité.
le rendre plus agréable à utiliser, nous souhaitons en améliorer
l'IHM, rien de mieux alors que d'en définir une syntaxe dédiée par ■ Didier Vojtisek - Ingénieur de recherche INRIA
exemple textuelle ou graphique. www.irisa.fr/triskell - www.kermeta.org
code \\ ria
Soyatec est une Visual Studio 2008 ou encore bien loin d’être complet, outre la colo-
APPLICATION : RIA
société française Expression Blend 2. Les projets eclip- ration syntaxique et quelques snip-
LANGAGE : DIVERS experte dans le se4SL sont éditables aussi bien par pets, il ne bénéficie pas d’assistant
développement Visual Studio 2008 que par la suite d’auto-complétion de code.
DIFFICULTE SOURCE : NON
MOYENNE de plugins pour Expression Studio 2 et vice versa ! Les erreurs sont remontées dans la
Eclipse. Parmi ses [Fig.2] console et dans la vue Problems.
produits on remarquera particulière- [Fig.4] [Fig.5]
ment eFace, un plugin compatible De ce fait, eclipse4SL peut importer
avec le langage déclaratif XAML pour des projets Silverlight dans l’environ- Autre point ergonomique, l’explora-
décrire des interfaces graphiques nement Eclipse. Il vous est proposé teur de projet est similaire à celui de
Java. Cette par ticularité, Stève de créer une application Silverlight Visual Studio 2008, on retrouve
Sfartz (architecte Microsoft France) avec ou sans projet Web attaché, les donc la notion de " code-behind ", les
va la repérer. La suite logique, on la projets sont exécutés dans un envi- différentes assemblies du projet sont
connaît : un partenariat est créé ronnement Web via Chiron, un mini- concaténées dans un onglet Refe-
entre Microsoft et Soyatec, et le tout serveur web embarqué dans le SDK rences. On a la possibilité d’ajouter
premier plugin Silverlight pour Eclipse de Silverlight. [Fig.3] d’autres assemblies, de nouvelles
est né : eclipse4SL. 6 mois après classes C#, des User Controls, du
son lancement, faisons un état des L’expérience de l’éditeur XAML est
Fig.3
lieux. très intéressante puisqu’on est aidé
par l’auto-complétion à la façon
LES FONCTIONS " IntelliSense ", on note la présence
Visual Studio est certes un environ- d’une palette qui permet des glisser-
nement très complet, le plugin eclip- déposer des composants Silverlight
se4SL est néanmoins très bien (près d’une cinquantaine). On pourra
équipé et en osmose avec les outils générer aisément le corps des
Microsoft. Les projets créés avec méthodes dès lors qu’on s’abonne à
eclipse4SL sont complètement com- des évènements côté XAML.
patibles MSBUILD et donc avec L’éditeur de code C# est quant à lui
Fig.1 Fig.2
code \\ ria
JavaScript, etc. L’éditeur XAML se rapproche beaucoup de l’environne- communauté. Beaucoup de chemin
dote d’un rendu instantané. Comme ment Visual Studio. Un point impor- reste à parcourir avant de faire de
je vous le disais précédemment, la tant à souligner : le plugin est Open l’ombre au mastodonte Visual Studio,
solution est compatible avec Visual Source sous licence EPL et disponible ce n’est certainement pas l’objectif
Studio 2008 et la suite Expression sur SourceForge : de ce plugin. Intégrer le développe-
Studio 2, il est même possible d’édi- http://sourceforge.net/projects/eclipse4sl/ ment d’applications Silverlight dans
ter le projet dans l’un de ces 2 envi- Eclipse c’est pouvoir profiter de la
ronnements à l’aide du menu SILVERLIGHT : richesse de la plate-forme et de toute
contextuel (si toutefois, ils sont instal- UN PLUGIN la communauté autour. Finalement,
lés sur votre machine).[Fig.6] " cross-browser, avec eclipse4SL et ce fameux POC
Le débogage est une feature prévue cross-platform, cross… " sur Azure, Microsoft montre la volon-
pour plus tard. Le projet peut être L’histoire ne s’arrête pas là, lors du té de s’ouvrir à d’autres univers et
compilé et exécuté en s’appuyant sur Mix 09 qui a eu lieu à Las Vegas, d’être de plus en plus interopérable.
MSBUILD et Chiron, la compilation Vijay Rajagopalan, architecte dans la Affaire à suivre…
packagera l’application pour pouvoir division Stratégie Interopérabilité de Ressources :
être utilisée dans n’importe quel pro- Microsoft, faisait la démonstration • Eclipse4SL : http://www.eclipse4sl.org
jet Web. du plugin, mais cette fois-ci sur Mac • Session de Vijay Rajagopalan au
OS X ! Le développement d’applica- Mix 09 :
L’INTEROPÉRABILITÉ tions Silverlight est désormais rendu http://videos.visitmix.com/MIX09/T58F
Non content d’avoir intégré Silverlight possible sur plusieurs OS. On parle
dans un environnement Java, l’équipe vraiment là d’un plugin Cross-Plat- ■ Ronny Kwon
d’eclipse4SL pousse l’interopérabilité form, voire Cross-Development Envi- Etudiant CSII3 à l’EPSI de Montpellier
en proposant des scénarios en mode ronment. [Fig.7] http://blogs.developpeur.org/ronnyk
SOAP ou REST entre du métier Java Lors de cette même session, Vijay R.
et une couche d’exposition Silverlight. faisait la démonstration d’un POC Fig.5
Celui-ci supporte en effet SOAP V1.1 (proof of concept) permettant de
et embarque un client HTTP qui lui développer des applications PHP
permet d’interroger un service REST. pour Windows Azure et tout cela
La mise en place de ces différents dans Eclipse ! En bonus, on trouve
scénarios est disponible sur leur site. même un Azure Storage Explorer.
Dans l’ensemble, le plugin possède Aucune annonce officielle de la sortie
de bonnes bases pour démarrer des de ce plugin n’a été communiquée.
projets Silverlight. Le point pénalisant
à mon sens est le support limité de CONCLUSION
l’édition de code C# et aucun débug Six mois après son lancement, eclip-
de code possible, il reste néanmoins se4SL est déjà classé parmi les plu-
très intuitif dans son utilisation et se gins les mieux notés de la
Fig.4
Fig.7
Fig.6
code \\ mysql
Utilisation de LINQ
avec différentes bases de données
LINQ (Language Integrated Query) est un composant du framework.NET 3.5 qui permet
d’interroger des données. Bien qu’on puisse effectuer des requêtes sur n’importe source
de données, il exige que les données soient encapsulées dans des objets. Les requêtes
LINQ sont soit exécutées directement par le moteur de traitement de LINQ, soit par un
mécanisme d’extension géré par les providers LINQ.
- La prise en main est plus facile, et mieux adaptée pour un dévelop- dotConnect
pement RAD.
- Possède une meilleure intégration des fonctionnalités orientées Dans le cadre de notre article, nous allons réaliser une application
serveur, comme par exemple le type BLOB. C# qui n’a pas une réelle utilité, à part la démonstration de l’utilisa-
- Est moins compliqué qu’ADO.NET Entity Framweork. tion de LINQ avec la base de données MySQL (version 5.1.30). Afin
code \\ mysql
de simplifier la démarche, nous allons créer une application de type - La bibliothèque DbLinq v.0.18 http://code.google.com/p/dblinq2007/.
console (sans le code GUI) qui permet de nous concentrer sur un
cas concret d’utilisation. Première question à se poser : quel provi- Modèle métier
der choisir pour réaliser le développement avec la base MySQL ? Avant de nous lancer dans le développement de notre application,
Dans le cas de MySQL, ni LinqToSql ni Entity Framework ne fournis- nous allons créer notre modèle métier que nous pouvons illustrer de
sent aucun provider en natif. MySQL AB est en train de développer manière suivante : [Fig.1]
son provider " Connector/NET 6.0 " pour Entity Framework (actuel- Ce modèle est juste une partie simplifié d’un système de prise de
lement il est disponible en version alpha), mais aucune date de sor- commandes. Il n’est pas complet mais cela est bien suffisant pour
tie officielle n’est donnée au moment de l’écriture de cet article. Il illustrer l’utilisation de LINQ avec une base de données MySQL.
est donc difficile de tester MySQL sur ADO.NET Entity Framwork
pour le moment, à moins d’avoir recours aux providers commer- DBMetal
ciaux tels que par exemple dotConect de Devart ou LightSpeed de Un fois notre base de données créée, nous devons générer nos
Mindscape. classes. Il n’y a malheureusement pas de support graphique pour
Quant à LinqToSql nous pouvons également nous tourner vers les les modèles, à l’instar de LinqToSql. Le DataContext doit donc être
providers commerciaux (voir le tableau) ou utiliser une solution alter- généré via une adaptation de SQLMetal appelé DBMetal, comme
native telle que DBLinq qui aujourd’hui gère MySQL, Oracle et Post- aux premières heures de LINQ. DBMetal est un projet permettant
greSql en s’appuyant sur LinqToSql. Ce projet OpenSource a débuté de générer du code source en s’appuyant sur des schémas
en 2007, donc est relativement jeune, mais permet de faire les pre- de bases de données. Vous trouverez le générateur DBMetal.exe
miers tests avec MySQL. Dans le cadre de notre application, nous dans l’archive zip de la bibliothèque DbLinq que vous avez téléchar-
allons utiliser DBLinq v.0.18. gée. Nous allons donc générer pour le besoin de notre application
le DataContext appelé GestComm, il sera contenu dans le fichier
EXEMPLE : du même nom avec l’extension .cs (C#). Afin de générer notre
" GESTION COMMERCIALE ". fichier nous devons taper la commande suivante dans la console
Dans notre exemple, nous allons développer une simple application Windows :
appelée " Gestion Commerciale ". Pour pouvoir commencer notre
projet nous allons avoir besoin des pré- requis suivants : bin\DbMetal.exe -provider=MySql -database:GestComm -server
- Le serveur MySQL que vous pourrez télécharger à l’adresse sui- :localhost -user:LinqUser -password:linq2 -namespace:GestComm
vante http://dev.mysql.com/downloads/mysql/5.1.htm. -code:GestComm.cs -sprocs
Références
Afin de pouvoir compiler votre application vous devez ajouter les
références à votre projet vers les bibliothèques suivantes :
- DbLinq.dll
- DbLinq.MySql.dll
- MySql.Data.dll
- System.Data.Linq.dll
Ensuite en en-tête de votre code, ajoutez les références vers les
espaces de noms suivants :
using System.Linq;
using DbLinq.Factory;
Fig.2
using DbLinq.Logging;
using MySql.Data.MySqlClient;
code \\ mysql
Se connecter à la base MySql var q6 = from c in db.Commande from l in c.Lignes where l.Article.
La connexion à la base de données s’effectue par le biais de notre ArtLiBelle == "XBOX360" select new { c, a = l.Article, l };
DataContext (mapping de données) généré dans le fichier Gest-
Comm.cs. Il suffit d’instancier le DataContext en lui passant en para- Procédures stockées
mètre la chaîne de connexion. Le code suivant illustre cette étape : Quand vous générez votre fichier de mapping GestComm.cs (Data-
Context), les procédures stockées sont implémentées en forme des
string dbServer = Environment.GetEnvironmentVariable("DbLinq méthodes. [Fig.3]
Server") ?? "nodevovmware"; Vous pouvez facilement les invoquer afin de les exécuter. Dans notre
exemple, nous avons créé une procédure stockée " Commande-
string connStr = String.Format("server={0};user id={1}; password PourTiers(idTiers int) " qui prend en paramètre l’identifiant d’un
={2}; database={3}", dbServer, "LinqUser", "linq2", "GestComm"); tiers et retourne toutes ses commandes. Le résultat retourné est
du type DataSet. L’extrait du code ci-dessous illustre son utilisation :
GestComm db = new GestComm(new MySqlConnection(connStr));
System.Data.DataSet result = db.CommandesPourTier(1);
Pour faciliter le déboguage de l’application, vous pouvez avoir recours
au logger se trouvant dans l’espace de nom DbLinq.Factory. Vous Insertions
pouvez le récupérer avec la ligne de code suivante : Il est également très simple d’insérer des données. Dans l’exemple
ci-dessous nous allons insérer un tiers dans la base MySQL. Voici le
var logger = ObjectFactory.Get<ILogger>(); code qui permet de le réaliser :
Ensuite, son utilisation reste très simple. Il suffit de lui passer en db.Tiers.InsertOnSubmit(new Tiers { TRSID = 4, TRSNoM = "Martin" });
paramètre la requête linq que vous voulez déboguer : db.SubmitChanges();
code \\ fonctionnel
1re partie
F# : l’avenir de .Net
et du développement Windows ?
F# est un langage fonctionnel qui possède un noyau compatible avec OCaml, il s'inspire
également de C# et Haskell. Aujourd'hui, F# est un projet du laboratoire Microsoft
Research. Il pourrait être intégré au prochain Visual Studio (VS 2010) qui devrait voir le
jour fin 2009, début 2010.
Les langages fonctionnels Fig.1
APPLICATION : -- sont particulièrement bien
adaptés pour l’écriture d’ap-
LANGAGE : FONCTIONNEL
plications scientifiques ou
DIFFICULTE SOURCE : OUI
MOYENNE d’intelligence artificielle. A
ce jour, Microsoft n'édite pas
un tel langage pour la plate-forme .net, F# vient donc combler ce
manque. F# est un langage .net, cela signifie que comme C#, VB.net,
Boo ou d’autres langages, il repose sur un socle commun : la CLS
(Common Language Specification). Ainsi, F# a accès à l’ensemble des
librairies .net, c'est-à-dire qu’il est utilisable pour écrire une applica- de l’élément déclaré. Le compilateur va analyser le contexte actuel
tion WPF ou ASP.net, ou simplement une assembly utilisée par une puis va déduire le type automatiquement.
application C#. Concrètement, cela veut dire que le compilateur génè- Le reste du dossier présente quelques fonctionnalités et concepts
re une assembly .net classique qui sera exécutée par la machine vir- qu’il nous a semblé intéressant d'aborder.
tuelle .net ; F# a donc plus ou moins les mêmes performances que
C#. F# et OCaml partagent les mêmes syntaxes et fonctions de base, FONCTIONNALITÉS ET CONCEPTS
certaines libraires faites en OCaml peuvent être compilées directement Les bouts de codes ci-dessous ont été réalisés et compilés avec
via F#, sans changement ou seulement quelques modifications Visual Studio 2008 en utilisant la CTP de septembre 2008
mineures. Contrairement à C#, F# ne définit pas seulement une gram- (1.9.6.2) de F#.
maire, il apporte également un ensemble de fonctions prédéfinies.
Hello World
LES DIFFÉRENTS PARADIGMES Le classique Hello World ci-dessous présente une manière d'afficher
Il existe plusieurs catégories de langages répartis selon des une chaîne de caractères sur la console. Nous utilisons ici la métho-
concepts différents ; on parle de paradigme pour désigner un de F# printfn mais la méthode System.Console.WriteLine du frame-
ensemble de concepts particuliers. Les langages de programmation work .net aurait également pu faire l’affaire.
impératifs représentent le premier paradigme de programmation: le
#light
langage C en est probablement le meilleur représentant. Le paradigme
orienté objet a connu le succès avec le C++ et, au début du XXIème
(* Hello World
siècle grâce aux langages Java puis C#. Les autres paradigmes, Une fonction sayHello qui prend en paramètre hello *)
comme la programmation fonctionnelle, sont moins utilisés, ce der- let sayHello hello = printfn "Hello %s" hello
nier comprend LISP, Scheme et F# entre autres. Arrêtons-nous sur printfn sayHello "World" // Appelle sayHello avec World comme paramètre
la programmation fonctionnelle, ce paradigme consiste à voir un
programme comme un ensemble de fonctions mathématiques. Ces En exécutant ce code, le résultat suivant est obtenu :
différentes fonctions peuvent s'emboîter, on les voit en fin de compte
> Hello World
comme des boîtes noires qui prennent des paramètres en entrée et
les transforment en une sortie. A l'inverse de la programmation Etant donné que nous travaillons en F#, il est plus logique d'utiliser la
impérative, la programmation fonctionnelle rejette le changement fonction printfn car elle se combine parfaitement avec le système de
d'état ainsi que la mutation des données ; par défaut, toute opéra- types de F#. Actuellement, tout code doit commencer avec l’instruc-
tion d'assignation est interdite. [Fig.1] tion #light ou #light "off". Dans les futures releases, #light devrait
être ajouté par défaut si rien n’est spécifié. #light a pour but de sim-
LE LANGAGE F# plifier le code en rendant les espaces significatifs. De cette manière,
Avant de commencer avec une série d'exemples, il est nécessaire de certains mot-clés tels que in, begin et end peuvent être omis. La
maîtriser quelques concepts de base. Tout d’abord, il existe en F# un deuxième variante est à utiliser pour conserver une compatibilité
mot-clé permettant la déclaration de liste, variable et fonction ; c’est avec le langage OCaml. Ce premier exemple montre également l’uti-
le mot-clé let. Ensuite, F# est un langage fortement typé, pour cela il lisation des commentaires. Deux barres obliques (slash) permettent
utilise massivement ce qui est appelé l'inférence de type (type infe- de faire un commentaire sur une seule ligne alors que (* et *) per-
rence). Ce concept permet de ne pas spécifier explicitement le type mettent d’ouvrir, respectivement fermer, un bloc de commentaire.
[ ]
78-80 code sharp 20/05/2009 11:47 Page 79
code \\ fonctionnel
Nous pouvons créer cette fonction d'ordre supérieur f. Par exemple, Il est également possible d’utiliser la méthode create de l’objet
pour en faire une qui retourne la valeur absolue la plus élevée entre Array. L’exemple ci-dessous est équivalent à l’exemple précédent :
deux entiers, nous faisons :
let arr = Array.create 3 1
let f t x y = arr.[1] <- 2
if t x y < 0 then x arr.[2] <- 3
else y
La fonction f est donc une fonction d'ordre supérieur car elle prend F# donne aussi la possibilité de définir une liste à partir de ces
t, une autre fonction, qui retourne une valeur de 1, 0 ou -1 selon bornes inférieures et supérieures : on parle alors de " range list "
que le premier argument est soit plus petit, égal, ou plus grand que
let listB = [1..10]
le deuxième. L'appel se fait donc comme ceci :
Mieux encore, on peut faire des listes générées (generated list),
let a = f t 4 -5 c'est-à-dire que la liste sera créée à partir d’une fonction. L’exemple
printf "%A" a ci-dessous crée une liste contenant le carré des nombres 1 à 10 :
Et la fonction nous retourne -5 car c'est la valeur absolue la plus
let listC = [ for x in 1..10 -> x*x ]
grande entre 4 et -5. Cette notion de passage de fonction n'est pas
spécifique à F# ni même aux langages de programmation fonction- On peut obtenir une liste en extrayant une sous-liste d’une autre liste :
nels, comme nous l'avons déjà dit ci-dessus.
let listD = listC.[0..2]
A titre de comparaison, voici un code similaire fait en C# qui, lui,
n'est pas un langage fonctionnel (mais objet uniquement). Première- Enfin, on peut concaténer 2 listes via l’opérateur @ :
ment, une fonction qui compare deux entiers comme dans le code
let listE = listA @ listB
F# et qui retourne le plus grand en valeur absolue
code \\ fonctionnel
Fonction map valeur. Pour déclarer une variable en tant que pointeur, il faut utiliser
Puisque les langages fonctionnels utilisent très souvent des listes, il le mot-clé ref ; le compilateur s'occupera automatiquement de trou-
est donc intéressant de présenter la méthode map. Cette dernière ver de quel type il s'agit et ce type ne pourra plus être modifié par la
applique une certaine fonction sur tous les éléments d'une liste. Pre- suite. Par exemple, en déclarant une référence sur une valeur de
nons comme exemple le code ci-dessous type int, il faudra toujours lui passer des adresses qui pointent sur
des valeurs du même type sinon une erreur sera levée.
let l = List.map (fun x -> x * x) [1 .. 10]
printf "%A" l
// Définition de la référence sur une valeur de type integer
La méthode map prend deux paramètres : la fonction à appliquer sur let i = ref 1
chaque élément de la liste d’une part ainsi que la liste en question printfn "i: %d" !i // Affiche 1
d’autre part. Dans notre cas, on passe une fonction qui élève la // Déréférencement avec l'opérateur !
valeur passée en paramètre au carré (premier paramètre) et une i := !i + 1
liste allant de 1 à 10 (deuxième paramètre). La méthode map nous printfn "i: %d" !i // Affiche 2
retourne une liste contenant les éléments de la liste passés en
deuxième paramètre élevé au carré. Le premier argument qui se > i: 1
charge d’élever un élément au carré ne porte pas de nom et est donc > i: 2
appelé fonction anonyme. La fonction anonyme est construite grâce
au mot-clé fun. Le résultat obtenu après exécution est le suivant Le code ci-dessus nous montre que l’assignation d’une nouvelle valeur
à une variable de type référence se fait avec l’opérateur :=. Le déréfé-
> [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
rencement de la variable se fait quant à lui avec l’opérateur unaire !
Les tuples
Une des fonctionnalités pratique mais pas implémentée à ce jour en Pipeline
C# est la possibilité de faire retourner plusieurs variables à une F# permet l’utilisation de pipeline grâce à l’opérateur |>. Un pipeline
méthode. F# le permet grâce à l’utilisation des tuples, une fonction permet d’envoyer le résultat d’une expression dans l’entrée de l’ex-
peut ainsi retourner plusieurs résultats. Par exemple pression suivante. L’exemple utilisé dans le paragraphe sur la fonc-
tion map peut alors s’écrire comme suit
let rec f = fun x -> x, x*x
let a, b = f 2 let l = [1..10]
|> List.map (fun x -> x*x)
printf "a = %i\nb = %i" a b printf "%A" l
> a = 2
> b = 4 > [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
(* Sans le mot-clé mutable lors de la définition, > [100; 64; 36; 16; 4]
cette affectation va créer une erreur de compilation *)
Sans les pipelines, nous aurions dû écrire :
mut <- "Second value" // On utilise pas = mais <-
printfn "Current value '%s'" mut let l =
List.rev (
List.map(fun x -> x*x) (
> Current value 'First value'
List.filter (fun x -> x % 2 = 0) [1..10]
> Current value 'Second value'
)
)
Puisque notre variable a été déclarée avec le mot-clé mutable, nous
pouvons lui assigner une valeur après l’initialisation, mais en utilisant Nous poursuivrons la découverte de F# le mois prochain.
le signe <- au lieu du traditionnel =. Merci à Damien DOLIGEZ de l’INRIA pour sa relecture et ses conseils
ludique \\ applications
2e partie
En direct des labos !
Dans les laboratoires, écoles, centres de recherche, on découvre parfois de petites
merveilles. Voici quelques exemples que nous avons retenus ! Bonne découverte.
Une fois le problème des dépendances réso- sur le bouton Save Plot tout en bas, vous
Pondus lu, téléchargez le code source du site web pourrez sauvegarder votre graphique dans
(www.ephys.de/software/pondus) du projet, extrayez-en le contenu et ouvrez un fichier .png.
Voici un gestionnaire personnel de poids un terminal dans le nouveau répertoire.
(personal weight manager), écrit en Python Comme racine, entrez la commande :
et Gtk+2, placé sous la licence GPL. Son
# python setup.py install
FoxyTag
usage est très simple, et il est de surcroît (www.foxytag.com)
léger et rapide. Usage : Pondus est très minimaliste, mais Voici un projet dont j’ai hâte de voir le résultat :
On peut y tracer la courbe des données pour ce n’est pas forcément une mauvaise un système gratuit d’avertissement anti-
obtenir un aperçu rapide de l’historique de chose. En tapant Pondus, vous verrez une radar conçu pour fonctionner sur une grande
son poids, les données étant stockées sous petite fenêtre munie de cinq boutons. Le variété de téléphones portables et de GPS.
forme de fichiers XML pour un accès instan- premier ajoute une ligne de données – celui FoxyTag est un système collaboratif conçu
tané et une modification avec d’autres pro- de votre poids et la date d’entrée. pour inciter les utilisateurs à partager des
grammes. Il est simple, en effet, et Le second efface une ligne et le troisième données radar – plus il y a d’utilisateurs et de
l’installation n’est pas non plus trop com- affiche une ligne de données. Une fois que feedback, plus le système devient fiable.
plexe. Pondus vous permet de suivre pas-à- vous avez entré des poids et des dates,
pas votre poids sur une longue période et il vous pouvez alors les afficher sous la forme
affiche vos progrès à l’aide d’un graphe. Il d’un graphe en cliquant sur le quatrième
peut également basculer entre des mesures bouton.
métriques (" en mètres ") et des mesures Si vous voulez passer de livres
impériales (" Système Impérial Britannique (" pounds ") à kilogrammes, le cinquième
de mesure de poids "). bouton ouvre la fenêtre des " settings " et
vous permet de changer cela (c’est l’une
des deux seules options, l’autre permet de
se rappeler de la taille de la fenêtre).
Garder trace de vos progrès est central
dans Pondus. Nous arrivons maintenant à
la section graphique – le quatrième bouton,
ou dessiner les données, Plot data. Cliquez
sur ce bouton, et une fenêtre intitulée Plot
Weight apparaît avec un graphique à ligne
nette représentant votre poids au cours
L’adorable minimalisme de Pondus et un exemple d’une période. Si vous regardez tout en bas
de diagramme pondéral. à droite, il y a une boîte " glisser-déplacer "
Installation. En termes de dépendances, il (drop-down box) avec All Time écrit à l’inté- FoxyTag, un système populaire anti-radar
vous faudra disposer de l’installation de rieur. Ceci vous permet de filtrer le reste Le système ne suppose pas simplement
quelques librairies Python avant de com- des informations par rapport à vos résultats qu’un radar se trouve à un endroit particu-
mencer. A chaque fois que vous compilez de l’année précédente, ou juste le mois der- lier. Les utilisateurs ont la possibilité de
quelque chose, l’installateur exigera systé- nier. Si vous voulez filtrer votre période par signaler la présence permanente d’un
matiquement les fichiers de développement. rapport à quelque chose de plus spécifique, radar, de son installation ou de sa suppres-
Alors, assurez-vous que vous installez les il y a deux champs tout en bas à gauche sion. Tout téléphone portable JAVA équipé
fichiers python-dev en premier. Si vous ren- appelé Select Date Range. de MIDP 2.0, CLDC 1.1 et Bluetooth
contrez toujours des problèmes, une Tapez la date de début que vous voulez voir devrait être compatible. Pour les systèmes
recherche sur Google permettra de trouver apparaître dans le premier champ et la date GPS, tout GPS Bluetooth devrait être com-
certains packages dont dépend Pondus : de fin dans le second champ, cliquez sur patible (y compris les modules GPS de cer-
• python 2.4.4-6 Update à l’extrême droite, et le graphique tains systèmes de navigation),
• python-gobject 2.14.1-1 fera la mise à jour avec les informations
• python-gtk2 2.12.1-1 sélectionnées. ■ Dr. Rodrigue Sabin Mompelat
• python-matplotlib 0.90.1-2 Pour ceux d’entre vous qui veulent enregis- Enseignant-Chercheur
• python-support 0.7.6 trer une copie de leurs progrès, en cliquant Ingénieur Logiciel - Copenhague - Danemark