P. 1
Programmez120

Programmez120

|Views: 2,685|Likes:
Publié parhusos

More info:

Published by: husos on Jun 10, 2009
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/09/2013

pdf

text

original

L e m a g a z i n e d u d é v e l o p p e m e n t

mensuel n°120 - juin 2009
P RO
www.pr ogrammez.com
L a n g a g e
F # : le n o u v e a u v is a g e d e . N e t
C lo u d C o m p u t in g
D é p lo ye r J a v a s u r A m a zo n E C 2
M é t h o d e
C r é e r v o s D S L s o u s E c lip s e
C o n c u r r e n c e
M a ît r is e r le C o n c u r r e n c y a n d
C o o r d in a t io n R u n t im e
S G B D
L I N Q e t M yS Q L : c ’e s t p o s s ib le !
3
:
H
I
K
O
N
B
=
^
U
Z
^
Z
]
:
?
a
@
b
@
m
@
k
@
a
;
M

0
4
3
1
9

-

1
2
0

-

F
:

5
,
9
5

E
Printed in France - Imprimé en France - BELGIQUE 6,45 € - SUISSE 12 FS - LUXEMBOURG 6,45 € - DOM Surf 6,90 € - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
P
R
O
G
R
A
M
M
E
Z
!
g r am m ez !
Votre code fonctionne-t-il
sur tous les systèmes ?
Qt, compilation croisée,
les outils, le problème des
navigateurs web.
● Bien débuter
avec Silverlight
● Tout savoir
sur Expression 3.0
● Silverlight sur
votre Desktop
● Silverlight pour Eclipse
Le
développeur
devient AGILE !
Programmation
MULTICOEUR
Devenir un développeur parallèle
Les enjeux des processeurs multicore
Web 2.0
Spécial
SILVERLIGHT
Spécial
SILVERLIGHT
Multi-plate-forme
Multi-plate-forme
©
i
s
t
o
c
k
.
c
o
m
/
7
7
D
Z
I
G
N
● Adopter une méthode agile.
● Scrum + eXtreme Programming : le cocktail parfait
● Les experts dévoilent leurs secrets agiles
Le
développeur
devient AGILE !
01/02-83/84-120 20/05/2009 10:27 Page 1
L
o
g
i
c
i
e
l

p
r
o
f
e
s
s
i
o
n
n
e
l
.

D
o
c
u
m
e
n
t

n
o
n

c
o
n
t
r
a
c
t
u
e
l
.

S
u
p
p
o
r
t

t
e
c
h
n
i
q
u
e

g
r
a
t
u
i
t
:

1
5

r
e
q
u
ê
t
e
s

s
u
r

l
a

v
e
r
s
i
o
n

e
n

c
o
u
r
s

d
e

c
o
m
m
e
r
c
i
a
l
i
s
a
t
i
o
n
.

*
:

W
I
N
D
E
V

a

é
t
é

é
l
u

«
L
a
n
g
a
g
e

l
e

p
l
u
s

p
r
o
d
u
c
t
i
f

d
u

m
a
r
c
h
é
»

p
a
r

l
e
s

l
e
c
t
e
u
r
s

d
e

l
a

r
e
v
u
e

«
P
r
o
g
r
a
m
m
e
z
!
»
,

o
c
t
o
b
r
e

2
0
0
8
Nouvelle
version
Développez 10 fois plus vite
PLATEFORME PROFESSIONNELLE
DE DÉVELOPPEMENT (AGL)
Windows, .Net, Java
Windows 98, 2000, NT, 2003, XP, Vista, 2008
WINDEV 14 est l’environnement
de développement totalement intégré (IDE, ALM),
intégralement en français, réputé pour sa puis-
sance et sa facilité d’utilisation.
WINDEV 14 est livré complet: éditeur d’ana-
lyses (UML,...), RAD, patterns, lien avec toutes les
bases de données (ODBC, OLE DB), Oracle, SQL
Server, AS/400, Informix, DB2..., lien natif MySQL,
PostgreSQL, base de données Client/Serveur
HyperFileSQL gratuite incluse, Générateur d’états
PDF, Codesbarres, Accès natif SAP R/3, Lotus
Notes, Gestion de planning, Gestion des Exigences,
L5G, SNMP, Bluetooth, TAPI, OPC, FTP, HTTP, Socket, Twain, API, DLL,
domotique, liaisons série et USB, débogage à distance, profiler, refac-
toring, génère d’applications JAVA, multilangue automatique,
Gestionnaire de versions, Installateur 1-clic, etc...
Les applications créées fonctionnent avec toutes les versions de
Windows: 98, 2000, NT, 2003, XP, Vista, sous TSE et Citrix, sur eeePC...
WINDEV 14 gère le cycle complet de développement, pour des équipes
de 1 à 100 développeurs. Le support technique est gratuit
*
.
Vous aussi, développez 10 fois plus vite...
avec WINDEV 14.
Fournisseur Officiel de la Préparation Olympique
www.pcsoft.fr
252 pages + DVD + Version Express incluse +
112 Témoignages.
Tél: 04.67.032.032 ou 01.48.01.48.88
info@pcsoft.fr
L
o
g
i
c
i
e
l

p
r
o
f
e
s
s
i
o
n
n
e
l
DEMANDEZ LE DOSSIER GRATUIT
RÉUSSISSEZ TOUS VOS PROJETS
AVEC L’OUTIL DE DÉVELOPPEMENT
ÉLU LE PLUS PRODUCTIF*
VOTRE CODE EST
MULTI-PLATEFORMES:
Windows, .Net, Java,
PHP, J2EE, XML,
Internet, Ajax, Pocket
PC, SmartPhone,
Client riche ...
VERSION
EXPRESS
GRATUITE
Téléchargez-la !
01/02-83/84-120 20/05/2009 9:41 Page 2
s
o
m
m
a
i
r
e
\
\

n u m é r o 1 2 0 - ju in 2 0 0 9
g r am m ez ! P RO
L e m a g a z i n e d u d é v e l o p p e m e n t
C
D

R
O
M
Donnez votre avis sur ce numéro : www.programmez.com/ magazine_satisfaction.php
1 2
2 7
NOUVEAU
Démarrez le développement parallèle
avec la toute dernière boîte à outils Intel® Offert par Programmez! - Juin 2009 – Echantillon gratuit
\\ a c t u s
L’act ualit é en br ef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Agenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
\\ é v é n e m e n t s
Pilot er l’or dinat eur par la pensée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2
\\ g r o s p la n M u lt i- p la t e - f o r m e
M ult i-plat e-for me : où, quand, comment , pour quoi ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5
Développer mult i-plat e-for me en. net avec Delphi PRISM . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6
La compilat ion cr oisée ent r e Linux et W indows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 9
Qmake, le syst ème de build mult i-plat e-for me qu’il vous faut . . . . . . . . . . . . . . . . . . . . 2 2
Le mult i-navigat eur : le guide de sur vie du développeur web . . . . . . . . . . . . . . . . . . . . 2 4
\\ d o s s ie r : L e d é v e lo p p e u r d e v ie n t A G I L E
Les mét hodes agiles pour mieux développer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 7
eXt r eme Pr ogr amming : les fondament aux pour le développeur agile . . . . . . . . 3 2
La jour née d’un développeur agile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4
St andar diser la r ésolut ion de pr oblèmes dans une équipe agile . . . . . . . . . . . . . . . . 3 6
L’agilit é, une r évolut ion cult ur elle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 7
Vendr e Scr um à une équipe qui pr at ique V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 8
Adopt er le mode agile en début d’un pr ojet ou en cour s de r out e . . . . . . . . . . . . 4 1
\\ d é v e lo p p e m e n t w e b
Bien début er en Silverlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4
M icr osoft Expr ession St udio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6
Silver light 3 envahit aussi le bur eau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 0
\\ t e c h n iq u e
Cloud Comput ing : déploiement d’applicat ions Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6
Pour quoi passer à la pr ogrammat ion parallèle. . . . . . . . . . 5 8
Int el Par allel St udio débar que . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 0
\\ c o d e
Compr endr e les Design Pat t er n Fabr ique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2
CCR, une API de pr ogr ammat ion concur r ent e pour . net . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6
Int r oduct ion à la const r uct ion d’un DSL sous Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 0
Eclipse Tools for Silver light : Silver light sur Eclipse, c’est possible ! . . . . . . . . . . 7 3
Ut ilisat ion de Linq avec différ ent es bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5
F# : l’avenir de . net et du développement W indows ? w(1 r e par t ie) . . . . . . . . . . 7 8
\\ t e m p s lib r e
En dir ect des labos (2 e par t ie) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1
Les livr es du mois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2
4 6
6 0
7 0
1 5
Le CD du mois : Découvrez la version finale de Intel Parallel Studio
03-05 edito sommaire120 20/05/2009 10:28 Page 3
FAITES EVOLUER VOTRE CODE.
Réalisez des applications parallèles robustes, de l‘analyse à la compilation, du débogage
à l‘optimisation. Intel® Parallel Studio est la panoplie d‘outils ultime pour les applications
windcws*. Les cuIils scphisIiques qui simpliñenI le develcppemenI mulIiccre pcur Icus les
develcppeurs Nicrcsc!I Visual SIudic* C/C++. TcuI ce dcnI vcus avez bescin pcur passer
du ccde seriel au parallele eI du parallele à la per!ecIicn.
Disponible maintenant: www.intel.com/software/parallelstudio
© 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.
FrenchPub 21cmx28.5cm BoxShot.indd 1 5/7/09 4:29:28 PM
03-05 edito sommaire120 20/05/2009 10:28 Page 4
Rédact ion : r edaction@pr ogr ammez.com
Dir ect eur de la Rédact ion : Jean Kaminsky
Rédact eur en Chef :
Fr ançois Tonic - ftonic@pr ogr ammez.com
Ont collabor é : F. Mazué, J.B. Boisseau, G Vidal.
Exper t s : B. Boucar d, P. Guer monpr ez, O. Lance,
A. Dupuis, J. Mezhr ahid, F. Queudr et , L. Laslaz,
O. Juncu, H. Har r at h, A. Pet er, S. Boigelot ,
L. Bar, J. Ber nar d, D. Vojt isek, T. Jaskula,
N. Bieder mann, C. Dur and, R. Pier quin, P. Blayo.
Publicit é : Régie publicitair e, K-Now sar l
Pour la publicité uniquement :
Tél. : 01 41 77 16 03 - diff@pr ogr ammez.com
Edit eur : Go-02 sar l, 6 r ue Bezout
75014 Par is - diff@pr ogr ammez.com
Dépôt légal : à par ution - Commission
par itair e : 0712K78366 ISSN : 1627-0908
Impr imeur : ETC - 76198 Yvetot
Dir ect eur de la publicat ion : J-C Vaudecr ane
Ce numér o compor te 1 CD-Rom
Abonnement : Pr ogr ammez 22, r ue René Boulanger,
75472 Par is Cedex 10 - Tél. : 01 55 56 70 55
mail : abonnements.pr ogr ammez@gr oupe-gli.com
Fax : 01 40 03 97 79 - du lundi au jeudi de 9h30 à
12h30 et de 13h30 à 17h00, le vendr edi de 9h00 à
12h00 et de 14h00 à 16h30. Tar ifs abonnement
(magazine seul) : 1 an - 11 numér os Fr ance
mét r opolit aine : 49 € - Et udiant : 39 € - CEE et
Suisse : 55, 82 € - Algér ie, Mar oc, Tunisie :
59, 89 € - Canada : 68, 36 € - Tom : 83, 65 €
Dom : 66,82 € - Aut r es pays : nous consult er.
PDF : 30 € (Monde Entier ) souscr iption exclusive-
ment sur www.pr ogr ammez.com
P R O C H A I N
N U M É R O
N °1 2 1
ju ille t - a o û t 2 0 0 9 ,
p a r u t io n 3 0 ju in
✔ Développement
Attention le futur
est déjà là !
✔ Pr épar ez- vous cet ét é :
- Windows 7, Android, iPhone,
Surface, Java 7
- OpenVibe : l'informatique
pilotée par la pensée
✔ Enquêt e car r ièr e :
- Etes-vous satisfait
de votre job ?
L’I N F O
P E R M A N E N T E
W W W . P R O G R A M M E Z . C O M
PM
g r am m ez ! P RO
L e m a g a z i n e d u d é v e l o p p e m e n t
Le développeur
ser ait - il un chat ?
3 %. C’est le pour cent age de développeur s ayant sur
ces der nier s mois int r oduit une fonct ion par allèle dans un
code sour ce. Une pet it e poignée! Voilà un chiffr e bien int r iguant , non ? Et
pour t ant , depuis plus de 18 mois, Pr ogr ammez ! s’invest it aut our de la
pr ogr ammat ion mult icor e / par allèle pour vous sensibiliser sur un sujet
haut ement st r at égique et d’une complexit é non négligeable.
Aujour d’hui, l’écr asant e major it é des PC vendus possède au moins 2
cœur s. Et cela mont e t r ès vit e à 8, 16 cœur s. D’ici à 2010, les fondeur s
est iment à 100 % les nouvelles machines qui ser ont mult icoeur, que se
soit dans le deskt op, le ser veur, le por t able, et même les t éléphones por -
t ables ! L’ar gument ant i-par allèle est cependant non négligeable : la plus
par t des PC act uellement en act ivit é ne sont pas mult icor es. Mais d’ici
5 ans, le par c exploser a. Et cinq ans ce n’est pas gr and chose…
C’est donc aujour d’hui qu’il faut compr endr e la pr ogr ammat ion par allèle.
Car cet t e pr ogr ammat ion est loin d’êt r e " fr iendly " comme vous le ver r ez
r apidement dans not r e gr and dossier à par aît r e sur plusieur s numér os.
On change de philosophie de code. Il faut penser mult i dimension du code
en quelque sor t e : exécut er plusieur s t âches par allèlement . Avec t out e la
complexit é de gest ion, de concur r ence, de mémoir e, et c. Les r isques de
bugs se mult iplient et , en pr ogr ammat ion mult icor e, ces er r eur s ne par -
donnent pas. Cependant , n’allons pas cr oir e qu’il faille par alléliser son
code à out r ance. Au cont r air e, un code t r op par allèle peut s’avér er plus
lent qu’un code " nor mal " ! Il faut donc définir les por t ions du code à par al-
léliser. La pr ior it é ser a donnée aux fonct ions t r ès exigeant es en puissan-
ce de calcul comme les t r ait ement s Audio / Vidéo, les r equêt es de don-
nées, la compr ession, la cr ypt ogr aphie, et c.
Demain, les out ils, les langages vont offr ir de puissant es fonct ions par al-
lèles dir ect ement dans la machine vir t uelle (ex. : Java et .Net ) et des
libr air ies vont aider le gent il développeur à par alléliser en quelques
minut es un code. Mais, n’at t endez pas non plus la solut ion mir acle ! Le
par allélisme nécessit e une solide compét ence t echnique et une r igueur de
codage ext r ême. Cependant , le développeur par allèle est r éellement l’ave-
nir et là, il appor t e une valeur, une compét ence.
Aut r e sujet chaud du moment , lui aussi r écur r ent me dir ez-vous, l’agilit é.
Non pas que le développeur doive devenir aussi souple physiquement
qu’un acr obat e… mais il doit int égr er le mer veilleux monde des mét hodes
agiles. Depuis quelques mois, le couple Scr um / eXt r eme Pr ogr amming
connaît un succès fulgur ant dans les équipes de développement . Et pour
cause, Scr um offr e un cadr e or ganisat ionnel, et XP r edonne joie et plai-
sir aux développeur s. Et oui, fini le t emps du pr ogr ammeur à la chaîne,
codant sans r éellement r éfléchir … ! Le développeur r evient au cent r e du
pr ojet , avec de nouvelles r esponsabilit és. Où, quand, comment ? C’est ce
que l’on ver r a dans not r e gr and dossier du mois.
Si nous avions pr édit la sur vie, la mor t puis la r ésur r ect ion de not r e ami
le développeur, aujour d’hui, nous lui pr édisons sa r éincar nat ion. Comme le
chat , le développeur n’aur ait -il que neuf vies ? Rendez-vous au numér o
150 de Pr ogr ammez ! pour le savoir. Le suspense ser a insout enable…
■ Fr ançois Tonic
Rédact eur en chef
é
d
i
t
o
\
\
03-05 edito sommaire120 20/05/2009 10:28 Page 5
06-07 20/05/2009 9:49 Page 6
06-07 20/05/2009 9:49 Page 7
actu \\ en bref
8 • PROgr ammez ! \\ Juin 2009
D
epuis un mois, les r achat s se suc-
cèdent ! Est -ce la cr ise qui accélèr e
les r appr ochement s et la nécessit é
de cr oissance ext er ne des édit eur s ? Quoi
qu’il en soit en quelques semaines, deux
gr andes figur es du développement ont ét é
absor bées : Sun et Bor land. Pour Sun, on
at t endait depuis des mois le r achat . Si IBM
t enait la cor de, c’est finalement Or acle qui
r afle une fois de plus la mise pour plus de 7
milliar ds de dollar s. Or acle avait déjà une
for t e implicat ion dans Java, cela ne fait que
r enfor cer cet t e t endance. Mais au-delà,
Or acle complèt e ses offr es logicielles not am-
ment avec Glassfish et les out ils de sécur it é
de Sun ou encor e sur le mat ér iel not am-
ment les lignes de ser veur s et de st ockage,
t out en met t ant la main sur un syst ème d’ex-
ploit at ion fiable et r obust e : Solar is. Et sur -
t out , MySQL t ombe sous la coupe d’Or acle.
Ce r achat pose aussi des quest ions de
pér ennit é de cer t aines offr es, not amment
dans le logiciel car elles font doublon avec
les gammes act uelles d’Or acle comme pour
le ser veur d’applicat ion, la base de données.
De quelle manièr e, MySQL ser a-t -il posit ionné
par r appor t à Or acle Dat abase ? L’aut r e
quest ion concer ne l’implicat ion des dévelop-
peur s Sun dans les pr ojet s open sour ce.
L’effor t ser a-t -il pour suivi, par exemple dans
OpenOffice ou encor e Net beans. Mais pour
Or acle, il s’agit aussi de mieux se posit ionner
sur le cloud comput ing et la vir t ualisat ion,
deux mar chés qui ét aient t r ès mal adr essés
par l’édit eur.
L’aut r e sur pr ise du mois est le r achat pur et
simple de Bor land par Micr o Focus. Bor land
avait déjà cher ché à se r ecent r er sur le
cycle de vie, la modélisat ion et la gouver nan-
ce, en se délest ant t ot alement des out ils de
développement s, de CodeGear à Embar ca-
der o. La concur r ence accr ue des out ils de
cycle de vie y est sans dout e pour quelque
chose, ainsi que la pr ofusion d’out ils de
modélisat ion, mar ché sur lequel, Bor land
Toget her avait du mal à r est er un act eur
significat if. Cet t e opér at ion se mont e à envi-
r on 75 millions de dollar s. Rest e à savoir si
l’ensemble des gammes act uelles ser ont
pour suivies. Micr o Focus a aussi mis la main
sur une par t ie des out ils de Compuwar e :
gamme t est et de qualit é. Compuwar e
cher che là aussi à r ecent r er son act ivit é sur
les per for mances et opt imisat ion sur main-
fr ame et la gest ion du por t efeuille applicat if.
Ces r achat s modifient le mar ché du dévelop-
pement et il faut encor e s’at t endr e à d’im-
por t ant s r achat s dans les mois à venir, en
par t iculier, côt é Micr osoft …
■ Embarcadero sor t une nouvelle offr e
dédiée aux données et Java afin de
dét ect er et de cor r iger les pr oblèmes de
per for mances, DB Opt imizer 1.5 et Per -
for mance Cent er. Ces out ils per met t ent
de pr ofiler et de r égler finement les
codes Java et SQL depuis la couche
applicat ive Java jusqu’à la base de don-
nées, facilit ant ainsi le développement de
codes et la dét ect ion des pr oblèmes
avant qu’une r equêt e applicat ive ou de
base de données ne soit envoyée à la
pr oduct ion.
■ Jet Brains a dévoilé un IDE Ruby :
RubyMine 1.0. L'un des avant ages clés
de RubyMine r éside dans la compr éhen-
sion poussée des spécificit és du langage
de Ruby, sa nat ur e dynamique, et les
convent ions de code. Il a connu un beau
succès depuis sa disponibilit é. RubyMine
appor t e une gamme de r efact or isat ion
efficace compat ible avec Rails, simpli-
fiant considér ablement par là-même le
pr ocessus de modificat ion des codes.
■ Quest annonce l’int égr at ion de vWor k-
place, gest ionnair e de post e de t r avail
vir t ualisé, aux envir onnement s Micr o-
soft . Cela signifie que cet t e solut ion est
désor mais compat ible avec Syst em Cen-
t er Vir t ual Machine Manager et App-V
(vir t ualisat ion d’applicat ion).
■ Perforce a dévoilé un nouveau compo-
sant : Per for ce Ser ver Log Analyser. Il
per met aux administ r at eur s de t éléchar -
ger leur s fichier s de log pour une analyse
inst ant anée. Ils disposent pour cela d’un
accès sécur isé à leur s fichier s de log et
à leur s r ésult at s d’analyses, qui peuvent
êt r e st ockés jusqu’à dix jour s. Disponible
gr at uit ement sur la Base de Connaissan-
ce du sit e Per for ce :
ht t ps:/ / kb.per for ce.com/ psla.
■ En at t endant la disponibilit é de Flex 4
et des nouveaux out ils, dont Cat alyst ,
Adobe annonce une vingt aine de socié-
t és qui suppor t ent St r obe. St r obe est un
fr amewor k pour aider les édit eur s et
const r uct eur s à avoir un st andar d pour
les media player. Les fonct ions sont t r ès
int ér essant es comme le st r eaming dyna-
mique, la fonct ion pause dans du dir ect
live, une gest ion fine de la qualit é de ser vice,
et c. St r obe devr ait êt r e disponible dans
quelques mois. www.adobe.com/ go/ st r obe
JUI N
Le 04 juin, Hôt el Cast ille, Par is
1er, invit at ion au lancement d’I nt el
Par allel St udio, la suit e complèt e
pour le développement par allèle.
Pr ogr amme dét aillé sur :
ht t p:/ / www.sosdeveloper s.com/ in
t el/ for m.ht ml
Le 09 juin, Lille, Eur a Technolo-
gies, WYGDAY 2 0 0 9 , pour com-
pr endr e c omment l es
t echnologies vont suppor t er vot r e
fut ur ( Gr een IT, Cloud Plat for m,
Mi cr osof t Sur f ace, Li ve Mesh,
Vir t ual Ear t h/ Google Maps, .NET
4 ou encor e Azur e).
ht t p:/ / wygday.wygwam.com/
Le t our découver t e Flex 3 et Air à
t r aver s la Fr ance. At elier s gr a-
t ui t s de découver t e des out i l s
Adobe.
ht t p:/ / www.baao.com/ For ma-
t ions/ LE_TOUR_DE_FLEX_ET_AI
R_.ht ml
Du 1 7 au 1 8 j ui n 2 0 0 9 , Par i s
Expo - Por t e de Ver sailles
SALON ONLI NE 2009, l’événement
des solut ions web et mobile
ht t p:/ / www.online-expo.fr /
JUI LLET
Du 06 au 07 juillet 2009, Gr and
amphit héât r e de l’EPITA,
les PHP Days "I ndust r ialisez vot r e
PHP!" vous per met t r ont d'acqué-
r ir les compét ences nécessair es
à une ut ilisat ion pr ofessionnelle
de PHP.Or ganisé par Alt er way et
Anaska. www.phpdays.com
agenda \\
Marché
Rachat de Sun, Borland, et d’une partie de
Compuware : le nouveau visage du développement
08-09 20/05/2009 9:46 Page 8
Perforce, le système de Gestion de Configuration Logicielle rapide
Tous droits réservés. Toutes les marques citées sont des marques ou des marques déposées de leurs propriétaires respectifs.
Téléchargez sans conditions une copie gratuite de Perforce sur
www.perforce.com. Un service d’assistance technique gratuit est
offert pendant toute la période d’évaluation.
Nos équipes supports sont toujours disponibles afin de partager leurs
expertises en personne - pas de réponses automatiques, de
répondeurs ou de centres d'appel. Nos ingénieurs supports
hautement qualifiés se font une fierté de traiter rapidement vos
appels et de vous apporter des réponses précises.
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.
Le support technique Perforce
Des traitements rapides, des réponses précises
08-09 20/05/2009 9:46 Page 9
actu \\ en bref
10 • PROgr ammez ! \\ Juin 2009
■ Smartesting, spécialisé dans les out ils de
t est s, annonce Test Designer 3. 4. L’out il
per met de génér er aut omat iquement des
t est s fonct ionnels à par t ir d’un module.
Cet t e ver sion simplif ie la cr éat ion des
modèles de t est s avec l’ajout de nouveaux
assist ant s, l’édit eur est maint enant int égr é à
Eclipse. D’aut r e par t il sait s’int égr er aux
gr osses solut ions de t est s du mar ché
comme HP Qualit y Cent er.
■ Oracle lance une nouvelle ver sion de Beehi-
ve. Celle-ci r enfor ce le syst ème de build unifié
pour l’ent r epr ise avec de nouveaux out ils de
collabor at ion (mail, calendr ier, espace de
t r avail en équipe, et c.). Plus que jamais l’out il
cher che à aider l’ent r epr ise à mieux collabo-
r er et à amélior er la par t ie web pour le t r a-
vail en équipe.
■ Ubunt u lance un concur r ent fr ont al à
Micr osoft Live Mesh : Ubunt u One. Il s’agit
d’un ser vice st ockage et de synchr onisat ion
des données sur le cloud, comme Mesh.
Une fois inscr it , il faut inst aller un client
deskt op sur son Ubunt u. On dispose d’un
" deskt op " vir t uel comme avec Mesh mais
en moins er gonomique. Dommage que le
client deskt op ne soit disponible que sous
Ubunt u. La ver sion de base (2 Go de st ocka-
ge) est gr at uit e. La ver sion 10 GB est payan-
t e (10 dollar s par mois).
■ Eclipse 3.5 ser a disponible fin juin. Cet t e
ver sion appor t e pas mal de changement s :
suppor t de Solar is 86x pour SWP, nouveau
module d’inst allat ion de logiciels, changement
d’édit eur s et de pages dans les édit eur s par
des r accour cis clavier s, nouvelles opt imisa-
t ions ent r e Eclipse et Cocoa (MacOS X),
compar at eur d’API (pr at ique en cas de chan-
gement ). Sit e : www.eclipse.org
■ SpringSource a r endu disponible Spr ing-
Sour ce t c Ser ver, une ver sion ent r epr ise de
Tomcat . Elle se dest ine aux Dat acent er s, aux
envir onnement s vir t uels et cloud comput ing.
Il est pr évu de livr er ce ser veur sous for me
d’appliance vir t uelle opt imisée pour VMwar e.
Sit e : www.springsource.com
C’est la grande
nouveauté du mois
de mai. Après une
pré-version lourde et
d’une lenteur
souvent horripilante,
Microsoft livre enfin
aux développeurs
une bêta du prochain
Visual Studio qui
annonce de
nombreuses
nouveautés.
L
a ver sion bêt a, dispo-
nible à l’écr it ur e de
l’ar t icle, pèse 3, 6 Go en
envir onnement . Net (4, 6
Go avec C++). Bonne nou-
velle dès l’inst allat ion : la
pr ésence de F# (ar t icle
dans ce numér o), de Dot -
f uscat or, des out i l s de
t est s unit air es, du .Net 4,
du fr amewor k Sync.
100% WPF
Ce qui fr appe d’emblée,
c’est une int er face assez
lar gement modifiée. Elle se
veut pl us cl ai r e, moi ns
complexe, dot ée d’édit eur s
pl us er gonomi ques. On
const at e aussi la pr ésence
d’une nouvel l e f onct i on
zoom sur puissant e, pr euve
que Visual St udio s’appuie
sur le fr amewor k Windows
Pr esent at ion Foundat ion
(WPF). L’un des focus de
cet t e ver sion concer ne le
cycle de vie des applica-
t ions que Micr osoft veut
démocr at iser aupr ès des
développeur s. Team Sys-
t em 2010 se dot e en effet
de nouvel l es f onct i ons
(fonct ion découver t e des
codes exist ant s, nouveaux
diagr ammes de modélisa-
t ion, out ils amélior és pour
la document at ion…).
Visual St udio 2 0 1 0 sup-
por t e l’ensemble des der -
nièr es évolut ions de . Net
et t out par t iculièr ement
.Net 4.0 que nous dét aille-
r ons dans les pr ochains
numér os. Ret enons ici le
suppor t nat if et en managé
(. Net ) de W i ndows 7 ,
d’une mise à niveau des
out ils de développement
pour Office, du suppor t de
Shar epoint , de Silver light
(uniquement 2. 0 dans la
bêt a t est ée). Aut r e gr osse
nouveaut é, la pr ésence du
cloud comput ing avec une
int égr at ion t r anspar ent e
des kit s de développement
Azur e. Jusqu’à pr ésent , il
ét ait par fois délicat de les
inst aller avec Visual St udio
2008. Aut r e sur pr ise bien-
venue, l’ar r ivée du suppor t
de DB2 et d’Or acle dans
les bases de données, en
plus du classique SQL Ser -
ver ! Aut r e gr osse nou-
veaut é : le suppor t par
défaut du développement
par allèle pour les pr oces-
seur s mult icoeur s (en C++
et . net ). Concer nant l a
modélisat ion, out r e la ver -
sion Ar chit ect de Team
Syst em, le pr ojet Oslo ser a
aussi sans dout e pr ésent .
Oslo est la pier r e angulair e
de l’appr oche t r ansver sale
et ver t icale de la modélisa-
t ion chez Micr osoft .
Une version
prometteuse
A l’heur e act uelle, il n’y a
pas de dat e officielle de
sor t ie. On évoque souvent
une disponibilit é fin 2009,
début 2010, sans plus de
pr écision. Il est pr obable
que cet t e sor t ie se dér oule
plusieur s semaines apr ès
Windows 7. Nos pr emier s
t est s mont r ent qu’il faut
t out de même une machi-
ne pui ssant e avec une
gr osse r éser ve de mémoi-
r e vi ve. Les l ent eur s
const at ées ici et là (not am-
ment sur la t oolbox) appa-
r aissent nor males pour
une bêt a. At t endons les
évol ut i ons de per f or -
mances dans l es pr o-
chai nes ver si ons pour
mieux juger.
IDE
Visual Studio2010 :
enfin disponible en bêta !
10-11 OBJECT pub 20/05/2009 10:30 Page 10
Juin 2009 \\ PROgr ammez ! • 11
actu \\ sécurité
En 2002, apr ès une sér ie r et ent issant e de vulnér abilit és dét ect ées
dans les logiciels Micr osoft , Bill Gat es siffle la fin de la r écr éat ion.
Les failles d’Int er net Explor er et celles du syst ème d’exploit at ion
inquièt ent les ent r epr ises ut ilisat r ices, et cer t aines commencent à
t est er sér ieusement les offr es alt er nat ives. Bien sûr, un simulat eur
de vol dissimulé dans Excel n’est pas la fin du monde.
Sous le nom de Secur it y Development Lifecycle (SDL), soit Cycle de
développement sécur isé, l’init iat ive Micr osoft a pour object ifs de
met t r e la sécur it é au cœur des développement s de t ous les pr oduit s,
et de par t ager les r ésult at s de cet t e polit ique avec ses par t enair es. Il
ne faut pas cr oir e que le pr emier object if soit si simple : en effet ,
pour des r esponsables de lignes de pr oduit s, la sécur it é dans un pr e-
mier t emps coût e cher. Il n’est donc pas sur pr enant de devoir
at t endr e 2004 pour voir la démar che SDL génér alisée à l’ensemble
de Micr osoft , et 2005 pour êt r e r endue disponible au r est e de l’éco-
syst ème. Où en somme-nous aujour d’hui, 7 ans apr ès le lancement
de ce pr ocessus ? Si vous vous r appelez le dossier dans Pr ogr am-
mez ! concer nant les 25 er r eur s de pr ogr ammat ion les plus cou-
r ant es, il sembler ait que nous soyons encor e à l’âge de pier r e en ce
domaine ! D’apr ès les st at ist iques cit ées par Micr osoft , 70% des édi-
t eur s de logiciels font leur s t est s de sécur it é… apr ès la mise en
vent e de leur logiciel. On se heur t e en fait à deux t ypes de ment alit é :
le sempit er nel " la sécur it é coût e " et également " le syst ème d’ex-
ploit at ion devr ait êt r e là pour nous pr ot éger ". Faux, et faux.
Sécurité
Microsoft relance SDL
M odel i o : N ouvel out i l de modél i sat i on
Modél i ser sur toute l a portée de l ’ entrepri se pour un al i gnement SI/Méti er
M odelio est disponible en trois éditions
• Fr ee : U n o u t i l c o m p l et d e m o d él i sat i o n gr at u i t !
• Expr ess Java : U n o u t i l d e d év el o p p em en t Jav a gu i d é p ar l e m o d èl e d e h au t e
p er f o r m an c e p o u r seu l em en t 1 0 0 € !
• Ent er pr i se : La so l u t i o n d e m o d él i sat i o n c o m p l èt e, su p p o r t an t l e t r av ai l d e gr o u p e,
ex t en si b l e av ec u n e r i c h e p al et t e d e m o d u l es d e m o d él i sat i o n et d e gén ér at i o n
d i sp o n i b l es su r ét agèr e
M odéliser n’a jamais été aussi abordable et productif
• Ergo n o m i e si m p l e et p r o d u c t i v e
• Su p p o r t i n t égr é d e U M L, BPM N , BPM , l ’ A rc h i t ec t u r e d ’ En t r ep r i se,
L’ an al y se d es b eso i n s, … d an s u n seu l r éf ér en t i el
• Tr av ai l d e gr o u p e d i st r i b u é, i n t égr é à SV N / Su b v er si o n
• D es gén ér at i o n s su r ét agèr e ad ap t ab l es p o u r t o u t es l es c i b l es
• Su p p o r t M D A : t r an sf o r m at i o n , ex t en si b i l i t é et ad ap t ab i l i t é
M odél i sat i on
du Syst ème,
de l ’ Ar chi t ect ur e
& du Logi ci el
G énér at i on
de Rappor t s &
D ocument at i on
G énér at i on
BPEL, W SD L
I nt égr at i on
aux out i l s t i er s
O bj ect i fs,
Exi gences,
Règl es mét i er
& D i ct i onnai r e
w w w. model i osoft . com
M odél i sat i on de l ’ Ar chi t ect ur e d’ Ent r epr i se,
des Pr ocessus M ét i er
& de l ’ Ar chi t ect ur e O r i ent ée Ser vi ces
G énér at i on de Code
M ul t i ci bl es, pour Fr amew or ks
sal es@model i osoft . com
Tél . : 0 1 3 0 1 2 1 8 4 0
A la mi-mai, Micr osoft a lancé un " nouveau SDK " compr enant :
- Le guide SDL ver sion 4.1.
- Une int égr at ion d’out ils SDL dans Team Syst em, l’envir onnement
de développement int égr é de Micr osoft . (via un t emplat e)
- Un par t enar iat st r at égique : SDL Pr o Net wor k avec SANS (25
er r eur s de pr ogr ammat ion) et SAIC (une ent r epr ise de cyber -sécu-
r it é t r availlant pour le gouver nement US).
Elle r épond donc aux t r ois object ifs : éduquer (les équipes), aut omat i-
ser (les pr ocessus) et assist er (les pr ojet s). Les cont r aint es de sécu-
r it é s’int ègr ent donc désor mais de f açon t r anspar ent e aux
développement s, et per met t ent enfin le suivi en t emps r éel des failles
de sécur it é, t out en donnant une vue synt hét ique au moment de la
r evue finale du pr ojet . Un exemple à suivr e pour les aut r es édit eur s ?
■ Gilber t Vidal
10-11 OBJECT pub 20/05/2009 10:30 Page 11
I
l est r ar e que la pr ésent at ion d’un logiciel
at t ir e de nombr euses camér as de t élévi-
sion. C’ét ait pour t ant le cas, ce 13 mai,
au siège de l’Inser m (Inst it ut Nat ional de la
Sant é et de la Recher che Médicale). Il est vr ai
que la pr omesse at t ir ait légit imement la cur io-
sit é des médias et de la communaut é scient i-
fique. Nous ét ions là et n’avons pas ét é déçus.
Aujour d’hui, l’équipement nécessair e est un
syt ème simple d’élect r odes au niveau du cuir
chevelu, per met t ant de capt er l’act ivit é élec-
t r ique cér ébr ale, analogue au disposit if de
l’élect r o-encéphalogr amme.
Plusieur s expér iences ont ét é pr ésent ées,
dans des domaines de r éalit é vir t uelle et de
sant é.
REALITE VIRTUELLE
L’expér ience a per mis de mont r er que l’appli-
cat ion dét ect ait que le sujet avait l’int ent ion de
déplacer sa main gauche ou sa main dr oit e.
L’applicat ion passe par une phase d’appr ent is-
sage, cor r espondant à celui nécessair e pour
un logiciel de r econnaissance de la par ole.
Apr ès une sér ie de t r ait ement s des signaux, il
est possible de savoir quelle ét ait la main ut ili-
sée pour le mouvement imaginé par exemple,
l’onde cér ébr ale pr ovoquée par l’imager ie
ment ale du sujet est dét ect ée et commande
un déplacement sur l’écr an. On r econst it ue en
3D, et en t emps r éel, l’act ivit é cér ébr ale. La
démonst r at ion ét ait dans le domaine du jeu
vidéo. Les handicapés mot eur pour r ont ainsi
plus facilement accéder à l’univer s vir t uel.
L’applicat ion peut également êt r e un out il
d’ent r aînement cér ébr al, souligne Anat ole
Lécuyer, r esponsable du pr ojet à l’Inr ia
NEURO-FEEDBACK
L’appor t de l’Inser m a ét é not amment le r epé-
r age des " mar queur s élect r o-encéphalogr a-
phiques " : j’écout e avec l’or eille gauche ou
l’or eille dr oit e. " Nous explor ons act uellement
la possibilit é de communiquer avec une per -
sonne dans le coma, afin d’essayer de la sor t ir
de son ét at végét at if ", explique Jean-Philippe
Lachaux, un des r esponsables du pr ojet , à
l’Inser m. Le concept de neur o-feedback ouvr e
par ailleur s des champs t hér apeut iques infinis.
La per sonne essaie de modifier le " signal " :
les applicat ions concer nent la douleur, ou des
gênes de t ype accouphènes. Ou encor e des
t r oubles de l’at t ent ion chez l’enfant hyper act if
ou encor e la r ééducat ion post -t r aumat ique.
Le P300 speller :
L’écriture par la pensée
Gr âce au logiciel OpenViBE, l’Inser m a dévelop-
pé une int er face simple et conviviale qui offr e
la possibilit é d'écr ir e des phr ases en sélect ion-
nant , simplement par la pensée, des let t r es
pr ésent ées sur un écr an. L’expér ience a mon-
t r é que, au cour s de l’affichage successif
de lignes et colonnes de let t r es, sur lignées, la
per sonne focalise son at t ent ion sur une let t r e
à épeler. Lor sque la ligne ou la colonne
cont ient la let t r e choisie, une r éponse cér é-
br ale par t iculièr e est génér ée. Cet t e r éponse,
connue des cher cheur s, est déclenchée
quand l’individu a dét ect é un st imulus at t endu
qui appar aît de manièr e impr évisible. Elle sur -
vient envir on 300 ms apr ès la st imulat ion,
d’où son nom de P300. Il est de cet t e manièr e,
possible de savoir sur quelle let t r e la per sonne
focalisait son at t ent ion.
événements \\ int er face
12 • PROgr ammez ! \\ Juin 2009
Neuf années-homme pour développer OpenVibe. L’équipe de
Rennes de l’INRIA était fière de présenter à Paris, le 13 mai,
OpenVibe, le premier logiciel français permettant d’ " agir par la
pensée ". Il est gratuit et open-source, vous trouverez le lien sur
programmez.com.
OpenVibe :
9 années/ homme
Yann Renar d est l’ingénieur r esponsable
du développement d’OpenVibe, à L’Inr ia. Il
a œuvr é avec deux aut r es développeur s
pendant 3 ans. Il nous a livr é quelques
dét ai l s sur cet t e appl i cat i on de
9 années/ homme : " Le code est en C++.
L’applicat ion compor t e plus de 150 000
lignes de code. Elle est t r ès modulair e, à
base de composant s connect és par une
int er face gr aphique dr ag&dr op. L’ar chit ec-
t ur e est planifiée pour le mult i-coeur, et
pr êt e pour l es cl ust er s, per met t ant
d’agencer les modules exist ant s et ceux
qui ser ont ajout és " Anat ole Lécuyer, dir ec-
t eur du pr ojet , l’a init ié en 2005, dans le
cadr e d’une unit é de l’Inr ia dédiée aux
mondes vir t uels, basée à Rennes. L’ouver -
t ur e de la for ge de OpenVibe r epr ésent ait
pour lui et pour l’équipe le commencement
dans la vie r éelle d’un pr ojet qui ir a loin.
CONTRIBUEZ
au Projet OpenVibe !
Sur le sit e officiel, les développeur s dis-
posent de plusieur s out ils. Un Designer
per met de modéliser et de t est er son
Int er face Cer veau-Or dinat eur. Acquisi-
t ion Ser ver per met de communiquer
ent r e le mat ér iel d’acquisit ion (= casque)
et l’applicat ion OpenVibe.
Disponible en open sour ce, OpenVibe
évoluer a et se complèt er a gr âce à vous,
les développeur s. Pr ogr ammez ! suivr a
r égulièr ement les évolut ions ! Le code sour ce et les binair es (137 Mo) sont disponibles
sur Linux et Windows. Le pr ojet est sous licence LGPL 2. A vous de jouer. Sit e :
ht t p://openvibe.inr ia.fr . (Rendez-vous également sur www.pr ogr ammez.com !)
C
r
é
d
i
t

:

P
r
o
g
r
a
m
m
e
z
/
J
.

K
a
m
i
n
s
k
y
PILOTER L’ORDINATEUR PAR LA PENSEE !
OpenVibe, la première ICO (Interface Cerveau-
Ordinateur) est disponible, en Open Source !
12-13 20/05/2009 12:06 Page 12
actu \\ en bref
■ Windows 7 est désor mais disponible en ver sion RC. La ver sion
finale devr ait êt r e disponible ver s oct obr e ou novembr e si t out va
bien. Pour début er dès maint enant les t est s de compat ibilit é des
applicat ions, Micr osoft Fr ance a ouver t un sit e spécifique : Windows 7
Applicat ions et Compat ibilit é. Cet t e excellent e init iat ive concer ne
aussi bien les développeur s, édit eur s que les ut ilisat eur s. Sit e :
ht t p://www.micr osoft .com/fr ance/windows/windows7/compat ibilit e/default .aspx
■ Kapitec, dist r ibut eur exclusif de Web Per for mance Load Test er,
annonce l’ar r ivée de la ver sion 3.6. Cet t e ver sion int ègr e de nom-
br euses nouveaut és : nouvelles analyses ut ilisat eur s, nouveau
module des cas de t est s, r epor t ing amélior é, nouvelles mét hodes
pour les t est s de char ge.
■ Rasdaman 8 est désor mais disponible. Il s’agit d’une ext ension
dest inée à Post gr eSQL dédié au st ockage maillé dans une base.
Cela signifie qu’il t r ait e des données de plusieur s dimensions en
t r ès gr os volumes comme peut le fair e Post GIS pour les données
géospat iales. Des API sont disponibles en C++ et Java.
■ Qt souhait e mieux fédér er les
développement s de la commu-
naut é aut our de Qt et de ses
pr ojet s. Pour ce fair e, l’édit eur
vient d’ouvr ir une plat e-for me
collabor at ive pour la communau-
t é : Git or ious. Une excellent e ini-
t iat ive ! sit e : ht t p://git or ious.or g/
■ ABBYY, four nisseur de t echnologies de r econnaissance de
document s, d’ext r act ion de données et de linguist ique, annonce la
disponibilit é de FlexiCapt ur e Engine 8.0, son nouveau SDK pour
l’int égr at ion des t echnologies d’ext r act ion de données et de docu-
ment s aux applicat ions Windows.
■ Quest Software or ganise une Jour née de la Per for mance IT, le
10 juin au NCI Com-Squar e Par is-La Défense. Dédiée à l’amélior a-
t ion de la per for mance des syst èmes d’infor mat ion, la jour née
compr endr a 3 salles et plus de 15 at elier s sur les t hèmes favor is
de Quest : gest ion des envir onnement s Windows, gest ion des
applicat ions, gest ion de bases de données et gest ion des envir on-
nement s vir t uels. Sit e : ht t p://www.per for manceit 2009.com/
■ Après Sun, Or acle a annoncé le r achat de Vir t ual Ir on Soft war e
spécialisé dans l’administ r at ion des ser veur s vir t ualisés et l’alloca-
t ion dynamique des r essour ces. L’administ r at ion des envir onne-
ment s vir t ualisés devient l’élément st r at égique de t out e st r at égie
de vir t ualisat ion et la plus value des édit eur s alor s que les
couches de vir t ualisat ion (hyper viseur, player …) deviennent des
commodit és pour l’ut ilisat eur.
Alter Way, intégrateur Open Source de référence,
couvre les besoins de l’ensemble du système
d’information avec ses quatre offres
CONSULTING
Conseil en architecture
Choix d’outils
Industrialisation
Best practices
Audits
SOLUTIONS
SOLUTIONS APPLICATIVES 
Applications Web, ECM, E-commerce, Intégration de données,
Business intelligence, Développements spécifiques
SOLUTIONS D’INFRASTRUCTURE 
Supervision, Serveur de messagerie, Serveurs d’infrastructure,
Bases de données, Management IP, Filtrage et partage des
connexions Internet, Sécurité
FORMATION
Un catalogue de plus de 60 formations
Des programmes de certifications : PHP, MySQL, PostgreSQL, Java
1200 personnes formées par an
Près d’une centaine d’intervenants sur tous les sujets dont
quinze internes certifiés
Des partenariats forts : SUN, MySql, Talend, Ingres…
HOSTING
Hébergement à haute disponibilité 24/7
Exploitation et infogérance
Solutions SaaS
Solutions de stockage
Solutions d’e-commerce
Des solutions techniques performantes et stables
OPEN SOURCE
TECHNOLOGIES
PHP / Python / Java / ECM
JasperSoft / Talend / Bases de données
Open-Xchange…
Le libre, autrement
www.alterway.fr
12-13 20/05/2009 12:06 Page 13
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.
Dans les prochains numéros, nous continuerons à aborder cette
épineuse question que l’on oublie trop souvent !
■ Fr ançois Tonic
gr os plan \\ mult i-plat e-for me
14 • PROgr ammez ! \\ Juin 2009
Le casse-tête
du multi-plate-forme
©
i
s
t
o
c
k
.
c
o
m
/
7
7
D
Z
I
G
N
14-25 complil croisée 20/05/2009 10:54 Page 14
Juin 2009 \\ PROgr ammez ! • 15
gr os plan \\ mult i-plat e-for me
C
omme dans t out développement ,
le mult i-plat e-for me ne s’impr ovi-
se pas ! Il faut déjà connaît r e le
cont ext e de l’applicat ion à développer, les
t echnologies, langages envisagés, le t ype
d’ut ilisat eur, et le ou les syst èmes cibles
possibles.
Les langages
et le pr oblème du RIA
Qui dit mult i-plat e-for me, dit aussi langage
de pr ogr ammat ion. Dans un cont ext e
web, pr ivilégiez les st andar ds r econnus :
HTML, xHTML, CSS, REST, At om, Javas-
cr ipt , Ajax. Cependant at t ent ion, sur
HTML, évit ez de t r op vous focaliser sur
HTML 5 t ant que les navigat eur s ne le
suppor t er ont pas ent ièr ement et de façon
opt imale. Sur Ajax, le choix du fr amewor k
ne ser a pas non plus anodin. Dans t ous
les cas, une gr osse phase de t est ser a
nécessair e (voir plus loin dans ce dossier ).
Par cont r e on peut r encont r er des soucis
sur un développement RIA (Rich Int er net
Applicat ion). Le plus univer sel r est e
Adobe Flash / Flex fonct ionnant aussi sur
Windows, MacOS X et Linux. Sa déclinai-
son deskt op, AIR, fonct ionne aussi sur les
t r ois syst èmes. Donc peu de souci à se
fair e. Par cont r e avec Silver light , si Win-
dows et MacOS X sont bien suppor t és,
Linux r est e en r et ar d malgr é l’ar r ivée du
pr ojet Moonlight . Et sur l’ut ilisat ion de
JavaFX, le pr ojet demeur e t r op immat ur e
et peu r econnu. XUL ser a aussi une
bonne solut ion mais limit ée aux univer s
Mozilla. Sur le RIA, il n’exist e pas de
r éponse univer selle.
C++ (ANSI) est le langage le plus por t able
même s’il demande de la r igueur et une
bonne compét ence. Cependant , aujour -
d’hui, C++ est LE langage r éfér ence du
mult i-plat e-for me (voir ar t icle sur Qmake).
C# commence lui aussi à se fair e une
belle place, not amment gr âce à la pile
open sour ce Mono qui per met de dévelop-
per un peu par t out avec le même langage
(voir ar t icle Delphi Pr ism). Nous n’oublie-
r ons pas Java qui fonct ionne par t out . Si la
por t abilit é s’amélior e const amment ,
at t ent ion t out de même aux dispar it és des
JVM et aux différ ences de compor t ement
selon les syst èmes. Not amment sur t out
ce qui est int er face nat ive et appels nat ifs.
Rest e l’incont our nable basic. Et oui il
demeur e bien vivant ! Plusieur s envir onne-
ment s per met t ent de fair e de la compila-
t ion mult i cible à par t ir du même code
basic. Le plus connu dans ce domaine est
Real Basic de Real Soft war e. Ensuit e vous
avez un gr and nombr e de langages, de
langages dynamiques et de scr ipt s faisant
par fait ement du mult i-plat e-for me, souvent
dans le domaine web et non deskt op :
PHP, Pyt hon, Ruby, Rails, et c.
Et les out ils ?
L’out illage pour le mult i-plat e-for me est
vast e. Encor e une fois, t out va dépendr e
du pr ojet envisagé. Aujour d’hui de nom-
br eux out ils, not amment open sour ce,
sont disponibles sur plusieur s plat es-
for mes. Si on pr end les classiques Eclipse
et Net beans par exemple mais aussi dans
les out ils Qt , Adobe, et c. En dehor s de
l’édit eur, de l’IDE, il ne faut pas omet t r e les
out ils de t est s, l’int égr at ion cont inue, et c.
Et les choix sont nombr eux : Maven, Ant ,
JUnit (ou aut r es), et c. On peut aussi opt er
pour des envir onnement s t ot alement int é-
gr és et mult i-plat es-for mes, or ient és don-
nées ou non t els que 4D, Omnis.
Test er, t est er, t est er, t est er !
Pour r éellement vér ifier que son code
fonct ionne de la manièr e at t endue sur les
envi r onnement s ci bl es, i l f aut donc
const amment r éaliser des build et t est er
sur t out es les cibles. Il ne faut sur t out pas
at t endr e la fin du développement pour le
fair e. Car en cas de bugs impor t ant s, la
cor r ect ion ser a plus longue et plus diffici-
le, sur t out si la st r uct ur e de l’applicat ion
n’est pas r éalisée en couches st r ict ement
dist inct es, au moins sépar er l’int er face du
code fonct ionnel. Et plus un code ser a
st r uct ur é, modulair e, plus il ser a aisé de
cor r iger les imper fect ions de por t age.
Les envir onnement s de vir t ualisat ion
appor t ent aujour d’hui une souplesse
inégalée pour le développeur. Il peut facili-
t er cr éer des machines vir t uelles spéci-
fiques à chaque scénar io d’ut ilisat ion.
■ Fr anç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.
Bonnes
pr at iques
dès le dépar t
Soget i met en avant 3 clés :
- ne pas se jet er dir ect ement sur le
code, r egar der les besoins, l’envi-
r onnement sur lequel t our ner a l’ap-
plicat ion.
- Avoir un code lisible, modulair e,
facile à maint enir
- Quand la compilat ion est t er minée,
le t r avail n’est pas t er miné !
- A cela se r ajout e bien ent endu la
sépar at ion des couches (int er face,
code fonct ionnel).
Pour les aider, Soget i ut ilise un
modèle de t ype MDA pour modéliser
les couches et r éaliser le découpage
des applicat ions. Les développeur s
ut ilisent des langages et spécifica-
t ions mat ur es du web.
14-25 complil croisée 20/05/2009 10:54 Page 15
P
etit problème cependant : offrez à
un utilisateur Mac une application
au look GTK ou WinForms, et voyez
ses réactions ! L’effort d’intégration gra-
phique à l’OS ne doit surtout pas être négligé.
C’est à ce stade que Delphi PRISM entre en
jeu. Grâce à Mono et Cocoa#, vous pouvez
utiliser PRISM pour développer des applica-
tions Delphi.NET se comportant en tout
point comme une application Cocoa (le fra-
mework fourni par MacOS). Cet article vous
mettra sur les rails de tels développements,
en vous présentant les bases de la coopéra-
tion entre Delphi PRISM et MacOS X.
Prérequis
MacOS X 10.4 (ou supérieur)
• Les Apple Developer Tools : http://develo-
per.apple.com permettent de disposer d’Inter-
face Builder, l’éditeur d’interface graphique
de MacOS X.
• Mono 1.2.6 ou plus récent :
http://www.mono-project.com
Windows XP (minimum)
• Delphi PRISM
• Mono 1.2.6 ou plus récent
Pour des questions pratiques, il est préfé-
rable que MacOS et Windows puissent
communiquer en réseau, afin de partager
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
votre dossier de travail est accessible en
é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
( f i chi er .app, dans " bi n/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-
tion. Si lors de la génération vous obtenez
une erreur de la tâche MacPack disant que
" le répertoire n’est pas vide ", supprimez à
la main le contenu du répertoire " bin " de
votre solution et recommencez.
Premier projet PRISM
Vous êtes maintenant prêt à créer votre pre-
mière application MacOS X avec Delphi PRISM.
Créez un nouveau projet Mono (Fichier > Nou-
veau > Projet) de type " Application Cocoa (Leo-
pard) " ou " Application Cocoa (Tiger) ", suivant
votre version de MacOS. Créez le répertoire de
la solution dans votre répertoire de travail par-
tagé entre Windows et MacOS. Plusieurs
fichiers sont générés. Seuls deux d’entre eux
retiendront ici notre intérêt :
• Interface.nib : il apparaît comme un réper-
toire contenant, entre autres, le fichier
" designable.nib " dans l’explorateur de solu-
tion de Visual Studio. Il apparaîtra comme
un fichier sous MacOS. Il s’agit du fichier
que vous éditerez avec Interface Builder
pour créer votre interface utilisateur.
• ApplicationController.pas : il s’agit du
contrôleur de votre application, que vous
implémenterez avec Delphi PRISM et qui
dialoguera avec l’interface graphique par
le biais d’actions —définies comme des
méthodes et correspondant aux événe-
ments utilisateur— et d’outlets, points
d’accès aux composants de votre interfa-
ce, définis comme des champs de votre
classe. Nous y reviendrons.
Design de l’interface
graphique
Laissez de côté Delphi PRISM et, sous
MacOS, rendez vous dans le répertoire de
votre projet nouvellement créé. Ouvrez le
fichier Interface.nib avec Interface Builder.
Si vous ne connaissez pas encore le logiciel,
vous serez peut-être dérouté au premier
abord par ses nombreuses fenêtres. Voici
une rapide présentation : [Fig.1]
Dans l’idée, cette fenêtre montre ce que
contient votre fichier NIB. Pour faire un
parallèle avec Delphi, les objets qui appa-
raissent ici pourraient être comparés aux
composants non visibles que vous placeriez
dans un DataModule. Cette comparaison
n’est qu’approximative, puisqu’apparaît éga-
lement un objet pour chaque fenêtre de
votre NIB. Le dernier objet, nommé " Appli-
gros plan \\ multi-plate-forme
16 • PROgrammez ! \\ Juin 2009
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.
Fig.1
Fig.2
Fig.3 Fig.4
Figure 1 - Contenu du fichier NIB
Figure 3 - Inspecteur d'objets Figure 4 - Bibliothèque de
contrôles
Figure 2 - Fenêtre par défaut
Pub
14-25 complil croisée 20/05/2009 10:54 Page 16
Montez en gamme à tarif réduit !
Vous possédez un outil de développement
de la gamme Microsoft Visual Studio ?
ju
s
q
u
’à
3
0
%
d
e
r
e
m
is
e
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.
Visual Studio Visual Studio Visual Studio Visual Studio
Professional avec MSDN Team System Team Suite
Vous profitez ainsi à prix réduit (selon votre produit) :

Des serveurs Microsoft

Des systèmes d’exploitation Microsoft

De logiciels de productivité : Microsoft Office, Project, Visio…

D’outils de test : Montée en charge, fonctionnels, manuel…

Logiciels de modélisation : diagrammes d’applications, de développement…

Jusqu’à 4 incidents de support technique,

Ressources techniques

Toutes les mises à jour pendant votre abonnement : Visual Studio 10 et Windows 7 dès leur disponibilité
Exemple : Visual Studio 2008 avec MSDN Premium :
1137 €
HT / an / par dev**
au lieu de 1395€
HT
*Valable jusqu’au 26 juin 2009 - Tous les détails des promotions sur notre site internet.
**(abonnement 2 ans obligatoire - licence Open Business)
1
er
revendeur en France en outils de développement Microsoft.
Contactez nos spécialistes MSDN au 04 97 21 58 65
msdn@comsoft.fr – www.sosdevelopers.com/msdn3.htm
Pub VStudio:Mise en page 1 20/05/09 09:47 Page1
14-25 complil croisée 20/05/2009 10:54 Page 17
gros plan \\ multi-plate-forme
18 • PROgrammez ! \\ Juin 2009
cationController ", est un pont vers le fichier
" ApplicationController.pas ". Nous y défini-
rons les actions et outlets nécessaires au
fonctionnement de notre interface. [Fig.2]
Cette fenêtre est tout simplement celle sur
laquelle vous travaillerez, à l’instar des outils
présents dans Delphi ou Visual Studio. Par
défaut, elle comporte une simple barre d’ou-
tils contenant quelques boutons. Nous la
modifierons sous peu en y déposant des
contrôles depuis la bibliothèque.
Les deux fenêtres suivantes sont, respecti-
vement, la bibliothèque de contrôles (visuels
ou non) et de médias disponibles pour votre
interface, et ce qui se rapproche de l’inspec-
teur d’objets. Cet inspecteur propose plu-
si eurs vues permettant d’ édi ter l es
propriétés de l’objet sélectionné dans l’une
des deux fenêtres précédentes. [Fig.3]
Pour notre exemple, nous allons modifier la
fenêtre pour obtenir ceci : [Fig.5]
• Cliquez sur la barre d’outils incluse par
défaut dans la fenêtre et supprimez-la.
• Redimensionnez la fenêtre à la taille voulue
• Dans la bibliothèque, trouvez le label. Il
s’agit du premier composant dans Cocoa >
Views & Cells > Inputs & Values. Déposez un
l abel dans votre f enêtre grâce à un
drag&drop et double-cliquez dessus pour en
changer l’intitulé. Validez par " Entrée ". Vous
remarquerez que des guides vous aident à
placer correctement le composant dans son
conteneur lorsque vous le déplacez.
• Ajoutez un TextField en dessous du label.
• Enfin, ajoutez un bouton. Tous les types de
boutons se trouvent dans Views & Cells >
Buttons. Les différents types de boutons
sont parfois destinés à des utilisations diffé-
rentes, parfois seulement à des design dif-
férents. Ici il s’agit d’un simple Push Button.
Le but de l’application sera très basique :
afficher une boîte de dialogue avec un mes-
sage incluant le nom entré dans le TextField
lorsque l’utilisateur clique sur le bouton.
Le comportement de votre application est
implémenté dans votre objet Application-
Controller, défini dans le fichier " Applica-
tionController.pas ". Afin d’interagir avec
votre interface, la classe est en réalité
déclarée de manière partielle dans un
fichier " designable.pas ", lui-même inclus
dans le fichier " designable.nib " contenu
dans " interface.nib ". Ainsi, toute modifica-
tion apportée dans Interface Builder à l’objet
" ApplicationController " sera répercutée
dans cette classe partielle, et vous pourrez
coder en toute tranquillité dans " Applica-
tionController.pas " en profitant de ce pont
vers votre interface.
Continuons justement notre chemin vers
l’implémentation. Pour que la classe Appli-
cationController puisse agir comme nous le
souhaitons, il faut lui indiquer deux choses :
• Un outlet vers le TextField, grâce auquel
nous pourrons récupérer le texte entré par
l’utilisateur.
• Une action, nommant la méthode à exécu-
ter lorsque le bouton est cliqué.
Sélectionnez l’objet " ApplicationController "
et, dans l’inspecteur, affichez l’onglet " iden-
tity " (l’avant-dernier onglet). Vous pouvez
voir une section " Class Actions " et une sec-
tion " Class Outlets ". Dans la première,
ajoutez une action onClick: dont vous laisse-
rez le type à id.
Dans la seconde, ajoutez un outlet que vous
nommerez edName et qui doit avoir pour
type NSTextField. Pour connaître le type d’un
objet, sélectionnez-le et vérifiez le champ
" Class " dans l’onglet " identity " de l’inspec-
teur. Reste maintenant à indiquer à la clas-
se à qui (ou quoi ) correspondent ces
éléments dans l’interface. Pour cela, il faut
créer des connexions entre les objets grâce
à un drag&drop effectué avec un clic droit.
Cliquez droit sur l’objet " ApplicationControl-
ler " et en maintenant le bouton pressé, glis-
sez l e l i en bl eu qui s’ af fi che j usqu’ au
TextField. Lâchez alors le bouton : s’affiche
une liste des outlets disponibles et de type
compatible avec l’objet visé. Ici, seul edNa-
me devrait s’afficher ; cliquez dessus.
Effectuez la même opération en partant du
bouton vers l’objet " ApplicationController ".
Cette fois, une liste des actions disponibles
s’affiche. Choisissez onClick: que vous venez
de créer. Le selector du bouton, qui est l’ac-
tion exécutée lorsqu’il est cliqué, est mainte-
nant dirigé vers la méthode onClick: que
vous allez implémenter dans votre Applica-
tionController. [Fig.6]
Vous pouvez vérifier toutes ces connexions
en examinant l’onglet " connections " de
l’inspecteur (cinquième onglet) et en sélec-
tionnant les différents objets affectés.
Implémentation
de l’application
Tout est maintenant prêt pour implémenter
l’application. Sauvegardez le fichier NIB et
revenez à Delphi PRISM sous Windows. Afin
de s’assurer que tout est bien synchronisé,
effectuez un clic droit sur le fichier " desi-
gnable.nib " (enfant de " Interface.nib ") dans
l’explorateur de solution, et cliquez sur
" Exécuter un outil personnalisé ". Cela regé-
nère le fichier " designable.pas " avec les
dernières modifications apportées au fichier
NIB. Dans " ApplicationController.pas " ajou-
tez la déclaration de la méthode onClick en
public de la classe ApplicationController :
public
method onClick(sender: Object); partial;
end;
Puis implémentez la méthode :
method ApplicationController.onClick
(sender: Object);
begin
Alert.AlertWithMessage('Bonjour !', 'OK',
nil, nil, 'Bonjour à vous, ' + edName.
Value + ' !').RunModal;
end;
Sauvegardez et générez l’application. Si tout
se passe correctement, vous devriez avoir
dans l e dossi er " bi n/Debug " ou
" bin/Release " un fichier " CocoaApplica-
tion1.app " (suivant le nom de votre projet
bien sûr). Lancez l’application depuis MacOS :
vous avez alors sous les yeux une véritable
application MacOS X, s’intégrant parfaite-
ment à l’OS. Vous avez maintenant entre les
mains un outil qui vous permettra de cibler
un OS en vogue tel que MacOS X de manière
tout à fait sérieuse, tout en conservant la
possibilité d’un portage vers d’autres plates-
formes grâce au framework .NET.
■ Olivier Lance
Etudiant ingénieur SI
www.codegearfrance.com
Fig.5
Fig.6
Figure 5 - Fenêtre finale
Figure 6 - Création d'un lien entre deux composants
14-25 complil croisée 20/05/2009 10:54 Page 18
Juin 2009 \\ PROgr ammez ! • 19
gr os plan \\ mult i-plat e-for me
C
ompiler depuis un syst ème A pour pr oduir e un exécut able,
ou une libr air ie, pour un syst ème B est souvent bien pr a-
t ique. Supposons que l'on développe une applicat ion en C++
avec Qt ou wxWidget s en guise de t oolkit gr aphique. Supposons que
l'on t r availle seulement avec les plat es-for mes Linux et Windows,
mais le r aisonnement est bien sûr valable avec un aut r e choix de
plat es-for mes. C++ per met d'écr ir e du code sour ce por t able. Tr ès
bien. Qt ou wxWidget s, ou même d'aut r es t oolkit s per met t ent d'écr i-
r e du code por t able. Toujour s t r ès bien. Mais compiler un pr ojet sur
chacune des plat es-for mes r isque for t d'obliger à t r availler avec des
out ils de développement différ ent s, évent uellement chacun avec
leur s spécificit és et gér er de mult iples pr ojet s. La compilat ion cr oi-
sée est une r éponse à ce pr oblème. On écr it le code et on le compile
sur une plat e-for me seulement , en pr oduisant des exécut ables pour
chaque plat e-for me cible. Voyons comment pr at iquer cela de Linux
ver s Windows et r écipr oquement , et déjouer quelques pièges.
1
DE LINUX VERS WINDOWS,
LES OUTILS
Un compilat eur cr oisé "qui va bien" est par exemple mingw32, géné-
r alement connu comme compilat eur libr e sous Windows, mais il
exist e aussi sous Linux. Vous pouvez l'obt enir à ht t p:/ / www.libsdl.or g/ le
sit e de la libr air ie SDL, une libr air ie pour écr ir e des jeux por t ables
ent r e Linux et Windows. La pr ésence d'un compilat eur cr oisée n'y
est dont pas sur pr enant e. En t héor ie on t éléchar ge les sour ces du
compilat eur, puis on const r uit celui-ci "à sa main" à par t ir de scr ipt .
Not r e but d'aujour d'hui ét ant simplement la compilat ion cr oisée,
nous t éléchar ger ons plut ôt des binair es t out pr êt s sur le même sit e,
à ht t p:/ / www.libsdl.or g/ ext r as/ win32/ cr oss/ . Téléchar gez l'ar chive dont le
nom cont ient linux-x86. Désar chivez dans le r éper t oir e de vot r e
choix. Par exemple sur ma machine: / home/ fr ed/ cr oss-t ools.
Not r e compilat eur cr oisé est un envir onnement complet dont les
élément s sont r épar t is dans une ar bor escence. Un sous-r éper t oir e
bin pour les exécut ables. Les noms de ceux-ci sont t ous pr éfixés
pour évit er des conflit s avec les out ils classiques. Ainsi g++ devient
i386-mingw32-g++. Un sous-r éper t oir e lib, un sous-r éper t oir e inclu-
de bien évidemment et aussi les sous-r éper t oir es info et man qui
cont iennent les fichier s de document at ions des mêmes noms. Pour
une ut ilisat ion confor t able, le mieux est d'int égr er le t out à vot r e
envir onnement , en ajout ant quelques lignes à vot r e fichier .bashr c
export PATH=/home/fred/cross-tools/bin:$PATH
export MANPATH=/home/fred/cross-tools/man:$MANPATH
export INFOPATH=/home/fred/cross-tools/man:$INFOPATH
2 CONSTRUIRE UN EXÉCUTABLE
Voici un code d'une or iginalit é folle :
// fichier hello.cpp
#include <iostream>
La compilation croisée entre Linux et Windows
La compilation croisée est une opération de compilation qui, effectuée sur un système
produit un exécutable ou une librairie pour un autre système. Voyons comment cela peut
se passer entre Linux et Windows.
using namespace std;
int main(){
cout << "Programmez!" << endl;
return 0;
}
Sa compilat ion est non moins simple
i386-mingw32-g++ -o hello.exe hello.cpp
et pr oduit un exécut able Windows. Nous ne devons pas omet t r e de
ment ionner l'ext ension .exe au fichier pr oduit . Celui-ci est plut ôt volu-
mineux. La r aison est que l'édit ion de liens avec le r unt ime a ét é
effect uée st at iquement par défaut , le but ét ant de pr oduir e un exé-
cut able t ot alement aut onome sur la plat e-for me cible.
3
CONSTRUIRE ET UTILISER
UNE LIBRAIRIE
Une gr osse applicat ion est r ar ement monolit hique, mais ut ilise des
libr air ies. Libr air ies dont les for mat s sont différ ent s selon les plat es-
for mes. En out r e nous voulons :
1) écr ir e un code qui compile aussi bien avec le compilat eur de la
plat e-for me hôt e qu'avec le compilat eur cr oisé.
2) êt r e capable de fair e une édit ion de liens st at ique avec la libr air ie
pour pr oduir e une applicat ion aut onome sur la plat e-for me cible.
Le pr emier point se r ègle simplement en t r ait ant les par t icular it és
des libr air ies par t agées ou dll sous Windows. Celles-ci doivent com-
por t er un point d'ent r ée bien défini et t out es les aut r es fonct ions doi-
vent êt r e expor t ées explicit ement . On obt ient cela avec une dir ect ive
de compilat ion condit ionnelle :
// fichier madll.cpp
#ifdef __WIN32__
#include <windows.h>
#define EXPORT extern "C" __declspec (dllexport)
// Point d'entrée dll Windows.
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID
pvReserved) {
return TRUE;
}
#else
#define EXPORT
#define CALLBACK
#endif
// Une fonction de notre librairie
EXPORT int CALLBACK fois2(int valeur) {
return valeur*2;
}
Pour Linux on compile simplement par
g++ -c madll.cpp
14-25 complil croisée 20/05/2009 10:54 Page 19
gr os plan \\ mult i-plat e-for me
20 • PROgr ammez ! \\ Juin 2009
Et pour Windows
i386-mingw32-g++ -D__WIN32__ -c madll.cpp
4 EDITION DE LIENS STATIQUE
Abor dons maint enant le deuxième point . Soit un code qui ut ilise
not r e libr air ie :
#include <iostream>
#include <windows.h>
extern "C" int CALLBACK fois2(int valeur);
using namespace std;
int main() {
cout << fois2(3) << endl;
return 0;
}
Nous voulons à par t ir de ce code pr oduir e une applicat ion aut ono-
me. Pour cela nous devons t r availler un peu not r e libr air ie qui pour
l'inst ant n'est qu'un fichier objet à l'issue de la compilat ion fait e plus
haut . Commençons par en fair e une ar chive :
ar -rs libmadll.a madll.o
A ce point , si nous t ent ions une édit ion de liens pour génér er la
libr air ie nous aur ions un message d'er r eur :
.//libmadll.a: could not read symbols: Archive has no index;
run ranlib to add one
Nous devons donc ut iliser r anlib comme nous dit le message, mais
at t ent ion ici, piège classique ce n'est pas le r anlib du syst ème hôt e
que nous devons ut iliser mais celui du compilat eur cr oisé. Nous fai-
sons donc :
i386-mingw32-ranlib libmadll.a
et maint enant nous pouvons fair e l'édit ion de liens de la libr air ie pr o-
pr ement dit e :
i386-mingw32-ld -dll -kill-at -o madll.dll madll.o
La dir ect ive -dll par le d'elle-même. Quant à -kill-at nous y r eviendr ons
plus loin. Il est .maint enant possible de const r uir e not r e applicat ion
aut onome en compilant use-madll.cpp :
i386-mingw32-g++ -L./ -o use-madll.exe use-madll.cpp -lmingw32
-lmadll
Il y a ci-dessus une pet it e subt ilit é. Pour quoi ajout ons-nous la libr air ie
mingw32 qui est liée aut omat iquement de t out e façon ? Ici nous
n'avons pas du t out besoin de le fair e en fait . Mais c'est une bonne
habit ude à pr endr e que de for cer la lect ur e de cet t e libr air ie en pr e-
mier. Sans t r op ent r er dans les dét ails dans ce cour t ar t icle, disons
qu'il est possible, dans de gr osses applicat ions, que vous r encon-
t r iez un message d'er r eur agaçant disant que pour une applicat ion
GUI, la fonct ion WinMain n'est pas définie, alor s qu'elle l'est pour -
t ant bel et bien dans vot r e code. Casse-t êt e cour ant qui en a éner vé
plus d'un :) Une par t icular it é de l'édit eur de liens ld est de cher cher
un symbole r equis par une libr air ie dans les libr air ies qui la suivent
dans l'or dr e d'inclusion. Or il se t r ouve que mingw32 a besoin de
WinMain, et que par défaut mingw32 est incluse aut omat iquement
en der nier et ne peut pr ofit er de vot r e définit ion de WinMain. Voilà
pour quoi nous r ecommandons, avec la ligne de compilat ion ci-des-
sus, de t oujour s for cer le bon or dr e d'inclusion des libr air ies.
5 EDITION DE LIENS DYNAMIQUE
Sous Windows une libr air ie peut êt r e char gée à la demande et il en
va de même pour les adr esses des fonct ions expor t ées. Voici un
code, écr it et compilé sous Windows qui fait cela :
#include <iostream>
using namespace std;
#include <windows.h>
const LPWSTR la_librairie = L"madll.dll";
int main(int argc, char* argv[]) {
HMODULE hmodule = ::LoadLibrary(la_librairie);
if(!hmodule) {
cout << "Impossible charger librairie" << endl;
exit(1);
}
typedef int (CALLBACK *type_pf)(int);
// sans -kill-at
// type_pf pf = (type_pf)::GetProcAddress(hmodule, "fois2@4");
type_pf pf = (type_pf)::GetProcAddress(hmodule, "fois2");
if(!pf) {
cout << "Impossible charger fonction" << endl;
exit(1);
}
cout << pf(3) << endl;
FreeLibrary(hmodule);
return 0;
}
Avec l'API Windows Get Pr ocAddr ess nous obt enons un point eur sur
la fonct ion à par t ir du nom de celle-ci. C'est le moment de const at er
l'effet per nicieux de l'omission de la dir ect ive -kill-at dont nous avons
par lé plus haut . Sans cet t e dir ect ive le nom de not r e fonct ion est
décor é et devient "fois2@4" comme on le voit dans la capt ur e ci-
cont r e, obt enue avec l'ut ilit air e Dependency Walker de Micr osoft .
Bien sûr si nous ut ilisons ce nom (cf. la ligne de code en comment ai-
r e ci-dessus) cela fonct ionne, mais ce n'est pas l'espr it de la pr o-
gr ammat ion Windows. La bonne manièr e est d'employer -kill-at qui
comme son nom l'indique suppr ime le symbole at (@)
6DE WINDOWS VERS LINUX
Le pl us si mpl e est d' i nst al l er un envi r onnement Cygwi n
(ht t p:/ / www.cygwin.com/ ) sous Windows, puis d'inst aller le compilat eur
cr oi sé mi ngw3 2 , encor e l ui : ) Vous l e t r ouver ez à
ht t p:/ / sour cefor ge.net / pr oject / showfiles.php?gr oup_id=135860&package_id=15
3563. Son ut ilisat ion ne pose aucune difficult é.
■ Fr édér ic M azué
fmazue@pr ogr ammez.com
14-25 complil croisée 20/05/2009 10:54 Page 20
Four Platforms. One Package.
Des composants interface utilisateurs supérieurs pour Windows Forms,
WPF, ASP.NET et Silverlight
Pour de plus amples infos : infragistics.com
0800 667 307
grids tree menus navigation charts &more!
Copyright 1996-2009 Infragistics, Inc. All rights reserved. Infragistics, the Infragistics logo and NetAdvantage are registered trademarks of Infragistics, Inc. All other trademarks or registered trademarks are the respective property of their owners.
14-25 complil croisée 20/05/2009 10:54 Page 21
Q
make n'est pas, à pr opr ement par ler un syst ème de build.
C'est un out il qui per met de simplifier considér ablement le
pr ocessus de cr éat ion des fichier s de build. Typiquement ,
Qmake va êt r e ut ilisé pour génér er les fichier s Makefile nécessair es
à la const r uct ion d'un pr ojet . Act uellement , Qmake per met de géné-
r er des Makefiles pour t out es les plat es-for mes suppor t ées par Qt .
Il est aussi capable de génér er les fichier s pr ojet pour Micr osoft
Visual st udio ou Xcode per met t ant ainsi d'ut iliser les out ils pr opr es à
cer t aines plat es-for mes. L'int ér êt de cet out il r éside dans son ut ili-
sat ion pour des pr ojet s écr it s ou non en Qt . Pour les pr ojet s Qt ,
Qmake génèr e aut omat iquement les cibles pour Moc (Met a Object
Compiler ) et Uic (User Int er face Compiler ).
Les bases. . .
Commençons par les bases, Qmake se r epose sur un fichier t ext e
(UTF8 pour bien fair e) dit “fichier pr ojet ”. Ce fichier est une suit e de
var iables ou de dir ect ives qui ser ont ut ilisées pour génér er les ins-
t r uct ions de compilat ion. La façon la plus simple d'obt enir un sque-
let t e de fichier pr ojet est de fair e appel à Qmake dans le r éper t oir e
r acine de vot r e pr ojet :
qmake -project
Pr enons un pr emier exemple simplist e. Cr éez un r éper t oir e
exemple1. Dans celui-ci, cr éez un r éper t oir e sr c.
mkdir -p exemple1/src
Cr éez dans le r éper t oir e sr c, un fichier main.cpp cont enant le " pr o-
gr amme " suivant :
#include <iostream>
int main(){
std::cout << "HelloWorld\n" ;
return 0;
}
Maint enant , dans le r éper t oir e exemple1, lancez " qmake -pr oject ".
Celui-ci va cr éer un fichier appelé exemple1.pr o cont enant ceci :
TEMPLATE = app
TARGET =
DEPENDPATH += . src
INCLUDEPATH += .
# Input
SOURCES += src/main.cpp
Nous r eviendr ons sur ce fichier, pour le moment t r ansfor mez-le en
fichier de build en t apant " qmake exemple1.pr o ". Cela aur a pour
gr os plan \\ mult i-plat e-for me
22 • PROgr ammez ! \\ Juin 2009
Qmake, le système de build
multi-plate-forme qu'il vous faut.
Qmake est l'outil de build fourni avec le framework Qt. La puissance de ce dernier
repose, entre autres, sur la grande portabilité du code Qt. Cette portabilité nécessite
absolument un système de construction totalement multi-plate-forme, c'est le rôle de
Qmake. Voyons ce qui en fait un outil attrayant.
effet de génér er le Makefile, lancez-le en t apant " make ", vous ver -
r ez alor s vot r e pr ogr amme se const r uir e.
Vous const at er ez aussi que vot r e pr ogr amme se r et r ouve lié à Qt
(et à t out es ses dépendances)... cela fait beaucoup pour not r e " Hel-
lowor ld "... D'aut ant plus que nous n'ut ilisons pas Qt ! C'est donc le
moment d'expliquer à Qmake que nous ne voulons pas qu'il lie not r e
applicat ion à Qt . Revenons donc sur le fichier pr ojet . Nous const a-
t ons d'abor d qu'il r essemble énor mément à un fichier de configur a-
t ion et que chaque ligne pr ésent e un schéma ident ique :
VARIABLE = VALEUR
D'aut r es t ypes d'inst r uct ions exist ent mais la majeur e par t ie d'un
fichier pr ojet est const it uée de déclar at ions de var iables. La pr emiè-
r e disponible est la var iable TEMPLATE, celle-ci cont ient le t emplat e
qui ser a ut ilisé pour génér er le pr ojet et peut pr endr e les valeur s sui-
vant es :
• app : cr ée un Makefile pour génér er une applicat ion ;
• lib : cr ée un Makefile pour génér er une libr air ie ;
• subdir s : cr ée un Makefile par r éper t oir e déclar é dans la var iable
SUBDIRS ;
• vcapp : spécifique à Windows, cr ée un fichier de pr ojet Visual st u-
dio pour une applicat ion ;
• vclib : spécifique à Windows, cr ée un fichier de pr ojet Visual st udio
pour une libr air ie.
Dans not r e cas nous ut ilisons le t emplat e app. La var iable suivant e
est TARGET, qui est , par défaut , vide (la cible génér ée pr end alor s le
nom du r éper t oir e). Viennent ensuit e :
• DEPENDPATH : la list e des r éper t oir es qui vont êt r e scr ut és pour
r ésoudr e les dépendances ;
• INCLUDEPATH : la list e des r éper t oir es cont enant les fichier s d'en-t êt es ;
• SOURCES : la list e des fichier s sour ces du pr ojet ;
• si nous avions des fichier s d'en-t êt es, ils ser aient list és dans la
var iable HEADERS.
Lor s de la const r uct ion pr écédent e du binair e vous avez pu const at er
que celui-ci ét ait compilé et lié cont r e Qt alor s que nous ne l'ut ilisons
pas. Ceci n'est pas anodin et un " ldd exemple1 " vous fer a const at er
l'ét endue des dégât s ! Pour r emédier à ce pr oblème r ien de plus
simple : il suffit d'ajout er la définit ion suivant e à not r e fichier pr ojet :
CONFIG -= qt
Relancez la compilat ion. Le Makefile est aut omat iquement r egénér é
(Qmake pr end soin de met t r e en place la r ègle adéquat e). Const at ez
aussi que, cet t e fois, aucune libr air ie super flue n'est incluse, et ldd
vous dit mer ci ! Qu'avons-nous fait avec la var iable CONFIG ? Nous
avons simplement demandé à Qmake de ne pas génér er les r ègles
qui lient Qt à not r e applicat ion.
14-25 complil croisée 20/05/2009 10:54 Page 22
Juin 2009 \\ PROgrammez ! • 23
gros plan \\ multi-plate-forme
...pour s'amuser !
Attelons-nous maintenant à construire un projet multi-plate-forme
avec du code dit " plateform specific ". Nous allons, pour cela,
construire une librairie partagée d'utilitaires systèmes. Cette librai-
rie contient un ensemble de fonctions telles que forceRemoveDirec-
tory(const QString &), par exemple, qui font appel aux utilitaires
propres à chaque système (del ou rm dans le cas présent).
Notre librairie va compiler contre QtCore car nous souhaitons béné-
ficier des types de Qt (entre autres), mais nous ne souhaitons pas
compiler contre la partie GUI, nous verrons comment faire. Les
librairies partagées sont évide-
ment spécifiques à une plate-
forme : share object (.so) sous
GNU/Linux, DLLs sous Windows
et dynlib sous Mac OS. Il va falloir
régler ce problème qui pourrait
être épineux si nous ne dispo-
sions pas de Qmake.
Dans un premier temps voici l'arborescence de notre projet figure
ci-contre. Tout d'abord, générez le squelette de base du fichier pro-
jet en tapant :
qmake -project -t lib
Dans un premier temps, voyons comment gérer la compilation des
sources spécifiques à chaque OS. Qmake met à notre disposition un
système de " scopes " très pratique. Les scopes sont des condi-
tions qui permettent de prendre en compte les spécificités de
chaque situation. Une des utilisations vraiment intéressante des
scopes est la configuration du build en fonction de l'OS. Ainsi il suffit,
pour ne compiler que le fichier source relatif à un OS, d'ajouter les
définitions suivantes au fichier projet :
win32 {
SOURCES += src/sysutils_windows.cpp
}
macx {
SOURCES += src/sysutils_macos.cpp
}
unix{
SOURCES += src/sysutils_linux.cpp
}
Ce squelette nous permet aussi d'ajouter, pour chaque système
d'exploitation, l'option adaptée aux librairies partagées. Il suffira de
rajouter : CONFIG += shared pour les Linux/Unices, CONFIG += dll
pour Windows et CONFIG += dylib lib_bundle pour Mac OS X. Dans le
dernier cas, l'option supplémentaire permet de créer le bundle parti-
culier aux librairies de Mac OS X.
Pour utiliser les types de Qt, nous devons utiliser QtCore. En
revanche, comme nous désirons nous passer de QtGui, il faut le pré-
ciser à Qmake (ces 2 modules étant inclus par défaut) :
QT -= gui
La variable QT permet de configurer les modules de Qt utilisés par
notre projet. La déclaration par défaut (lorsque rien n'est spécifié) est :
QT = core gui
Donc quand nous écrivons :
QT -= gui
C'est équivalent à :
QT = core
Les opérateurs += et -= se comportant comme nous l'attendons en
concaténant et en supprimant une valeur de la liste. Le signe =
représentant, bien sûr, l'affectation.
Les scopes de Qmake deviennent indispensables une fois couplés
aux possibilités des objets qui peuvent être déclarés dans le fichier
projet. Un objet est une variable qui contient plusieurs membres.
Certaines variables prédéfinies du fichier projet font une bonne utili-
sation de ces objets si les membres requis sont remplis. Prenons
l'exemple de la variable prédéfinie INSTALLS. Celle-ci prend en argu-
ment une liste d'objets contenant au minimum le chemin d'installa-
tion. La forme la plus simple est donc la suivante :
target.path = /usr/lib
INSTALLS = target
Ici, nous spécifions que les cibles produites lors de la construction
doivent être installées dans le répertoire /usr/lib. Il peut arriver
que nous ayons plus que les cibles de construction à installer. Dans
le cas présent nous voulons installer aussi le fichier d'en-tête. Pour
cela, un nouvel objet est nécessaire :
# Les fichiers concernés par cet objet sont les .h du répertoire
include/
includes.files = include/*.h
# ceux-ci seront installés dans le répertoire /usr/include
includes.path = /usr/include
Une fois ceci fait, il est nécessaire d'ajouter l'objet includes
à la variable INSTALLS :
INSTALLS += includes
Les objets de la variable INSTALLS peuvent posséder un autre
membre : extra. Celui-ci permet d'exécuter un certains nombre de
commandes lors du build. Par exemple, si nous désirons installer les
sources compressées de notre librairie :
sources.files = src/sysutils_linux.cpp.gz
sources.path = /usr/src/example2
sources.extra = gzip -c src/sysutils_linux.cpp > src/sysutils
_linux.cpp.gz
INSTALLS += sources
Ces possibilités sont, bien entendu, à mettre en relation avec les
scopes conditionnels concernant les systèmes d'exploitation. Pour
terminer ce rapide tour d'horizon des possibilités de Qmake, ajou-
tons qu'il est possible de déclarer des liaisons avec d'autres librairies
si celles-ci supportent pkgconfig, en utilisant la syntaxe suivante :
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
Nous n'utilisons pas cette possibilité dans notre exemple.
J'espère que cet article d'introduction vous aura convaincu que la
construction multi-plate-forme n'est pas l'enfer fréquemment décrit,
du moment que l'on choisit les bons outils...
■ Arnaud Dupuis
Uperto/Devoteam
14-25 complil croisée 20/05/2009 10:54 Page 23
gr os plan \\ mult i-plat e-for me
24 • PROgr ammez ! \\ Juin 2009
M
unissez-vous d'abor d d’un bon
édit eur HTML : vous évit er ez
ainsi quelques er r eur s silen-
cieuses sous cer t ains navigat eur s et t r ès
gênant es ailleur s. Pour bien visualiser ce
que vous codez, Fir efox et son ext ension
Fir ebug s'avèr ent indispensables.
Les fonct ions d'inspect ion et d'édit ion en
ligne de Fir ebug vous per met t r ont de mieux
compr endr e ce qui se passe dans vot r e
page et facilit er ont considér ablement vot r e
t r avail de débogage – y compr is en dehor s
de Fir efox.
Il vous faut aussi de quoi t est er r égulièr e-
ment vos pages web sur les t r ois navigat eur s
les plus ut ilisés par les int er naut es : IE 7,
Fir efox 3 et IE 6.
C'est là que cela se complique : si vous ne
t r availlez qu'avec un seul post e de t r avail, il
vous faudr a met t r e en place une ou plu-
sieur s machines vir t uelles pour fair e vos
t est s à la fois sur les ver sions 6 et 7 d'IE qui
ne peuvent fonct ionner sur le même syst è-
me. Une aut r e opt ion est l'ut ilisat ion de ver -
sions émulées d'Int er net Explor er, mais elle
est loin d'êt r e par fait e. Not ons enfin qu'IE 8
per met de se passer d'IE 7 gr âce à son
mode de compat ibilit é t r ès pr at ique et
appor t e aussi quelques bons out ils de débo-
gage. La bonne nouvelle, c'est que les
aut r es navigat eur s vous poser ont r elat ive-
ment peu de pr oblèmes une fois la compat i-
bilit é IE6/ IE7/ Fir efox assur ée.
Rappelez-vous t out de même que quelques
t est s sur Safar i (7% des visit eur s) doivent
êt r e effect ués, au moins en fin de pr ojet .
Avoir la bonne mét hode
Même si un code confor me aux st andar ds
et pr opr e ne gar ant it pas en soi la compat i-
bilit é ent r e navigat eur s, vous imposer cet t e
r igueur vous facilit er a les choses. Commen-
cez donc par r éal i ser vot r e squel et t e
XHTML, sans st yle ni javascr ipt , met t ant en
place la st r uct ur e logique et sémant ique de
la page. Posit ionnez ensuit e vos blocs à l'ai-
de des différ ent es pr opr iét és CSS en sépa-
r ant scr upuleusement les r esponsabilit és :
t out e la mise en for me doit se t r ouver dans
des fichier s CSS (pas de st yle " inline " dir ec-
t ement dans le HTML). C'est à cet t e ét ape
que l'essent iel des pr oblèmes va se poser, le
posit ionnement sous IE suivant des r ègles
assez dif fér ent es de la nor me (voir les
ast uces plus bas à ce sujet ) : cont r ôlez
int ensément les différ ences IE6/ IE7/ Fir e-
fox à cet t e ét ape.
Occupez-vous ensuit e de la décor at ion et du
javascr ipt . Un sit e qui ut ilise beaucoup de
javascr ipt peut poser de gr os pr oblèmes de
compat ibilit é, mais l'ut ilisat ion adéquat e
d'une bibliot hèque JS de r éfér ence (Pr ot ot y-
pe, Jquer y, Dojo, Moot ools) vous en évit er a
l'essent iel.
Les ast uces à connaît r e
Un bon doct ype
Met t ez t oujour s un doct ype valide au début
de vos pages et n'écr ivez sur t out r ien avant
(même pas le pr ologue xml pour t ant aut or i-
sé par XHTML), dans le cas cont r air e IE
passe en mode de r endu " quir ks " qui r end
l'affichage t out simplement absur de.
Redéfinir le st yle des balises par défaut
Les balises ne sont pas int er pr ét ées par
défaut avec le même st yle suivant le naviga-
t eur. For cer le st yle de t out es les balises (en
par t iculier bor der , mar gin et padding) vous
économiser a quelques migr aines.
Ut iliser les comment air es condit ionnels
pour les st yles spécifiques à IE
Il y a de t r ès for t es chances que vous deviez ut i-
liser les st yles spécifiques à t elle ou t elle ver -
sion d'IE pour fixer vot r e mise en page. Les
comment air es condit ionnels sont fait s pour ça :
<!--[if IE]>
<link type="text/css" rel="styles
heet" href="ie.css" />
<![endif]-->
La t r anspar ence des PNG
La t r anspar ence des PNG n'est pas gér ée
nat ivement par IE6, mais plusieur s hacks
per met t ent de cont our ner cet t e limit at ion.
Par exemple : www.t winhelix.com/ css/ iepngfix
Les bugs de posit ionnement IE6
IE6 compor t e de nombr eux pet it s bugs (ou
différ ences avec les st andar ds) dans l'int er -
pr ét at ion du posit ionnement des blocs, en
par t iculier avec les flot t ant s. Un excellent
sit e en fait le r ecensement et four nit les
solut ions adéquat es : www. posi t i oni sever y-
t hing.net / explor er.ht ml
Et pour finir, r appelez-vous les t r ois com-
mandement s de l'int égr at eur web : t est er,
t est er, t est er !
■ Jean-Bapt ist e Boisseau
Eut ech SSII
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 fonct ion d'inspect ion de Fir ebug en act ion
14-25 complil croisée 20/05/2009 10:55 Page 24
14-25 complil croisée 20/05/2009 10:55 Page 25
dossier \\ mét hode agile
Les mét hodes agiles sont des mét hodologies de
t r avail et d’or ganisat ion aidant à êt r e plus effica-
ce dans le développement et l’or ganisat ion d’un
pr ojet infor mat ique. Aujour d’hui, l’agilit é n’est pas
un mot en l’air, t out par t iculièr ement dans les
SSII, et chez les équipes de développement . Deux
mét hodes, complément air es, se dét achent
assez net t ement : Scr um et le eXt r eme Pr o-
gr amming. L’une concer ne plut ôt l’or ganisat ion
des équipes et la manièr e de mener un pr ojet ,
l’aut r e se concent r e sur le développement des
fonct ionnalit és. Combinées, cela donne un cock-
t ail dét onnant ! De nombr euses équipes, de
pet i t es t ai l l es, adopt ent et adapt ent ces
mét hodes et clair ement , cela r edonne l’envie de
développer car le développeur r et r ouve une place
de choix dans l’or ganisat ion. Il n’est plus un
simple exécut ant , un " pisseur de code " comme
on a souvent cher ché à le limit er. Mais cela s’ac-
compagne aussi d’un développement moins soli-
t air e et avec de nouvelles r esponsabilit és. Pour
un développeur habit ué à coder dans son coin, à
avoir ent r e les mains des spécificat ions, un
cahier des char ges figés dans le mar br e, le
couple Scr um / XP dér out e. Car la visibilit é sur le
pr ojet est à cour t t er me, avec des it ér at ions
cour t es et des développement s de pet it es t âches
où savoir communiquer, t r availler, échanger avec
le r est e de l’équipe est nécessair e. Le dévelop-
peur doit aussi s’habit uer à l’ar t délicat de l’est i-
mat ion. C’est -à-dir e que c’est à lui d’évaluer la
difficult é de la fonct ion à développer et sur t out de
donner un t emps de dével oppement . Ces
cont r aint es et liber t és obligent à avoir des
équipes r elat ivement homogènes et à encadr er
les nouveaux venus. Une bonne maît r ise des
t echnologies est également indispensable.
Le développeur agile est une r éalit é même si cela
se limit e essent iellement aux développement s en
équipe car pour le développeur indépendant ou
occasionnel, l’agilit é aur a peu d’influence, sauf
peut êt r e sur son or ganisat ion et la manièr e de
découper un développement .
Dans ce dossi er nous al l ons expl or er l es
méandr es de Scr um, de XP et voir comment se
dér oule une jour née t ype d’un développeur agile,
sans oublier les meilleur s conseils pour bien
démar r er dans l’agilit é.
■ Fr ançois Tonic
©
i
-
s
t
o
c
k
p
h
o
t
o
.
c
o
m
/
S
t
e
p
h
a
n
i
e

H
o
r
r
o
c
k
s
Développeur
AGILE
Pour retrouver
le goût du
développement
26 • PROgr ammez ! \\ Juin 2009
26-43 20/05/2009 11:10 Page 26
Juin 2009 \\ PROgrammez ! • 27
dossier \\ méthode agile
A
lors…implication des utilisa-
teurs, soutien de la direction,
exigences clairement défi-
nies, planning bien adapté, jalons plus
fins, compétences des équipes et leur
engagement, vision et objectifs clairs,
sont des facteurs clés de succès
connus et partagés d’un projet infor-
matique et pourtant… Aujourd’hui, ils
ne peuvent appliqués qu’en prenant
en compte le meilleur des méthodes
" Agiles " pour appréhender toutes les
dimensions d’un projet de développe-
ment. [Fig.1]
Comment choisir la bonne
méthodologie et les
impacts / conséquences
de celle-ci
La dimension organisationnelle est
celle qui est très, trop ?, souvent
mi se en avant pour aborder l es
méthodes agiles dans le développe-
ment. Parlons tout d’abord process,
je sais c’est iconoclaste, mais le choix
et la bonne utilisation d’un langage de
modélisation et de spécifications basé
sur UML et centré sur l’architecture
permettent une définition et une ges-
tion rigoureuse des cas d’utilisation et
exigences. Le critère de la force est
alors illustré.
Poursuivons par la dimension collabo-
ration, la méthode Scrum devient
incontournable en focalisant l’en-
semble des équipes MOA/MOE sur la
poursuite des objectifs, avec en pre-
mier le respect du délai pour les fonc-
tions prioritaires et essentielles pour
l’ utilisateur final. Elle incarne les
dimensions coordination et puissance ;
la référence au rugby n’est pas inno-
cente... Enfin, la mise en oeuvre des
pratiques d’eXtreme Programming
adresse complètement les notions de
développement piloté par les tests,
i ntégrati on conti nue, règl es et
normes de codage avec mesure de la
qualité en continu. Elle symbolise les
réflexes à acquérir …
Quelles sont donc leur condition de
mi se en œuvre ? L’ organi sati on
" Unité de temps, unité de lieu et unité
d’action " chère aux écrivains clas-
siques est elle l’unique solution ? La
caractéristique d’une équipe (d’une
bonne…) au delà de la valeur indivi-
duelle de chacun se traduit par les
valeurs essentielles partagées par
ses membres : la communication, le
retour d'information, la simplicité et le
respect. Ces valeurs ont toutes pour
objectifs d'améliorer l'équipe et de
développer le bon produit.
L’ espace partagé est un facteur
important, il peut être physique ou vir-
tuel suivant la répartition des activités
entre différentes localisations, la
plate-forme collaborative prend tout
son sens en termes de référentiels
techniques, données, normes…
Dans ces conditions, le mode de pro-
duction distribué et/ou centralisé
est alors complètement pris en comp-
te et organisé ; la réalisation d’un pro-
dui t sur des l i eux géographi ques
différents n’est plus un obstacle. Les
impacts sur le mode de développe-
ment du produit sont par ailleurs mul-
tiples. [Fig.2]
La relation MOA/MOE est modifiée
pour produire la plus grande valeur
métier au plus tôt. Les choix et arbi-
trages sont partagés au début et tout
au long du projet pour absorber les
perturbations extérieures (difficultés
techniques, évolutions du besoin….)
et apporter ainsi aux utilisateurs la
garantie de disposer des fonctionnali-
tés indispensables. [Fig.3]
Pour l’équipe de développement, cha-
cun, même si il n’est pas directement
impliqué, doit être à tout moment
informé des activités en cours. De ce
Les méthodes agiles
pour mieux développer
Le " Chaos Report " du Standish Group publié en 1994 met
en évidence que 31% des projets informatiques sont
arrêtés en cours de route, 52% n’aboutissent qu’au prix
d’un important dépassement des délais et du budget (189%)
et en offrant moins de fonctionnalités qu’il n’en était demandé.
Seuls 16% des projets peuvent être considérés comme des succès. Depuis 1994 et
malgré une volonté farouche de progresser dans ces domaines, force est de constater
que nous (développeurs) sommes toujours confrontés aux mêmes enjeux et challenges.
Fig.2
Fig.3
Figure 1 :
Equilibre et
méthodes
agiles
Figure 2 :
Valeur ajoutée
du produit
Figure 3 :
la communication
et la transparence
26-43 20/05/2009 11:10 Page 27
fait, tout intervenant peut contribuer
à la résolution d’un problème naissant
et bénéficie d’une vision d’ensemble.
Le Chef de projet joue un rôle essen-
tiel. Il doit adapter son management à
l'esprit et aux pratiques de l'équipe
afin de constituer un environnement
propice à la " fusion " des dévelop-
peurs et à la libre expression de leur
savoir-faire. Il s’agit alors plus de lea-
dership que de relation hiérarchique
c’est à dire plus d’animation, de facili-
tati on et de coordi nati on que de
contrôle. Cependant, ce n’est pas
non plus la porte ouverte à l’auto ges-
tion des équipes de développement
dossier \\ méthode agile
28 • PROgrammez ! \\ Juin 2009
mais bien le maintien dans la bonne
direction de tous les intervenants et
cette mi ssi on l à est émi nement
importante.
Pour assurer la visibilité du projet : une
règle simple : " ce qui est important
pour le projet est et reste visible ".
L'objectif est d'être en mesure de pré-
senter son avancement à tout
moment en se basant sur des infor-
mations, pertinentes et à jour, que ce
soit pour le produit, le processus de
développement, l’architecture, les dif-
ficutés, les bonnes idées, les axes
d’amélioration ou les tâches à réali-
ser. [Fig.4]
Pour ce dernier point, trois horizons
sont définis: la journée, la semaine, le
moi s. Chaque mati n, une courte
réunion de l’équipe fixe les objectifs du
jour, le reste à faire (en heures) d’un
sprint, d’une livraison, est réévalué
tous les soirs au vu des travaux effec-
tués, et partagé par tous. Les déve-
loppements sont testés au fil de l’eau
par une équipe distincte dite d’assem-
blage sur la production de la semaine.
La correction de toutes les anomalies
détectées est inscrite dans le plan de
développement général pour la planifi-
cation mensuelle.
Comment ensuite l'utiliser
dans son développement,
les outils à mettre en
oeuvre
L’outillage doit faire l’objet d’une atten-
tion particulière. A chaque phase du
cycle de vie du projet correspond un
outil ou une suite d’outils spécifique.
Pour appréhender la dimension colla-
borative, le partage des informations
au sein de l’équipe de développement
peut être réal i sé manuel l ement.
Cependant, la complexite toujours
plus grande des projets implique la
mise en œuvre d’un portail qui permet
de couvrir les quatre fonctions sui-
vantes : échanger , partager, formali-
ser et piloter. [Fig.5]
Pour la conception, il s’agit alors de
s’appuyer sur des outils de modélisa-
tion et de traçabilité des exigences.
Les scénarios de tests techniques et
utilisateurs sont spécifiés et viennent
enrichir un référentiel de manière
automatique et réutilisable.
Enfin il convient de normaliser et
contrôler la production technique, au
fil de l’eau et prévenir les erreurs.
[Fig.6]
Une forge logicielle est nécessaire
pour instrumenter les normes de
dével oppement i nternes et/ou
clients. Des ateliers de développe-
ment intégré facilitent la génération
et le contrôle du code. Ces ateliers
sont interfacés avec des outils de
gestion de configuration au sens ITIL
du terme et d’un outillage de qualimé-
trie. Une démarche " performances "
basée sur des outils de tests, d’analy-
se et de traçabilité, ainsi qu’une plate-
forme de développement et de tests
permettent de reproduire le plus fidè-
lement possible l’environnement cible
même, si l’échelle n’est pas identique
en termes de volumétrie de données.
Les problèmes
de formation, de
compétences
Pour maîtriser concepts, outillages et
organisation, la courbe d'apprentissa-
ge des équipes doit être prise en
compte. Le vocabulaire utilisé, la
gestion des priorités, l’équilibre per-
manent entre la dimension technolo-
gique et les livraisons de produits ne
s’acquièrent pas immédiatement.
L’initialisation du projet, coaching et
accompagnement dans la montée en
charge sont les maîtres mots de
cette courbe d’apprentissage. Ces
thèmes concernent autant l es
équipes de développement que, pour
certains, les équipes MOA. En effet,
pour bien se comprendre il faut parta-
ger les " mots ". [Fig.7]
Le coaching des développeurs est
réalisé lors des séances de " pair-pro-
gramming ", le développeur est au
clavier et à la souris. Il s'occupe prin-
cipalement de la syntaxe du code, de
la compilation et du rejeu des tests.
Le coach, quant à lui, s’intéresse à ce
que le code doit faire, la conception et
la revue associée. L’élaboration de la
solution technique ou sa mise au
point émerge du travail mis en com-
mun des deux équipiers.
Cette pratique facilite le partage des
connaissances et garantit l’homogé-
néité des développements et la réso-
Fig.4
Fig.5
Fig.6
Figure 4 : ce qui est important est et reste visible
Figure 5 : Plate-forme collaborative en support
Figure 6 : Outillage pour la production (ex environnement Java)
26-43 20/05/2009 11:11 Page 28
26-43 20/05/2009 11:11 Page 29
lution des bugs (si si, il y en a !! ).
Même si cette organisation du travail
semble gourmande en énergie, le ROI
est, croyez le, rapide.
La montée en charge de l’équipe pour
la fabrication du produit doit faire l’ob-
jet d’une planification relative aux
cadences des itérations. L’intégration
d’un développeur par mois pour une
équipe de moins de neuf personnes
est un bon rythme.
Abordons maintenant les aspects
gains et axes d’amélioration… Les
retours d'expérience peuvent être
illustrés par deux exemples de projets
qui ont privilégié des axes différents
l ors de l a mi se en œuvre des
méthodes agiles. Les schémas ci-des-
sous présentent pour chaque projet
le point d’équilibre. [Fig.8]
Les choix réalisés apparaissent claire-
ment lors du développement de ces
proj ets. Les avantages et poi nts
d’amélioration qui en découlent sont
présentés dans le tableau ci-dessous.
A partir de ces analyses, les équipes
positionnent le point de départ et défi-
dossier \\ méthode agile
30 • PROgrammez ! \\ Juin 2009
nissent les actions pour conduire
l’équipe, l’organisation et les futurs
développements au barycentre de ce
triangle.
Les recommandations.
Ainsi trois erreurs sont courament
commises.
1 Se jeter dans la mêlée : la propen-
sion à penser que plus vite les déve-
loppements sont lancés, plus vite les
objectifs de délais sont atteints, est
un élément de perturbation dont on
ne perçoit les impacts que lors des
premières livraisons. Il est alors sou-
vent très tard pour corriger.
2 La complexité des architectures
est la plupart du temps due au phéno-
mène bien connu des développeurs,
l’aspiration technologique.
Cette aspiration fait alors oublier le
principe fondamental d’adéquation de
l’architecture au problème à résoudre
et non le satisfecit à développer une
superbe technologie qui ne servira
pas.
3 L’outillage insuffisant ou peu utilisé
conduit à des débauches d’énergie
tant dans le cadre du suivi du projet
que dans l’élaboration du produit lui-
même par l’impact des régressions à
chaque livraison.
Afin de ressortir les bonnes pra-
tiques, retenons quatre éléments
clés :
La rigueur. Si les méthodes agiles
sont génératrices de créativité dans
la production des produits aussi bien
que dans l’organisation des dévelop-
pements, il importe que la rigueur
d’exécution sous-tende toutes les opé-
rations.
La simplicité. Elle agit comme corol-
laire à la mise en œuvre d’architec-
tures et de solutions technologiques
pour la qualité du produit à dévelop-
per.
La transparence. Par tager et
atteindre des objectifs communs aux
équipes MOA/MOE, nécessite une
transparence totale des difficultés et
des arbitrages à réaliser aussi bien
que de la bonne estimation des fonc-
tions dites " essentielles ".
L’accompagnement. Cet accompa-
gnement doit être orienté dévelop-
peurs, comme nous l’avons exprimé
précédemment car rien n’est inné,
mai s égal ement vers l es autres
membres de l’équipe qui concourrent
à la réussite du projet.
Arrêtons-nous quelques instants sur
ces éléments clés… Ces points sont
universels et régissent notre activité
de développement depuis toujours.
Les méthodes agiles sont un levier,
maintenant accessible et opération-
nel, pour les mettre en œuvre au ser-
vice du métier de nos utilisateurs.
■ Jacques Mezhrahid
Responsable National du développement
des applications et des services
managés chez Sogeti
Projet 1 Projet 2
Avantages • Process : La démarche évite l’effet tunnel propre au • Process : Tenue du planning initial
développement en " nouvelle technologie " : Points de visibilités réguliers
cela améliore la qualité du reporting et rassure ainsi Qualité des livraisons
le client qui " voit "le logiciel se monter sous ses yeux Prise en compte au fil de l’eau de nouvelles
au fil des semaines demandes et sans remise en cause
de la date de fin de projet.
• Humain : C’est un élément de motivation et de
responsabilisation de l’équipe de développement. • Outillage : mesure permanente
La productivité de l’équipe est allée en de la qualité technique
s’améliorant de sprint en sprint. Evolutivité de l’application : référentiel de tests
fonctionnels, scénarios de tests techniques,
couverture de tests unitaires, point d’amélioration
du code
Points d’amélioration • Outillage : Outiller la méthode de gestion des exigences • Process : Mobilisation importante des équipes
Connecter la méthode à la plate-forme d’intégration pour les tests
continue de manière à gagner en productivité sur
l’automatisation des tests en environnement Microsoft
• Humain : Suivi de la courbe d’apprentissage
de la méthode
Retours d’expériences projets
Fig.7
Figure 7 : Vocabulaire méthodes Agiles
Figure 8 :
Position du point
d’équilibre sur 2
projets
Projet 1 : Projet 2 :
Fig.8
26-43 20/05/2009 11:11 Page 30
26-43 20/05/2009 11:11 Page 31
dossier \\ mét hode agile
32 • PROgr ammez ! \\ Juin 2009
L
es exper t s de Scr um l'affir ment :
l es pr at i ques d' i ngéni er i e
décr it es dans l'eXt r eme Pr o-
gr amming sont indispensables pour
r éussir de manièr e dur able un pr ojet
de développement incr ément al, en
voici quelques-unes :
Test s aut omat isés : comment s'assu-
r er que le logiciel livr é à chaque fin
d'it ér at ion fonct ionne cor r ect ement ?
Il n'est pas quest ion de t est er à la
main t out es les fonct ions du logiciel à
chaque fin d'it ér at ion : cela finir ait par
pr endr e plus de t emps de t est er que
de développer, jusqu'à un moment où
la t ot alit é du t emps de l'it ér at ion ne
suffir ait plus pour t est er suffisam-
ment l'applicat ion. La solut ion pr éconi-
sée par l'eXt r eme Pr ogr amming est
d'aut omat iser aut ant de t est s que
possible, et pour t ous les t ypes de
t est s. Pour chaque t ype, il exist e des
out ils en facilit ant l'aut omat isat ion,
par exemple : les t est s unit air es (Xunit
:: junit , nunit ...); les t est s d'int er face
web (Selenium, webdr iver...), ou enco-
r e les spécificat ions exécut ables (fit -
nesse, gr eenpepper ). Ai nsi , l e
développement et le par amét r age du
har nais de t est deviennent par t ie int é-
gr ant e du t r avail de développement .
Int égr at ion cont inue : le syst ème en
cour s de const r uct ion est int égr é en
per manence. En pr at i que, l es
sour ces sont compilées, les t est s
dér oulés aut omat iquement , aussi fr é-
quemment que possible. Ainsi, l'équi-
pe est infor mée t r ès r apidement dès
qu' une er r eur s’int r oduit dans le
code, et les cor r ect ions r endues plus
faciles puisque les modificat ions sont
encor e " fr aîches ". On peut s'appuyer
sur des out ils comme Hudson, Cont i-
nuum ou Bamboo pour met t r e en
place un t el mécanisme.
loppeur ; Or ange Business Ser vices -
Online Mult imedia) : on se place en
pr emier lieu comme ut ilisat eur des
API en cour s de développement , et le
design n'est plus une phase pr éalable
au développement : il émer ge en per -
manence pendant le développement .
Au début , on a l'impr ession de per dr e
beaucoup de t emps C'est difficile de
définir la suit e de t est s qui per met t r a
de coder ce qu'on a en t êt e, et même
nommer un t est semble fast idieux.
Puis on per çoit gr aduellement les
bénéfices, on modifie sa t our nur e de
développement , et on compr end que
passer plus de la moit ié du t emps de
codage sur les t est s est efficace pour
le pr ojet . " Si on ar r êt e le TDD, je quit -
t e l ’ent r epr i se ! " (Jean-Phi l i ppe
Car uana, développeur, Or ange).
Remaniement
ou r efact or ing
Remanier le code, c'est le modifier
sans en changer les fonct ionnalit és,
dans l'object if de le r endr e plus facile
à compr endr e et à fair e évoluer. L'eX-
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.
Développement Pilot é par
les Test s (ou TDD)
Pour chaque fonct ionnalit é que je
veux ajout er dans le code :
1) je code le t est (aut omat isé) qui
mont r er a que j'ai r éussi,
2) je fais le développement le plus
simple possible pour que ce t est
passe,
3) je r emanie (r efact or ing) le code
pour r éduir e la duplicat ion.
Appliquer syst émat iquement et r igou-
r eusement ce pr incipe per met de
pr oduir e du code couver t par des
t est s aut omat isés. Mais les dévelop-
peur s t émoignent que les bénéfices
vont au delà - " le TDD pousse à bien
coder " (Laur ent Cobos, développeur
chez Pyxis Technologies Fr ance) : des
pr incipes t els que le découplage, la
cohér ence for t e, où la r esponsabilit é
unique sont encour agés, les API
développées sont faciles à ut iliser, le
code et les t est s sont expr essifs,
faciles à lir e et à compr endr e, aut o-
document és. " l'appr oche du design
est inver sée " (Br uno Thomas, déve-
©

E
m
m
a
n
u
e
l

C
h
e
n
u
26-43 20/05/2009 11:11 Page 32
Juin 2009 \\ PROgr ammez ! • 33
dossier \\ mét hode agile
t r eme Pr ogr amming encour age des
act i vi t és de r emani ement s f r é-
quent es, à plusieur s échelles (mét ho-
de, obj et , composant , syst ème
complet ), y compr is dans le har nais
de t est lui-même. C'est une hygiène à
r espect er pour lut t er cont r e l'ent r o-
pie dans le code.
Sans r emaniement , le même cycle se
r epr oduit t oujour s. Au fur et à mesu-
r e que le logiciel évolue, il devient si
gr os et si complexe qu'il s'écr oule
sous son pr opr e poids : il est ext r ê-
mement long pour t out nouvel ar r i-
vant d'en compr endr e la st r uct ur e; et
t r ès coût eux de le fair e évoluer pour
r épondr e aux nouvelles demandes de
ses ut ilisat eur s. A ce st ade, on décide
de lancer une r efont e " fr om scr at ch ",
ou bien le logiciel finit par êt r e oublié
au pr ofit d'un concur r ent plus jeune et
plus per for mant .
Gr âce à un r efact or ing r égulier et sys-
t émat ique, on peut enfin fair e la pr o-
messe que le logiciel pour r a vivr e
pendant 10 ou 20 ans.
Ce sont les t est s aut omat isés et l'in-
t égr at ion cont inue qui le r endent pos-
sible : on n'a plus peur de " casser " le
code quand on y t ouche. Si cela ar r i-
ve, un t est aut omat ique échoue,
l'aler t e est levée immédiat ement , et il
est encor e facile de r evenir en ar r iè-
r e. Le r emaniement est l'act ivit é la
plus complexe du développement ,
mais c'est aussi la plus gr at ifiant e.
" Le r efact or ing, c'est la r écompense "
(Ant oine Cont al, coach xp, Or ange).
Le binômage
ou pair pr ogr amming
Le binômage, c' est la plupar t du
t emps, un clavier, un écr an, et 2
développeur s der r ièr e! Le t r avail de
développement devient un dialogue
per manent . Le bénéfice immédiat est
la qualit é du code pr oduit , et la diffu-
sion des compét ences dans l'équipe.
Les développeur s qui ont adopt é
cet t e pr at i que ne t ar i ssent pas
d'éloges : " Chaque fois que je binô-
me, j'appr ends " (Radhouane Gour -
chene; développeur, Or ange), " Cela
m'a per mis de m'int égr er r apidement
au pr ojet " (Laur ent Cobos), " Tu
nivelles la compét ence de l'équipe par
le haut " (Br uno Thomas), " Tu n'es
pl us t out seul f ace au pr obl ème
devant la machine " (Jean-Philippe
Car uana), " quand on code, on peut
s'égar er, l'aut r e, c'est t a boussole "
(Thomas Dufour d), " coder à 2, c'est
diviser le nombr e d'er r eur s par 5 "
(Radhouane Gour chene).
Quelques conseils pr at iques : fair e
cir culer fr équemment les individus
dans les binômes, jouer au ping pong
(" j'écr is un t est , t u le fais passer, t u
écr is un t est , je le fais passer, j'écr is
un t est ... "), ne pas hésit er à se sépa-
r er quand êt r e en face à face n'est
pas efficace (pour les act ivit és explo-
r at oir es par exemple, explor er en
par allèle et fair e le point r égulièr e-
ment ). Pour cer t ains, binômer, c'est
agr éable et plut ôt nat ur el, cela per -
met de fair e connaissance, et même
les t âches les plus ingr at es devien-
nent mot ivant es. Mais ce n'est pas
t oujour s facile, sur t out quand on ne
connait pas son binôme : au début ,
c'est un br as de fer, on veut démon-
t r er sa compét ence et cacher ses
lacunes, on a peur de r alent ir l'aut r e.
Puis on appr end à se fair e confiance,
à exposer ses faiblesses et à s'ap-
puyer sur les for ces de l'aut r e, et le
t r avail devient un enr ichissement
mut uel.
Binômer r end l'act ivit é de développe-
ment t r ès int ense : face à un pr oblè-
me di f f i ci l e, pas d' échappat oi r e
possible, pas quest ion de l'évit er, ni
de fair e des compr omis sur la qualit é.
Quand on est deux, on est plus disci-
pliné, et le r egar d de l'aut r e pousse à
donner le meilleur de soi-même, en
per manence. A la fin de la jour née, on
est épuisé. Heur eusement , l'eXt r eme
Pr ogr amming engage par ailleur s à
t r availler à un r yt hme sout enable
indéfiniment : les heur es supplémen-
t air es doivent r est er except ionnelles.
Pour quel pr ojet ?
L'eXt r eme Pr ogr amming est un mode
de dével oppement demandant
r igueur et discipline. Il est r ecomman-
dé pour les développement s logiciels
r éalisés en équipes colocalisées, où la
qualit é du code (en par t iculier son
évolut ivit é à long t er me) est la pr éoc-
cupat ion pr emièr e. C'est cet t e qualit é
qui per met de s'assur er que le logiciel
pour r a évoluer longt emps, t out en
appor t ant r égulièr ement de la valeur
à ses ut ilisat eur s.
Un ar t mar t ial
du développement ?
L' eXt r eme pr ogr amming est une
mét hode agile complèt e, applicable
sans r éfér ence à Scr um. Elle pr escr it
en t out 13 pr at iques et s'appuie sur
le r espect de 4 valeur s. Pour chaque
individu, comme pour l'équipe dans
son ensemble, les adopt er demande
cour age et per sévér ance.
Au t out début , cela peut êt r e un choc,
les habit udes sont bousculées, les
aut omat ismes r emis en quest ion. Les
pr emièr es semaines peuvent êt r e dif-
ficiles, avec l'impr ession que le pr ojet
piét ine. Apr ès le pr emier appr ent issa-
ge, les r ésult at s appar aissent . Enfin,
l'invest issement s'avèr e payant , de
manièr e dur able : le logiciel développé
cont inue à évoluer à un r yt hme quasi
const ant que l'équipe peut sout enir
indéfiniment ; les développeur s pr en-
nent plaisir à t r availler ensemble et
sont fier s du code qu'ils pr oduisent .
Pour chaque individu, ça passe ou ça
casse : des développeur s r ejet t ent en
bloc cer t aines pr at iques. Not am-
ment , le binômage ne convient pas à
cer t ains t empér ament s. En r evanche,
ceux qui ont adopt é l'eXt r eme Pr o-
gr amming ne jur ent que par lui : " J'ai
l'impr ession d'avoir changé de mét ier
" (Thomas Dufour d) " XP m'a r edonné
le goût du développement " (Jean-Phi-
lippe Car uana), " c'est l' avenir du
développement " (Br uno Thomas).
Ressour ces
Test Dr iven Development : By Example
Kent Beck
Refact or ing
Mar t in Fowler
L'Ext r eme Pr ogr amming - Avec deux
ét udes de cas, 2 0 0 2
Jean-Louis Bénar d, Laur ent Bossavit ,
Régis Médina et Dominic Williams
■ Raphaël Pier quin
coach d' équipes de
développement chez
Pyxi s Technol ogi es
Fr ance
r pier quin@pyxis-t ech.com
26-43 20/05/2009 11:11 Page 33
dossier \\ mét hode agile
34 • PROgr ammez ! \\ Juin 2009
Les méthodes agiles sont des pratiques itératives de développement logiciel qui
répondent à des besoins de changement pouvant être fréquents, et qui privilégient
l’interaction humaine en visant la satisfaction réelle du client. Au travers de cet article,
nous racontons la journée type de Martin, devenu développeur agile, et les grands
changements que cela a engendré dans son travail. Si vous êtes développeur
professionnel, vous comprendrez vite les bénéfices à utiliser de telles méthodes !
9H00
Night ly Build et r appor t s
jour nalier s
Mar t in ar r ive au bur eau. Il t r availle
comme développeur sur différ ent s
pr ojet s et , aujour d’hui, il est plus
mot ivé que les aut r es jour s. Il r epen-
se au jour où sa sociét é a décidé de
gér er l es pr oj et s à l ’ ai de des
mét hodes Agiles. Depuis, il a r et r ou-
vé un int ér êt pour son t r avail qu’il
n’avai t pl us eu depui s quel ques
années. Le t emps de poser ses
affair es, il jet t e un r apide coup d’œil à
son mail : le r appor t de génér at ion
de build aut omat ique, qui s’exécut e à
2:00 du mat in, lui indique que t out
s’est bien passé et que la build a ét é
livr ée aux t est eur s sur un par t age
r éseau.
9H15
Les individus
et les int er act ions
Mar t in r ejoint l’équipe à la machine à
café. Leur chef de pr ojet ar r ive un
peu apr ès et en pr ofit e pour donner
un feedback r apide sur les t est s
menés la veille : t out est au ver t , les
t est eur s sont t r ès sat isfait s des
ajout s r emont és hier. Les pr ior it és
de l a j our née sont r api dement
balayées pour que t out e l’équipe soit
alignée sur les mêmes object ifs.
Comme d’habit ude le point se conclut
par un pet it t our de t able : Qu’est ce
qui se passe bien ? Moins bien ? Que
peut -on amélior er ? Fr édér ic fait par t
au r est e de l’équipe d’une opt imisa-
t ion qu’il a t r ouvée pour accéder aux
données SQL. Il par t ager a l’info sur le
wiki int er ne de l’équipe.
9H30
Col l a bor a t i on e nt r e l e
mét ier et la t echnique
De r et our à l’open space, Mar t in
lance son Visual St udio, met à jour sa
solut ion en r écupér ant les der nièr es
ver sions des codes sour ces depuis la
br anche pr incipale du pr ojet sous
Team Foundat ion Ser ver (TFS). Il
r epr end les document s décr ivant les
fonct ionnalit és à implément er. Ces
document s ne sont pas exhaust ifs et
se pr ésent ent sous la for me de " use
case " : le besoin mét ier et les solu-
t ions t echniques y ont ét é élabor ées
en collabor at ion ent r e les fonct ion-
nels et les membr es de l’équipe. Ce
document de t r avail évolue t out au
long du pr ojet gr âce à l’effor t de cha-
cun pour cont r ibuer à son écr it ur e.
Mar t in a just ement pr évu de voir
Sacha à 11h00 pour discut er d’une
fonct ionnalit é. Les r éunions ent r e le
fonct ionnel et la t echnique ont per -
mis d’amélior er la cohér ence globale
du pr ojet mais aussi de mieux fair e
compr endr e et r evalor iser le r ôle de
chacun.
9H45
Check-in r égulier s
et int égr at ion cont inue
Mar t in r écupèr e ses t âches depuis
TFS (Wor k It ems) et démar r e ses
développement s dans l’or dr e des
pr ior it és. C’est vér it ablement dans la
manièr e de développer que Mar t in a
changé ses habit udes afin de se
caler au r yt hme des it ér at ions : l’ob-
ject if est de fair e simple, pr agma-
t ique et évolut if pour appor t er de la
valeur fonct ionnelle le plus r apide-
ment possible.
Mar t in vient de finir les évolut ions
qu’il avait pr évues la semaine der niè-
r e. Il fait une der nièr e mise à jour de
ses codes sour ces en local, compile
et int ègr e ses modificat ions dans le
r éfér ent iel. Une build de validat ion
est aut omat iquement mise en file
d’at t ent e sur le ser veur de build qui
exécut er a par ailleur s les t est s uni-
t air es. Mar t in r ecevr a ensuit e un
r appor t lui per met t ant de s’assur er
que t out s’est bien passé.
11H00
Les changement s,
même de der nier
moment ,
sont les bienvenus !
Sacha vient r et r ouver Mar t in à son
post e de développement et lui t end
un document de demande d’évolu-
t ion. Il faut r evoir 25% d’une fonct ion-
nal i t é dével oppée l a semai ne
der nièr e et fair e des modificat ions
La journée d’un développeur agile
26-43 20/05/2009 11:11 Page 34
Juin 2009 \\ PROgr ammez ! • 35
dossier \\ mét hode agile
plus ou moins mineur es. Pas de pr o-
blème pour Mar t in, ce ser a un déve-
loppement de quelques heur es. Le
t out se faisant dans un flux cont inu,
les changement s ar r ivant au fur -et -à-
mesur e que les t est s sont fait s, les
modificat ions sont finalement r elat i-
vement mineur es.
En fait , c’est devenu t r ès simple pour
Mar t in : il développe r apidement des
choses t est ables sur la base des use
cases émis par les fonct ionnels.
Plus il met r apidement à disposit ion
des t est eur s quelque chose d’ut ili-
sable, plus vit e les t est eur s r evien-
nent ver s lui pour demander des
changement s en adéquat ion avec le
mét ier.
14H00
Réunion hebdomadair e et
mesur es de pr ogr ession
Apr ès le déjeuner, comme t ous les
mer cr edis, l’équipe se r et r ouve dans
l’open space pour fair e le point sur
l’avancement du pr ojet . L’élément de
mesur e pr incipal est la complét ude
des fonct ions livr ées et t est ées. Ces
r éunions hebdomadair es sont aussi
l’occasion d’invit er d’aut r es membr es
des équipes de t est ou des fonct ion-
nels. Le chef de pr ojet donne un
r et our sur la pr ogr ession, mais aussi
la sat isfact ion r emont ée.
On en pr ofit e aussi pour passer en
r evue les bugs les plus impor t ant s,
ceux qui sont en pr ior it é 1 (à fair e le
plus r apidement possible) et sévér it é
1 ou 2 (bug cr it ique ou bug majeur ).
Gr âce aux dif f ér ent s indicat eur s
r emont és par TFS et le cube associé
au pr ojet , le chef de pr ojet a pu
met t r e en place une feuille Excel per -
met t ant de pilot er le r yt hme des
dével oppement s, l a qual i t é des
livr ables et la pr ogr ession du t r avail
r éalisé, t out cela dans le souci de
gér er l a bonne pr i or i t é au bon
moment .
14H30
Test s unit air es
et couver t ur e de code
Ret our au développement , Mar t in
implément e les t est s unit air es des
développement s r éalisés le mat in
même. Il t r ouve int ér essant la pr a-
t ique du développement pilot é par les
t est s (TDD) mais son équipe n’a pas
choisi de suivr e cet t e pr at ique.
Néanmoins, les t est s unit air es per -
met t ent de vér ifier qu’il n’y a pas de
r égr ession engendr ée par les nou-
veaux développement s, et la couver -
t ur e de code associée aux t est s
unit air es per met de vér ifier l’exhaust i-
vit é des t est s et ainsi la qualit é qui en
découle. Cet t e mét hode a per mis à
Mar t in de s’amélior er comme déve-
loppeur pr ofessionnel : du code plus
facile à maint enir, plus lisible et sur -
t out plus fiable.
Au final, c’est t out e l’équipe qui a
bénéficié de cet t e pr at ique et les
compét ences s’en sont t r ouvées net -
t ement amélior ées, pour le plus
gr and bien de t ous. Tir er l’équipe
ver s l’excellence t echnique est l’un
des pr incipes des mét hodes Agiles.
18H30
Conclusion
Mar t in a fini sa jour née et est sat is-
fait de son t r avail : il obt ient du feed-
back des t est eur s et ai de l es
f onct i onnel s à f or mal i ser l eur s
besoins lor s de leur s r éunions de t r a-
vail. L’ambiance au sein de l’équipe
n’ a j amai s ét é aussi bonne et
const r uct ive : t out le monde s’ent r e-
aide et la communicat ion est effica-
ce. Il sait que gr âce au choix des
mét hodes Agiles, sa car r ièr e de
développeur pr ofessionnel r epr end
de l’int ér êt , qu’il est valor isé par le
feedback des ut ilisat eur s finaux qui
obt iennent des r éponses concr èt es à
leur s besoins, et que son avis est
r espect é car l’aut onomie dont il
bénéficie dans la concept ion t ech-
nique pr ouve que ses idées sont
bonnes. Pour r ien au monde, il ne
voudr ait r evenir aux mét hodes pr écé-
dent es dans lesquelles le chef de pr o-
jet lui demandait de lir e des spécifica-
t i ons t echni ques dét ai l l ées qui
n’ét aient jamais exhaust ives et qui ne
laissaient aucune place à sa cr éat ivi-
t é de développeur.
Référ ences
Manifest o for Agile Soft war e Develop-
ment : ht t p:/ / www.agilemanifest o.or g/
Guidelines for Test -Dr iven Develop-
ment : ht t p: / / msdn. mi cr osof t . com/ en-
us/ libr ar y/ aa730844.aspx
Cont inuous Int egr at ion : ht t p:/ / mar t infow-
ler.com/ ar t icles/ cont inuousInt egr at ion.ht ml
■ Fr édér ic
QUEUDRET
MVP Client Applicat ion &
CTO de la sociét é
Mpowar e, accélér at eur
d’innovat ion. Sociét é fr an-
çaise d’édit ion de logiciels et de pr est at ions
de ser vices sur les t echnologies .NET.
Mpowar e est signat air e du manifest e Agile
et accompagne ses client s dans la mise en
place des mét hodes Agiles au sein de leur s
équipes.
ht t p:/ / www.mpowar e.com/
M powar e lance l’Agile
Tr aining Cent er
Pour les développeur s, t est eur s, chefs de pr ojet ,
ar chit ect es ou MOA, le wor kshop d’une jour née,
que pr opose Mpowar e au t r aver s de l’Agile Tr ai-
ning Cent er, per met t r a aux équipes pr ojet s de
compr endr e et pr at iquer les valeur s et pr incipes
des mét hodologies Agiles appliquées à la plat e-
for me Micr osoft Visual St udio Team Syst em
2008. La plupar t du t emps, les équipes pr ojet
déploient VSTS mais ut ilisent seulement la plat e-
for me pour ver sionner leur s codes sour ces, pas-
sant ainsi à côt é des avant ages et du r et our sur
invest issement qu’ils gagner aient à suivr e un pr o-
cessus Agile. Ce n’est pas la plat e-for me qui r end
les équipes agiles, c’est la mét hodologie et ses
valeur s appliquées à la plat e-for me. Mpowar e pr o-
pose un wor kshop d’une jour née avec mises en
sit uat ion pr ojet pour vos équipes : par t icipez à
t out es les ét apes d’un pr ojet Agile et pr at iquez les
mét hodologies Agiles alliées à la plat e-for me VSTS
pour amélior er concr èt ement la per for mance et
la pr oduct ivit é de vos équipes pr ojet s.
Cont act ez nous vit e pour r éser ver vot r e jour née
via cont act @mpowar e.com.
26-43 20/05/2009 11:11 Page 35
dossier \\ mét hode agile
36 • PROgr ammez ! \\ Juin 2009
D
ans l'équipe eXt r eme Pr ogr am-
ming / Scr um où je t r availle,
lor squ'un pr oblème sur vient , nous ut i-
lisons depuis quelques mois un for -
mat st andar disé issu du Lean : le
QRQC (Qui ck Qual i t y Response
Check). De quoi s'agit -il ? En pr ésence
d'une sit uat ion insat isfaisant e, un
membr e de l'équipe pr end une feuille
de papier et nomme le pr oblème en
haut à gauche. Par exemple : nous
avons mi s 5 h pour ajout er deux
opt ions au lieu de 1h30 est imée init ia-
lement . On indique ensuit e l'impact
pour le client : r isque de non-r espect
de l'engagement du spr int en cour s.
Vient ensuit e l'impact pour l'équipe de
développement : mon binôme écr it
"maux de t êt e". Puis on passe à la
descr ipt ion du pr oblème (que s'est -il
passé ?) :
• Pr emièr e difficult é : nous avons t ent é
pendant une heur e d'écr ir e un t est
pour sout enir l'ajout d'une opt ion
dans le fichier de configur at ion.
• Deuxième difficult é : pour l'une des
opt i ons, nous avons passé du
t emps à t r ouver le lien ent r e l'int er -
face homme-machine et sa r epr é-
sent at ion dans le code.
On not e ensuit e les causes pr obables :
• 1/ Méconnaissance de l'ut ilisat ion
combinée de JNDI et Spr ing.
• 2/ Ut ilisat ion inut ile de JNDI dans
ce cont ext e
• 3/ Nom de var iable décor r élé du
t er me employé dans l'int er face gr a-
phique
Pour chacune des causes, on r egar -
de s'il exist e un st andar d explicit e et
s'il a ét é r espect é. Dans le cas de cet
exemple, nous n'avons aucun st an-
dar d. Ensuit e, pour chacune des t r ois
causes, nous énumér ons des act ions
possibles :
• 1/ Fair e un how t o sur comment
écr ir e des t est s conjuguant Spr ing,
JNDI et l'ajout d'opt ion.
• 2/ Remplacer JNDI par un fichier
de pr oper t ies.
• 3/ Choisir des noms de var iables
plus cohér ent s.
Enfin, on indique la dat e et le t emps
passé (un chr onomèt r e avait ét é
déclenché en pr enant la feuille). Nous
y avons consacr é t r op de t emps : 20
minut es au lieu des 10 minut es du
QRQC pr écédent . Avec mon binôme,
nous concluons qu'il vaut mieux fair e
de plus pet it s QRQC au fur et à mesu-
r e que les pr oblèmes sont r encont r és
plut ôt que d' at t endr e la f in de la
t âche. Le lendemain, cet t e st r at égie
se r évéler a payant e.
Un écar t par r appor t à un
st andar d exist ant
Pour not r e pr oblème de dépasse-
ment de t emps, nous n'avions aucun
st andar d, mais ce n'est pas t oujour s
le cas. Dans une équipe agile, des
st andar ds explicit es exist ent dont
nous n'avons pas conscience, comme
la définit ion de done (aussi appelée
fini-fini).
Au lendemain d'une démonst r at ion de
fin d'it ér at ion difficile, un QRQC a lieu
pendant la r ét r ospect ive. L'une des
causes est le non r espect de la défini-
t ion de done. Enoncer en équipe cet
écar t par r appor t au st andar d per -
met alor s à un des développeur s de
pr endr e conscience qu'il ne r espec-
t ait plus cet t e définit ion de done. Il
décide de se mont r er plus r igour eux
et un aut r e développeur se pr opose
pour vér ifier les cr it èr es du fini-fini
chaque mat in.
Un st andar d à amélior er
Une aut r e cause de la démo difficile
dont je viens de par ler ét ait que deux
inst ances de Tomcat t our naient sur la
machine de r ecet t e. C'est la mauvai-
se inst ance de Tomcat qui r épondait
lor s de la démo.
Nous nous posons alor s la quest ion
des st andar ds :
• Un st andar d exist e-t -il ? Oui : un
scr ipt cent r alise l'accès aux ser -
veur s d'applicat ion.
• Le st andar d a-t -il ét é r espect é ?
Oui. On a bien invoqué applicat ion_
ser ver st op, mais seule l'opt ion
for ce-st op t ue Tomcat à coup sûr.
• Solut ion possible : changer le st an-
dar d en câblant l'opt ion st op sur
l'opt ion for ce-st op
Se poser plus syst émat iquement la
quest ion des st andar ds au sein d'un
QRQC per met donc d' en pr endr e
conscience, aide à les vér ifier et sur -
t out à les amélior er. Le QRQC ét ant
lui-même un st andar d, sans dout e
est -il possible de l'amélior er !
■ Philippe Blayo, Développeur
Or ange Business Ser vices
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.
Standardiser la résolution de
problèmes dans une équipe agile
Avis d’expert
26-43 20/05/2009 11:12 Page 36
dossier \\ mét hode agile
Entretien avec Claude Puppatti, directeur général
de Valtech France, spécialiste des Méthodes Agiles.
Pr ogr a mmez : Les équipes t echniques
accept ent davant age ces mét hodes ?
Claude Puppat t i : Le fonct ionnement est diffé-
r ent , les équipes du client et du pr est at air e sont
ét r oit ement mêlées, ce qui demande à r é-invent er
les cont r at s : la logique maît r e d’ouvr age/ maît r ise
d’ouvr age est dépassée, on est dans une r elat ion de
co-r esponsabilit é. Le mode de communicat ion
devient t r ès dir ect , les équipes opér at ionnelles ont
davant age de r esponsabilit és. Les r epor t ing doivent
êt r e or ganisés aut r ement afin de ne pas peser,
comme c’est souvent le cas, sur le cycle.
P : Le concept de " mét hodes agiles " est -il
aujour d’hui bien compr is des ent r epr ises ?
CP : Le t er me est galvaudé, mais sur t out , la dif-
ficult é r éside dans le fait qu’il s’agit d’un r ude
changement de ment alit és, d’une r évolut ion cul-
t ur elle ! Cela demande un effor t , alor s que
demeur er dans le classique " effet t unnel " des
pr ojet s est si confor t able ! Nous sommes dans
des cycles cour t s, de 4 à 6 semaines, et il faut
di sposer t r ès vi t e des composant s. Les
mét hodes agiles induisent une conduit e du chan-
gement au sein de l’ent r epr ise. Les cycles de
développement ne suivent pas les cycles de déci-
sion de l’ent r epr ise. On avait 3 ans pour un pr o-
jet , aujour d’hui, on a 15 mois. Les pr ior it és
changent : inst aller un ERP ne suffit plus for cé-
ment à donner un avant age st r at égique.
P : Et r e spécialist e des M ét hodes agiles est un
at out ?
CP : Finalement , not r e mission est de plus en plus
souvent de modifier la cult ur e de l’ent r epr ise.
Nous allons const it uer au niveau de Valt ech une
t ask-for ce capable de vendr e une offr e globale,
incluant la conduit e du changement , au sein de La
Dir ect ion Infor mat ique, et dans le fonct ionnement
des ser vices. Not r e maît r ise des mét hodes agiles
nous confèr e une avance au niveau des SSII. Une
fenêt r e d’avance de 15 à 24 mois ? Les choses
vont vit e !
Pr opos r ecueillis par Jean Kaminsky
Claude Puppat t i dir ige
Valt ech pour
la Fr ance. Le gr oupe
int ègr e 4 ent it és,
dont Valt ech
Technology, conseil et
int égr at ion de pr ojet s,
spécialist e des
mét hodes agiles.
Il est inst allé dans
7 pays, dont les
Et at s-Unis et l’Inde.
Il compt e 1 1 3 0
employés, dont 2 6 6
en Fr ance. 3 9 % du
CA de 1 0 0 , 6 M € est
r éalisé par la Fr ance
(chiffr es 2 0 0 8 ).
SOFTEAM Formation
Calendrier complet et inscriptions en ligne
www.softeam.fr
Soyez prêts
pour les nouvelles architectures
SOA et Web 2.0 !
SOA est devenu en peu de temps le mot-clé des développements
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.
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
de débuter dès les phases amont, de poursuivre en architecture, et d’aller jusqu’à
la réalisation dans le langage de votre choix.
SOA
SOA
SOA
SOA
Tél. : 01 53 96 84 30 - Fax : 01 53 96 84 01
Paris : 21 avenue Victor Hugo - 75016
Rennes - Nantes - Sophia Antipolis
Web 2.0
Nouveau catalogue Formation 2009 :
UML pour la maîtrise d’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Analyse et conception avec UML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
Alignement Métier du Système d’Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Architecture d’Entreprise (EA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Méthodologie pour SOA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Architecture technique SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Développement de Web Services en Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j
Développement de Web Services en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 j
Architecture distribuée: la synthèse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
Programmation orientée objet avec Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
Développement d’applications JEE 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 j
Développement d’applications JEE 5 Front End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
Développement d’applications JEE 5 Back End avec EJB 3. . . . . . . . . . . . . . . . . . . . . . . 3 j
Maîtrise du framework (Struts / JSF / Spring / Hibernate) . . . . . . . . . . . . . . . . . . . . . . . . . 3 j
Développement d’applications .NET / C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
Développement d’applications RIA avec. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 j
(Ajax / Dojo / GWT / FLEX3). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 j
Convergence SOA, UML2, BPMN, EA
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
SOA
UML 2
Ajax
Java
J2EE
Web 2.0
.NET
Urbanisation
Méthodologie
Patterns
Frameworks
Web services
EAI
ESB
BPM
EA
MDA
XML
Architecture
SOA
SOA
“L’agilité, une révolution culturelle”
26-43 20/05/2009 11:12 Page 37
dossier \\ méthode agile
38 • PROgrammez ! \\ Juin 2009
P
our rappel, la méthode de
travail doit être adaptée à la
réalisation d’un nouveau pro-
duit complexe pour lequel il n'est pas
possible de faire des spécifications
fonctionnelles et techniques détaillées
et exhausti ves. Les tâches sont
découvertes progressivement, les
changements sont la norme et doi-
vent être considérés comme une
opportunité: un besoin, une solution
technique qui n’ont pas été identifiés
lors du lancement du projet, mais qui
sont pertinents, doivent être pris en
compte. A l’inverse, un choix non
adapté doit être remis en question et
retiré si nécessaire.
Ainsi, il importe que la méthode de
travail permette à l’équipe de s’adap-
ter aux changements et imprévus,
qu’ils soient techniques, fonctionnels
ou organisationnels (par exemple un
changement de la constitution de
l’équipe). Il est donc nécessaire d’utili-
ser des outils et une organisation qui
permettent :
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.
• D’optimiser le travail du groupe:
faire ce qui est nécessaire et suffi-
sant pour l’utilisateur, favoriser le
partage des savoirs et des compé-
tences et mettre en avant les com-
pétences de chacun.
• D’établir un dialogue de qualité avec
l’utilisateur: comprendre ce qu’il dit,
parler un langage qu’il comprend et
l’impliquer dans la réussite du projet
• De s’organiser en s’appuyant sur
des estimations fiables: un plan pré-
cis, mais faux, est plus qu’inutile: il
est dangereux! Il est important d’es-
timer la qualité de l’information dont
on dispose.
Les méthodes de travail qui respec-
tent ce besoin de grande réactivité
sont appelées les méthodes agiles.
Le " manifeste agile " formalise la
notion d’agilité en la déclinant sous la
forme de 4 valeurs et de 12 prin-
cipes. Il est intéressant de présenter
et parcourir avec les membres de
l’équipe ces valeurs et principes afin
de les sensibiliser sur les enjeux et
réalités pratiques auxquels il est
nécessai re de fai re face dans l e
cadre du développement de logiciel.
Quels sont les principes
de scrum ?
lls sont simples.
• Les personnes qui interviennent sur
le projet sont réparties en seule-
ment 3 rôles :
- Le Product Owner / directeur de
produit : il représente les utilisa-
teurs, déf i ni t et pri ori se l es
demandes produit.
- L’équipe SCRUM: avec moins de 7
personnes regroupant tous l es
rôles traditionnels (architecte, déve-
loppeur, testeur, administrateur).
Cette équipe développe le produit et
se gère en toute autonomie.
- Le Scrum master, qui n’est pas le
chef de projet mais qui a un rôle de
coach: sa mi ssi on est de tout
mettre en oeuvre pour que l'équipe
travaille dans de bonnes conditions
et se concentre sur l'objectif du
projet.
• 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.
Fig.1
Gestion des
besoins et des
tâches.
26-43 20/05/2009 11:12 Page 38
Juin 2009 \\ PROgrammez ! • 39
dossier \\ méthode agile
• Le Spri nt BackLog conti ent l es
tâches à réaliser durant une itéra-
tion appelée Sprint.
• Les Burndown Charts sont des gra-
phiques permettant de suivre visuel-
lement l’avancement du sprint et de
la release (composée de plusieurs
sprints).
• Les sprints ont une durée fixe et se
déroulent de la façon suivante: (cf
figure 2)
- Chaque sprint commence par une
réunion de planification appelée
Sprint planning. A l’issue de cette
réunion, l’ ensemble de l’ équipe
connaît et comprend l’objectif du
sprint et chaque besoin, qui doit
être adressé dans le sprint, est
décomposé en tâches.
- Durant le sprint, chaque membre
de l’équipe prend une et une seule
tâche dans le pool de tâches les
plus prioritaires et effectue celle-ci.
- A heure fi xe, un dai l y scrum
(mêlée quotidienne) est effectué
debout. Chaque membre prend la
parole à tour de rôle pour indiquer
ce qu’il a fait, ce qu’il va faire et les
problèmes qu’il a rencontrés. L’ob-
jet de ce meeting est de faire un
statut mais pas de résoudre les
problèmes.
- En fin de sprint, les besoins réali-
sés durant le sprint sont montrés à
travers l’utilisation du logiciel.
- La réunion de rétrospective est
faite après la démonstration. Cette
réunion a pour objet de lister les
points qui ont bien fonctionné, ceux
qui peuvent être améliorés et de
convenir d’un ou 2 axes d’améliora-
tion pour le prochain sprint.
Qu'est ce qui différencie
scrum des autres
méthodes agiles ?
A la différence des méthodes UP ou
XP, SCRUM met l'accent sur l'implica-
tion de chaque membre de l'équipe
pour atteindre un objectif et non pas
sur des pratiques de développement
de logiciel.
Le product owner est fortement impli-
qué : il revoit les priorités et besoins à
chaque sprint et se focalise sur leurs
valeurs business.
L’équipe Scrum travaille de façon
incrémentale avec des itérations time
boxées. Ainsi, SCRUM permet de
satisfaire le client en livrant tôt et
régulièrement des logiciels utiles et
de qualité (puisque composés de
fonctionnalités terminées).
On retrouve dans SCRUM l'importan-
ce de la cohésion du groupe pour
faire face aux difficultés qui vont être
rencontrées tout au long de la vie du
projet.
Dans l ' équi pe Scrum, chaque
membre est impliqué et a sa place
dans le projet : les compétences,
connaissances et avis de chacun sont
i mportants et compl émentai res.
Cette organisation permet à chaque
membre non seulement de remonter
des besoins qui n’ont pas forcément
été identifiés, mais également de
mieux comprendre les besoins et diffi-
cultés des autres membres de l’équi-
pe : par exemple, l’implication d’une
personne en charge de l’exploitation
de l’application permet de mieux com-
prendre et appréhender les besoins
de monitoring ou de déploiement de
l’application.
La responsabilité n'incombe plus à
une seule et même personne mais
est partagée entre le product owner,
l'équipe scrum et le scrum master.
Quel est l'interêt de cette
approche ?
L'équipe est très efficace :
• Les membres de l'équipe sont impli-
qués donc amenés à collaborer
ensemble, ce qui permet de parta-
ger la connaissance et d'éviter ainsi
que le groupe ne devienne trop
dépendant d'une seule personne.
Plusieurs personnes sont en mesu-
re de prendre une tâche hautement
prioritaire et sont ainsi capables de
terminer une fonctionnalité.
• Les livraisons régulières motivent
les membres et les impliquent dans
la réussite du projet.
• L'équipe travaille dans de bonnes
conditions puisque le scrum master
fait en sorte qu'elle ne soit pas per-
turbée par des éléments extérieurs
au projet.
L'équipe livre régulièrement des
fonctionnalités terminées, ce qui
permet :
• D'utiliser le logiciel en l'état.
• De mesurer la capacité de production
(appelée vélocité) du groupe et ainsi
d'ajuster la planification des fonction-
nalités qu'il reste à implémenter.
Comment passer
en mode scrum ?
• Former l'équipe à SCRUM.
• Rassembler l'équipe projet dans
une seule et même pièce.
• Mettre en place des outils et pra-
tiques pour travailler efficacement
en mode incrémental. SCRUM ne
précise pas les techniques d'ingé-
nierie du logiciel à utiliser. Une
bonne pratique consiste à utiliser
celles préconisées par XP notam-
ment l'utilisation d'une plate-forme
Déroulement
d'un sprint
Fig.2
26-43 20/05/2009 11:12 Page 39
dossier \\ mét hode agile
40 • PROgr ammez ! \\ Juin 2009
la nouveaut é. Elles ne t r availlent pas
exclusivement sur leur domaine de
compét ence ou selon leur s aspir a-
t ions: par exemple, un développeur
va êt r e amené à cont r ibuer aux
t est s pour at t eindr e l'object if du
spr int . Son r ôle ne se limit e donc
plus simplement à pr oduir e du code.
• Chaque membr e n'a pas une list e
de t âches affect ées mais pr end des
t âches par mi les plus pr ior it air es
t out au long du spr int . Tout efois, il
exist e des limit es puisque cer t aines
t âches sont liées à un cor ps de
mét ier et ne peuvent êt r e r éalisées
par n’i mpor t e quel membr e de
l’équipe. C’est le cas, par exemple,
de cer t aines t âches de déploiement
en pr oduct ion.
• Les membr es de l'équipe qui avaient
un r ôle décisionnel (not amment le
chef de pr ojet ) ou qui avaient obt enu
un " t it r e " convoit é depuis long-
t emps peuvent r essent ir un sent i-
ment de fr ust r at ion.
• A l'inver se, les per sonnes qui ne sont
pas habit uées à se pr ononcer aur ont
besoin d'une phase d'adapt at ion.
De ce fait , du t emps et de l'adapt at ion
à plusieur s niveaux peuvent êt r e
nécessair es pour obt enir une cohé-
sion opt imale de l'équipe.
Pour passer out r e ces difficult és, le
r ôle du scr um mast er est essent iel. Il
doit pour cela :
• Et r e à l'écout e de l'équipe et at t ent if
aux obst acles r encont r és qui peu-
vent êt r e de nat ur e t r ès var iée
(conflit s int er nes, pr oblèmes d'infr a-
st r uct ur e, administ r at ifs...),
• Fair e appliquer les valeur s et les
pr at iques de SCRUM,
• Super viser l’act ivit é des membr es,
• Communiquer au client l'avance-
ment et les pr oblèmes,
• Pr ot éger l’équipe de t ous les élé-
ment s per t ur bat eur s ext er nes,
• Encour ager la coopér at ion ent r e les
per sonnes,
• Aider le pr oduct owner à sélect ion-
ner les fonct ionnalit és qui ont la
plus-value maximale.
Quelles solut ions peuvent
êt r e mises en place ?
Il peut êt r e nécessair e de pr océder
par ét apes, not amment lor sque l'équi-
pe a un hist or ique de cycle en V. Par
exemple, la non affect at ion de t âches
lor s du spr int planning est sujet à dis-
cussion. Si, malgr é une explicat ion, la
major it é n'est pas convaincue de l'in-
t ér êt de cet t e appr oche, il est pos-
si bl e dans un pr emi er t emps
d'affect er les t âches lor s du spr int
planning. On démont r e ainsi à l'équi-
pe qu'en se focalisant sur les object ifs
du spr int , le t ur n over des t âches est
t el qu'il n'y a pas d'int ér êt à les assi-
gner. Apr ès quelques spr int s, il est
plus facile de les convaincr e d'es-
sayer (et d'adopt er :-) ) le fait de ne
pas affect er les t âches.
Il est impor t ant d’essayer de nou-
velles pr at iques et de se fair e un juge-
ment apr ès l es avoi r t est ées:
l'ut ilisat ion du t ableau scr um (qui
cont ient l'object if du spr int , les t âches
à fair e, en cour s et t er minées) et du
planning poker pour fair e des est ima-
t ions font par t ie des pr at iques les
plus cour ant es pour appliquer r apide-
ment l es val eur s et r ègl es de
SCRUM.
Pour conclur e, bien que la mét hode
SCRUM r éponde à des r ègles r elat i-
vement pr écises, il est impor t ant de
bien gar der à l’espr it que chaque
équipe, chaque pr ojet et chaque
cont ext e sont différ ent s. La solut ion
r et enue sur un pr ojet n’est pas for cé-
ment celle qui doit êt r e appliquée sur
t out aut r e pr oj et . Le cadr e de
SCRUM est suffisamment lar ge pour
per met t r e à chaque équipe de t r ou-
ver l'or ganisat ion et les solut ions adé-
quat es.
■ Laur ent Laslaz
Scr um Mast er
Objet Dir ect
A pr opos de Objet Dir ect
Objet Dir ect (filiale de Homsys Gr oup) déve-
loppe depuis plus de 10 ans son exper t ise
dans la modélisat ion, les ar chit ect ur es objet
(Java, .NET, RIA) et les Mét hodes Agiles,
pour accompagner ses client s dans le pilo-
t age de leur s pr ojet s, depuis la concept ion
jusqu’au déploiement des applicat ions, et
opt imiser leur s syst èmes d’infor mat ion,
leur s mét hodes de développement logiciel et
leur s pr ocessus mét ier s.
www.objet dir ect .com
d'int égr at ion cont inue et le Test Dr i-
ven Development (TDD)
• Init ialiser un pr oduct backlog en se
concent r ant sur les besoins haut e-
ment pr ior it air es. Met t r e l'accent
sur les cr it èr es d'accept ance de
chaque besoin. Le découpage est
un exer cice difficile et pour lequel il
est impor t ant de consacr er du
t emps puisque c'est à par t ir de ce
découpage que l'équipe va t r availler.
• Se poser la quest ion de la nécessit é
d'opér at ions fait es habit uellement
en mode cycle en V t ant d'un point
de vue t echnique qu'or ganisat ionnel
(nécessit é d'un r appor t , d'un docu-
ment ...).
• Si le pr ojet est en cour s et a com-
mencé en mode cycle en V, ar r êt er
t out es les nouvelles t âches de déve-
loppement et de spécificat ions et
t er miner en t est ant et int égr ant les
fonct ionnalit és commencées.
Les difficult és
qui peuvent êt r e
r encont r ées lor s
de la mise en place
de scr um
SCRUM r emet en quest ion :
La façon de t r availler de l’équipe :
• Les fonct ionnalit és doivent êt r e
expr imées sous for me de besoins
qui ont de la valeur pour l’ut ilisat eur
et qui sont adr essabl es en un
spr int : t r ouver le bon niveau de gr a-
nul ar i t é et l e bon découpage
demande de la pr at ique.
• L'équipe doit êt r e capable de déli-
vr er des fonct ionnalit és avec un
coût de t est s, de packaging et de
déploiement accept ables. La mise
en place de l'out illage peut nécessi-
t er un effor t impor t ant pour des
pr ojet s exist ant s ayant peu ou pas
de t est s aut omat isés ou des pr océ-
dur es de déploiement manuelles et
fast idieuses.
• Des cr it èr es d'accept ance doivent
êt r e définis avant d' adr esser le
besoin. L'équipe doit s'habit uer à
t er miner (en accor d avec les cr i-
t èr es d'accept ance définis) les fonc-
t ionnalit és adr essées avant d'en
commencer d'aut r es.
L'or ganisat ion de l'équipe :
• Il faut fair e accept er aux per sonnes
26-43 20/05/2009 11:12 Page 40
Juin 2009 \\ PROgr ammez ! • 41
dossier \\ mét hode agile
P
our démar r er un pr ojet agile
ou pour " r endr e agile ” un
pr ojet en cour s de dévelop-
pement , il faut agir sur les mêmes
axes : or ganisat ion spécifique de
l’équipe, mise en place de l’usine de
développement nécessair e pour les
t est s, gest ion de la configur at ion de
t r avail it ér at if, avec comme object if
l’amélior at ion cont inue. Définir une
or ganisat ion en début de pr ojet pr é-
sent e bien des avant ages: si l’équipe
choisie connaît les pr incipes de l’Agili-
t é elle fonct ionner a facilement en
mode agile (SCRUM, XP, Lean ou
aut r e mixage oppor t un de mét hodes).
Si elle n’est pas encor e à l’aise avec
les pr at iques agiles, elle ser a mot ivée
d’explor er des nouvelles voies qui
–selon les r ègles de l’ar t de l’agilit é-
devr aient valor iser son t r avail.
De la même façon, l’adopt ion des
mét hodes agiles en cour s de r out e,
est gl obal ement per çue par l es
équipes de développement comme
une aide à l’amélior at ion. Sur l’axe
or ganisat ionnel, la difficult é la plus
fr équent e en cas de mise en place de
l’Agilit é sur un pr ojet déjà démar r é,
est l’int égr at ion des pr ofils pr éfér ant
t r availler en solit air e.
De la " M OA " au
" Pr oduct Owner "
et des spécificat ions
fonct ionnelles au backlog
Un act eur majeur dans la dynamique
Agile est le r epr ésent ant des ut ilisa-
t eur s (Pr oduct Owner ). C’est lui qui
est mandat é pour définir les pr ior it és
mét ier et r emplir la " feuille de r out e "
Adopter le mode agile en début
d’un projet ou en cours de route
Faire fonctionner un projet informatique en mode agile reflète la volonté de
créer une dynamique de travail à la fois efficace et valorisante pour les
équipes impliquées. Quel que soit le moment de la vie d’un projet où
l’Agilité est adoptée, cette décision est un acte novateur, porteur de
changements dans les habitudes des développeurs, des managers, des
utilisateurs.
de l’équipe de développement pour
chaque nouvelle it ér at ion. Il est bien
plus facile d’int égr er la nécessit é de
t r ouver le pr ofil adéquat comme pr é-
r equi s pour un démar r age, que
d’ident ifier ce pr ofil dans un disposit if
avec des habit udes de t r avail inst al-
lées. Un mauvais cast ing du Pr oduct
Owner peut compr omet t r e un pr ojet
Agile. Ce r isque est d’aut ant plus
impor t ant dans le cas de l’agilisat ion
d’un pr ojet exist ant .
Le Pr oduct Owner est le r esponsable
et le pr incipal cont r ibut eur du cont e-
nu du backlog. Ce t er me SCRUM est
une list e non hiér ar chisée des fonc-
t ionnalit és simples (" st or ies "). L’équi-
pe de développement , qui int er pr èt e
et décline t echniquement les fonc-
t ionnalit és, aliment e aussi le backlog.
Sa const it ut ion est consent ie comme
un élément d’ent r ée pour le démar r a-
ge d’un pr ojet agile, et peut êt r e per -
çue comme une sur char ge de t r avail
bur eaucr at ique sans bénéfice immé-
diat dans le cas de l’adopt ion de l’agili-
t é en cour s de r out e. Dans ce 2e
cas, le backlog r isque de ne pas avoir
assez de pr ofondeur et de ne pas
donner assez de visibilit é sur l’avance-
ment du pr ojet . De leur côt é, les
équipes de développement peuvent
per dr e en mot ivat ion et confiance,
car elles ne peuvent pas se pr ojet er
suffisamment dans l’avenir.
Le r yt hme it ér at if
C’est la pier r e angulair e des pr ojet s
agiles. Le r espect de ce r yt hme et
des bonnes pr at iques énoncées par
les mét hodes agiles (la st and-up mee-
t ing, le TDD, le " Kanban ", et c.) est
essent iel.
Adopt er ces nouvelles pr at iques pour
un nouveau pr ojet est " nat ur el ". En
effet , il est plus facile de définir des
r ègles du jeu sur " une feuille blanche "
que de changer les habit udes et le
pr ocessus de gest ion d’un pr ojet en
cour s. Plus le pr ojet est impor t ant et
le pr ocessus mat ur e, plus il ser a diffi-
cile de changer. A ce moment , une
quest ion s’impose: pour quoi adopt er
le mode de fonct ionnement agile pour
un pr ojet déjà démar r é ? Souvent la
r éponse est liée au dysfonct ionne-
ment du gr oupe, un manque de visibi-
lit é sur l’avancement , une mot ivat ion
faible des équipes de développement .
Ces der nièr es subissent une pr ession
selon des ur gences qu’elles ne com-
pr ennent pas. Si le mode ur gence est
inst aur é, la communicat ion ent r e les
diver s act eur s du pr ojet censés t r a-
vailler ensemble est faible, voir inexis-
t ant e.
Le Planning Game : un
out il de r esponsabilisat ion
Il s’agit d’un inst r ument de r égular isa-
t i on du r yt hme de r éal i sat i on. Il
consist e à définir la list e des fonct ion-
nalit és à développer pendant la pr o-
chaine it ér at ion (le " spr int backlog ").
Elle est évaluée sur la base d’une
char ge de t r avail sout enable, définie
par l’ensemble de l’équipe, et mesu-
r ée en " complexit é ". Le syst ème de
planificat ion collabor at ive r esponsabi-
lise l’équipe de développement et la
mot ive davant age à t enir un engage-
ment qu’elle a pr is elle-même. Au
26-43 20/05/2009 11:12 Page 41
dossier \\ mét hode agile
42 • PROgr ammez ! \\ Juin 2009
cont r air e, le planning est imé et impo-
sé par le management est souvent
subi par l’équipe de développement ,
qui se désolidar ise des object ifs qu’el-
le est ime loin de la r éalit é du t er r ain.
Adopt ée en début de pr ojet ou int é-
gr ée dans un pr ojet en cour s, cet t e
pr at ique est appr éciée par les déve-
loppeur s, qui ont l’oppor t unit é nouvel-
le de r emont er r égulièr ement les
r et our s " du t er r ain ". La mécanique
met en évidence la capacit é r éelle de
pr oduct ion.
L’usine de développement ,
les t est s et la qualit é
logicielle
Les pr incipes de l’Agilit é s’appuient
sur des pr at iques (le TDD, l’int égr a-
t ion cont inue, et c. ) à out iller. Pour
cela, l’inst allat ion de l’usine de déve-
loppement est une act ion clé du
démar r age d’un pr ojet .
Qu’est ce que la " Soft war e Fact or y "
doit inclur e ? Tout d’abor d il faut défi-
nir la solut ion d’int égr at ion cont inue
pour aut omat iser le build. Le monde
Unix le fait depuis t r ès longt emps, la
communaut é Java a développé Ant et
celle .net , Nant et MSBuild. L’aut oma-
t isat ion per met d’implément er deux
pr at iques de l’eXt r eme Pr ogr amming :
le " commit " quot idien et la const r uc-
t ion d’un build " aut o-t est able ". L’es-
sor du TDD (t est dr iven development )
a per mis de cr éer des t echniques
d’int égr at ion des t est s unit air es dans
le code. Les ser veur s d’int égr at ion
peuvent gér er les t est s aut omat isés
du monde Java (JUnunit ) et . net
(NUnit ), la const r uct ion du build com-
pr end l’exécut ion de ces t est s. Par mi
les plat es-for mes d’int égr at ion cont i-
nue les plus ut ilisées, cit ons Hudson,
Cr uise Cont r ol, Cont inuum. Dans la
démar che agile, le cont r ôle de la qua-
lit é logicielle passe aussi par l’aut oma-
t i sat i on des t est s f onct i onnel s
(r ecet t e). La " XU family " met à dis-
posit ion diver s out ils open sour ce à
cet effet : Fit Nesse, Selenium, Sahi,
Gr eenpepper, et c. Les ser veur s d’in-
t égr at ion cont inue peuvent aujour -
d’ hui i nt égr er des out i l s
d’aut omat isat ion de la r ecet t e, mais
pour cela il faut t enir compt e que la
machine de t est s aut omat isés peut
êt r e ut ilisée seulement si l’ar chit ect u-
r e de l’applicat ion est compat ible
avec le codage des t est s unit air es.
Pour un pr ojet à concevoir, il est pr o-
babl e qu’ i l y a peu ou pas de
cont r aint es d’ar chit ect ur e. Pour un
pr ojet en dér oulement , la r evue du
code, l’ajout des t est s unit air es, et
l’inst allat ion d’une nouvelle configur a-
t ion de développement , peuvent
s’avér er complexes. Selon le cont ext e
r éel du pr ojet , les r éponses aux ques-
t ions suivant es sont dét er minant es :
l’applicat ion a-t -elle ét é conçue pour
êt r e t est able ? Le " pr oduct owner " a-
t -il la possibilit é d’assumer la définit ion
des t est s fonct ionnels aut omat iques ?
L’avancement du pr ojet per met -t -il
d’absor ber l’invest issement nécessai-
r e pour le développement de t est s de
t out t ype ? Plus le pr ojet est avancé,
plus l’effor t de " r efact or ing " du code
exist ant - le r embour sement de la
" det t e t echnique "- r isque d’êt r e
gr and. Par fois l’écar t ent r e l’exist ant
et la cible est t ellement impor t ant que
le " r efact or ing " devient plus coût eux
que la r efont e de l’applicat ion. Dans ce
cas ext r ême, devant un logiciel vr ai-
semblablement non maint enable, une
r evue des object ifs s’impose.
Le t r avail collabor at if
et l’amélior at ion cont inue
La mise en œuvr e des pr at iques liées
à l’amélior at ion cont inue est une
aut r e act ion clé d’un pr ojet Agile.
L’Agilit é s’appuie massivement sur
" l’int elligence du gr oupe ". La " pr o-
gr ammat ion en binôme " (coder à
deux), la " pr ogr ammat ion par l’équipe "
(t out e l’équipe se met aut our de la
t able pour pr ogr ammer ), les t est s
cr oisés (les membr es de l’équipe t es-
t ent r écipr oquement le code) sont
des pr at iques qui s’appuient sur la
pr ogr ession par le r et our des pair s.
Aut r es pr at iques impor t ant es qui faci-
lit ent l’échange : les point s d’analyse
commune comme le " St and-up Mee-
t ing ", mise au point quot idienne d’une
dur ée de 10 minut es envir on, et la
" r ét r ospect ive ", r éunion r égulièr e
(par exemple en fin de chaque it ér a-
t ion) qui per met d’analyser le t r avail
d’équipe et d’ident ifier les axes d’amé-
l i or at i on. Bi en sûr, ces act i vi t és
demandent un invest issement de
t emps que par fois ni l’équipe ni les
manager s ne sont pr êt s à fair e, mais
dont à l ’ usage, l ’ ensembl e des
act eur s r econnaît les bénéfices. Dans
le cas d’un pr ojet qui démar r e, définir
ce t ype de fonct ionnement fait par t ie
du " plan d’assur ance qualit é " du pr o-
jet et il ser a accept é, même si la r ét i-
cence sur l e " t emps passé en
r éunion " par l’équipe de développe-
ment r est e pr ésent e. A l’opposé, le
changement d’un f onct ionnement
connu, impliquant la par t icipat ion à
des " nouvelles r éunions ", est plus dif-
ficile à assumer. L’équipe et les lea-
der s ne sont pas pr êt s à r enoncer au
mode de t r avail habit uel, il a un côt é
r assur ant , car connu, même si un
accor d exist e sur le besoin d’ac-
cr oît r e son efficacit é. Pour ces r ai-
sons, il semble judicieux de r endr e
agile un pr ojet en mode " échant illon "
plut ôt qu’en mode " Big-bang ". Aut r e-
ment , un phénomène de r ejet peut
s’inst aller et met t r e en pér il la bascu-
le Agile.
■ Oana Juncu
Dir ect ion
de Pr ojet s - SFEIR
www.sfeir.com
Abonnez-vous à
e-
2,7 €seulement par numéro au format PDF(pour le monde entier)
et pour 0,84 € de plus par mois : abonnement illimité aux archives
(numéros du magazine, et articles, en PDF)
Abonnez-vous sur www.programmez.com
26-43 20/05/2009 11:12 Page 42
26-43 20/05/2009 11:12 Page 43
S
a simplicité et son intégration avec la plate-forme .Net
représentent les principales raisons de son adoption par un
grand nombre de développeurs à travers le monde. De
plus, on ne manque pas d’outils, il y a des environnements adaptés
aux besoins spécifiques des développeurs et des designers, et des
mécanismes de collaboration fluides.
Silverlight 2.0 partage la technologie de WPF en se basant sur le
langage XAML " Extensive Application Markup Language ". Le langa-
ge XAML est un dialecte XML qui peut être utilisé pour spécifier de
manière déclarative l'interface utilisateur d'une application Silverlight
ou WPF. XAML peut également servir plus largement pour repré-
senter des objets .NET.
Silverlight reprend aussi le modèle ASP.Net en intégrant les fichiers
de classe " Code-behind " pour gérer la séparation du code et la pré-
sentation. Ces fichiers peuvent être écrits en plusieurs langages
dont C#, VB.NET, Python et Ruby.
Préparez l’environnement de développement
1- Visual Studio 2008 SP1 ou Visual Web Developer Express with
SP1 (gratuit).
2- Silverlight Tools for Visual Studio 2008 SP1 : extension pour
Visual Studio 2008 SP1 ou Visual Web Developer Express with
SP1 qui va mettre à jour Visual Studio.
Ajouter le support des projets Silverlight, les runtime de développe-
ment, et le SDK.
3- Microsoft Expression Blend 2. Et son Service Pack 2 : Un nouvel
environnement de développement orienté designers qui permet de
créer des interfaces graphiques pour les applications Silverlight 2.
4- Deep Zoom Composer : outil permettant de préparer vos images
pour les utiliser avec la fonctionnalité Deep Zoom.
5- Silverlight Toolkit : projet open source Microsoft project conte-
nant des contrôles et des composants Silverlight pour créer des
applications.
Créez votre premier projet Silverlight
Nous allons utiliser Visual Studio pour créer notre première applica-
tion et commencer à explorer Silverlight : [Fig.1]
Par défaut, un projet d'application Silverlight nouvellement créé
contient un fichier Page.xaml et App.xaml, ainsi que les fichiers de
classe code-behind (qui peuvent être écrits en VB, c#, Ruby ou
Python) qui y sont associés : [Fig.2]
développement web \\ silverlight
44 • PROgrammez ! \\ Juin 2009
Bien débuter en Silverlight
Silverlight gagne du terrain dans le domaine de la création d’applications internet riches
et devient une technologie incontournable.
Le fichier App.xaml est généralement utilisé pour déclarer des res-
sources, comme les pinceaux (Brush) et les styles qui sont partagés
entre les composantes de l'application. La classe code-behind du
fichier App.xaml peut être utilisée pour gérer les événements de
niveau application - comme Application_Startup, Application_Exit et
Application_UnhandledException.
Après compilation, le projet est transformé en fichiers " .xap " asso-
ciés à des assemblies .Net standard. Les fichiers " .xap " utilisent
l’algorithme de compression zip standard pour réduire la taille de
téléchargement de client.
Pour héberger et exécuter une application Silverlight 2, vous pouvez
ajouter une balise <object> dans toute page de HTML standard qui
pointe vers le fichier .xap. Ce fichier sera alors automatiquement
téléchargé et instancié par le plugin Silverlight du navigateur :
Ajoutez des contrôles utilisateur avec Blend
Vous pouvez charger le projet créé avec Visual studio avec Expres-
sion Blend : [Fig.3]
Silverlight offre trois possibilités pour l’agencement des éléments
d’interface :
• Le Canvas : Permet le positionnement explicite des contrôles en
utilisant des coordonnées.
• Le StackPanel : Permet le positionnement horizontal ou vertical
d’un groupe de contrôles.
• Grid : Similaire aux tables Html. Permet le positionnement en
multi-lignes et multi- colonnes.
Nous allons utiliser Blend pour créer une grille avec trois lignes et
trois colonnes. Pour cela il suffit de la zone d’édition graphique du
concepteur. L’étape suivante sera de glisser-déposer des contrôles
utilisateurs sous Blend. Et le code XAML associé généré par Blend :
(voir listing A)
Retournons dans Visual Studio pour ajouter un peu de logique C# à
notre application. Ajoutons un gestionnaire d’évènement click au
bouton btnSearch : (voir listing B)
Fig.1 Fig.2 Fig.3
[ ]
44-55 20/05/2009 11:59 Page 44
Juin 2009 \\ PROgrammez ! • 45
développement web \\ silverlight
Et le code de la méthode btnSearch_Click :
Le Code C# utilisé est des plus simples, mais l’objectif est de monter
l’accessibilité des contrôles Silverlight à partir du code et la facilité
de leur manipulation (exactement identique à un développement
WinForms ou ASP.NET).
Utilisez les styles
Silverlight offre des fonctionnalités de style similaires aux feuilles CSS
permettant d’encapsuler les valeurs de propriétés de contrôles
comme une ressource réutilisable. Ces styles peuvent être stockés
dans des fichiers séparés et seront utilisés dans l’intégralité de notre
application. Ajoutons un style au fichier App.xaml : (voir listing C)
La définition de ce style " Label " peut être référencée dans le reste
de notre application en utilisant la propriété style : (voir listing D)
Et le résultat :
Changez l’apparence des contrôles
Avec Silverlight la personnalisation de l'apparence standard des
contrôles est un jeu d’enfant. L’une des approches est d’utiliser les
styles pour redéfinir la propriété " Template " qui définit l’apparence
standard d’un contrôle (le bouton par exemple) :
Ajoutons la référence de ce style à notre bouton :
Et le tour est joué :
Conclusion
Le précédent exemple nous a permis de faire une rapide introduc-
tion au développement Silverlight et à ses outils. Vous pourrez trou-
ver des ressources complémentaires sur le site de Silverlight
http://silverlight.net/ et d’autres contrôles utilisateur plus avancés dans
le Silverlight Toolkit : http://www.codeplex.com/silverlight
■ Hassen HARRATH
Spécialiste .NET chez IP-Tech, SSII Tunisienne spécialisée dans les développements
informatiques pour le marché Français (www.iptech-offshore.com).
[ ]
(listing A) (listing C)
(listing D)
(listing B)
44-55 20/05/2009 12:00 Page 45
avez inst allé une ver sion plus r écent e
d’Int er net Explor er sur vot r e machine
-puisque celle-ci fonct ionne comme
une mise à jour Windows-, vous avez
désor mais la possibilit é avec ce nou-
vel out il d’avoir un aper çu de vot r e
sit e Int er net depuis Super Pr eview
sous le mot eur de r endu d’Int er net
Explor er 6.
Bien sûr pour l’accompagner, vous
pouvez int égr er d’aut r es navigat eur s
Web dans Super Pr eview [Fig.2]. Dans
un pr emier t emps, vous avez à dispo-
sit ion les navigat eur s inst allés sur
vot r e or dinat eur (Int er net Explor er 7
ou 8, Fir efox et Safar i). Mais il est
également possible de pouvoir r elier
Super Pr eview avec des navigat eur s
pr ésent s sur d’aut r es machines -
comme un Mac- pour bénéficier de
leur aper çu dans celui-ci. La naviga-
t ion ent r e ces pr évisualisat ions se fait
d’une manièr e inst ant anée apr ès le
char gement de la page du sit e Int er -
net . Il est possible aussi de fair e une
compar aison avec une image de vot r e
sit e Int er net , pour cor r espondr e au
mi eux avec vot r e maquet t e gr a-
phique.
Quelques out ils en plus
Super Pr eview met également à vot r e
disposit ion quelques élément s de
débogage. Pas de quoi le compar er
Expr ession Web 3
Mix 09 ne nous aur a pas beaucoup
plus éclair és sur les nouveaut és qui
ser ont int égr ées dans la pr ochaine
mout ur e d’Expr ession Web. On peut
néanmoins s’at t endr e à des amélior a-
t ions sur le suppor t des CSS dans la
fenêt r e de Design. Silver light 2 et
MVC devr aient venir aussi s’ajout er à
la list e des t echnologies suppor t ées
par Expr ession Web. Il a également
ét é dit que le suppor t de syst èmes de
gest ion de ver sions comme Micr osoft
Visual Sour ceSafe, ou plut ôt Team
Foundat ion Ser ver, n’ét ait pas pr évu à
l’heur e act uelle dans la ver sion 3 d’Ex-
pr ession Web. L’une des r aisons ét ant
que la pr ior it é a ét é donnée au sup-
por t des t echnologies cit ées plus haut .
Mais r ien n’empêche Micr osoft de
r evenir sur cer t ains élément s avant sa
sor t ie en ver sion finale. Cont r e t out e
at t ent e et malgr é le fait qu’ils aient ét é
for t ement sous-ent endus lor s des ses-
sions, ce n’est pas ce genr e de nou-
veaut és qui ont ét é dévoilées lor s de
l’évènement de Las Vegas. Out r e le fait
de r evenir sur des possibilit és déjà
exist ant es (af fichage simplifié des
CSS, ut ilisat ion de Seadr agon Ajax
dans vot r e sit e Web, et c.), Micr osoft
a plut ôt insist é sur un nouvel out il qui
fer a son appar it ion dans Expr ession
Web 3 : Super Pr eview.
développement web \\ silver light
46 • PROgr ammez ! \\ Juin 2009
Microsoft Expression Studio3
Dans cet article, nous allons passer en revue les principales nouveautés annoncées
par Microsoft durant le MIX09 qui s’est tenu du 18 au 20 Mars dernier à Las Vegas.
Lors de cet évènement, le focus avait été mis notamment sur Expression Web 3 et
Expression Blend 3. Pour plus d’informations sur les éléments vus ou cités, je vous
invite à vous reporter aux liens disponibles à la fin de cet article.
Super Pr eview : un
afficheur mult i-navigat eur
L’une des pr incipales nouveaut és
mise en avant par Micr osoft sur la
pr ochaine ver sion d’Expr ession Web
est sans aucun dout e Super Pr eview.
Pour expliquer r apidement cet t e nou-
vel l e f onct i onnal i t é i ncl use dans
Expr ession Web 3, on pour r ait dir e
gr ossièr ement qu’il s’agit d’un affi-
cheur mult i-navigat eur de sit e Int er -
net , accompagné de fonct ions de
débogage t r ès ut iles. Super Pr eview
ne vient pas r emplacer la fenêt r e de
Design d’Expr ession Web, mais c’est
une fonct ionnalit é qui peut êt r e ut ili-
sée en par allèle avec celle-ci. Exami-
nons donc plus pr écisément ce que
nous pour r ons fair e avec [Fig.1].
Aper çus sous diver s navi-
gat eur s locaux ou dist ant s
Tout d’abor d, comme dit plus haut ,
celui-ci per met d’avoir un affichage
des pages d’un sit e Int er net sous dif-
fér ent s mot eur s de navigat eur Web.
Une des pr incipales qualit és de Super
Pr eview est d’embar quer avec lui une
ver sion por t able d’Int er net Explor er 6.
En effet , cela per met de bénéficier
des élément s de débogage que pr o-
pose Super Pr eview pour les appli-
quer sur un si t e Int er net sous
Int er net Explor er 6 . Donc, si vous
Fig.1 Fig.3 Fig.2
44-55 20/05/2009 12:00 Page 46
44-55 20/05/2009 12:00 Page 47
développement web \\ silver light
48 • PROgr ammez ! \\ Juin 2009
équit ablement avec Fir ebug ou le
débogueur int égr é dans Int er net
Explor er 8 , mais il r epr end néan-
moins les bases de ces der nier s. La
sélect ion d’élément s, pour les compa-
r er ent r e eux, peut se fair e dir ect e-
ment depuis les pr évisualisat ions ou
encor e depuis un ar br e DOM du sit e
Int er net visualisé [Fig.3].
En effet , Super Pr eview ne fait pas
qu’afficher une pr évisualisat ion, il en
r epr end aussi les infor mat ions géné-
r ales HTML. En sélect ionnant un élé-
ment sur l a pr évi sual i sat i on, on
r et r ouve des infor mat ions comme :
son t ype de balise, sa posit ion, ses
dimensions, sa classe CSS ou son ID
dir ect ement depuis la bar r e d’ét at .
Par mi ces out ils, on peut not er la pos-
sibilit é d’ajout er une r ègle aut our des
visualisat ions ou encor e d’ajout er des
r epèr es de la même façon que sur
Phot oshop ou Expr ession Design.
Super Pr eview nous donne la possibili-
t é de visualiser not r e sit e Int er net
sous différ ent es mét hodes. Cela peut
se fair e côt e à côt e, l’une en-dessous
de l’aut r e ou via une super posit ion
des pr évisualisat ions.
Quelques limit at ions
également
Dans cet t e ver sion bêt a de Super
Pr eview, on sent t out de même qu’il
r est e encor e beaucoup à fair e pour la
ver sion finale.
Comme indiqué pr écédemment , seuls
Fir efox et Safar i sont pr is en compt e
par Super Pr eview. Qu’en est -il alor s
d’Oper a ou encor e de Chr ome ?
Micr osoft pr omet néanmoins qu’ils
ser ont int égr és pr ochainement dans
cet t e fonct ionnalit é.
Un aut r e point gênant r est e que les
filt r es et t r ansit ions ne sont pas dispo-
nibles sur le mot eur d’Int er net Explo-
r er 6 pr ésent dans Super Pr eview.
Par exemple, cela ne per met pas de
t r ait er les PNG t r anspar ent s avec
DXImageTr ansfor m. On peut égale-
ment not er que cer t ains élément s
HTML, comme les balises object ,
embed et applet , peuvent ne pas êt r e
affichés avec les bonnes dimensions
si IE8 n'est pas inst allé. Une aut r e ut i-
lisat ion de Super Pr eview, qui aur ait
pu êt r e d’une t r ès gr ande ut ilit é,
aur ait ét é le suppor t de mot eur s de
r endu de messager ie mail comme
Out look 2007.
En effet , Micr osoft n’ut ilise plus le
mot eur d’Int er net Explor er pour affi-
cher les mails HTML dans Out look
2007, ce qui peut génér er quelques
soucis d’affichage avec une st r uct ur e
HTML/ CSS classique. Il faut cepen-
dant souligner que cet t e ver sion est
une Bêt a et que des modificat ions
sont encor e à venir. Il s’agit là de
quelques limit at ions, mais qui ne
devr aient pas empêcher Super Pr e-
view de devenir un out il aussi incon-
t our nable que Fir ebug ou encor e le
débogueur d’Int er net Explor er 8.
Expr ession Blend 3
Les nouveaut és annoncées pour
Blend sont , quant à elles, beaucoup
plus nombr euses que pour Expr es-
sion Web 3. Out r e une int er face légè-
r ement r evue mais qui ne changer a
en r ien vos habit udes, on peut souli-
gner la pr ésence d’élément s comme
le suppor t de Visual St udio Team
Foundat ion Ser ver ou encor e l’ajout
de nouveaux édit eur s XAML, C# et
VB, avec not amment la pr ésence ou
l’amélior at ion de l’Int elliSense pour
ces langages. Ceci évit e désor mais
l’emploi de Visual St udio pour pr ofit er
de ces fonct ionnalit és avec ces lan-
gages-là.
Sket chFlow : Donner vie
à vos concept s et vos
pr ot ot ypes
Sket chFlow vous per met avec une
seule et même applicat ion int égr ée à
Expr ession Blend 3 de r éaliser vos
maquet t ages ou pr ot ot ypages. En
effet , ce nouvel out il per met aux desi-
gner s de dessiner des esquisses, les
met t r e en for me, les simuler, leur
donner vie pour enfin les déployer, et
cela d’une façon beaucoup plus int er -
act ive que via Power Point ou d’aut r es
mét hodes.
Avec Sket chFlow vous avez la possibili-
t é de donner de l’int er act ivit é à vos
cr oquis de pr ot ot ypes car celui-ci per -
met à t out moment d’y ajout er des
cont r ôles WPF. Pour fair e simple, il
per met la même chose que ce que
vous pouvez fair e dans un pr ojet WPF
nor mal. Et afin de r est er dans l’espr it
de pr ot ot ype et de maquet t age, ces
cont r ôles ont dr oit à une appar ence
spéci f i que se r appr ochant d’une
esquisse [Fi g. 4 ]. Cela per met de se
focaliser pr incipalement sur le fonc-
t ionnement de vot r e applicat ion plut ôt
que de s’at t ar der sur des dét ails gr a-
phiques. Néanmoins, il vous est à
t out moment possible de basculer
d’appar ence depuis les pr opr iét és de
vos cont r ôles.
Vos esquisses peuvent êt r e lancées
comme une applicat ion WPF depuis
le Sket chFlow Player [Fig.5]. Ce lect eur,
inclus aut omat iquement dans vot r e
pr ojet de maquet t age, donne la possi-
bilit é à d’aut r es per sonnes de navi-
guer facilement ent r e vos différ ent s
écr ans. Si vous le souhait ez, des ani-
mat ions peuvent êt r e jouées depuis
ce lect eur. Cela per met de se fair e
une idée sur la façon dont les élé-
ment s int er agissent ent r e eux. Sket -
chFlow Player per met aussi à ses
Fig.4 Fig.5 Fig.6
44-55 20/05/2009 12:00 Page 48
Juin 2009 \\ PROgr ammez ! • 49
développement web \\ silver light
ut ilisat eur s d’ajout er des commen-
t air es ou des annot at ions sur les cr o-
qui s de vos écr ans. Une f oi s
enr egist r és sous for me de fichier,
vous pouvez ouvr ir ces comment air es
et annot at ions dans vot r e pr ojet
Expr ession Blend 3.
Sket chFlow per met d’associer facile-
ment des données à vos maquet t es
pour leur four nir plus de cont enu. Ces
données et leur modèle d’affichage
sont édit ables de la même manièr e
qu’un pr ojet WPF de base. Il est int é-
r essant de not er que vot r e pr ojet
Sket chFl ow est expor t abl e sous
for me de fichier Wor d. Dur ant l’opé-
r at ion d’expor t , Expr ession Blend 3
vous cr ée un document complet com-
pr enant une t able de cont enu, des
images de vos écr ans, les annot a-
t ions associées à ceux-ci, et c.
Cr éer des compor t ement s
et des composant s sans
code
Expr ession Blend 3 int r oduit désor -
mais une bibliot hèque de compor t e-
ment s de base pour vos cont r ôles.
Cela per met not amment au gr aphist e
de ne pas avoir besoin d’un dévelop-
peur pour cr éer des int er act ions ut ili-
sat eur s. Néanmoins, un développeur
aur a t oujour s la possibilit é de cr éer
des compor t ement s supplément air es
pour que le gr aphist e puisse les ut ili-
ser de son côt é depuis sa biblio-
t hèque.
Cet t e nouvelle ver sion d’Expr ession
Blend per met aussi une cr éat ion de
composant s beaucoup plus aisée. En
effet d’un simple clic, vous avez désor -
mais la possibilit é de cr éer des com-
posant s à par t i r d’ él ément s
gr aphiques exist ant s. Il int r oduit par
l a même occasi on l a not i on de
Cont r olPar t s : Vous pouvez at t r ibuez
un élément gr aphique comme une
par t i e de cont r ôl e. Si on pr end
comme exemple le Slider, vous pouvez
facilement définir un élément gr a-
phique exist ant comme cur seur.
De ce fait , une nouvelle fenêt r e fait
son appar it ion pour vous per met t r e
de choisir simplement un élément
comme ét ant une par t ie du compo-
sant . Cet t e fenêt r e vous donne accès
à une list e pr édéfinie du composant
que vous souhait ez cr éer. L’élément
choisi adopt er a de cet t e manièr e un
compor t ement logique associé à la
par t ie du composant sélect ionnée.
Impor t er un fichier
Adobe Phot oshop
ou Illust r at or
Une aut r e nouveaut é qui a déjà pu
fair e son appar it ion en par t ie dans la
ver sion 2 d’Expr ession Web est l’im-
por t d’un fichier de t ype Adobe Phot o-
shop ou Illust r at or. A la différ ence
qu’ici, son ut ilisat ion est beaucoup
plus poussée et sur t out beaucoup
plus ut ile. Dans ce qui suit , je décr ir ai
pr incipalement l’impor t de fichier Pho-
t oshop car le fonct ionnement de l’im-
por t de f i chi er Il l ust r at or est
globalement le même que l’impor t de
fichier d’Expr ession Design.
Lor sque l’on impor t e un fichier Phot o-
shop, Expr ession Blend 3 per met de
sélect ionner les calques à inclur e
dans les données que l’on désir e ajou-
t er à son pr ojet [Fig.6]. Il est également
possi bl e de cr éer de nouveaux
gr oupes d’élément s depuis l’ar bor es-
cence de sélect ion des calques à
impor t er. Pour ce qui est du r espect
des élément s Phot oshop, Expr ession
Blend 3 est assez génér eux pour
cet t e nouvelle fonct ionnalit é. En effet ,
il r espect e les calques, leur ar bor es-
cence, leur posit ion, les bit map, les
for mes vect or ielles, les t ext es, les
masques et les for mes ayant un r em-
plissage solide ou dégr adé. Expr es-
si on Bl end 3 s’ occupe aussi de
génér er le XAML qui cor r espond à ce
que vous lui avez impor t é. Pour ce qui
est des masques et des for mes vec-
t or ielles, dès qu’ils sont impor t és
dans vot r e pr ojet , ils sont t out à fait
modifiables à vot r e guise.
La manipulat ion des élément s Phot o-
shop impor t és ne diffèr e pas des élé-
ment s déjà pr ésent s et il vous ser a
également possible de cr éer des
composant s dir ect ement depuis un
élément ou un gr oupe d’élément s.
Pour pallier au pr oblème de la t aille
de pixels sous Adobe Phot oshop (72
DPI) et Expr ession Blend (96 DPI),
celui-ci vous pr opose de les r edimen-
sionner si nécessair e. Dans le cas où
des pr oblèmes de compat ibilit é se
pr ésent ent , il est possible de sélec-
t ionner un calque qui fusionne l’en-
semble des élément s Phot oshop sous
sa bonne ver sion. Ceci ét ant dû au
fait que cer t ains élément s ne sont
pas encor e suppor t és, comme par
exemple l’opacit é d’un élément ou les
effet s de Phot oshop. Le but de Micr o-
soft ét ant que le suppor t des élé-
ment s d’un fichier Phot oshop soit
t ot al.
Une ver sion Bêt a
disponible
Pour cour onner le t out et pour un
poids de plus ou moins 289.4 MB,
vous avez désor mais la possibilit é de
vous fair e une idée de ces nouveaut és
avec la ver sion Pr eview d’Expr ession
Web 3 dont le lien est disponible à la
fin de cet ar t icle. Néanmoins, veuillez
not er quelques pet it es r emar ques
avant de vous r uer sur cet t e ver sion
Pr eview !
Tout d’abor d et le plus impor t ant à
mon sens, si vous ouvr ez un pr ojet Sil-
ver light 2 dans Expr ession Blend 3
Pr eview, celui-ci vous demander a à
êt r e conver t i en pr ojet Silver light 3.
Une fois ceci fait , vous ne pour r ez
plus r evenir en ar r ièr e.
Pr enez en compt e aussi le fait que
Sket chFlow n’est pas disponible dans
cet t e ver sion Pr eview. Donc, si vous
compt iez voir d’un peu plus pr ès cet t e
fonct ionnalit é, il vous faudr a pr endr e
vot r e mal en pat ience !
Ressour ces
- Int er net Explor er 8 :
ht t p:/ / www.micr osoft .com/ ie8/
- Seadr agon Ajax :
ht t p:/ / livelabs.com/ seadr agon-ajax/
- Silver light 3 Bêt a :
- ht t p: / / si l ver l i ght . net / get st ar t ed/ si l ver -
light 3/ default .aspx
- Expr ession Blend 3 Bêt a :
ht t p:/ / www.micr osoft .com/ expr ession/ t r y-
it / blendpr eview.aspx
- Expr ession St udio 2 (Evaluat ions dis-
ponibles) :
ht t p:/ / www.micr osoft .com/ expr ession/
- Sessions du MIX09 sur Expr ession :
ht t p:/ / videos.visit mix.com/ MIX09/ Tags/ Expr
ession
■ Axel Pet er
Int égr at eur .NET & Web Designer
ht t p:/ / www.wygwam.com
ht t p:/ / blogs.codes-sour ces.com/ chr onos
44-55 20/05/2009 12:00 Page 49
Dans cet article nous allons apprendre à :
• Rendre une application Silverlight 3 téléchargeable
• Détecter si l’application est :
- Installée sur le bureau ou sous navigateur
- Online ou offline.
• Récupérer des données à partir du site hôte de l’application
Avant de commencer, notez que les pré-requis pour cet article sont :
• Connaître les bases de la plate-forme .Net
• Installer Visual Studio 2008 (dont la version express est gratuite)
Attention, installez la version anglaise, les Tools et SDK existent seu-
lement en anglais pour l’instant !
• Installer les Silverlight 3 Tools et SDK ainsi que les .Net RIA ser-
vices (http://www.silverlight.net/GetStarted/silverlight3)
Bases de l’application
• Démarrez Visual Studio 2008
• Ouvrez le menu File -> New Project …
• Dans la boîte de dialogue " New Project " qui apparaît, choisissez
" .Net Framework 3.5 " et sous le type de projet " Silverlight " :
" Silverlight Application " [Fig.1].
• N’oubliez pas de lui donner un nom, dans ce cas-ci : " OutOfBrowser "
• Cliquez sur Ok.
• Une nouvelle boîte de dialogue apparaît : " New Silverlight Appli-
cation ". Prenez soin de cocher l’option " Link to ASP.Net server
project ". Cette option activera le lien .Net RIA Services entre l’ap-
plication Silverlight et son site ASP.NET host [Fig.2].
• Cliquez sur Ok.
• Visual Studio va générer automatiquement toute la structure de la solution.
• Dans le fichier MainPage.xaml du projet Silverlight, ajoutez un
texte " Hello World ".
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock>HelloWorld</TextBlock>
</Grid>
Voici le résultat obtenu lors d’un débogage de la solution créée ci-
dessus : [Fig.3]
développement web \\ silverlight
50 • PROgrammez ! \\ Juin 2009
Silverlight 3 envahit aussi le Bureau !
Alors que Silverlight 2 ne fonctionnait qu’en mode connecté (en ligne) et à l’intérieur d’un
navigateur, la version 3 de la plate-forme ne respecte plus ces limitations et débarque
(enfin) sur le bureau, à l’instar d’un Adobe AIR.
Rendre cette application téléchargeable
Grâce au bouton fourni par la plate-forme
Permettre à vos utilisateurs d’installer votre application sur leurs
machines se fait dans son fichier manifeste. Ce fichier se trouve
dans le dossier " Properties " de votre application. [Fig.4]. Pour pro-
céder, décommentez le nœud " Deployement. ApplicationIdentity ".
<Deployment xmlns="http://schemas.microsoft.com/client/2007/
deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Deployment.Parts>
</Deployment.Parts>
<!-- Uncomment the markup and update the fields below to make
your application offline enabled -->
<Deployment.ApplicationIdentity>
<ApplicationIdentity
ShortName="Out of Browser Silverlight Application"
Title="Window Title of Your Silverlight Application">
<ApplicationIdentity.Blurb>Description of your
Silverlight application</ApplicationIdentity.Blurb>
</ApplicationIdentity>
</Deployment.ApplicationIdentity>
</Deployment>
Ce nœud contient 3 paramètres d’origine :
• ShortName : est le nom de l’application, c’est ce nom qui sera uti-
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
fenêtre par exemple.
• ApplicationIdentity.Blurb : est la présentation de votre application.
Cependant, un autre nœud est intéressant à ajouter : le nœud
" ApplicationIdentity.Icons"
<ApplicationIdentity.Icons>
<Icon Size="16x16">Icons/icon_16.png</Icon>
<Icon Size="32x32">Icons/icon_32.png</Icon>
Fig.1 Fig.2 Fig.3
L
o
g
i
c
i
e
l

p
r
o
f
e
s
s
i
o
n
n
e
l
.

D
o
c
u
m
e
n
t

n
o
n

c
o
n
t
r
a
c
t
u
e
l
.

S
u
p
p
o
r
t

t
e
c
h
n
i
q
u
e

g
r
a
t
u
i
t
:

1
5

r
e
q
u
ê
t
e
s

s
u
r

l
a

v
e
r
s
i
o
n

e
n

c
o
u
r
s

d
e

c
o
m
m
e
r
c
i
a
l
i
s
a
t
i
o
n
.

.

W
I
N
D
E
V
,

W
E
B
D
E
V

e
t

W
I
N
D
E
V

M
o
b
i
l
e

s
o
n
t

c
o
m
p
a
t
i
b
l
e
s
.
44-55 20/05/2009 12:00 Page 50
WINDEV Mobile 14 est l’environnement de
développement professionnel qui permet de développer
jusqu’à 10 fois plus vite les applications sur mobile dont
votre entreprise et vos clients ont besoin: gestion de stock,
force commerciale, géolocalisation, saisies médicales, ex-
pertises, relevés de terrain, prise de commande temps réel,
réglage de chaîne de production, etc...
La puissance et la facilité de développement de
WINDEV Mobile 14 permettent un développe-
ment complet en quelques journées.
L’environnement est livré complet, le déploie-
ment des applications réalisées est gratuit
sans redevances (base de données incluse).
Toutes les fonctionnalités d’un AGL profes-
sionnel sont offertes. Tous
les aspects de la mobi-
lité sont gérés: base de données, accès
direct, réplication, WiFi, Bluetooth, 3G, Internet,
socket, ActiveSync, réseau, J2EE, SMS, RFID, lien avec
votre S.I., codes-barres automatiques...
Vous aussi réalisez vos applications mobiles
10 fois plus vite... avec WINDEV Mobile 14.
(Logiciel professionnel, Support Technique gratuit*)
Développez 10 fois plus vite
PLATEFORME PROFESSIONNELLE
DE DÉVELOPPEMENT (AGL)
Pocket PC, Smartphone, Terminal
Windows CE, Windows Mobile
DÉVELOPPER VOS APPLICATIONS
POUR POCKET PC, SMARTPHONE
& TERMINAL MOBILE : FACILE !
www.pcsoft.fr
L
o
g
i
c
i
e
l

p
r
o
f
e
s
s
i
o
n
n
e
l
.

D
o
c
u
m
e
n
t

n
o
n

c
o
n
t
r
a
c
t
u
e
l
.

S
u
p
p
o
r
t

t
e
c
h
n
i
q
u
e

g
r
a
t
u
i
t
:

1
5

r
e
q
u
ê
t
e
s

s
u
r

l
a

v
e
r
s
i
o
n

e
n

c
o
u
r
s

d
e

c
o
m
m
e
r
c
i
a
l
i
s
a
t
i
o
n
.

.

W
I
N
D
E
V
,

W
E
B
D
E
V

e
t

W
I
N
D
E
V

M
o
b
i
l
e

s
o
n
t

c
o
m
p
a
t
i
b
l
e
s
.
VERSION
EXPRESS
GRATUITE
Téléchargez-la !
Un tableau de
bord en
temps réel sur
son téléphone?
Facile !
Nouvelle
version
252 pages + DVD + Version Express incluse
+ 112 Témoignages.
Tél: 04.67.032.032 ou 01.48.01.48.88
info@pcsoft.fr
L
o
g
i
c
i
e
l

p
r
o
f
e
s
s
i
o
n
n
e
l
Fournisseur Officiel de la Préparation Olympique
DEMANDEZ LE DOSSIER GRATUIT
VOTRE CODE EST
MULTI-PLATEFORMES:
Windows, .Net, Java,
PHP, J2EE, XML,
Internet, Ajax, Pocket
PC, SmartPhone,
Client riche ...
44-55 20/05/2009 12:00 Page 51
développement web \\ silverlight
52 • PROgrammez ! \\ Juin 2009
<Icon Size="48x48">Icons/icon_48.png</Icon>
<Icon Size="128x128">Icons/icon_128.png</Icon>
</ApplicationIdentity.Icons>
Ces icônes doivent faire partie de la solution Silverlight 3 pour être
intégrées au fichier .xap qui sera téléchargé par le client [Fig.5]. Un
nouveau menu est maintenant disponible sur le clic droit de l’applica-
tion : " Install ‘ShortName’ … onto this computer "[Fig.6].
Rendre cette application téléchargeable
Grâce à un bouton personnel
Bien que la plate-forme Silverlight offre un bouton de base pour pro-
poser le téléchargement et l’installation d’une application au client,
cette interface n’est pas très instinctive pour l’utilisateur lambda.
Pour pallier ce problème, il est possible de créer votre propre bou-
ton (ou autre action) " télécharger cette application ".
• Ouvrez MainPage.xaml dans le projet Silverlight.
• Ajoutez-y un bouton.
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Button
Name="DownAndInstallBtt"
Content="Télécharger et installer cette application
sur mon pc"
Margin="5"
Click="Button_Click"/>
<TextBlock
Margin="5"
Text="HelloWorld"/>
</StackPanel>
</Grid>
• Ouvrez MainPage.xaml.cs
• Ajoutez la fonction " Button_Click " :
public MainPage()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
bool allowed = App.Current.Detach();
if (!allowed)
{
MessageBox.Show("L'application n'a pas été téléchargée
sur le bureau.");
}
}
Attention, la fonction App.Current.Detach(); générera une exception
si l’application à déjà été installée sur l’ordinateur.
Détecter si l’application est installée sur le
bureau ou sous navigateur
Pour adapter le comportement de l’application à son environnement
il est bon de savoir si elle s’exécute dans un navigateur ou si l’utilisa-
teur vient de lancer la version qu’il a préalablement installée.
• Ouvrez MainPage.xaml dans le projet Silverlight.
• Ajoutez une nouvelle zone de texte et nommez-la " WebOrDesk-
TextBox "
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
(…)
<TextBlock
Name="WebOrDeskTextBlock"
Margin="5"
Text="HelloWorld"/>
</StackPanel>
</Grid>
• Ouvrez MainPage.xaml.cs
• Dans le constructeur de la page, juste après l’initialisation des
composants, ajoutez ce code :
public MainPage()
{
InitializeComponent();
if (App.Current.RunningOffline)
{
WebOrDeskTextBlock.Text = "Bureau";
}
else
{
WebOrDeskTextBlock.Text = "Navigateur";
}
}
Le booléen App.Current.RunningOffline vous donne cette informa-
tion. [Fig.8]. Accessoirement, il est aussi possible de rendre le bouton
" télécharger et installer cette application sur mon pc " invisible
lorsque c’est déjà le cas.
public MainPage()
{
InitializeComponent();
if (App.Current.RunningOffline)
{
WebOrDeskTextBlock.Text = "Bureau";
DownAndInstallBtt.Visibility = Visibility.Collapsed;
}
else
Fig.4 Fig.6
Fig.5
44-55 20/05/2009 12:00 Page 52
Bureau Navigateur
{
WebOrDeskTextBlock.Text = "Navigateur";
DownAndInstallBtt.Visibility = Visibility.Visible;
}
}
Détecter si le pc est online ou offline
Dans le même état d’esprit, il est utile de connaître l’état de la
connexion internet de la machine sur laquelle tourne l’applica-
tion.
Mais dans ce cas-ci, le travail est un peu plus complexe. En effet,
cette connexion n’a pas un état statique, il est possible que son
état change durant l’exécution de l’application. Un évènement
est envoyé à l’application par la plate-forme lorsque cela arrive. Il
suffit donc de s’y abonner et de revérifier l’état de la connexion
quand il est lancé.
• Ouvrez MainPage.xaml dans le projet Silverlight.
• Ajoutez une nouvelle zone de texte et nommez-la " OnOrOff-
TextBlock"
• Ouvrez MainPage.xaml.cs
• Dans le constructeur de la page, juste après l’initialisation des
composants, ajoutez ce code :
public MainPage()
{
InitializeComponent();
(…)
OnOrOff();
NetworkChange.NetworkAddressChanged +=
new NetworkAddressChangedEventHandler(NetworkChange_
NetworkAddressChanged);
}
void NetworkChange_NetworkAddressChanged(object sender, Event
Args e)
{
OnOrOff();
}
void OnOrOff()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
OnOrOffTextBlock.Text = "Online";
OnOrOffTextBlock.Foreground = new SolidColorBrush
(Colors.Green);
Fig.8
44-55 20/05/2009 12:00 Page 53
développement web \\ silverlight
54 • PROgrammez ! \\ Juin 2009
}
else
{
OnOrOffTextBlock.Text = "Offline";
OnOrOffTextBlock.Foreground = new SolidColorBrush
(Colors.Red);
}
}
Lorsque l’ordinateur client perd la connexion internet, l’application le
remarque en quelques secondes.
Récupérer des données à partir
du site hôte de l’application
Silverlight 3 et les .Net RIA Services simplifient grandement la vie
fastidieuse des développeurs. Auparavant, pour consommer des
données d’un serveur dans une application Silverlight, la méthode la
plus couramment utilisée était de connecter cette application Silver-
light à un service WCF (Windows communication foundation) lui-
même correctement configuré pour que sa sécurité lui permette de
dialoguer avec l’application. *gasp* Rien que de l’écrire, ça fait mal !
Aujourd’hui, le paradis nous ouvre ses portes. En effet, il est possible
de créer une communication entre un site ASP.NET et une applica-
tion Silverlight 3 qu’il héberge, et ce, en quelque clics, mais tout en
gardant une grande liberté de configuration. Ainsi, la plate-forme
nous offre de la simplicité, sans nous faire payer en généricité.
• Pour les besoin de la démo, créons rapidement une petite base de
données des employés de Heode dont voici la structure : [Fig.9]
• Retournez dans Visual Studio
• Cliquez avec le bouton droit de la souris sur le projet " OutOfBrow-
ser.Web " (le site web ASP.NET)
• Sélectionnez le menu Add new -> new Item …
• Dans la boîte de dialogue " New Item ", sélectionnez le template
" LINQ to SQL Classes " et donnez lui le nom : SuperHeroDB.
Les classes LINQ to SQL sont un moyen simple et rapide de vous
connecter à une base de données.
• Ouvrez le fichier SuperHeroDB.dbml
• Naviguez dans l’explorateur de serveur de Visual Studio jusqu’à
trouver la table SuperHero et glissez-là sur la surface de dessin des
classes LINQ to SQL.
• Compilez le projet ASP.NET
• Sélectionnez une fois de plus le menu Add new -> new Item …
• Dans la boîte de dialogue " New Item ", sélectionnez le template
" Domain Service " et donnez lui le nom : SuperHeroService.
Un Domain Service est un service de données et d’opérations qui
sera accessible au site web et à tous ses composants internes.
C’est à travers ce service que le site web et l’application Silverlight
vont communiquer.
• Cliquez sur Ok.
• La boîte de dialogue suivante vous demande de sélectionner à quel
accès aux données vous voulez lier le Domain Service. Choisissez
SuperHeroDB, ensuite cochez l’option devant la table SuperHero.
[Fig.10]
• Cliquez sur Ok.
• Compilez la solution au complet.
Vos données sont maintenant exposées par le site web aux clients
Silverlight.
• Ajoutez la référence System.Windows.Controls.Data à votre pro-
jet Silverlight
• Ouvrez MainPage.xaml dans le projet Silverlight.
• Ajoutez une nouvelle grille de données et nommez-la " MaDataGrid"
<UserControl x:Class="OutOfBrowser.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Controls;assembly
=System.Windows.Controls.Data"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<data:DataGrid Name="MyDataGrid" Margin="5"/>
(…)
</StackPanel>
</Grid>
</UserControl>
• Ouvrez MainPage.xaml.cs
• Dans le constructeur de la page, juste après l’initialisation des
composants, ajoutez ce code :
public MainPage()
{
InitializeComponent();
(…)
SuperHeroContext context = new SuperHeroContext();
MyDataGrid.ItemsSource = context.SuperHeros;
context.LoadSuperHero();
}
Cette méthode passionnante d’accès aux données est bien plus
complète que le peu que je viens de vous montrer. Pour les lecteurs
intéressés, je conseille grandement une lecture du document relatif
aux .Net RIA Services disponible sur http://www.silverlight.net/GetStar-
ted/silverlight3.
■ Simon Boigelot & Loic Bar - HEODE.com
Fig.9
Fig.10
Les autres options vous
permettent de demander
à la plate-forme de
générer automatiquement
toute l’opération d’édition,
d’insertion et de résolution
de conflits, mais nous n’en
aurons pas besoin dans
cet exercice.
44-55 20/05/2009 12:01 Page 54
44-55 20/05/2009 12:01 Page 55
C
et t e sér ie d’ar t icles a pour but d’expliquer comment effec-
t uer un déploiement d’applicat ions Java sur la plat e-for me
Amazon EC2. La pr emièr e ét ape consist e à pr épar er vot r e
compt e Amazon pour disposer d’un envir onnement exploit able. Pour
cela, connect ez-vous à vot r e compt e et inscr ivez vous à EC2 si cela
n’est déjà fait (ht t p:/ / aws.amazon.com/ ec2).
Sur le sit e, cliquez sur l’onglet " Your Account ", puis le lien " Access
Ident ifier s ". Not ez bien vot r e " Access Key ID " et vot r e " Secr et
Access Key " car vous en aur ez besoin plus t ar d. Dans la sect ion
" X.509 Cer t ificat e ", cliquez sur le bout on " Cr eat e New " et sauvez
sur vot r e post e les 2 fichier s qui ser ont génér és (cer t -XXXXX.pem
et pk-XXXXX.pem) dans un r éper t oir e nommé " .ec2 " (at t ent ion à
bien gar der le car act èr e ‘.’) à la r acine de vot r e compt e. Sous Win-
dows le plus simple consist e à exécut er les commandes suivant es :
cd %USERPROFILE%
mkdir .ec2
Une fois ces fichier s r écupér és, inst allez les out ils pr oposés par
Amazon dans le r éper t oir e " .ec2 " pr écédemment cr éé : ht t p:/ / develo-
per.amazonwebser vices.com/ connect / ent r y.jspa?ext er nalID=351&cat egor yID=88
Les out ils Amazon nécessit ent que plusieur s var iables d’envir onne-
ment soient init ialisées :
set EC2_HOME=%USERPROFILE%/.ec2
set PATH=%PATH%:%EC2_HOME%/bin
set EC2_PRIVATE_KEY=%EC2_HOME%/pk-XXXXX.pem
set EC2_CERT=%EC2_HOME%/cert-XXXXX.pem
At t ent ion à bien r emplacer les " XXXXX " par les noms de fichier s
que vous aur ez r écupér és pr écédemment .
Pour vér ifier le bon fonct ionnement de vot r e compt e EC2, vous pou-
vez lancer la commande suivant e :
ec2-describe-images –o amazon
Cet t e inst r uct ion list e t out es les images syst ème pr épar ées par
Amazon (AMI). Vous allez ut iliser l’image Fedor a Cor e 8 pr oposée
par Amazon (" ami-5647a33f " au moment de la r édact ion de cet
ar t icle). Pour vous connect er à la machine, vous devez disposer
d’une " keypair " qui véhicule vos accès aux ser veur s afin de vous
per met t r e de vous connect er. Pour cela, lancez la commande :
ec2-add-keypair ma-keypair
Cet t e commande génèr e une clé pr ivée de t ype RSA. Vous devez
copier le r ésult at affiché (en incluant les lignes -- BEGIN RSA PRIVA-
TE KEY -- et -- END RSA PRIVATE KEY--) dans l e f i chi er
%EC2_HOME%/ ma-keypair. Vous allez maint enant démar r er un ser -
veur sur l’infr ast r uct ur e EC2 (n’oubliez pas que ce faisant , Amazon
vous fact ur er a 0.10 $ par heur e).
technique \\ cloud
56 • PROgr ammez ! \\ Juin 2009
Cloud Computing :
déploiement d’applications Java
ec2-run-instances ami-5647a33f –k ma-keypair
Cet t e commande lance un ser veur de t ype SMALL. Il vous est pos-
sible de lancer plusieur s ser veur s en même t emps ou de spécifier le
t ype de machine à démar r er. Le démar r age d’une machine EC2
pr end un peu de t emps (jusqu’à quelques minut es). Vous pouvez
consult er le st at ut de la machine via la commande suivant e :
ec2-describe-instances
Quand le st at ut de vot r e machine indique " r unning ", elle est pr êt e à
l’emploi. Not ez l’adr esse de la machine (ec2-xx-xxx-xx-xx.comput e-
1.amazonaws.com) et son ident ifiant (i-XXXXXXXX).
Afin de pouvoir se connect er à ce ser veur, vous devez aut or iser les
connect ions SSH (por t 22) et Web (por t 80) :
ec2-authorize default –p 22
ec2-authorize default –p 80
Cet t e commande n’est à fair e qu’une seule fois car elle modifie les
r ègles du par e-feu nommées " default " en ouvr ant les por t s 22 et
80. Si vous ut ilisez Put t y pour vous connect er via SSH, vous devez
conver t ir le fichier ma-keypair en un fichier exploit able par Put t y.
Pour cel a, ut i l i sez l ’ out i l " PUTTYgen ". Ouvr ez l e f i chi er
%EC2_HOME%/ ma-keypair via cet out il et sauvez la nouvelle clé pr i-
vée. Vous devez en suit e définir cor r ect ement la clé à ut iliser lor s de
la connexion au ser veur (cf ht t p:/ / docs.amazonwebser vices.com/ Amazo-
nEC2/ gsg/ 2006-06-26/ put t y.ht ml). SSH vous demander a si vous souhai-
t ez vous connect er. Tapez " yes " et ce ser a chose fait e.
Maint enant inst allez le ser veur Apache. Puis, démar r ez-le :
Vous pouvez maint enant vous connect er via vot r e navigat eur au sit e
ht t p:/ / ec2-xx-xxx-xx-xx.comput e-1.amazonaws.com (en r emplaçant bien sûr
les ‘xxx’ par ceux qui cor r espondent à l’inst ance de vot r e machine
t els qu’affichés par la commande ec2-descr ibe-inst ances). Pensez à
bien ét eindr e vot r e ser veur une fois que vous n’en avez plus besoin
via la commande lancée sur vot r e machine :
ec2-terminate-instances i-XXXXXXXX
Les ar t icles à suivr e expliquer ont comment const r uir e sa pr opr e
image Amazon EC2 (AMI) ainsi que comment met t r e à jour des
applicat ions sur EC2. Enfin, une fois les pr emier s déploiement s sur
EC2 effect ués, vous ver r ez comment le pr ojet Open Sour ce Elast ic
Gr id vous per met t r a de maint enir une applicat ion en pr oduct ion
selon des cr it èr es de qualit é de ser vice (QoS) que vous spécifier ez.
■ Jer ôme Bernard - Dir ect or, EMEA Oper at ions, Elast ic Gr id, LLC.
Sit e: ht t p:/ / www.elast ic-gr id.com - Blog: ht t p:/ / blog.elast ic-gr id.com
1
re
partie
N E M A N Q U E Z P A S L E P R O C H A I N N U M É R O
N °1 2 1 ju ille t - a o û t 2 0 0 9 , p a r u t io n 3 0 ju in
✔ Développement : Attention le futur est déjà là !
56-57 20/05/2009 11:31 Page 56
Les outils de la Direction Informatique
Vous avez besoin d’info
sur des sujets d’administration,
de sécurité, de progiciel,
de projets ?
Accédez directement
à l’information ciblée.
L’INFORMATION SUR MESURE
Actu triée par secteur Cas clients Avis d’Experts
Actus Evénements Newsletter
Infos des SSII
Vidéos
Etudes
&
Statistiques
L’INFORMATION EN CONTINU
www.solutions-logiciels.com
56-57 20/05/2009 11:31 Page 57
E
n 1965, Gor don Moor e (co-
fondat eur d’Int el) obser vait
que le nombr e de t r ansis-
t or s cont enus dans un semi-conduc-
t eur di sponi bl e sur l e mar ché,
doublait t ous les 18 à 24 mois. C'est
de ce const at empir ique qu'est née la
loi de Moor e. En d’aut r es t er mes, les
capacit és t echniques des or dinat eur s
s’amélior aient r égulièr ement , per met -
t ant aux pr ogr ammes infor mat iques
d'en t ir er par t i sur le
plan de la r apidit é d’exé-
cut i on sans gr andes
modificat ions (souvent
aucune). Ce const at a
fait le bonheur de plu-
sieur s génér at ions d'in-
for mat iciens, au point
que cer t ains appelaient
ce phénomène le " fr ee
lunch ". A cet t e époque, les fondeur s
basaient le plus gr os de leur discour s
mar ket ing sur une cour se au Giga-
Her t z, chacun se vant ant d’aller plus
vit e que l’aut r e
Depuis quelque t emps, vous avez
sans dout e r emar qué l'appar it ion de
pr ocesseur s mult i-cœur s allant de
deux à quat r e cœur s dans les offr es
const r uct eur s gr and public. Cepen-
dant , vos applicat ions ne t our nent
sans dout e pas plus vit e sur ce t ype
de mat ér iel. En effet les syst èmes
d'exploit at ion, les applicat ions d'au-
jour d'hui ne sont pas adapt és pour
t ir er par t i efficacement d'une ar chi-
t echnique \\ mult icor e
58 • PROgr ammez ! \\ Juin 2009
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 !
■ Fr ançois Tonic
t ect ur e mult i-cœur. Aut r ement dit ,
cet t e évolut ion mat ér ielle n'est pas
f or cément vécue comme un gain
impor t ant par les ut ilisat eur s.
Pour quoi les fondeur s
ont -ils changé
de par adigme ?
Depuis quelques années les const r uc-
t eur s ont ét é conf r ont és à des
cont r aint es physiques for t es (chaleur
& consommat ion) qui ne per met -
t aient plus d'amélior er leur s offr es en
r est ant sur les mêmes bases t ech-
niques. Par exemple, Int el avait pr édit
dès 2006 que la t empér at ur e de ses
puces r eposant sur la micr oar chit ec-
t ur e Net bur st (Pent ium IV) at t eindr ait
envir on 6000 degr és en 2015, soit
envir on la t empér at ur e à la sur face
du soleil. Ne pouvant plus cr oît r e sur
le plan des Her t z, les const r uct eur s
ont choisi de r épar t ir la puissance sur
plusieur s cœur s au sein d'un même
pr ocesseur (ar chit ect ur e mult i-cœur ).
La cour se aux Her t z est donc t er mi-
née, place à la cour se au nombr e de
c œur s ! Dès auj our d' hui , l es
const r uct eur s de micr opr ocesseur s
disposent de nouvelles plat es-for mes
sachant gr andi r f aci l ement en
nombr e de cœur s t out en amélior ant
les per for mances de l'infr ast r uct ur e
int er ne du pr ocesseur lui-même. Le
t out der nier pr ocesseur Int el Cor e i7
(Nehalem) r encont r e déjà un fr anc
succès aupr ès de const r uct eur s d'or -
1
re
partie
dinat eur s. Les or dinat eur s de demain
ser ont donc massi vement mul t i -
cœur s (supér ieur à 8 cœur s), les
amér icains par lent du passage du
Mult i-cor e au Many-cor e, ce qui peut
sembler une bonne nouvelle.
Les syst èmes
d'exploit at ion sont
déjà en cour s d'adapt at ion
De leur côt é, les édit eur s de sys-
t èmes d'exploit at ion sont conscient s
que leur s pr oduit s ne sont plus adap-
t és pour exploit er cor r ect ement ces
nouvelles ar chit ect ur es mat ér ielles.
Les pr ochains syst èmes pr ofit er ont
de ces nouvelles offr es qui aujour d'hui
peuvent sembler exagér ées au r egar d
des besoins act uels, mais n'oublions
pas que le monde change et que les
pr ogr ès t echniques ont t oujour s ét é
por t eur s d'innovat ions qui aujour d'hui
nous appar aissent nor males. A t it r e
d’exemple, dans sa ver sion 64 bit s, le
pr ochai n syst ème Wi ndows ser a
capable de gér er pleinement 2 5 6
cœur s. Nous compr enons mieux avec
cet exemple la nouvelle appellat ion
Many-cor e pour qualifier des mat é-
r iels r egor geant de cœur s.
The fr ee lunch is over
Dès 2 0 0 5 , Her b Sut t er, célèbr e
ar chit ect e C++ de Micr osoft , annon-
çait "The fr ee lunch is over ". Aut r e-
ment dit , les gains de per for mances
de vos applicat ions const at és sur les
Windows 7 en 64
bit s ser a pleinement
capable de gér er
256 cœur s.
12-14 outils 20/05/2009 11:37 Page 58
Juin 2009 \\ PROgr ammez ! • 59
t echnique \\ mult icor e
{
get
{
return ++_status;
}
}
}
Si de nombr eux t hr eads appellent
simult anément cet t e pr opr iét é, l'exé-
cut ion se dér ouler a souvent cor r ect e-
ment mais par fois l'incr ément at ion
ser a fausse lor sque les t hr eads se
chevaucher ont sur l'inst r uct ion d'in-
cr ément at ion. De nombr eux dévelop-
peur s i magi nent que l ' opér at eur
d'incr ément at ion est at omique alor s
qu'il n’en est r ien comme le mont r e le
code assembleur.
MOVE EAX, [_status]
INC EAX
MOVE [_status], EAX
Le danger est que cet t e er r eur est
silencieuse et il est possible que per -
sonne ne la r elève avant longt emps.
Imaginez le cas où not r e valeur r epr é-
sent e le pr ix d'un pr oduit financier, les
conséquences pour r ai ent êt r e
gr aves. La r ace condit ion, est sans
dout e l'er r eur la plus populair e dans
la pr ogr ammat ion par allèle.
Pour cor r iger not r e code il nous suffit
de r emplacer not r e opér at eur d'incr é-
ment at ion par une mét hode Int er Loc-
ked.Incr ement (r ef _st at us) qui nous
assur e une exécut ion at omique.
Cependant , les r essour ces à pr ot é-
ger ne sont pas t oujour s des ent ier s,
mais sont souvent des t ypes com-
plexes. Dans ce cas, nous fer ons
appel à un out illage de synchr onisa-
t ion plus polyvalent . En cont r epar t ie,
ces out ils peuvent occasionner de
nombr eux pr oblèmes qui about issent
par fois à des codes par allèles plus
lent s que leur s équivalent s séquen-
t iels. Voici d'aut r es exemples souvent
r encont r és dans le cadr e la pr ogr am-
mat ion par allèle.
La suit e le mois pr ochain.
■ Br uno Boucar d
boucar d.br uno@fr ee.fr
Spécialisé dans les t echnologies Micr osoft ,
il anime avec d'aut r es spécialist es le blog
Développement par allèle de Micr osoft
ht t p://blogs.msdn.com/devpar a/default .aspx
nouveaux mat ér iels sont t er minés.
C'est donc aux développeur s de r évi-
ser leur s codes pour r et r ouver de la
puissance. Dans ce cont ext e, pou-
vons-nous affir mer que le " fr ee lunch "
est déf i ni t i vement r évol u ? Pour
enr ayer cet t e cat ast r ophe, devons-
nous engager une r évision r adicale
dans nos pr at iques de développement ?
Conséquences
pour les développeur s
P our quoi pe u de dé ve l oppe ur s
conna issent l a pr ogr a mma t ion
par allèle ? Pour les développeur s, la
pr ise en compt e effect ive de ce chan-
gement t echnologique peut se r évéler
t r ès compliquée. Rappelons qu'il y a
déjà une pet it e vingt aine d’années que
les t echniques de mult it hr eading se
sont int égr ées dans un écosyst ème
for t ement séquent iel.
Néanmoins, les dét r act eur s du par al-
lélisme peuvent t r ouver de nom-
br euses r ai sons pour ne pas
s'adapt er à cet t e nouvelle donne. La
cult ur e séquent ielle à l’or igine de l’in-
f or mat ique peut êt r e considér ée
comme l a pl us l égi t i me. Nous
sommes aussi cer t ains que le cer -
veau humain épr ouve des difficult és à
r aisonner en mult it âche ce qui peut
êt r e vu comme un fr ein pour le passa-
ge en mode par allèle.
Aujour d’hui, nous pouvons r econ-
naît r e que les envir onnement s de
pr ogr ammat ion comme les out ils, les
libr air ies, offr ent peu d’adhér ence
avec ces concept s. Alor s, comment
s’assur er que la mise en par allèle de
cer t aines par t ies du syst ème est à la
fois fiable et per t inent e vis-à-vis du
langage de pr ogr ammat ion et de l’in-
fr ast r uct ur e mat ér ielle ? Définir avec
cer t it ude que les not ions d’isolat ion,
d’immuabilit é ou de synchr onisat ion
sont cor r ect ement expr imées vis-à-vis
du pr oblème posé au r egar d des envi-
r onnement s, des l angages, des
out i l s, sont de s pr é occupa t ions
essent ielles que nous abor dons diffici-
lement , faut e d’un out illage adapt é.
Dans le cas des langages C et C++ où
l’hér it age d’une cult ur e séquent ielle
se compr end facilement (le langage C
est issu d’une philosophie t r ès syst è-
me inspir ée par la plat e-for me UNIX
AT&T or iginelle où la not ion de mult i-
t hr eads n’exist ait pas) mais dont
l’adapt at ion au mult it hr eading est
venue se super poser à un exist ant
séquent iel donnant lieu à un jeu d’API
r udiment air es difficilement compr é-
hensibles pour le développeur non
syst ème. Init ialement , la not ion de
t hr ead à ét é int r oduit e pour offr ir aux
développeur s un moyen de par alléli-
ser du code sans avoir à cr éer plu-
sieur s pr ocessus syst èmes (t r ès
coût eux sur le plan des r essour ces du
syst ème d'exploit at ion). On const at e
avec le r ecul que de nombr eux envi-
r onnement s se sont inspir és des
int er faces vét ust es or iginelles, pla-
çant le mult it hr eading au r ang des
t echnologies r éser vées aux exper t s.
Les pr incipaux écueils
de la pr ogr ammat ion
par allèle ?
Apr ès 2 0 ans de mult it hr eading,
nous pouvons r econnaît r e que les
modèles par allèles sont à la fois peu
r épandus, peu connus, et difficiles à
implément er. Pour un novice en déve-
loppement par allèle, Il est t r ès facile
de pr ovoquer de nombr eux pr o-
blèmes pot ent iels sans for cément les
const at er. En effet , l'exécut ion par allè-
le ne nous offr e pas de cer t it ude sur
l'or dr e d'exécut ion des inst r uct ions
associées aux t hr eads cour ant s : le
pr incipe d'incer t it ude énoncé par Hei-
senber g défini en physique quant ique
à ét é r enommé Heisenbug pour quali-
fier ce pr incipe en infor mat ique. En
d'aut r es t er mes, t out e r essour ce par -
t agée par plusieur s t hr eads doit fair e
l'objet d'une pr ot ect ion, sinon gar e
aux incohér ences des r ésult at s. Pour
illust r er la dimension des difficult és
r encont r ées, nous pouvons cit er les
er r eur s les plus cour ant es en pr o-
gr ammat ion par allèle :
Race condit ion
Le code C# ci-dessous, pour t ant t r ès
simple est t out de même faux dans le
cas où la pr opr iét é St at us est plongée
dans plusieur s t hr eads par allèles.
public class StatusManager
{
private int _status;
internal int Status
12-14 outils 20/05/2009 11:37 Page 59
L
e par allélisme se conçoit à plu-
sieur s niveaux, mais celui qui
nous int ér esse ici est le " t hr ead ".
Int el Par allel St udio est un ensemble de
logiciels pour vous aider à int r oduir e du
mult i-t hr eadisme dans vot r e logiciel,
cor r iger les évent uels bugs par allèles
et enfin amélior er la per for mance. En
pr at ique, Par allel St udio se pr ésent e
comme un ajout à Micr osoft Visual St u-
dio avec lequel il est for t ement int égr é.
Int r oduir e
du mult i-t hr eadisme
La pr emièr e ét ape est l’ajout de sec-
t ions par allèles dans vot r e code. Choix
cor nélien t ant les t echnologies pr opo-
sées sont var iées. Int el r ecommande
et four nit une t r ès bonne implément a-
t ion d’OpenMP et de la libr air ie Thr ea-
di ng Bui l di ng Bl ock. Le st andar d
OpenMP est le bon choix pour les pr o-
gr ammeur s or ient és C qui pr éfèr ent
gar der un st yle sér iel et minimiser les
changement s de code. La libr air ie TBB
est , elle, dest inée aux adept es du C++
qui ne sont pas cont r e une incur sion
dans la pr ogr ammat ion fonct ionnelle.
Avec ces deux solut ions vous devr iez
pouvoir r ésoudr e une gr ande par t ie de
vos besoins. Une fois la mét hode choi-
sie, par alléliser une par t ie simple de
vot r e code est ét onnamment r apide.
Mais il ne s’agit que d’un début .
t echnique \\ mult icor e
60 • PROgr ammez ! \\ Juin 2009
r ez aussi savoir quel t emps est pr is
dans la synchr onisat ion d’une var iable
par t agée.
Compilat eur et IPP
Int el Par allel St udio a beau met t r e en
avant ses logiciels de par allélisat ion, il
four nit aussi t out ce qui est nécessai-
r e pour obt enir la meilleur e per for -
mance en sér iel avant même de
par alléliser. L’out il clé est le compila-
t eur Int el. Bien int égr é dans Visual
St udio il est le fr uit d’une int ense colla-
bor at ion avec les ar chit ect es pr oces-
seur s. Nul aut r e compilat eur ne sait
mieux t ir er par t i des der nier s jeux
d’inst r uct ions. Appr enez la significa-
t ion des pr incipaux f lags et vous
gagner ez à coup sûr, sur le t emps
d’exécut ion. Le compilat eur Int el ne
r espect e pas seulement le st andar d,
il le devance. Ainsi vous t r ouver ez le
suppor t pour les fonct ions lambda et
aut r es innovat ions synt axiques dans
la der nièr e ver sion. Il ser ait t r ist e de
consacr er du t emps à l’opt imisat ion
de vot r e code et d’ut iliser par ailleur s
des libr air ies peu per f or mant es.
Aussi Par allel St udio est four ni avec la
libr air ie Int el Per for mance Pr imit ives.
Der r ièr e ce nom se cachent en fait
des codecs audio ou vidéo ult r a opt i-
misés, des fonct ions d’imager ie par
pipeline, de cr ypt ogr aphie, mat héma-
t iques … et bien d’aut r es.
Conclusion
Les concept eur s de Par allel St udio
avaient pour ambit ion de démyst ifier et
simplifier la pr ogr ammat ion par allèle.
Je pense qu’ils ont r éussi. Jugez en
par vous-même avec la ver sion d’essai.
■ Paul Guer monpr ez
Ingénieur logiciel - Int el
Chasser les bugs
Avec la pr ogr ammat ion par allèle
appar aissent des bugs spécifique-
ment par allèles. Ils sont sour nois et
complexes à t r acer. Il est alor s t r ès
ut ile d’avoir un out il comme Par allel
Inspect or. Cet out il inst r ument e et
analyse de manièr e ext r êmement
avancée l’exécut ion de vot r e logiciel
pour t r ouver des bugs, et ce même
s’ils ne s’exécut ent pas dans les
condit ions par t iculièr es du t est . Le
r ésult at est un simple t ableau t r ès
complet point ant ver s les bugs dans
vot r e code. Il faut cependant com-
pr endr e quelles sont les classes de
bugs par allèles pour pouvoir com-
pr endr e les indicat ions et cor r iger.
Les bugs par allèles sont cer t es sour -
nois mais ils ont souvent le même
mécanisme et des causes similair es.
Les cor r iger est donc souvent simple
une fois que l’out il les a point és.
La t ouche finale
Vous avez un logiciel par allèle, br avo,
mais en pr at ique encor e faut -il qu’il
ut ilise cor r ect ement t ous ces mer -
veilleux cœur s. Dans une équipe,
ajout er des développeur s ne ser t que
si la mét hode de t r avail per met un
par t age efficace du t r avail. Pour vous
aider à compr endr e comment fonc-
t ionne vot r e logiciel en par allèle, Int el
pr opose Par allel Amplifier.
Cet out il mesur e comment chaque
inst r uct ion de vot r e logiciel int er agit
avec le pr ocesseur à une échelle infi-
me lor s de l’exécut ion, puis agglomè-
r e les données pour en f ai r e un
r ésumé simple. Vous pouvez alor s
t r ouver les r égions chr onophages en
allant jusqu'à l’échelle de la ligne de
code, et les r égions qui n’ut ilisent
qu’une par t ie des cœur s. Vous pour -
Version finale
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.
S u r le C D
d u n u m é r o !
Intel Parallel Studiodébarque
12-14 outils 20/05/2009 11:37 Page 60
■ M. ■ Mme ■ Mlle Entreprise : ........................................................................................ Fonction : ...................................................
Nom : ........................................................................................ Prénom :....................................................................................................................................
Adresse : .........................................................................................................................................................................................................................................
Code postal : ............................................... Ville : ...................................................................................................................................................................
Tél : ........................................................................................ E-mail : ....................................................................................................................................
■ Je joins mon règlement par chèque à l’ordre de Programmez ! ■ Je souhaite régler à réception de facture
A remplir et retourner sous enveloppe affranchie à :
Programmez ! - Service Abonnements - 22 rue René Boulanger - 75472 Paris Cedex 10.
abonnements.programmez@groupe-gli.com
3:HIKONB=^UZ^Z]:?k@b@l@b@a;
M 04319 - 111 - F: 5,95 E
grammez! P RO
Spécial
PHP
■ Les nouveautés PHP 5.3
■ Créer son moteur
de template en PHP 5
■ UML et PHP : le duo d'enfer
■ PHP et la programmation par
composants
L e m a g a z i n e d u d é v e l o p p e m e n t
mensuel n°111 - septembre 2008
www. programmez.com
Comment ça mar che ?
Les out ils, les t echnologies disponibles
Coder pour l'iPhone 2.0
Au coeur du e-lab de Bouygues
Les Jeux
Olympiques du
développement !
ImagineCup révèle
les nouveaux talents
G o o g le
Intégrer Google Maps et JSF
M o zilla
Créer votre extension XUL
pour Firefox !
M u lt ic œ u r
■ Programmer vos cœurs
avec OpenMP
■ La charge processeur
avec WMI
300 licences
À GAGNER
L’équipe
The Shads,
de l’Epita
ABC Project
ENFIN DISPONIBLE!
La Révolution du
MULTI-TOUCH
MULTI-TOUCH
Nouvelle Formule
E X C L U S I F
Les révélations
du livre choc
grammez!
L e m a g a z i n e d u d é v e l o p p e m e n t
mensuel n°112 - octobre 2008
t
e
c
h
n
i
q
u
e
S Q L S e r v e r
2 0 0 8
Découvrez le Resource
Governor
iP h o n e / . n e t
Piloter votre
Windows Media Center
avec iPhone
F la s h
Maîtriser le bitmap avec
ActionScript 3
E t a u s s i :
Linux : Développer
des extensions Nautilus
N u m é r o S p é c ia l 1 0 a n s !
Nouvelle
Formule
Le match
Eclipse - Netbeans
Choisir l’outil idéal !
Les dernières versions comparées
Tout savoir sur Eclipse 4.0
Exclusif ! Vers Microsoft 3.0
Les projets secrets
de Microsoft
Enquête
Vos
langages
favoris
Chrome et les développeurs
Le Google Developer Day !
J a v a
A s p e c t J :
La programmation par aspect facile !
J a v a S p a c e s :
Créer votre grid computing
J e u x :
Développer des jeux en Java
3:HIKONB=^UZ^Z]:?k@l@b@c@a;
M 04319 - 112 - F: 5,95 E
Printed in France - Imprimé en France - BELGIQUE 6,45 € - SUISSE 12 FS - LUXEMBOURG 6,45 € - DOM Surf 6,90 € - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
P RO
www. programmez.com
L e m a g a z i n e d u d é v e l o p p e m e n t
mensuel n°118 - avril 2009
P RO
www.programmez.com
S e r v e u r
Terracotta : simplifiez-vous le cluster
+
G P U
Maîtriser la puissance de Cuda
C o d in g 4 f u n
Faites parler vos applications avec MS Speech !
O p e n S o u r c e
Les fondamentaux de PHP
3:HIKONB=^UZ^Z]:?a@l@l@i@a;
M 04319 - 118 - F: 5,95 E
Printed in France - Imprimé en France - BELGIQUE 6,45 € - SUISSE 12 FS - LUXEMBOURG 6,45 € - DOM Surf 6,90 € - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
P
R
O
G
R
A
M
M
E
Z
!
grammez!
P lo n g é e
a u c œ u r
d e s M o zilla
L a b s
Tout ce qu’il faut savoir pour
Développer
sur Linux
• Maîtriser les standards :
LSB, AppChecker
• Développer vos
premières applications
• Les développeurs
en parlent
• Faire carrière dans
l’Open Source
• Mon code source
est-il légal ?
Web 2.0
Comment choisir
son framework Ajax ?
UML
Le futur de la modélisation
Ce que prépare
Microsoft avec OSLO
Outil
WinDev : l’atelier
de développement
à tout faire
© John Schreiner/illustrationOnLine.com
OUI, je m’abonne
11 numéros par an : 49 €
*
Economisez 16,45 €
*
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
P
R
O
G

1
2
0
Offre limitée,
valable jusqu’au
30 juin 2009
Le renvoi du présent bulletin implique
p our le sousc r ip t eur l' ac c ep t at ion
p l ei ne et ent i ère d e t o ut es l es
conditions de vente de cette offre.
Conformément à la loi Informatique et
Libertés du 05/ 01/ 78, vous disposez
d' un droit d' accès et de rect ificat ion
aux données vous concernant.
Par notre intermédiaire, vous pouvez
être amené à recevoir des propositions
d' autres sociétés ou associations.
Si vous ne le souhait ez pas, il vous
suffit de nous écrire en nous précisant
toutes vos coordonnées.

ACCÈS ILLIMITÉ aux ARCHIVES du MAGAZINE pour 0,84€ par mois !
Cette option est réservée aux abonnés pour 1 an au magazine,
quel que soit le type d’abonnement (Standard, Numérique, Etudiant).
Le prix de leur abonnement normal est majoré de 10 € (prix identique
pour toutes zones géographiques). Pendant la durée de leur abonnement,
ils ont ainsi accès, en supplément, à tous les anciens numéros et articles/
dossiers parus.
+
Abonnement INTÉGRAL
* au lieu de 65,45€ prix de vente au numéro, Tarif France métropolitaine
g r am m ez ! P RO
L e m a g a z i n e d u d é v e l o p p e m e n t
EN CADEAU
Accès illimité de 10 jours
à la Bibliothèque Numérique
des Editions ENI
A choisir parmi les Bouquets : Consultez : www.eni-bibliotheque.fr
• Développement : Plus de 30 livres numériques disponibles, de ADO.Net 3.5 à Flex
• Microsoft : Plus de 30 livres numériques disponibles, de Windows Server 2008 à Silverlight
• Open Source : Plus de 20 livres numériques disponibles, de Nagios à Java EE
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.
■ 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 PDF / 1 an : 30 € - Tarif unique
Inscription et paiement exclusivement en ligne
www.programmez.com
■ Abonnement Etudiant : 1 an au magazine : 39 €
(au lieu de 65,45 € tarif au numéro) Offre France métropolitaine
Choisissez votre formule
Inclus : accès à la Bibliothèque Numérique !
OFFRE LIMITÉE
SAVOIR c’est POUVOIR !
61 abo 20/05/2009 11:38 Page 61
code \\ patron
62 • PROgr ammez ! \\ Juin 2009
Comme nous le savons, les
Design Pat t er n, ou modèle
de concept ion, sont des
l i gnes di r ect r i ces, des
bonnes pr at iques dest inées
à r endr e plus simple et plus
sûr e la pr ogr ammat ion objet . Ces bonnes pr at iques ont ét é définies
par des pr ogr ammeur s expér iment és en POO et qui se sont aper çus
que fondament alement le pr ogr ammeur objet doit sans cesse
r ésoudr e les mêmes pr oblèmes. Les Design Pat t er n sont r épar t is
en cat égor ies : compor t ement , st r uct ur at ion et cr éat ion d'objet s.
Nous abor dons aujour d'hui un modèle classé dans la cat égor ie cr éa-
t ion d'objet s en nous appuyant sur le langage Java. Il est indéniable
que le pr ogr ammeur objet est en per manence en sit uat ion de cr éer
des objet s. Mais en quoi est -ce un pr oblème ? Nous disposons pour
cela de l'opér at eur new (ou équivalent selon le langage). Nous ut ili-
sons cet opér at eur, les objet s sont cr éés et le t our est joué! En t héo-
r ie oui c'est aussi simple que cela. Et dans les cas t r ès simples
l'appr oche convient t r ès bien. Mais dès qu'une applicat ion devient ne
ser ait -ce qu'un peu compliquée, l'ut ilisat ion de l'opér at eur new au
"coup par coup" conduit à un code spaghet t i, difficile à maint enir, ce
que t héor iquement le par adigme objet devr ait évit er et non génér er.
Tel est le but des Pat t er n Fabr ique et Fabr ique Abst r ait e: r at ionali-
ser la cr éat ion d'objet s et donc l'emploi de l'opér at eur new.
1 SIMULONS UN WARGAME
Pour appr écier les at out s du Pat t er n Fact or y, nous r epr enons l'idée
du war game fict if qui nous a déjà ser vi pour les Pat t er n Obser vat eur
et St r at égie dans Pr ogr ammez! 93 et 94 r espect ivement . Par war -
game nous voulons par ler de ce t ype de jeux en t emps r éel où le
joueur clique sur des unit és combat t ant es pour leur assigner une
act ion. Tout es les int er faces de ce t ype de jeux pr ésent ent une zone
sur laquelle on clique pour déclencher la cr éat ion d'unit és combat -
t ant es en fonct ions des r essour ces dont on dispose. Vous l'avez
compr is, cr éer des unit és combat t ant es, c'est du point de vue de la
POO, inst ancier des classes, ou si l'on pr éfèr e, fabr iquer des objet s.
Une occasion t out e t r ouvée de met t r e en oeuvr e not r e Pat t er n
2 UN PREMIER JET
Mais avant cela, faisons comme si nous ne connaissions pas l'exis-
t ence des Design Pat t er n et codons à l'inst inct , sans t r op de
r éflexion pr éalable. Nous avons des unit és combat t ant es avec des
fonct ionnalit és communes, nous faisons donc dér iver celles-ci d'une
classe commune bapt isée Ent it é. (Et encor e, déjà il faut se méfier de
Comprendre les Design Pattern Fabrique
et Fabrique Abstraite
Tous les langages à objet disposent d'un opérateur new, ou équivalent, pour créer des
objets. Fort pratique en apparence, cet opérateur recèle des problèmes dont les Pattern
Fabrique et Fabrique Abstraite permettent de s'affranchir.
cet t e appr oche comme vous le savez. Ou si vous l'avez oublié, peut
êt r e appr écier ez vous de r elir e Pr ogr ammez! n° 94 :) Nous décla-
r ons seulement deux classes, Soldat et Tank, c'est amplement suffi-
sant pour not r e pr opos. Ensuit e nous avons un panneau de jeu, sur
lequel se dér oule la bat aille qui pr ésent e l'int er face de génér at ion
des unit és. Faisons simple et admet t ons que lor sque le joueur clique
sur cet t e int er face, la mét hode cr eer Ent it e du panneau est invo-
quée. Enfin nous avons la classe JeuBasic, qui r epr ésent e le jeu lui-
même. Voici l'implément at ion de not r e mini cahier des char ges. Un
war game t ot alement fonct ionnel :)
package sanspattern;
import java.util.Vector;
enum TypeEntite {
TYPESOLDAT,
TYPETANK,
}
class Entite {
protected String categorie;
protected int pv; // Points de vie
Entite() {
init();
}
public void init() {
categorie = "Entite";
pv = 0;
}
public void display() {
System.out.println(categorie + ", pv: " + pv);
}
public void action() {}
}
class Soldat extends Entite {
//voir sources sur notre site
}
class Tank extend Entite {
//voir sources sur notre site
}
APPLICATION : PATRON
LANGAGE : JAVA
SOURCE : OUI
DIFFICULTE
MOYENNE
FORUM
dialogue et assistance www.programmez.com
62-65 Code Design Pattern 20/05/2009 11:40 Page 62
Juin 2009 \\ PROgr ammez ! • 63
code \\ patron
class PanneauJeu {
Vector<Entite> pieces = new Vector<Entite>();
public void creerEntite(TypeEntite type) {
switch(type) {
case TYPESOLDAT:
pieces.add(new Soldat());
break;
case TYPETANK:
pieces.add(new Tank());
break;
default:
break;
}
}
public void jouer() {
for(Entite e : pieces) {
e.display();
e.action();
}
}
}
public class JeuBasic {
public static void main(String[] args) {
PanneauJeu pj = new PanneauJeu();
// Ici le joueur clique sur l'interface
// et crée des entités
pj.creerEntite(TypeEntite.TYPESOLDAT);
pj.creerEntite(TypeEntite.TYPETANK);
// puis le jeu se déroule
pj.jouer();
// et ainsi de suite
}
}
3
ANALYSE DU CODE ET INVENTAIRE
DES PROBLÈMES
Comment ons not r e code, qui s'il est écr it d'une manièr e nat ur elle,
est t r ès mauvais :) Commençons par les classes des unit és combat -
t ant es. Chacune compor t e t r ois mét hodes en plus du const r uct eur.
La mét hode init comme son nom l'indique init ialise les membr es de
la classe, la mét hode display s'occupe de l'affiche de l'unit é et la
mét hode act ion s'occupe de l'act ion de l'unit é au plus for t de la
bat aille. Déjà nous r emar quons du code r edondant . Le cor ps de la
mét hode display est t r ois fois le même. Ne r iez pas, par eille hor r eur
s'est déjà vue en sit uat ion r éelle. Et si ceci ne concer ne pas dir ect e-
ment not r e Pat t er n Fabr ique, nous const at er ons que la mise en
oeuvr e de celui-ci cont r ibue à ér adiquer ce défaut . Ensuit e, la
mét hode init . A chaque fois son cor ps cont ient ce qui est nécessair e
à l'init ialisat ion de l'objet . C'est logique, dir ez-vous, qu'un objet sache
s'init ialiser. Oui, c'est logique. Mais c'est une logique. Il n'est pas obli-
gat oir ement r equis qu'il en soit ainsi. Enfin la mét hode act ion, dans
la classe Ent it é, n'est qu'une coquille vide. C'est peu élégant . Regar -
dons maint enant la classe PanneauJeu. Sa mét hode jouer n'appelle
pas de comment air e. Sa mét hode cr eer Ent it e est une suit e de t est s
sur le t ype de l'unit é à cr éer. Lor sque le t ype est t r ouvé, l'unit é est
cr éée via l'opér at eur new.
Ce code semble t out à fait convenable, et pour not r e exemple t r ès
simple il l'est . D'ailleur s pour les cas t r ès simples à peu pr ès t out
convient . Mais les choses se gât ent sér ieusement pour les sit uat ions
non t r iviales, ce qui en infor mat ique pr at ique sont les seules sit ua-
t ions que l'on r encont r e. Ensuit e il y a les deux ennemis jur és du
développeur : le chef de pr ojet et le client :) Ennemis par ce qu'à coup
sûr ils vont demander une modificat ion du code. De mémoir e de
codeur le cont r air e ne s'est jamais vu. "Le jeu ser ait enr ichi si on
avait des ent it és camion" dit le chef de pr ojet . Pour fair e face à cet t e
modificat ion il suffit d'ajout er un t est sur le t ype. On s'en t ir e encor e
facilement . Mais voilà que le client dit : " je voudr ais avoir deux zones,
sur lesquelles cliquer pour cr éer des unit és soit t er r est r es soit mar i-
t imes et je voudr ais avoir aussi t r ois niveau de jeux, des panneaux de
jeu différ ent aut r ement dit , ut ilisant a pr ior i leur ensemble pr opr e
d'unit és ". Ca y est , cet t e fois nous sommes fichus ! Nous nous
r et r ouvons pot ent iellement avec 6 mét hodes cr eer Unit e à gér er. Et
le chef de pr ojet r evient : "Nous avons oublié les sous-mar ins!". Modi-
fier le code de 6 mét hodes qui font sur le fond la même chose,
cr éer des ent it és, est pénalisant . Beaucoup de t r avail, du t emps
per du, sans dout e du code à la fois r edondant et difficile à maint enir,
et une for t e pr obabilit é de bugs sont les ennuis qui nous guet t ent .
Tout cela, fondament alement , par ce que la classe PanneauJeu n'est
pas découplée des classes Ent it é. Il est maint enant clair que nous
devons r at ionaliser nos cr éat ions d'ent it és, et nous le faisons au
moyen du Pat t er n Fabr ique simple.
4 LE PATTERN FABRIQUE
Son but est de déléguer la cr éat ion d'objet à une ou plusieur s
classes dont ce ser a le seul r ôle. Lor squ'il y a plusieur s classes
celles-ci ser ont ut ilisées selon le cont ext e ainsi que nous le ver r ons
plus loin. Voyons d'abor d le bien fondé d'une classe unique, ce qui
cor r espond au Pat t er n Fabr ique Simple. Nous commençons par
assainir les unit és qui dér iver ont d'une classe abst r ait e, et dans
cet t e classe nous fact or isons le code r edondant de not r e pr emier
exemple. Ensuit e nous cr éons not r e fabr ique qui dans l'exemple ci-
dessous est la classe... SimpleFabr ique.
package demofactorypattern;
import java.util.Vector;
enum TypeEntite {
TYPESOLDAT,
TYPETANK,
}
abstract class Entite {
protected String categorie;
protected int pv; // Points de vie
public void init(String categorie, int pv) {
this.categorie = categorie;
this.pv = pv;
}
public void display() {
62-65 Code Design Pattern 20/05/2009 11:40 Page 63
code \\ patron
64 • PROgr ammez ! \\ Juin 2009
System.out.println(categorie + ", pv: " + pv)
}
abstract public void action();
}
class Soldat extends Entite {
@Override
public void action() {
System.out.println("Action soldatesque");
}
}
class Tank extends Entite {
// voir sources sur notre site
}
class SimpleFabrique {
Entite creerEntite(TypeEntite type) {
Entite e;
switch (type) {
case TYPESOLDAT:
default:
e = new Soldat();
e.init("Soldat", 10);
break;
case TYPETANK:
e = new Tank();
e.init("Tank", 500);
break;
}
return e;
}
}
class PanneauJeu {
Vector<Entite> pieces = new Vector<Entite>();
SimpleFabrique fabrique = new SimpleFabrique();
public void creerEntite(TypeEntite type) {
pieces.add(fabrique.creerEntite(type));
}
public void jouer() {
for(Entite e : pieces) {
e.display();
e.action();
}
}
}
public class JeuSimpleFabrique {
public static void main(String[] args) {
System.out.println("Demo Simple Factory");
PanneauJeu pj = new PanneauJeu();
// Ici le joueur clique sur l'interface
// et crée des entités
pj.creerEntite(TypeEntite.TYPESOLDAT);
pj.creerEntite(TypeEntite.TYPETANK);
// puis le jeu se déroule
pj.jouer();
// et ainsi de suite
}
}
Maint enant le panneau de jeu et les ent it és sont découplés. Un
même panneau inst ancier a aussi bien une hor de de bar bar es que
des soldat s du fut ur, selon la fabr ique à laquelle il déléguer a les ins-
t anciat ions, fabr ique qui peut t r ès bien êt r e passée en ar gument au
const r uct eur du panneau. Un aut r e at out de cet t e cr éat ion cent r ali-
sée appar aît maint enant avec la mét hode init . En effet si celle-ci
n'avait pas gr and sens dans le pr emier exemple, on voit maint enant
que les classes ent it és elles-mêmes n'ont plus besoin de connaît r e
les at t r ibut s. Not r e fabr ique pour r ait bien à son init ialisat ion lir e une
seule fois un fichier de configur at ion cont enant t out es les données,
ce qui est plus r at ionnel que de voir le const r uct eur de chaque clas-
se Ent it e fair e ce t r avail, à chaque inst anciat ion. Enfin si nous
devons ajout er un t ype d'ent it é, le seul code à modifier est celui de la
mét hode cr eer Ent it e de not r e fabr ique.
5
UNE VARIANTE AU PATTERN
FABRIQUE
Dans not r e exemple nous ut ilisons une seule fabr ique, alor s plut ôt
que d'inst ancier celle-ci, pour quoi ne pas déclar er st at ique sa mét ho-
de cr eer Ent it e ? Cela exist e. Les Pat t er n sont une ligne dir ect r ice
qu'il faut savoir adapt er au cas par t iculier. La classe Bor der Fact or y
de la JDK est un exemple de fabr ique à mét hode st at ique. Le r ever s
de la médaille est que le polymor phisme est cassé. C'est un choix.
6LE PATTERN FABRIQUE ABSTRAITE
Nous ar r ivons à la définit ion complèt e du Pat t er n qui est : offr ir une
int er face pour la cr éat ion d'objet s, mais en laissant aux sous-
classes le choix des classes à inst ancier. Revenons à not r e war ga-
me. Not r e chef de pr ojet soucieux de donner du r éalisme à not r e
jeu, s'écr ie t out à coup: "per sonne ne fait la guer r e sans r es-
sour ces. Not r e jeu doit compor t er un panneau civil dont les act eur s
pr oduir ont les r essour ces nécessair e à la guer r e!". Et il ajout e: "En
out r e, les int er faces ut ilisat eur des panneaux civils et milit air e sont
similair es, nous devr ions nous en t ir er sans r ien coder de plus à ce
niveau". En effet , nous le pouvons... par ce que not r e code est basé
sur la Pat t er n Fabr ique. Le r ôle de celui-ci est d'offr ir une int er face.
Le t er me est à pr endr e au sens de la pr ogr ammat ion objet . Dans
not r e exemple cet t e int er face se r éduit à une mét hode: cr eer Ent it e.
Les classes fabr iques implément er ont cet t e int er face ou selon l'usa-
ge habit uel dér iver ont d'une classe abst r ait e compor t ant cet t e
mét hode. Le diagr amme ci-dessous est not r e Pat t er n Fabr ique Abs-
t r ait e vu par UML. Pour ce qui est de not r e jeu, c'est t out simple.
Nous cr éons des unit és civiles, une fabr ique d'unit é civile et ... c'est
t out :) Voici ce que cela donne (code complet sur not r e sit e) :
abstract class JeuFabrique {
abstract Entite creerEntite(TypeEntite type);
}
62-65 Code Design Pattern 20/05/2009 11:40 Page 64
Juin 2009 \\ PROgr ammez ! • 65
code \\ patron
class FabriqueMilitaire extends JeuFabrique{
//etc
}
class FabriqueCivile extends JeuFabrique{
Entite creerEntite(TypeEntite type) {
Entite e;
switch (type) {
case TYPEBOULANGER:
default:
e = new Boulanger();
e.init("Boulanger", 30);
break;
case TYPEMECANICIEN:
e = new Mecanicien();
e.init("mecanicien", 40);
break;
}
return e;
}
}
class PanneauJeu {
Vector<Entite> pieces = new Vector<Entite>();
JeuFabrique fabrique;
PanneauJeu(JeuFabrique fabrique) {
this.fabrique = fabrique;
}
public void creerEntite(TypeEntite type) {
pieces.add(fabrique.creerEntite(type));
}
public void jouer() {
for(Entite e : pieces) {
e.display();
e.action();
}
}
}
public class JeuFabriqueAbstraite {
public static void main(String[] args) {
System.out.println("Demo Simple Factory");
PanneauJeu militaire = new PanneauJeu(new FabriqueMilitaire
()); PanneauJeu civil = new PanneauJeu(new FabriqueCivile());
// Ici le joueur clique sur les interfaceq
// et crée des entités
militaire.creerEntite(TypeEntite.TYPESOLDAT);
militaire.creerEntite(TypeEntite.TYPETANK);
civil.creerEntite(TypeEntite.TYPEBOULANGER);
civil.creerEntite(TypeEntite.TYPEMECANICIEN);
// puis le jeu se déroule
militaire.jouer();
civil.jouer();
// et ainsi de suite
}
}
Ce qui est r emar quable avec cet exemple c'est que la classe Pan-
neauJeu est unique. Nous l'inst ancions deux fois et nous lui passons
la fabr ique en adéquat ion avec son cont ext e d'ut ilisat ion. Le code est
unique t out simplement par ce qu'il ne t r availle avec aucune classe,
mais seulement avec une int er face. Le boulanger et le mécanicien
sont des cit adins. Voulons-nous un panneau de jeu pour des ent it és
campagnar des ? La classe PanneauJeu r est er a la même. Simple-
ment nous lui passer ons une aut r e fabr ique, adapt ée à ce cont ext e.
On peut se poser la quest ion de savoir si, pour une applicat ion plus
r éelle, on pour r ait vr aiment ut iliser un même code de panneau.
Apr ès t out le code l'affichage ser ait différ ent dans chaque cas et il
faudr ait bien s'en occuper. La r éponse est pour t ant oui. On r égler ait
ce pr oblème avec le Pat t er n St r at égie vu dans Pr ogr ammez! 94 :)
Les Pat t er n collabor ent volont ier s ensemble. Simple à compr endr e,
simple à met t r e en oeuvr e, le Pat t er n Fabr ique Abst r ait e est t r ès
puissant . Dans les applicat ions complexes il est impossible de s'en
passer. At t ent ion! Voici not r e chef de pr ojet qui r evient avec une
nouvelle idée géniale en t êt e. Heur eusement nous avons quelques
Pat t er n en r éser ve... pour une pr ochaine fois :)
■ Fr édér ic Mazué - fmazue@pr ogr ammez.com
Tous les jours : l’actu et le téléchargement
www.programmez.com
62-65 Code Design Pattern 20/05/2009 11:40 Page 65
code \\ concur r ence
66 • PROgr ammez ! \\ Juin 2009
Tout pr ogr ammeur qui
s'est essayé à écr ir e un
pet it peu de code concur -
r ent a subi les t ur pit udes
de l'ennemi public n°1 en la
mat ièr e: le deadlock. Cet t e
condit ion de ver r ou mor t el se pr oduit quand deux flux d'exécut ion
at t endent chacun que l'aut r e libèr e une r essour ce t elle que ver r ou,
sect ion cr it ique, sémaphor e ou aut r e. Et s'il ét ait possible de fair e de
la pr ogr ammat ion concur r ent e sans ver r ou ? Tout ser ait beaucoup
plus simple. C'est l'idée qui a pr ésidé au développement de l'API CCR,
qui four nit un modèle de pr ogr ammat ion minimisant not ablement les
r isques et facilit ant la concept ion des applicat ions. Si CCR n'ér adique
pas le deadlock définit ivement (est -ce seulement possible ?), il est un
out il à découvr ir absolument . CCR est la fondat ion de Micr osoft
Robot ics Developer St udio, mais elle peut par fait ement êt r e ut ilisée
seule, avec n'impor t e quel langage .Net , car ce n'est concr èt ement
qu'un jeu d'assemblies. CCR est d'ailleur s également à la base de
DSS, une API pour le développement d'applicat ions concur r ent es
dist r ibuées. Nous allons quant à nous découvr ir CCR en écr ivant un
pet it peu de code concur r ent classique. CCR n'exist e pas en dist r i-
but ion aut onome gr at uit e, mais il est au coeur de Robot ics Develo-
per St udio en Expr ess Edit ion, donc gr at uit e.
1VUE D'ENSEMBLE
Fondament alement CCR est un mécanisme à passage de messages.
Il en exist e de nombr eux pour la pr ogr ammat ion concur r ent e. Les
implément at ions de MPI par exemple. Ou bien les applicat ions
Er lang. Dans ces deux cas, c'est le pr ogr ammeur qui expédie explici-
t ement les messages, depuis des t hr eads ou des pr ocessus r espec-
t ivement . L'or iginalit é de CCR r éside dans une plus gr ande subt ilit é.
Des classes de haut niveau sur veillent des changement s de condi-
t ions dans des por t s et y r éagissent en démar r ant des t hr eads.
Avec ce mécanisme, le pr ogr ammeur ne manipule pas les mes-
sages dir ect ement . Une applicat ion CCR met en oeuvr e 5 classes
au minimum. La pr emièr e est le por t dont nous venons de par ler et
aut our duquel t out s'ar t icule. Concr èt ement , un por t peut êt r e vu
comme une pile FIFO de données t ypées. Vient ensuit e le Dispat cher
qui dét ient des files de t âches pot ent ielles et qui, comme son nom
l'indique, diffuser a les messages et démar r er a les t âches. Ces files
de t âches sont encapsulées dans une classe du nom de Dispat cher -
Queue. Vient ensuit e le Receiver, qui encapsule la not ion de fonct ion
de r appel (ou callback). Cet t e classe implément e une int er face
ITask, et , dans les inst ances de ces classes, un por t est associé
avec du code à exécut er en par allèle. Vient enfin l'Ar bit er dont une
par t ie des mét hodes st at iques sont invoquées pour obt enir l'asso-
CCR, une API de programmation
concurrente pour .Net
ciat ion dont nous venons de par ler, et dont la mét hode Act ivat e
associe des objet s implément ant l'int er face ITask (t el un Receiver )
avec une Dispat cher Queue. Tout ceci peut sembler assez complexe,
et dans un sens ça l'est . D'aut ant plus que nous n'avons pas décr it
les classes dans le dét ail. Mais avec un peu de pr at ique, t out s'éclai-
r e et devient , finalement , plut ôt facile.
2PREMIER EXEMPLE RUDIMENTAIRE
Nous ne pouvons pas fair e plus simple, c'est le "Hello Wor ld!" de la
pr ogr ammat ion concur r ent e à la sauce CCR. Nous cr éons un por t
dest iné à r ecevoir des ent ier s. Les ent ier s post és dans ce por t sont
impr imés en écho sur la console par du code par allélisé :
using System;
using Microsoft.Ccr.Core;
namespace SimplePort
{
class Program
{
Port<int> lePort;
Dispatcher leDispatcher;
DispatcherQueue leDispatcherQueue;
Receiver<int> leReceiver;
Program()
{
lePort = new Port<int>();
leDispatcher = new Dispatcher(1, "Mon Dispatcher");
leDispatcherQueue = new DispatcherQueue(
"Mon DispatcherQueue", leDispatcher);
}
void Go()
{
leReceiver = Arbiter.Receive<int>(
true,
lePort,
Rappel);
Arbiter.Activate(leDispatcherQueue, leReceiver);
for (int i = 0; i < 10; i++)
{
lePort.Post(i);
}
APPLICATION : CONCURRENCE
LANGAGE : C#
SOURCE : OUI
DIFFICULTE
AVANCÉ
La programmation concurrente et le cortège de deadlocks qui l'accompagne sont plus
que jamais d'actualité. CCR est une API concurrente proposée par Microsoft pour .Net,
dont l’originalité est de ne pas utiliser de verrous. Partons à sa découverte.
66-69 Code CCR API 20/05/2009 11:41 Page 66
Juin 2009 \\ PROgr ammez ! • 67
code \\ concur r ence
Console.ReadLine();
}
void Rappel(int valeur)
{
Console.WriteLine(valeur);
}
static void Main(string[] args)
{
Program p = new Program();
p.Go();
}
}
}
Il y a plusieur s façons de passer le code par allélisé à Ar bit er.Recei-
ve. Si l'on pr éfèr e, on peut passer une fonct ion anonyme :
leReceiver = Arbiter.Receive<int>(
true,
lePort,
delegate(int valeur) { Console.WriteLine(valeur); });
Et même saupoudr er le t out d'un peu de sucr e synt axique :)
leReceiver = Arbiter.Receive<int>(
true,
lePort,
valeur => Console.WriteLine(valeur));
Dans t ous les cas, bien r emar quer le booléen posit ionné à t r ue. Ce
booléen assur e la per sist ance de la connexion ent r e le por t et le
code par allélisé. Avec le booléen à false, seul le pr emier ent ier ser ait
affiché. Ce code est finalement for t simple pour de la pr ogr amma-
t ion par allèle. Une fois que t out est init ialisé, on post e 10 ent ier s
dans le por t , sans se pr éoccuper de r ien. Si vous essayez ce code
vous ver r ez que le callback, du nom de Rappel, est bien invoqué par
le r unt ime, comme on s'y at t end, et les 10 ent ier s sont affichés sur
la console, dans l'or dr e dans lequel ils ont ét é post és.
3ASYNCHRONE OU CONCURRENT ?
Les nombr es affichés dans l'or dr e dans lequel ils ont ét é post és ?
Voilà qui est sur pr enant . On dir ait avoir plus affair e à une API de pr o-
gr ammat ion asynchr one que concur r ent e. Not r e exemple est effec-
t ivement asynchr one et r essemble au mécanisme des messages de
fenêt r e en pr ogr ammat ion Win32. L'explicat ion se cache dans l'ins-
t anciat ion du Dispat cher :
leDispatcher = new Dispatcher(1, "Mon Dispatcher");
La valeur 1 r epr ésent e, nous dit la document at ion de CCR, le
nombr e de t hr eads syst èmes que peut ut iliser le r unt ime CCR pour
t r ait er les t âches en at t ent e dans la ou les queues qu'il gèr e. Avec
un seul t hr ead per mis, nous avons un compor t ement asynchr one à
la Win32. Remplacez 1 par 10 et là vous ver r ez que les 10 ent ier s
ne s'affichent plus dans l'or dr e. Cet t e fois le r unt ime a bien démar r é
plusieur s t hr eads simult anément , et nous avons le compor t ement
car act ér ist ique des applicat ions concur r ent es: les r ésult at s dans le
désor dr e, de façon impr évisible, ou du moins non gar ant ie par l'API.
4
NOMBRE DE THREADS ET COEURS
DE PROCESSEUR
Il est impor t ant de bien not er que les t hr eads lancés par CCR sont
des t hr eads syst èmes. Ils ne sont pas gér és et planifiés par le r unt i-
me comme c'est le cas par exemple en Er lang. Que l'on ait des
t hr eads syst èmes implique une limit at ion: Windows ne suppor t e
qu'un maximum de 64 t hr eads pour une applicat ion. Lancer un
gr and nombr e de t hr eads ne pr ésent e d'ailleur s que peu d'int ér êt en
génér al. Il est plus int ér essant de r épar t ir le code par allélisé sur les
coeur s d'un pr ocesseur. Voici un code qui demande explicit ement à
exploit er de la machine hôt e. Le code par allélisé n'a pour r ôle que de
dévor er du t emps d'exécut ion glout onnement :
using System;
using System.Threading;
using Microsoft.Ccr.Core;
namespace PostCore
{
class Program
{
Port<int> lePort;
Dispatcher leDispatcher;
DispatcherQueue leDispatcherQueue;
Receiver<int> leReceiver;
Program()
{
lePort = new Port<int>();
leDispatcher = new Dispatcher(
10, ThreadPriority.Normal,
DispatcherOptions.UseProcessorAffinity,
"Mon Dispatcher");
leDispatcherQueue = new DispatcherQueue(
"Mon DispatcherQueue", leDispatcher);
}
void Go()
{
leReceiver = Arbiter.Receive<int>(
true,
lePort,
Rappel);
Arbiter.Activate(leDispatcherQueue, leReceiver);
for (int i = 0; i < 10; i++)
{
lePort.Post(i);
}
Console.ReadLine();
}
void Rappel(int valeur)
{
Les TUTORIELS sur www.programmez.com
66-69 Code CCR API 20/05/2009 11:41 Page 67
code \\ concur r ence
68 • PROgr ammez ! \\ Juin 2009
Console.WriteLine(
"Entrée dans le thread {0}", valeur);
int n = 250;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
{
DateTime t = DateTime.Now;
}
Console.WriteLine("Sortie du thread {0}", valeur);
}
static void Main(string[] args)
{
Program p = new Program();
p.Go();
}
}
}
Examinons at t ent ivement comment le Dispat cher est inst ancié cet t e fois :
leDispatcher = new Dispatcher(10,
ThreadPriority.Normal,
DispatcherOptions.UseProcessorAffinity,
"Mon Dispatcher");
Nous lui demandons de gér er les t hr eads par paquet s de 10. Nous
donnons aux t hr eads une pr ior it é nor male. Cet t e not ion de pr ior it é
ét ant à pr endr e au sens "pr ogr ammat ion Win32" du t er me. Enfin
nous demandons explicit ement au r unt ime de r épar t ir les t hr eads
sur les coeur s du pr ocesseur de la machine. Quoique selon les
obser vat ions fait es pas vot r e ser vit eur, ce compor t ement est de
t out e façon le compor t ement par défaut . Essayons not r e code sur
un Dual-Cor e. La capt ur e ci-dessous mont r e net t ement le pic de
char ge: les deux coeur s t r availlent au maximum. Le pr ogr amme
émet cet t e sor t ie sur la console
Entrée dans le thread 0
Entrée dans le thread 2
Entrée dans le thread 4
Entrée dans le thread 1
Entrée dans le thread 7
Entrée dans le thread 6
Entrée dans le thread 5
Entrée dans le thread 8
Entrée dans le thread 9
Sortie du thread 1
Entrée dans le thread 3
Sortie du thread 8
Sortie du thread 5
Sortie du thread 2
Sortie du thread 6
Sortie du thread 7
Sortie du thread 9
Sortie du thread 0
Sortie du thread 3
Sortie du thread 4
Pour aut ant que cet t e sor t ie sur console décr ive fidèlement les opé-
r at ions, ce qui n'est pas for cément cer t ain en envir onnement
concur r ent , le r ésult at des cour ses est assez sur pr enant et donne à
r éfléchir. D'abor d les t hr eads sont lancés dans un beau désor dr e.
Mais apr ès t out comme r ien n'est gar ant i à ce niveau, pour quoi pas ?
Pr euve est fait e que l'or dr e des post ages dans un por t n'influence
par l'or dr e de lancement des t hr eads. Quand même... cet or dr e est
ét onnant :) L'or dr e de fin d'exécut ion, sans r appor t avec celui de lan-
cement ne l'est pas moins, mais bon, concur r ence oblige.... Mais la
vr aie sur pr ise, si on considèr e que chaque t hr ead a un t emps d'exé-
cut ion t r ès long, c'est de voir que le der nier est lancé apr ès qu'un se
soit déjà t er miné. Tout semble se passer comme si en int er ne,
c'ét ait un t hr ead qui se char ge de lancer les aut r es. Dans not r e
exemple, les coeur s des CPU ét ant vampir isés, le supposé t hr ead de
lancement doit at t endr e qu'un peu de r essour ce soit libér ée pour
fair e son t r avail. On est t ent é de conclur e qu'avec CCR il convient
d'évit er les sit uat ions avec un syst ème t r ès char gé sous peine d'ob-
t enir un fonct ionnement t r ès besogneux, pr oblème qui ne se r en-
cont r e pas avec Er lang que nous avons déjà cit é plus haut . Il est vr ai
que not r e exemple est un cas ext r ême de mauvais usage de code
par allélisé :)
5DES PORTS MULTI-TYPES
CCR r ecèle encor e beaucoup de choses à découvr ir. Ainsi le Por t Set
qui est une classe de por t pouvant r ecevoir plusieur s t ypes diffé-
r ent s, jusqu'à dix neuf. Pour chaque t ype, on ét ablit une connexion
du por t avec le code par allélisé adapt é au cas. Cet t e connexion est
ét ablie via l'Ar bit er, comme dans le pr emier exemple. Ceci inst allé,
c'est t el ou t el t hr ead qui ser a lancé, selon le t ype de la valeur pos-
t ée dans le por t . Une fonct ionnalit é for t int ér essant e, agr ément ée,
là aussi, d'une pet it e sur pr ise. Vous t r ouver ez sur not r e sit e le code
DemoPor t Set qui est un exemple met t ant en oeuvr e un por t suppor -
t ant t r ois t ypes : ent ier, double et St r ing.
Remar quons que l'inst anciat ion du Dispat cher ne per met qu'un
t hr ead act if à la fois, comme dans le t out pr emier exemple de cet
ar t icle. Dans le por t nous post ons successivement un ent ier, un CCR r épar t it bien la char ge de t r avail sur les coeur s de not r e pr ocesseur
Dual-Cor e
66-69 Code CCR API 20/05/2009 11:41 Page 68
code \\ concur r ence
double, une chaîne et un flot t ant (Tiens le flot t ant est t r ait é comme
un double. C# n'est pas Haskell en ce qui concer ne la r igueur sur les
t ypes :). Puisque nous ne pouvons avoir qu'un seul t hr ead à la fois,
nous nous at t endons à obt enir une sor t ie dans le même or dr e. La
sur pr ise est que nous obt enons :
Reçu entier: 1
Reçu double: 1
Reçu double: 2
Reçu chaine: Programmez!
Nous avons obt enu ce compor t ement sur t out es nos machines,
aussi bien Dual-Cor e que Quad-Cor e. Ce qui vient immédiat ement à
l'espr it est que la const it ut ion de la chaîne demande plus de t emps
et que son t hr ead est doublé, c'est le cas de le dir e, par le der nier
t hr ead t r ait ant un double. Mais en fait , cela n'est pas nor malement
possible puisque nous ne pouvons avoir qu'un t hr ead act if à la fois.
Alor s que se passe-t -il ? Il semble, sous t out es r éser ves, que le r un-
t ime vide les piles FIFO at t achées à chaque t ype l'un apr ès l'aut r e,
dans l'or dr e de leur déclar at ion et / ou dans l'or dr e des gest ion-
nair es spécifié dans l'appel à Ar bit er.Act ivat e.
6
DE LA PROGRAMMATION
CONCURRENTE SÉQUENTIELLE
Comment ? Le code est soit par allèle soit concur r ent ! Non, plus
avec CCR :) Celui-ci pr opose un usage or iginal des it ér at eur s C#. Au
lieu d'avoir une fonct ion de code par allélisé ne r et our nant r ien, on
r et our ne un it ér at eur de t âches par une inst r uct ion yield r et ur n.
Voici une fonct ion par allélisée ext r ait e de l'exemple DemoIt er at or
que vous t r ouvez complet sur not r e sit e :
IEnumerator<ITask> Rappel(int valeur)
{
while (lePort.ItemCount != 0)
{
yield return lePort.Receive();
result += lePort;
Console.WriteLine(result);
}
Console.WriteLine("Résultat final {0}", result);
}
Une sor t ie de console dans un or dr e inat t endu...
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)
La t âche est r et our née au planificat eur du r unt ime, qui peut alor s
l'act iver. L'inst r uct ion yield r et ur n devient une sor t e de point de syn-
chr onisat ion. Dans not r e exemple la par t ie de code qui post e dans
le por t ne fait pas par t ie de la sect ion par allèle. La document at ion
de CCR va plus loin et pr opose un exemple où c'est le code par alléli-
sé lui-même qui post e dans le por t . Voici ce code ext r ait de DemoI-
t er at or Sequent ial.
IEnumerator<ITask> Rappel(int valeur)
{
for (int i = 1; i < 10; i++)
{
lePort.Post(i);
yield return lePort.Receive();
result += lePort; // <- sucre syntaxique
Console.WriteLine(result);
}
Console.WriteLine("Résultat final {0}", result);
}
Et nous ar r ivons à un code par allélisé à l'exécut ion par fait ement
séquent ielle :)
7
UNE GESTION DES ERREURS
ORIGINALE
Gér er les er r eur s en envir onnement concur r ent n'est pas une mince
affair e. Pour t r ait er le pr oblème, CCR dispose d'un syst ème qui cap-
t ur e les except ions évent uellement levées par les sect ions par alléli-
sées, capt ur e qui about it à l'exécut ion d'une sect ion par allélisée
dédiée. Nous avons en fait une sor t e d'ext ension du mécanisme
d'except ion classique, implément é pour les t hr eads. Ce mécanisme
assez complexe, qui per met d’avoir des gest ionnair es d'er r eur s
imbr iqués, ne ser a pas décr it ici. Le lect eur t r ouver a t out efois un
exemple r udiment air e sur not r e sit e, du nom de DemoCausualt y.
8CONCLUSION
Nous sommes t r ès loin d'avoir fait le t our de CCR. Ainsi n'avons-
nous, par exemple, pas par lé des fonct ionnalit és de synchr onisat ion
de t hr eads (aut r e que le mécanisme de l'it ér at eur ) Mais nous avons
vu qu'il s'agit d'une API or iginale. Son compor t ement r éser ve son lot
de sur pr ises, mais c'est un peu la loi du genr e.
Nous pensons que CCR, s'il obt ient la popular it é qu'il mér it e, est de
t aille à r évolut ionner l'appr oche de la pr ogr ammat ion concur r ent e
sous .Net . Pour pr euve de son pot ent iel, il est à la base de DSS
(Decent r alized Soft war e Ser vices), une API pour l'écr it ur e d'applica-
t ions concur r ent es, dist r ibuées et t olér ant es aux faut es, ce qui n'est
pas r ien. Dans des ar t icles à venir, nous appr ofondir ons not r e
connaissance du maniement de CCR et nous découvr ir ons DDS,
aut r e univer s passionnant .
■ Fr édér ic Mazué
fmazue@pr ogr ammez.com
66-69 Code CCR API 20/05/2009 11:41 Page 69
code \\ eclipse
70 • PROgrammez ! \\ Juin 2009
Avec les outils disponibles
aujourd'hui dans Eclipse, il
est possible de choisir entre
réutiliser et adapter un lan-
gage exi stant généri que
comme UML, ou bien directe-
ment créer un langage dédié (ou Domain Specific Language). En choi-
sissant cette seconde solution, l'un des avantages sera pour
l'utilisateur final d’être naturellement guidé dans l'utilisation de ses
modèles. Pour construire un DSL, nous vous proposons de suivre un
processus qui permet une boucle de prototypage entre chaque étape
de construction. Cela permet donc d'expérimenter facilement le langa-
ge avant de l'outiller complètement. Suivant notre expérience, cela
assure une meilleure progression et permet d'en améliorer la fiabilité.
PRÉSENTATION DE L'EXEMPLE
Pour illustrer nos propos, nous nous appuierons sur l'exemple du lan-
gage de la tortue Logo (que certains d'entre nous ont peut-être déjà
connu sur leur MO5). Logo est un petit langage permettant de diri-
ger une tortue équipée d'un crayon pour lui faire dessiner une figure
là où elle est passée. Ce langage a d’abord été destiné à initier les
enfants aux concepts de la programmation. Nous allons décrire
comment l’IDM va nous aider à construire un environnement de pro-
grammation pour Logo, et au final l'appliquer concrètement pour
effectivement piloter un petit robot construit en Lego Mindstorm.
UN PEU DE THÉORIE
Traditionnellement, quand on pense à concevoir un langage, on est
tenté de réfléchir d'abord à la syntaxe concrète qu'on va donner à
celui-ci, et donc en terme de grammaire et de parser. En IDM, la
syntaxe concrète n'est qu’un aspect secondaire. C'est d’abord sur
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.
les concepts du cœur du langage que l'on se base (la syntaxe abs-
traite). Ces concepts de base servent de fondations sur lesquelles
nous allons bâtir autant de vues que nécessaire.
Nous allons profiter ici des facilités offertes par un outil Eclipse
comme Kermeta. Tout d'abord parce qu'étant un Langage Orienté
Modèle, Kermeta offre nativement des fonctions qui en facilitent la
manipulation, mais surtout parce qu'il nous permet de tisser et d'as-
sembler les éléments nécessaires sans modifier le cœur du langage
que l'on souhaite construire. Nous verrons par la suite que cette
fonctionnalité est intéressante car elle nous permet de viser plu-
sieurs usages et outils autour du langage. Cela nous permettrait
même d'envisager plusieurs variantes de sémantiques si le cœur
nous en disait !
DÉFINITION DES CONCEPTS
DU LANGAGE
Ainsi, dans le monde IDM, les DSL sont communément représentés
avec ce que l'on appelle un méta-modèle. En fait, c'est un diagram-
me de classe qui définit les concepts de notre langage : dans Eclip-
se, cela se fait avec un modèle Ecore.
Avec notre exemple Logo, les concepts seront typiquement les ins-
tructions que l'on voudra faire exécuter à notre tortue. Par exemple,
lever le crayon, avancer d’un certain nombre (entier) de pas ou tour-
ner d’un certain angle (exprimé, pour simplifier, comme un nombre
entier de degrés). Nous allons donc créer et relier les concepts cor-
respondants : une classe PenUp, une classe Forward, et une classe
Right. Les instances de ces classes représenteront les instructions
du programme Logo de l ’ uti l i sateur, par exempl e
" FORWARD 10 " ou " RIGHT 3*30 ". Les classes Forward, et Right
étant paramétrées par une expression arithmétique, elles sont
reliées à une classe " Expression ", qui peut être par exemple soit
APPLICATION : TOUTES
LANGAGE : DSL
SOURCE : OUI
DIFFICULTE
MOYENNE
Figure 1. Version minimaliste du méta-modèle du langage Logo Figure 2. Machine Virtuelle pour le simulateur Logo
70-72code DSL Eclipse 20/05/2009 11:42 Page 70
Juin 2009 \\ PROgrammez ! • 71
code \\ eclipse
une expression binaire (ie. qui compose deux expressions par un
opérateur de type +, *, etc.), soit une constante entière, ce qui est
représenté par de l’héritage. L'éditeur arborescent de base fourni
avec Ecore est certes fonctionnel, mais n'hésitez pas à lui adjoindre
un diagramme de classe (fichier avec l'extension ecorediag) grâce à
l'éditeur fourni par le projet Eclipse Ecore Tools.
Afin de profiter des avantages de génération des outils basés sur
EMF, il faut penser à ajouter une notion de conteneur sur certains
liens pour créer une hiérarchie. En effet, même si les concepts de
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-
chage de certaines vues. C'est le cas par exemple de la vue "outline".
Pour rendre la tortue plus intéressante à piloter, nous compléterons
ces instructions avec quelques structures de contrôle telles que
Block, If ou Repeat… [Figure 4] Celles-ci permettent de structurer et
d'ordonner les séquences d'instructions. De même, l'instruction
ProcCall donnera la possibilité d'appeler des blocks définis dans
ProcDeclaration avec des paramètres.
CRÉATION DES PREMIERS MODÈLES
LOGO AVEC L'ÉDITEUR RÉFLEXIF
Pour débuter avec votre nouveau langage, le plus simple maintenant
est d'utiliser l'éditeur arborescent réflexif. Depuis votre méta-modèle
logo.ecore, il vous suffit de sélectionner l'élément racine de votre lan-
gage et de créer une nouvelle instance. Vous pouvez maintenant
ajouter des instructions pour créer vos premiers programmes Logo.
TISSER DES CONTRAINTES
COMPLÉMENTAIRES
En expérimentant un peu votre langage, vous vous apercevrez
qu'Ecore ne vous permet pas d'exprimer certaines contraintes, par
exemple que les paramètres formels d’une procédure doivent avoir
des noms différents. C'est normal puisqu'il n'en définit que la struc-
ture. Comme l'objectif d'un DSL est d'aider les utilisateurs du futur
langage, nous allons ajouter des contraintes qui vont les aider à ne
pas faire ces erreurs. Le langage Kermeta nous donne ici la possibi-
lité de rouvrir les définitions Ecore pour ajouter des éléments néces-
saires au besoin courant. Par exemple, pour vérifier que les argu-
ments des procédures Logo ont des noms uniques, il suffit d'ajouter
l'invariant suivant :
package kmLogo::ASM;
require kermeta
// importe les définitions du fichier logo.ecore
require "http://www.kermeta.org/kmLogo"
// réouvre la classe ProcDeclaration du méta-modèle Logo pour
lui ajouter un invariant
aspect class ProcDeclaration{
inv unique_names_for_formal_arguments is do
args.forAll{ a1 | args.forAll{ a2 |
a1.name.equals(a2.name).implies(a1.equals(a2))}}
end
}
Obtenir un vérificateur de modèle revient alors à charger un modèle
Logo et appeler la méthode checkAllInvariants sur les éléments à la
racine du modèle. Cet invariant aurait aussi pu être écrit en OCL, (le
langage officiel de l'OMG) et importé de la même manière, d'ailleurs
Kermeta en reprend les facilités de navigation dans les modèles exis-
tant en OCL. Néanmoins, Kermeta nous sert surtout de système
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.
EXTENSION DES CONCEPTS POUR FOURNIR
UNE SIMULATION (SÉMANTIQUE OPÉRATIONNELLE)
Maintenant nous souhaitons rendre ce modèle plus "vivant" et voir
notre tortue bouger. Pour en définir le comportement, le plus simple
et le plus rapide est de fournir un simulateur. La première étape
consiste à définir une représentation du domaine d'application (une
sorte de Machine Virtuelle) sur laquelle le langage va s'appliquer.
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
suf f i t d' i ndi quer que l ' on a besoi n
d'étendre les classes du domaine d'appli-
cation et de leur ajouter directement les Figure 5 : Tortue robot en Lego
Figure 3. Exemple d'exécution d’un programme Logo
avec le simulateur Figure 4. Exemple de modeleur généré avec Topcased
70-72code DSL Eclipse 20/05/2009 11:42 Page 71
code \\ eclipse
72 • PROgr ammez ! \\ Juin 2009
act ions que l'on souhait e sous for me d'opér at ions. Enfin, cr éer le
simulat eur pour le langage Logo r evient donc à ajout er des
mét hodes evaluat e(cont ext : Cont ext ) sur chacune des inst r uct ions
du langage. Cet t e mét hode fait appel au cont ext e pour avoir des
int er act ions avec le domaine d'applicat ion et enchaîner sur l'évalua-
t ion des inst r uct ions suivant es. En fait , c'est t out simplement une
var iat ion du pat r on de concept ion "Visit eur " qui a ét é simplifiée
gr âce à l'ut ilisat ion du t issage d'aspect de Ker met a.
package kmLogo::ASM;
require kermeta
require "../1.MetaModel/ASMLogo.ecore"
require "../4.VirtualMachine/LogoVMSemantics.kmt"
...
aspect class Block
{
method eval(context : Context) : Integer is do
instructions.each{instruction | result := instruction.
eval(context)}
end
}
aspect class Forward
{
method eval(context : Context) : Integer is do
context.turtle.forward(steps.eval(context))
result := void
end
}
...
Pour lancer une simulat ion, il suffit de char ger un modèle Logo et de
lancer l'évaluat ion de la pr emièr e inst r uct ion.
AMÉLIORATION DU SIMULATEUR
Le langage Ker met a ét ant pr incipalement dédié à la manipulat ion de
modèles, il ne pr opose pas par défaut de fonct ions gr aphiques qui
ser aient t r op spécifiques à un domaine et nuir aient à sa compacit é.
Néanmoins, il offr e la possibilit é d'accéder à du code java. C'est ainsi
que nous pouvons r éaliser une pet it e int er face par exemple en AWT
pour complét er les sor t ies t ext es du simulat eur logo.
Par fois, vous pouvez vouloir augment er les per for mances de vot r e
simulat eur. Dans ce cas, plut ôt que d'ut iliser la ver sion dynamique
de Ker met a (qui int er pr èt e le code Ker met a), vous pouvez ut iliser
son compilat eur pour obt enir le code java EMF de vot r e simulat eur. Il
pour r a ainsi êt r e déployé dir ect ement sans Ker met a lui-même dans
l'envir onnement de l'ut ilisat eur final.
A ce st ade de la mise au point de la sémant ique du langage, le coût
des évolut ions r est e r aisonnable. Ceci ne ser a pr obablement plus
vr ai une fois que vous aur ez avancé dans les ét apes suivant es et en
par t iculier si vous avez const r uit un compilat eur car leur coût de
maint enance est génér alement plus élevé.
VOUS AVEZ DIT SYNTAXE CONCRÈTE ?
Maint enant que les concept s de not r e langage sont st ables, nous
pouvons commencer à capit aliser sur son usage. En par t iculier pour
le r endr e plus agr éable à ut iliser, nous souhait ons en amélior er
l'IHM, r ien de mieux alor s que d'en définir une synt axe dédiée par
exemple t ext uelle ou gr aphique.
Gér er des synt axes implique d'ut iliser une ou plusieur s t echniques,
chacune d'ent r e elles pouvant nécessit er de longues explicat ions.
Nous nous cont ent er ons ici d'évoquer les pist es ut ilisant des out ils
de l'IDM visant à vous facilit er cet t e t âche :
- Génér er et cust omiser l'édit eur ar bor escent par défaut . Cela se
fait gr âce au genmodel d'EMF. En génér al, on commence par là,
cela per met t r ès facilement d'avoir une ext ension de fichier qui est
pr opr e à not r e modèle, d'ut iliser des libellés et des icônes plus par -
lant es. C'est d'aut ant plus int ér essant que ces infor mat ions ser ont
r epr ises par d'aut r es édit eur s plus évolués (t ypiquement dans la
vue "out line" qui leur ser a associée)
- Génér er un édit eur gr aphique. Cela se fait gr âce à un modèle
per met t ant de fair e le lien ent r e le langage et l’édit eur gr aphique.
L'out il, (GMF ou Topcased) génèr er a alor s la plupar t du code pour
fonct ionner dans Eclipse.
- Obt enir un édit eur t ext uel. Tr adit ionnellement cela consist e à four nir
un par ser et un pr et t y pr int er pour not r e langage (t ypiquement avec
des out ils comme sableCC ou ant lr ).Plus r écemment , des out ils
suivant la même philosophie que pour les édit eur s gr aphiques ont
commencé à appar aît r e pour obt enir des édit eur s plus int elligent s à
moindr e coût , mais ceci est hor s du spect r e de cet ar t icle.
CONNECTONS-LE AU MONDE RÉEL
Nous avons choisi un r obot const r uit avec Lego Mindst r om. Il est
équipé de t r ois mot eur s indépendant s : deux pour pilot er les r oues,
un pour act ionner le st ylo. Il faudr a que nous t r ansfor mions nos
modèles de pr ogr amme Logo en du code compr éhensible par la
machine. Pour cet t e t âche, il exist e de nombr euses t echniques et
langages de t r ansfor mat ions de modèle qui ont leur s avant ages et
inconvénient s. Le choix dépend génér alement de la complexit é et du
niveau de maint enabilit é voulus pour la t r ansfor mat ion à développer.
Not r e r obot peut êt r e pr ogr ammé en NXC (Not eXact ly C). Cet t e
fois encor e, nous ut ilisons ici les capacit és de t issage pour complé-
t er not r e mét a-modèle de langage avec un compilat eur. En effet ,
pour une compilat ion simple comme celle dont nous avons besoin
ici, il suffit de t r aver ser ce modèle pour génér er dir ect ement le code
NXC cor r espondant . Si la t r ansfor mat ion avait ét é plus complexe
nous ser ions passés par un modèle int er médiair e spécifique au NXC
avant de génér er le code. Dans t ous les cas, la st r uct ur e de base du
langage nous ser t de t r ame dir ect r ice.
A not r e avis, la const r uct ion d'un compilat eur doit êt r e fait e apr ès
avoir fait un simulat eur. Il y a bien évidement des except ions mais la
mise au point et la maint enance d'un compilat eur est sensiblement
plus coût euse que celle d'un simulat eur et doit donc êt r e fait e seule-
ment quand le langage est suffisamment st able. De plus, vot r e
simulat eur vous ser vir a de ver sion de r éfér ence pour t est er les dif-
fér ent es implément at ions concr èt es. Dans not r e exemple, nous
visons une plat e-for me Lego Mindst or m, mais déjà sans même par -
ler d'un aut r e r obot , nous pouvons envisager plusieur s dialect es et
bibliot hèques de pr ogr ammat ion pour celui-ci !
Ainsi il est possible de met t r e au point des pr ogr ammes dans not r e
nouveau langage t or t ue Logo sans avoir à dépendr e de la lent eur du
r obot r éel ou de la sant é des bat t er ies qui le meuvent . On voit ici
vr aiment t out l'int ér êt des modèles qui donnent
une abst r act ion de la r éalit é.
■ Didier Vojt isek - Ingénieur de r echer che INRIA
www.ir isa.fr / t r iskell - www.ker met a.or g
70-72code DSL Eclipse 20/05/2009 11:42 Page 72
Juin 2009 \\ PROgrammez ! • 73
code \\ ria
Soyatec est une
société française
experte dans le
développement
de plugins pour
Eclipse. Parmi ses
produits on remarquera particulière-
ment eFace, un plugin compatible
avec le langage déclaratif XAML pour
décrire des interfaces graphiques
Java. Cette parti cul ari té, Stève
Sfartz (architecte Microsoft France)
va la repérer. La suite logique, on la
connaît : un partenariat est créé
entre Microsoft et Soyatec, et le tout
premier plugin Silverlight pour Eclipse
est né : eclipse4SL. 6 mois après
son lancement, faisons un état des
lieux.
LES FONCTIONS
Visual Studio est certes un environ-
nement très complet, le plugin eclip-
se4SL est néanmoi ns très bi en
équipé et en osmose avec les outils
Microsoft. Les projets créés avec
eclipse4SL sont complètement com-
pati bl es MSBUI LD et donc avec
Vi sual Studi o 2008 ou encore
Expression Blend 2. Les projets eclip-
se4SL sont éditables aussi bien par
Visual Studio 2008 que par la suite
Expression Studio 2 et vice versa !
[Fig.2]
De ce fait, eclipse4SL peut importer
des projets Silverlight dans l’environ-
nement Eclipse. Il vous est proposé
de créer une application Silverlight
avec ou sans projet Web attaché, les
projets sont exécutés dans un envi-
ronnement Web via Chiron, un mini-
serveur web embarqué dans le SDK
de Silverlight. [Fig.3]
L’expérience de l’éditeur XAML est
très intéressante puisqu’on est aidé
par l ’ auto-compl éti on à l a façon
" IntelliSense ", on note la présence
d’une palette qui permet des glisser-
déposer des composants Silverlight
(près d’une cinquantaine). On pourra
générer ai sément l e corps des
méthodes dès lors qu’on s’abonne à
des évènements côté XAML.
L’éditeur de code C# est quant à lui
bien loin d’être complet, outre la colo-
ration syntaxique et quelques snip-
pets, il ne bénéficie pas d’assistant
d’auto-complétion de code.
Les erreurs sont remontées dans la
console et dans la vue Problems.
[Fig.4] [Fig.5]
Autre point ergonomique, l’explora-
teur de projet est similaire à celui de
Visual Studio 2008, on retrouve
donc la notion de " code-behind ", les
différentes assemblies du projet sont
concaténées dans un onglet Refe-
rences. On a la possibilité d’ajouter
d’autres assemblies, de nouvelles
classes C#, des User Controls, du
Eclipse Tools for Silverlight :
Silverlight sur Eclipse, c’est possible !
Silverlight est un plugin gratuit s’exécutant sur diverses plates-formes et dans différents
navigateurs Web. Avec eclipse4SL, il devient désormais " multi-development
environment ” ! Eclipse4SL permet en effet de développer des applications Silverlight 2
directement dans l’environnement Eclipse. La communauté peut alors profiter de toute la
richesse de Silverlight 2. [Fig.1]
Fig.2 Fig.1
Fig.3
APPLICATION : RIA
LANGAGE : DIVERS
SOURCE : NON
DIFFICULTE
MOYENNE
73-74 ecilpse tools 20/05/2009 11:45 Page 73
code \\ ria
74 • PROgrammez ! \\ Juin 2009
JavaScript, etc. L’éditeur XAML se
dote d’un rendu instantané. Comme
je vous le disais précédemment, la
solution est compatible avec Visual
Studio 2008 et la suite Expression
Studio 2, il est même possible d’édi-
ter le projet dans l’un de ces 2 envi-
ronnements à l ’ ai de du menu
contextuel (si toutefois, ils sont instal-
lés sur votre machine).[Fig.6]
Le débogage est une feature prévue
pour plus tard. Le projet peut être
compilé et exécuté en s’appuyant sur
MSBUILD et Chiron, la compilation
packagera l’application pour pouvoir
être utilisée dans n’importe quel pro-
jet Web.
L’INTEROPÉRABILITÉ
Non content d’avoir intégré Silverlight
dans un environnement Java, l’équipe
d’eclipse4SL pousse l’interopérabilité
en proposant des scénarios en mode
SOAP ou REST entre du métier Java
et une couche d’exposition Silverlight.
Celui-ci supporte en effet SOAP V1.1
et embarque un client HTTP qui lui
permet d’interroger un service REST.
La mise en place de ces différents
scénarios est disponible sur leur site.
Dans l’ensemble, le plugin possède
de bonnes bases pour démarrer des
projets Silverlight. Le point pénalisant
à mon sens est le support limité de
l’édition de code C# et aucun débug
de code possible, il reste néanmoins
très intuitif dans son utilisation et se
rapproche beaucoup de l’environne-
ment Visual Studio. Un point impor-
tant à souligner : le plugin est Open
Source sous licence EPL et disponible
sur SourceForge :
http://sourceforge.net/projects/eclipse4sl/
SILVERLIGHT :
UN PLUGIN
" cross-browser,
cross-platform, cross… "
L’histoire ne s’arrête pas là, lors du
Mix 09 qui a eu lieu à Las Vegas,
Vijay Rajagopalan, architecte dans la
division Stratégie Interopérabilité de
Microsoft, faisait la démonstration
du plugin, mais cette fois-ci sur Mac
OS X ! Le développement d’applica-
tions Silverlight est désormais rendu
possible sur plusieurs OS. On parle
vraiment là d’un plugin Cross-Plat-
form, voire Cross-Development Envi-
ronment. [Fig.7]
Lors de cette même session, Vijay R.
faisait la démonstration d’un POC
(proof of concept) permettant de
développer des applications PHP
pour Windows Azure et tout cela
dans Eclipse ! En bonus, on trouve
même un Azure Storage Explorer.
Aucune annonce officielle de la sortie
de ce plugin n’a été communiquée.
CONCLUSION
Six mois après son lancement, eclip-
se4SL est déjà classé parmi les plu-
gi ns l es mi eux notés de l a
communauté. Beaucoup de chemin
reste à parcourir avant de faire de
l’ombre au mastodonte Visual Studio,
ce n’est certainement pas l’objectif
de ce plugin. Intégrer le développe-
ment d’applications Silverlight dans
Eclipse c’est pouvoir profiter de la
richesse de la plate-forme et de toute
la communauté autour. Finalement,
avec eclipse4SL et ce fameux POC
sur Azure, Microsoft montre la volon-
té de s’ouvrir à d’autres univers et
d’être de plus en plus interopérable.
Affaire à suivre…
Ressources :
• Eclipse4SL : http://www.eclipse4sl.org
• Session de Vijay Rajagopalan au
Mix 09 :
http://videos.visitmix.com/MIX09/T58F
■ Ronny Kwon
Etudiant CSII3 à l’EPSI de Montpellier
http://blogs.developpeur.org/ronnyk
Fig.4
Fig.5
Fig.6
Fig.7
73-74 ecilpse tools 20/05/2009 11:45 Page 74
Juin 2009 \\ PROgr ammez ! • 75
code \\ mysql
Ces pr ovider s, implémen-
t ent un mot eur de t r ait e-
ment des r equêt es
per met t ant de conver t ir les
données dans un for mat dif-
fér ent afin de les exécut er sur
diver s st ockages de données. Différ ent s pr ovider s nat ifs pour LINQ
sont disponibles mais deux t echnologies r ivales de Micr osoft vous
per met t ent aujour d’hui de r éaliser un développement de bases de
données or ient ées objet . Ces t echnologies sont LinqToSql et
ADO.NET Ent it y Fr amewor k.
LINQTOSQL
Ce pr ovider a pour cible les bases SQL Ser ver et SQL Ser ver Com-
pact uniquement . Puisque les données SQL Ser ver se t r ouvent sur
un ser veur dist ant qui possède son pr opr e mot eur de r equêt es, Lin-
qToSql ne fait pas appel au mot eur de r equêt es de LINQ mais se
cont ent e de conver t ir la r equêt e LINQ en r equêt e SQL qui est ensui-
t e envoyée à SQL Ser ver pour êt r e t r ait ée. SQL Ser ver st ocke les
données au for mat r elat ionnel alor s que LINQ int er r oge les données
encapsulées dans des objet s. Ces deux r epr ésent at ions doivent êt r e
" mappées " l’une à l’aut r e.
ADO.NET ENTITY FRAMEWORK
ADO.NET Ent it y Fr amewor k est un ORM (object -r elat ional mapper )
qui est inclus dans le Fr amwor k.NET 3.5 Ser vice Pack depuis août
2008. Il per met également d’exécut er les r equêt es LINQ par r ap-
por t aux ent it és du fr amewor k ADO.NET Ent it y Fr amwor k. Il est des-
t iné à êt r e ouver t à d’aut r es mot eur s de bases de données comme
l’annonce Micr osoft .
ADO.NET ENTITY FRAMEWORK
OU LINQTOSQL
Au pr emier coup d’œil ces deux t echnologies pr oposent des fonc-
t ionnalit és similair es. Les aspect s suivant s vous per met t r ont de
choisir une des ces t echnologies pour vot r e développement :
Les avant ages de LinqToSql :
- La pr ise en main est plus facile, et mieux adapt ée pour un dévelop-
pement RAD.
- Possède une meilleur e int égr at ion des fonct ionnalit és or ient ées
ser veur, comme par exemple le t ype BLOB.
- Est moins compliqué qu’ADO.NET Ent it y Fr amweor k.
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.
- per for mances supér ieur es à celles d’ADO.NET Ent it y Fr amewor k.
- Aucune r est r ict ion n’est à appliquer à vos objet s afin qu’ils soient
compat ibles avec LinqToSql. Vous devez uniquement implément er
quelques int er faces.
Les avant ages d’ADO.NET Ent it y Fr amewor k :
- Ent it y Fr amewor k est une appr oche concept uelle du développe-
ment avec les bases de données. Cependant il nécessit e plus de
connaissances pour la pr ise en main et le maint ien les développe-
ment s.
- Est davant age por t able sur différ ent s ser veur de bases de données
car sa concept ion est plus abst r air e que celle de LinqToSql.
- Int égr at ion avec WCF (Windows Communicat ion Foundat ion).
- Int égr at ion avec ADO.NET Dat a Ser vices.
- Int égr at ion avec quelques ser vices de Micr osoft comme par
exemple Repor t ing et Analysis Ser vices.
Cependant aucune des deux solut ions ne pr opose en nat if le déve-
loppement avec d’aut r es bases de données que SQL Ser ver. La
quest ion suivant e se pose alor s :
Peut -on ut iliser LINQ avec d’aut r es bases de
données que SQL Ser ver ?
Si vous ut ilisez une aut r e base de données que SQL Ser ver, il est
pr éfér able de savoir si vous pouvez avoir r ecour s à ADO.NET Ent it y
Fr amwor k ou LinqToSql. Le t ableau ci-dessous, r éper t or ie les pr ovi-
der s disponibles (la list e est non exhaust ive) :
LinqToSql LinqToSql Ent it y Framework Ent it y Framework
(nat if) (t iers) (nat if) (t iers)
SQL Ser ver Oui - Oui -
Or acle Non DBLinq, Oui dot Connect ,
LinqToOr acle, EFOr acle
Light Speed,
dot Connect
DB2 Non - Oui -
MySQL Non DBLinq, Non dot Connect
Light Speed
Post gr eSQL Non NpgSql, DBLinq, Non NpgSql, dot Connect
Light Speed,
dot Connect
Dans le cadr e de not r e ar t icle, nous allons r éaliser une applicat ion
C# qui n’a pas une r éelle ut ilit é, à par t la démonst r at ion de l’ut ilisa-
t ion de LINQ avec la base de données MySQL (ver sion 5.1.30). Afin
APPLICATION : DONNÉES
LANGAGE : LINQ
SOURCE : NON
DIFFICULTE
MOYENNE
Recevez la Newsletter www.programmez.com/ inscription.php
75-77 code linq 20/05/2009 11:45 Page 75
code \\ mysql
76 • PROgrammez ! \\ Juin 2009
de simplifier la démarche, nous allons créer une application de type
console (sans le code GUI) qui permet de nous concentrer sur un
cas concret d’utilisation. Première question à se poser : quel provi-
der choisir pour réaliser le développement avec la base MySQL ?
Dans le cas de MySQL, ni LinqToSql ni Entity Framework ne fournis-
sent aucun provider en natif. MySQL AB est en train de développer
son provider " Connector/NET 6.0 " pour Entity Framework (actuel-
lement il est disponible en version alpha), mais aucune date de sor-
tie officielle n’est donnée au moment de l’écriture de cet article. Il
est donc difficile de tester MySQL sur ADO.NET Entity Framwork
pour le moment, à moins d’avoir recours aux providers commer-
ciaux tels que par exemple dotConect de Devart ou LightSpeed de
Mindscape.
Quant à LinqToSql nous pouvons également nous tourner vers les
providers commerciaux (voir le tableau) ou utiliser une solution alter-
native telle que DBLinq qui aujourd’hui gère MySQL, Oracle et Post-
greSql en s’appuyant sur LinqToSql. Ce projet OpenSource a débuté
en 2007, donc est relativement jeune, mais permet de faire les pre-
miers tests avec MySQL. Dans le cadre de notre application, nous
allons utiliser DBLinq v.0.18.
EXEMPLE :
" GESTION COMMERCIALE ".
Dans notre exemple, nous allons développer une simple application
appelée " Gestion Commerciale ". Pour pouvoir commencer notre
projet nous allons avoir besoin des pré- requis suivants :
- Le serveur MySQL que vous pourrez télécharger à l’adresse sui-
vante http://dev.mysql.com/downloads/mysql/5.1.htm.
- La bibliothèque DbLinq v.0.18 http://code.google.com/p/dblinq2007/.
Modèle métier
Avant de nous lancer dans le développement de notre application,
nous allons créer notre modèle métier que nous pouvons illustrer de
manière suivante : [Fig.1]
Ce modèle est juste une partie simplifié d’un système de prise de
commandes. Il n’est pas complet mais cela est bien suffisant pour
illustrer l’utilisation de LINQ avec une base de données MySQL.
DBMetal
Un fois notre base de données créée, nous devons générer nos
classes. Il n’y a malheureusement pas de support graphique pour
les modèles, à l’instar de LinqToSql. Le DataContext doit donc être
généré via une adaptation de SQLMetal appelé DBMetal, comme
aux premières heures de LINQ. DBMetal est un projet permettant
de générer du code source en s’appuyant sur des schémas
de bases de données. Vous trouverez le générateur DBMetal.exe
dans l’archive zip de la bibliothèque DbLinq que vous avez téléchar-
gée. Nous allons donc générer pour le besoin de notre application
le DataContext appelé GestComm, il sera contenu dans le fichier
du même nom avec l’extension .cs (C#). Afin de générer notre
fichier nous devons taper la commande suivante dans la console
Windows :
bin\DbMetal.exe -provider=MySql -database:GestComm -server
:localhost -user:LinqUser -password:linq2 -namespace:GestComm
-code:GestComm.cs -sprocs
La ligne d’exécution est assez facile à comprendre et ne nécessite
pas d’explications supplémentaires. Afin que la génération réussis-
se, faites bien attention que l’utilisateur " LinqUser " ait les droits en
sélection à la table système mysql.proc qui est nécessaire pour la
génération du code source. A la fin de la génération vous devriez
avoir un message similaire à celui sur l’image : [Fig.2]
Ce fichier contient le mapping entre la base de données MySQL et le
code source. Une fois le fichier généré, nous pouvons le joindre à
notre application.
Code source de l’application.
Nous pouvons à présent passer à l’écriture de notre application. Il
faut commencer d’abord par ajouter les bonnes références.
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;
using DbLinq.Logging;
using MySql.Data.MySqlClient;
Fig.2
Fig.1
75-77 code linq 20/05/2009 11:45 Page 76
Juin 2009 \\ PROgrammez ! • 77
code \\ mysql
var q6 = from c in db.Commande from l in c.Lignes where l.Article.
ArtLiBelle == "XBOX360" select new { c, a = l.Article, l };
Procédures stockées
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
méthodes. [Fig.3]
Vous pouvez facilement les invoquer afin de les exécuter. Dans notre
exemple, nous avons créé une procédure stockée " Commande-
PourTiers(idTiers int) " qui prend en paramètre l’identifiant d’un
tiers et retourne toutes ses commandes. Le résultat retourné est
du type DataSet. L’extrait du code ci-dessous illustre son utilisation :
System.Data.DataSet result = db.CommandesPourTier(1);
Insertions
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
code qui permet de le réaliser :
db.Tiers.InsertOnSubmit(new Tiers { TRSID = 4, TRSNoM = "Martin" });
db.SubmitChanges();
Suppressions
De même, nous pouvons aussi facilement supprimer le dernier tiers
ajouté dans l’exemple ci-dessus. Voici l’extrait du code qui permet de
réaliser cette opération :
db.Tiers.DeleteOnSubmit(db.Tiers.Last());
db.SubmitChanges();
CONCLUSION
Dans cet article, nous avons pris comme exemple la base de don-
nées MySQL. Cependant le projet DbLinq étant compatible avec
d’autres plates-formes, nous pouvions choisir un autre serveur de
données tel que par exemple Oracle, PosgreSql, Ingres, SQLite,
Firebird ou même SQL Server. Comme vous pouvez le constater
nous avons réussi à réaliser notre petite application d’essai bien que
DbLinq comporte encore des lacunes fonctionnelles. D’après ce que
nous pouvons lire sur le site web officiel du projet, les fonctionnalités
majeures manquantes sont :
- Manque de la gestion des transactions.
- Non support des sous-requêtes.
- Non intégration de LinqToEntities.
Nous pouvons également constater que le développeur ne dispose
pas d’une interface d’intégration graphique comme LinqToEntities.
De plus, un manque quasi total de documentation est un point han-
dicapant. Il faut également se poser la question de la pérennité
d’une telle solution. Cependant, si vous ne voulez pas investir dans
des composants tiers souvent onéreux, vous pouvez vous tourner
vers DbLinq, car son utilisation ainsi que sa prise en main est très
facile, comme vous avez pu le constater à la lecture de cet article.
Références
Devart dotConnect : http://www.devart.com/dotconnect/linq.html
DBLinq : http://code2code.net/DB_Linq/
LightSpeed: http://www.mindscape.co.nz/products/lightspeed/
■ Thomas JASKULA - Chef de Projet .NET
Se connecter à la base MySql
La connexion à la base de données s’effectue par le biais de notre
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-
mètre la chaîne de connexion. Le code suivant illustre cette étape :
string dbServer = Environment.GetEnvironmentVariable("DbLinq
Server") ?? "nodevovmware";
string connStr = String.Format("server={0};user id={1}; password
={2}; database={3}", dbServer, "LinqUser", "linq2", "GestComm");
GestComm db = new GestComm(new MySqlConnection(connStr));
Pour faciliter le déboguage de l’application, vous pouvez avoir recours
au logger se trouvant dans l’espace de nom DbLinq.Factory. Vous
pouvez le récupérer avec la ligne de code suivante :
var logger = ObjectFactory.Get<ILogger>();
Ensuite, son utilisation reste très simple. Il suffit de lui passer en
paramètre la requête linq que vous voulez déboguer :
logger.Write(Level.Debug, "from p in db.article orderby p.ART
_PRIXBASEHT select p;");
Sélections
Dans un premier temps à titre d’exemple nous pouvons afficher la
liste d’articles triée par le prix :
var q2 = from p in db.Article orderby p.ArtPRiXBaseHT select p;
foreach (var v in q2)
Console.WriteLine(v.ArtID + " - " + v.ArtLiBelle + " : " + v.Art
PRiXBaseHT);
Vous pouvez le constater, l’opération est très simple, comme s’il
s’agissait de LinqToSql avec la base SQL Server.
Nous pouvons aussi effectuer une récupération partielle des pro-
priétés en utilisant une projection simple comme celle-ci :
var articlePartiel = from c in db.Article select new Article
{ ArtID = c.ArtID, ArtLiBelle = c.ArtLiBelle };
Cela permet de réduire le trafic réseau car vous sélectionnez et
mettez à jour les propriétés dont vous avez vraiment besoin. Si vous
essayez de faire la même chose dans LinqToSql vous obtiendrez l’er-
reur suivante "Explicit construction of entity type 'Article' in query
is not allowed.".
Les requêtes un peu plus compliquées s’exécutent également sans
problèmes. La requête Linq ci-dessous affiche la liste des com-
mandes dont l’article est la console " XBOX360 " :
Fig.3
75-77 code linq 20/05/2009 11:45 Page 77
Les langages fonct ionnels
sont par t iculièr ement bien
adapt és pour l’écr it ur e d’ap-
plicat ions scient ifiques ou
d’int elligence ar t ificielle. A
ce jour, Micr osoft n'édit e pas
un t el langage pour la plat e-for me .net , F# vient donc combler ce
manque. F# est un langage .net , cela signifie que comme C#, VB.net ,
Boo ou d’aut r es langages, il r epose sur un socle commun : la CLS
(Common Language Specificat ion). Ainsi, F# a accès à l’ensemble des
libr air ies .net , c'est -à-dir e qu’il est ut ilisable pour écr ir e une applica-
t ion WPF ou ASP.net , ou simplement une assembly ut ilisée par une
applicat ion C#. Concr èt ement , cela veut dir e que le compilat eur génè-
r e une assembly .net classique qui ser a exécut ée par la machine vir -
t uelle .net ; F# a donc plus ou moins les mêmes per for mances que
C#. F# et OCaml par t agent les mêmes synt axes et fonct ions de base,
cer t aines libr air es fait es en OCaml peuvent êt r e compilées dir ect ement
via F# , sans changement ou seulement quelques modificat ions
mineur es. Cont r air ement à C#, F# ne définit pas seulement une gr am-
mair e, il appor t e également un ensemble de fonct ions pr édéfinies.
LES DIFFÉRENTS PARADIGMES
Il exist e plusieur s cat égor ies de langages r épar t is selon des
concept s différ ent s ; on par le de par adigme pour désigner un
ensemble de concept s par t iculier s. Les langages de pr ogr ammat ion
impér at ifs r epr ésent ent le pr emier par adigme de pr ogr ammat ion: le
langage C en est pr obablement le meilleur r epr ésent ant . Le par adigme
or ient é objet a connu le succès avec le C++ et , au début du XXIème
siècle gr âce aux langages Java puis C#. Les aut r es par adigmes,
comme la pr ogr ammat ion fonct ionnelle, sont moins ut ilisés, ce der -
nier compr end LISP, Scheme et F# ent r e aut r es. Ar r êt ons-nous sur
la pr ogr ammat ion fonct ionnelle, ce par adigme consist e à voir un
pr ogr amme comme un ensemble de fonct ions mat hémat iques. Ces
différ ent es fonct ions peuvent s'emboît er, on les voit en fin de compt e
comme des boît es noir es qui pr ennent des par amèt r es en ent r ée et
les t r ansfor ment en une sor t ie. A l'inver se de la pr ogr ammat ion
impér at ive, la pr ogr ammat ion fonct ionnelle r ejet t e le changement
d'ét at ainsi que la mut at ion des données ; par défaut , t out e opér a-
t ion d'assignat ion est int er dit e. [Fig.1]
LE LANGAGE F#
Avant de commencer avec une sér ie d'exemples, il est nécessair e de
maît r iser quelques concept s de base. Tout d’abor d, il exist e en F# un
mot -clé per met t ant la déclar at ion de list e, var iable et fonct ion ; c’est
le mot -clé let . Ensuit e, F# est un langage for t ement t ypé, pour cela il
ut ilise massivement ce qui est appelé l'infér ence de t ype (t ype infe-
r ence). Ce concept per met de ne pas spécifier explicit ement le t ype
code \\ fonct ionnel
78 • PROgr ammez ! \\ Juin 2009
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.
de l’élément déclar é. Le compilat eur va analyser le cont ext e act uel
puis va déduir e le t ype aut omat iquement .
Le r est e du dossier pr ésent e quelques fonct ionnalit és et concept s
qu’il nous a semblé int ér essant d'abor der.
FONCTIONNALITÉS ET CONCEPTS
Les bout s de codes ci-dessous ont ét é r éalisés et compilés avec
Visual St udio 2 0 0 8 en ut ilisant la CTP de sept embr e 2 0 0 8
(1.9.6.2) de F#.
Hello World
Le classique Hello Wor ld ci-dessous pr ésent e une manièr e d'afficher
une chaîne de car act èr es sur la console. Nous ut ilisons ici la mét ho-
de F# pr int fn mais la mét hode Syst em.Console.Wr it eLine du fr ame-
wor k .net aur ait également pu fair e l’affair e.
#light
(* Hello World
Une fonction sayHello qui prend en paramètre hello *)
let sayHello hello = printfn "Hello %s" hello
printfn sayHello "World" // Appelle sayHello avec World comme paramètre
En exécut ant ce code, le r ésult at suivant est obt enu :
> Hello World
Et ant donné que nous t r availlons en F#, il est plus logique d'ut iliser la
fonct ion pr int fn car elle se combine par fait ement avec le syst ème de
t ypes de F#. Act uellement , t out code doit commencer avec l’inst r uc-
t ion #light ou #light "off". Dans les fut ur es r eleases, #light devr ait
êt r e ajout é par défaut si r ien n’est spécifié. #light a pour but de sim-
plifier le code en r endant les espaces significat ifs. De cet t e manièr e,
cer t ains mot -clés t els que in, begin et end peuvent êt r e omis. La
deuxième var iant e est à ut iliser pour conser ver une compat ibilit é
avec le langage OCaml. Ce pr emier exemple mont r e également l’ut i-
lisat ion des comment air es. Deux bar r es obliques (slash) per met t ent
de fair e un comment air e sur une seule ligne alor s que (* et * ) per -
met t ent d’ouvr ir, r espect ivement fer mer, un bloc de comment air e.
APPLICATION : - -
LANGAGE : FONCTIONNEL
SOURCE : OUI
DIFFICULTE
MOYENNE
1
re
partie
Fig.1
[ ]
78-80 code sharp 20/05/2009 11:47 Page 78
Juin 2009 \\ PROgr ammez ! • 79
code \\ fonct ionnel
Les fonctions d'ordre supérieur
Une fonct ion d'or dr e supér ieur est une fonct ion qui pr end ou r et our -
ne une aut r e fonct ion en ar gument . Cela per met d'augment er r adi-
calement la génér icit é du code. Ce concept n'est aucunement lié à
la pr ogr ammat ion fonct ionnelle, mais son implément at ion est , une
fois de plus, plus concise que dans d'aut r es langages de pr ogr am-
mat ion comme nous allons le voir avec un exemple.
Supposons que nous souhait ons fair e des fonct ions de compar aison
qui s'appliquent sur une list e. Nous aimer ions pouvoir t r ier cet t e
list e par or dr e cr oissant , décr oissant , par or dr e de valeur absolue,
ou n’impor t e quel aut r e or dr e. Une possibilit é ser ait de définir une
mét hode pour chacune des fonct ions dont nous avons besoin. Cet t e
appr oche n'est évidemment pas génér ique et nous aur ions besoin
de beaucoup de code similair e.
Avec les fonct ions d'or dr e supér ieur, nous définissons une fonct ion
(disons f) qui va pr endr e en ar gument not r e fonct ion (disons t ) ainsi
qu'une list e d'élément s à t r ier (disons e). De cet t e manièr e, nous
pouvons envoyer n'impor t e quelle fonct ion de t r i t à f pour or donner
e. Voici la manièr e de pr océder en F# pour fair e une fonct ion qui t r ie
les élément s par or dr e de valeur absolue. Pour commencer, on défi-
nit t , not r e fonct ion de t r i. Cet t e fonct ion pr end en par amèt r e deux
ent ier s à compar er (appelés ici x et y) et r envoie 1, 0 ou -1 selon le
r ésult at de cet t e compar aison.
let t x y =
if abs x > abs y then -1
elif abs x = abs y then 0
else 1
Maint enant que not r e fonct ion t est définie, il nous faut une fonct ion
f qui pr end une fonct ion de t r i en par amèt r e et une list e à t r ier.
Cet t e fonct ion est déjà pr ésent e au sein de F#, List .sor t , nous ne la
r edéfinissons donc pas. L'appel se fait comme ceci
let l = List.sort t [-2; 5; -10; 7; 3]
printf "%A" l
> [-10; 7; 5; 3; -2]
Nous pouvons cr éer cet t e fonct ion d'or dr e supér ieur f. Par exemple,
pour en fair e une qui r et our ne la valeur absolue la plus élevée ent r e
deux ent ier s, nous faisons :
let f t x y =
if t x y < 0 then x
else y
La fonct ion f est donc une fonct ion d'or dr e supér ieur car elle pr end
t , une aut r e fonct ion, qui r et our ne une valeur de 1, 0 ou -1 selon
que le pr emier ar gument est soit plus pet it , égal, ou plus gr and que
le deuxième. L'appel se fait donc comme ceci :
let a = f t 4 -5
printf "%A" a
Et la fonct ion nous r et our ne -5 car c'est la valeur absolue la plus
gr ande ent r e 4 et -5. Cet t e not ion de passage de fonct ion n'est pas
spécifique à F# ni même aux langages de pr ogr ammat ion fonct ion-
nels, comme nous l'avons déjà dit ci-dessus.
A t it r e de compar aison, voici un code similair e fait en C# qui, lui,
n'est pas un langage fonct ionnel (mais objet uniquement ). Pr emièr e-
ment , une fonct ion qui compar e deux ent ier s comme dans le code
F# et qui r et our ne le plus gr and en valeur absolue
var t = new Comparison<int>((x, y) =>
{
if (Math.Abs(x) > Math.Abs(y)) return -1;
else if (Math.Abs(x) < Math.Abs(y)) return 1;
else return 0;
});
Pour t r ier la list e, nous appliquons not r e fonct ion sur la classe List ,
comme en F#, et les élément s sont t r iés :
List<int> l = new List<int> { -2, 5, -10, 7, 3 };
l.Sort(t);
> [-10; 7; 5; 3; -2]
Tout comme en F#, nous pouvons cr éer une fonct ion d'or dr e supé-
r ieur f, qui va donc pr endr e une fonct ion de t r i t en par amèt r e. Voici
comment pr océder :
int f(Comparison<int> t, int x, int y)
{
return t(x, y) < 0 ? x : y;
}
En t est ant avec :
f(t, 4, -5);
Nous obt enons comme dans le code F#, la valeur -5. Gr âce à cet
exemple, nous const at ons que le passage de fonct ion n'est pas
r éser vé aux langages fonct ionnels (d'aut r es langages, comme C++,
possèdent également les point eur s sur fonct ions). L'implément at ion
en F# a cependant l'avant age d'êt r e plus concise.
Les listes
Les list es dans un langage fonct ionnel sont omnipr ésent es et F# ne
dér oge pas à cet t e r ègle. Afin de cr éer une list e, le plus simple est
d’ut iliser les cr ochet s et sépar er les valeur s par des point s-vir gules :
let listA = [ 1; 2; 3 ]
Il est également possible d’ut iliser la mét hode cr eat e de l’objet
Ar r ay. L’exemple ci-dessous est équivalent à l’exemple pr écédent :
let arr = Array.create 3 1
arr.[1] <- 2
arr.[2] <- 3
F# donne aussi la possibilit é de définir une list e à par t ir de ces
bor nes infér ieur es et supér ieur es : on par le alor s de " r ange list "
let listB = [1..10]
Mieux encor e, on peut fair e des list es génér ées (gener at ed list ),
c'est -à-dir e que la list e ser a cr éée à par t ir d’une fonct ion. L’exemple
ci-dessous cr ée une list e cont enant le car r é des nombr es 1 à 10 :
let listC = [ for x in 1..10 -> x*x ]
On peut obt enir une list e en ext r ayant une sous-list e d’une aut r e list e :
let listD = listC.[0..2]
Enfin, on peut concat éner 2 list es via l’opér at eur @ :
let listE = listA @ listB
Donnez votre avis sur ce numéro www.programmez.com/ magazine_satisfaction.php
78-80 code sharp 20/05/2009 11:47 Page 79
Fonction map
Puisque les langages fonct ionnels ut ilisent t r ès souvent des list es, il
est donc int ér essant de pr ésent er la mét hode map. Cet t e der nièr e
applique une cer t aine fonct ion sur t ous les élément s d'une list e. Pr e-
nons comme exemple le code ci-dessous
let l = List.map (fun x -> x * x) [1 .. 10]
printf "%A" l
La mét hode map pr end deux par amèt r es : la fonct ion à appliquer sur
chaque élément de la list e d’une par t ainsi que la list e en quest ion
d’aut r e par t . Dans not r e cas, on passe une fonct ion qui élève la
valeur passée en par amèt r e au car r é (pr emier par amèt r e) et une
list e allant de 1 à 10 (deuxième par amèt r e). La mét hode map nous
r et our ne une list e cont enant les élément s de la list e passés en
deuxième par amèt r e élevé au car r é. Le pr emier ar gument qui se
char ge d’élever un élément au car r é ne por t e pas de nom et est donc
appelé fonct ion anonyme. La fonct ion anonyme est const r uit e gr âce
au mot -clé fun. Le r ésult at obt enu apr ès exécut ion est le suivant
> [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
Les tuples
Une des fonct ionnalit és pr at ique mais pas implément ée à ce jour en
C# est la possibilit é de fair e r et our ner plusieur s var iables à une
mét hode. F# le per met gr âce à l’ut ilisat ion des t uples, une fonct ion
peut ainsi r et our ner plusieur s r ésult at s. Par exemple
let rec f = fun x -> x, x*x
let a, b = f 2
printf "a = %i\nb = %i" a b
> a = 2
> b = 4
Le mot-clé mutable
En F#, lor sque nous assignons une valeur à une var iable à l'aide de
l’opér at eur d’assignat ion, il n'est plus possible d’en modifier la
valeur. Cependant , dans cer t ains cas, nous aimer ions passer out r e
ce compor t ement . C'est à ce moment qu’ent r e en jeu le mot -clé
mut able qui per met de sur passer cet t e r est r ict ion.
let mutable mut = "First value"
printfn "Current value '%s'" mut
(* Sans le mot-clé mutable lors de la définition,
cette affectation va créer une erreur de compilation *)
mut <- "Second value" // On utilise pas = mais <-
printfn "Current value '%s'" mut
> Current value 'First value'
> Current value 'Second value'
Puisque not r e var iable a ét é déclar ée avec le mot -clé mut able, nous
pouvons lui assigner une valeur apr ès l’init ialisat ion, mais en ut ilisant
le signe <- au lieu du t r adit ionnel =.
Les références
Une aut r e solut ion pour modifier la valeur d'une var iable consist e à
ut iliser les r éfér ences. Ce pr océdé peut êt r e compar é aux point eur s :
nous st ockons l'adr esse d'une valeur dans une var iable et en chan-
geant l'adr esse de celle-ci, nous la faisons point er sur une aut r e
code \\ fonct ionnel
80 • PROgr ammez ! \\ Juin 2009
valeur. Pour déclar er une var iable en t ant que point eur, il faut ut iliser
le mot -clé r ef ; le compilat eur s'occuper a aut omat iquement de t r ou-
ver de quel t ype il s'agit et ce t ype ne pour r a plus êt r e modifié par la
suit e. Par exemple, en déclar ant une r éfér ence sur une valeur de
t ype int , il faudr a t oujour s lui passer des adr esses qui point ent sur
des valeur s du même t ype sinon une er r eur ser a levée.
// Définition de la référence sur une valeur de type integer
let i = ref 1
printfn "i: %d" !i // Affiche 1
// Déréférencement avec l'opérateur !
i := !i + 1
printfn "i: %d" !i // Affiche 2
> i: 1
> i: 2
Le code ci-dessus nous mont r e que l’assignat ion d’une nouvelle valeur
à une var iable de t ype r éfér ence se fait avec l’opér at eur :=. Le dér éfé-
r encement de la var iable se fait quant à lui avec l’opér at eur unair e !
Pipeline
F# per met l’ut ilisat ion de pipeline gr âce à l’opér at eur |>. Un pipeline
per met d’envoyer le r ésult at d’une expr ession dans l’ent r ée de l’ex-
pr ession suivant e. L’exemple ut ilisé dans le par agr aphe sur la fonc-
t ion map peut alor s s’écr ir e comme suit
let l = [1..10]
|> List.map (fun x -> x*x)
printf "%A" l
> [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
Cet t e fonct ionnalit é per met de facilement chaîner les mét hodes et
r end la lect ur e du code plus aisée. Voici un aut r e exemple illust r ant
davant age l’ut ilit é des pipelines
let l = [1..10]
|> List.filter (fun x -> x % 2 = 0)
|> List.map (fun x -> x*x)
|> List.rev
printf "%A" l
> [100; 64; 36; 16; 4]
Sans les pipelines, nous aur ions dû écr ir e :
let l =
List.rev (
List.map(fun x -> x*x) (
List.filter (fun x -> x % 2 = 0) [1..10]
)
)
Nous pour suivr ons la découver t e de F# le mois pr ochain.
Mer ci à Damien DOLIGEZ de l’INRIA pour sa r elect ur e et ses conseils
■ Nicolas Bieder mann - MVP C#
ht t p://www.nicolasbieder mann.ch
■ Cyr il Dur and - MVP ASP.net
Consult ant indépendant
ht t p://blogs.developpeur.or g/Cyr il
78-80 code sharp 20/05/2009 11:47 Page 80
Juin 2009 \\ PROgr ammez ! • 81
ludique \\ applicat ions
Pondus
(www.ephys.de/ soft war e/ pondus)
Voici un gest ionnair e per sonnel de poids
(per sonal weight manager ), écr it en Pyt hon
et Gt k+2, placé sous la licence GPL. Son
usage est t r ès simple, et il est de sur cr oît
léger et r apide.
On peut y t r acer la cour be des données pour
obt enir un aper çu r apide de l’hist or ique de
son poids, les données ét ant st ockées sous
for me de fichier s XML pour un accès inst an-
t ané et une modificat ion avec d’aut r es pr o-
gr ammes. Il est si mpl e, en ef f et , et
l’inst allat ion n’est pas non plus t r op com-
plexe. Pondus vous per met de suivr e pas-à-
pas vot r e poids sur une longue pér iode et il
affiche vos pr ogr ès à l’aide d’un gr aphe. Il
peut également basculer ent r e des mesur es
mét r iques (" en mèt r es ") et des mesur es
impér iales (" Syst ème Impér ial Br it annique
de mesur e de poids ").
Inst allat ion. En t er mes de dépendances, il
vous faudr a disposer de l’inst allat ion de
quelques libr air ies Pyt hon avant de com-
mencer. A chaque fois que vous compilez
quelque chose, l’inst allat eur exiger a syst é-
mat iquement les fichier s de développement .
Alor s, assur ez-vous que vous inst allez les
fichier s pyt hon-dev en pr emier. Si vous r en-
cont r ez t ouj our s des pr obl èmes, une
r echer che sur Google per met t r a de t r ouver
cer t ains packages dont dépend Pondus :
• pyt hon 2.4.4-6
• pyt hon-gobject 2.14.1-1
• pyt hon-gt k2 2.12.1-1
• pyt hon-mat plot lib 0.90.1-2
• pyt hon-suppor t 0.7.6
Une fois le pr oblème des dépendances r éso-
lu, t éléchar gez le code sour ce du sit e web
du pr ojet , ext r ayez-en le cont enu et ouvr ez
un t er minal dans le nouveau r éper t oir e.
Comme r acine, ent r ez la commande :
# python setup.py install
Usage : Pondus est t r ès minimalist e, mais
ce n’est pas f or cément une mauvaise
chose. En t apant Pondus, vous ver r ez une
pet it e fenêt r e munie de cinq bout ons. Le
pr emier ajout e une ligne de données – celui
de vot r e poids et la dat e d’ent r ée.
Le second efface une ligne et le t r oisième
affiche une ligne de données. Une fois que
vous avez ent r é des poids et des dat es,
vous pouvez alor s les afficher sous la for me
d’un gr aphe en cliquant sur le quat r ième
bout on.
Si vous voul ez passer de l i vr es
(" pounds ") à kilogr ammes, le cinquième
bout on ouvr e la fenêt r e des " set t ings " et
vous per met de changer cela (c’est l’une
des deux seules opt ions, l’aut r e per met de
se r appeler de la t aille de la fenêt r e).
Gar der t r ace de vos pr ogr ès est cent r al
dans Pondus. Nous ar r ivons maint enant à
la sect ion gr aphique – le quat r ième bout on,
ou dessiner les données, Plot dat a. Cliquez
sur ce bout on, et une fenêt r e int it ulée Plot
Weight appar aît avec un gr aphique à ligne
net t e r epr ésent ant vot r e poids au cour s
d’une pér iode. Si vous r egar dez t out en bas
à dr oit e, il y a une boît e " glisser -déplacer "
(dr op-down box) avec All Time écr it à l’int é-
r ieur. Ceci vous per met de filt r er le r est e
des infor mat ions par r appor t à vos r ésult at s
de l’année pr écédent e, ou just e le mois der -
nier. Si vous voulez filt r er vot r e pér iode par
r appor t à quelque chose de plus spécifique,
il y a deux champs t out en bas à gauche
appelé Select Dat e Range.
Tapez la dat e de début que vous voulez voir
appar aît r e dans le pr emier champ et la dat e
de fin dans le second champ, cliquez sur
Updat e à l’ext r ême dr oit e, et le gr aphique
fer a la mise à jour avec les infor mat ions
sélect ionnées.
Pour ceux d’ent r e vous qui veulent enr egis-
t r er une copie de leur s pr ogr ès, en cliquant
sur le bout on Save Plot t out en bas, vous
pour r ez sauvegar der vot r e gr aphique dans
un fichier .png.
FoxyTag
(www.foxyt ag.com)
Voici un pr ojet dont j’ai hât e de voir le r ésult at :
un syst ème gr at uit d’aver t issement ant i-
r adar conçu pour fonct ionner sur une gr ande
var iét é de t éléphones por t ables et de GPS.
FoxyTag est un syst ème collabor at if conçu
pour incit er les ut ilisat eur s à par t ager des
données r adar – plus il y a d’ut ilisat eur s et de
feedback, plus le syst ème devient fiable.
FoxyTag, un syst ème populair e ant i-r adar
Le syst ème ne suppose pas simplement
qu’un r adar se t r ouve à un endr oit par t icu-
lier. Les ut ilisat eur s ont la possibilit é de
signaler la pr ésence per manent e d’un
r adar, de son inst allat ion ou de sa suppr es-
sion. Tout t éléphone por t able JAVA équipé
de MIDP 2 . 0 , CLDC 1 . 1 et Bluet oot h
devr ait êt r e compat ible. Pour les syst èmes
GPS, t out GPS Bluet oot h devr ait êt r e com-
pat ible (y compr is les modules GPS de cer -
t ains syst èmes de navigat ion),
■ Dr. Rodr igue Sabin Mompelat
Enseignant -Cher cheur
Ingénieur Logiciel - Copenhague - Danemar k
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.
2
e
partie
L’ador able minimalisme de Pondus et un exemple
de diagr amme pondér al.
81 20/05/2009 11:47 Page 81
livres \\ par Fr ançois Tonic
82 • PROgr ammez ! \\ Juin 2009
PARALLÉLISME
Programmation
concurrente en Java
Difficult é : * * * *
Edit eur : Pear son
Aut eur : Br ian Goet z
Pr ix : 39 €
La pr ogr ammat ion
concur r ent e est un
des défis majeur s des développeur s pour
par alléliser leur s codes. Plus que jamais, le
développeur doit connaît r e et maît r iser l’en-
semble des cont r aint es du par allélisme et la
concur r ence fait par t ie de ces pr oblèmes. Il
s’agir a t out d’abor d de définir le sujet et les
cont our s de la concur r ence. Puis on r ent r e-
r a dans le vif avec les élément s basiques à
maît r iser absolument : t hr ead safet y, par t a-
ge des objet s, la composit ion de ceux-ci…
Ensuit e, on at t aque la concur r ence : exécu-
t ion des t âches, leur s annulat ions et ar r êt s,
le pool de t hr ead… Au-delà de cela, se pose
la difficult é de st abilit é de la concur r ence
dans le code et la nécessit é d’avoir un code
opt imisé et r obust e, d’où l’impor t ance des
t est s. Et pour ceux qui pour suivr ont leur lec-
t ur e j usqu’ au bout , l ’ aut eur pr opose
quelques mor ceaux de choix : ver r ous expli-
cit es, synchr onisat ion non bloquant e. Par -
fois ar du, ce livr e nécessit e une bonne
connaissance de Java mais les pr incipes de
l a concur r ence peuvent s’appl i quer à
d’aut r es langages. De nombr eux codes, des
conseils émaillent les pages ! Incont our -
nable !
WEB
HTML,
le guide complet 3e édition
Difficult é : * *
Edit eur :
Micr o Applicat ion
Aut eur :
Fabr ice Lemainque
Pr ix : 22 €
HTML et ci e ne
sont pas mor t s.
La pr euve, avec la
3 e édit ion de ce
guide complet . Le but ici est d’expliquer le
langage et de r apidement pouvoir pr ogr am-
mer ses pr opr es sit es. L’aut eur y pr ésent e
les bases à connaît r e : les fonct ions, les
bal i ses, l e f onct i onnement de HTML,
xHTML, et c., la sécur it é, les données, et c.
Mais dynamisme oblige, les CSS et scr ipt s
ne sont pas oubliés. On r egr et t er a t out de
même l’absence de HTML 5.
WEB
Du web 2.0
au web 3.0
Difficult é : *
Edit eur : Eni édit ions
Aut eur :
Jean-Noël Ander r ut hy
Pr ix : 20,95 €
Eh oui, sans le savoir nous sommes déjà
passés au web 3.0, et on par le déjà du web
4.0 (100 % cloud). Le t it r e est t r ompeur
car en r éalit é, l’ouvr age abor de ce qui est
déjà là, t out un ensemble de ser vices, plus
ou moins " nouveaux " mais qui sont dans la
mouvance du web 2.
On par le de flux RSS, de widget s, de mobilit é
du web. Quelques élément s pour r aient êt r e
r eliés au " web 3 " même si dès maint enant ,
on peut les met t r e en œuvr e, par exemple
l a nouvel l e génér at i on de mot eur de
r echer che (t our né ver s le côt é sémant ique)
ou encor e HTML 5, les web slices… Une
gr osse par t ie est aussi consacr ée aux appli-
cat ions et document s en ligne, à la collabo-
r at ion, la car t ogr aphie. Le développeur
web ou t out e per sonne voulant se t enir
au cour ant , t r ouver a là un condensé des
possibilit és act uelles du web.
SGBD
SQL Server 2008
Difficult é : * *
Edit eur : Micr osoft Pr ess
Aut eur : Mike Hot ek
Pr ix : 39 €
Appr enez pas à pas
SQL Ser ver 2 0 0 8
avec un guide pr a-
t i que qui vous
explique comment met t r e en œuvr e des
bases de données pour r épondr e à des
besoins pr ofessionnels r éels. Tout y passe :
inst allat ion, configur at ion, cr éat ion de t able,
clust er, sécur isat ion, opt imisat ion et per for -
mance. Une cent aine de pages complémen-
t air es sur la Business Int elligence et de
nombr eux exemples de code sont dispo-
nibles dans la r ubr ique Supplément s en
ligne associée à cet ouvr age sur le sit e
dunod.com.
ORGANISATION
CobiT
Difficult é : * * / * * *
Edit eur : Eyr olles
Aut eur : collect if
Pr ix : 39 €
Référ ence incont our -
nable au sein de la
communaut é des
audi t eur s i nf or ma-
t iques depuis plus de dix ans, CobiT (Cont r ol
OBject ives for Infor mat ion and r elat ed Techno-
logy) est devenu un st andar d de la gouver nan-
ce des syst èmes d'infor mat ion. Les aut eur s
s’appuient sur la ver sion 4.1 de la mét hode.
La pr emièr e par t ie dr esse un panor ama des
différ ent s r éfér ent iels exist ant s, en décr ivant
leur s champs d'act ion et leur posit ionnement
vis-à-vis de CobiT. Dans la deuxième par t ie
sont dét aillés les 3 4 pr ocessus de CobiT
selon un plan st andar d, avec mise en lumièr e
de leur s for ces et faiblesses. Enfin, la t r oisiè-
me par t ie expose des cas pr at iques d'ut ilisa-
t ion et de déploiement , cor r espondant à un
vér it able mode d'emploi du r éfér ent iel.
LIVRE DU MOIS
Hello,
Android
Difficult é : * * / * * *
Edit eur : O’Reilly
Aut eur : Ed Bur net t e
Pr ix : 26 €
Vous r êvez de
développer pour
Andr oid, le nou-
veau syst ème en
vogue pour t éléphone ? Pour quoi ne pas
se lancer dans sa découver t e avec Hello,
Andr oid. L’aut eur plonge au cœur du kit
de développement et des API. On démar -
r e par l’inst allat ion des out ils et du SDK,
puis on fait le t our du pr opr iét air e et
not amment de l’émulat eur. L’aut eur abor -
de ensuit e les br iques fondament ales du
syst ème avec des fonct ions basiques
comme l’int er face (et le design à adopt er,
le mult imédia, les données locales, et c.).
Bien ent endu, pour le développeur qui
voudr ait aller plus loin, il exist e de nom-
br euses fonct ions avancées que l’on
r et r ouve dans ce livr e t elles que OpenGL,
la localisat ion. Dét ail int ér essant , on
r et r ouve les sous-ensembles du langage.
Plaisant à lir e et inst r uct if, un ouvr age
incont our nable sur Andr oid. En anglais.
82-120 20/05/2009 11:47 Page 82
01/02-83/84-120 20/05/2009 9:42 Page 3
01/02-83/84-120 20/05/2009 9:42 Page 4

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->