Vous êtes sur la page 1sur 84

01/02-83/84-116

22/01/2009

12:18

Page 1

PROGRAMMEZ !

Avant-premire : BizTalk Server 2009 p.22


Le magazine du dveloppement

PROgrammez !
www.programmez.com

mensuel n116 - fvrier 2009

Composants
Simplifiez-vous le code !
istockphoto, Carlos Alvarez

Construire des
interfaces 3D et
dynamiques
en quelques clics.
Les meilleurs
composants
pour Java,
PHP, Flex,
.Net !

p.30

Dveloppement web

Devenez
un expert

ASP.Net

Crez votre premier site en quelques clics


p.44
Boostez ASP.Net avec jQuery !
Dcouvrez toute la puissance de ASP.Net Dynamic Data

Programmation
multicore
Dcouvrez le tout nouveau

Intel Parallel
p.58
Studio

Java

p.14

Coder la vitesse
de la lumire avec

Eclipse !
Python 3.0
Toutes les
nouveauts

p.19

OpenOffice
victime de la crise ?

p.12

C++

Office

Web

Le nouveau standard C++ arrive


Ecrire des extensions Ruby en C++

Coder avec le nouveau


OpenXML SDK

Mettre en uvre jQuery

Jeux :

dvelopper son jeu avec XNA Game Studio

M 04319 - 116 - F: 5,95 E

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

Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH

01/02-83/84-116

22/01/2009

12:19

Page 2

Russissez tous vos projets


avec loutil de dveloppement
le plus productif du march*.
UN CODE PORTABLE:
Windows, .Net, Java, PHP, J2EE, XML,
Internet, Intranet, Pocket PC,
SmartPhone, Client riche ...

VERSION
EXPRESS
GRATUITE

Lien Google
Lien Salesforce
HyperFileSQL : full
text

ure e
t
r
e
Ouv bustessnit
Ro

DataBinding

ren ts
P
co

lit
es
i
d
ab
on
t
i
t
n
c
du
Re

Nouveaux
graphiques

curi
t

NOUVEAUTS

Mashup

Ges
au
tion
x
be
du
so
cha
nge ins
me
nt
S

501

Nouveau :

Ad
q
ua
tio
n

*: WINDEV a t lu Langage le plus productif du march par les lecteurs de la revue Programmez!, octobre 2008

Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.

Nouvelle version

Nouvelles tables
Robot de monitoring & surveillance
Accs Natif
PostgreSQL
Lien Silverlight 2
et Flex
PHP 5
214 Nouveauts
fonctionnelles
120 Nouvelles
fonctions
WLangage

Tlchargez-la !

62 Nouvelles
fonctions Java
32 Nouvelles
fonctions PHP
101 Nouvelles
fonctions LINUX

www.pcsoft.fr
DEMANDEZ LE DOSSIER GRATUIT : 244 pages +
DVD + Version Express incluse + 112 Tmoignages.
Tl: 04.67.032.032 ou 01.48.01.48.88 Mail: info@pcsoft.fr

Fournisseur Officiel de la
Prparation Olympique

03-05 edito sommaire116

22/01/2009

12:21

Page 3

Donnez votre avis sur ce numro www.programmez.com

PRO grammez !

sommaire\\

Le magazine du dveloppement

numro 116 - fvrier 2009


10

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

\\ vnement
Microsoft TechDays : des nouveauts et du concret ..............................10
Python 3 : volution en douceur ..........................................................19

\\ outils
Coder la vitesse de la pense avec Eclipse ..........................................14

\\ spcial Biztalk Server 2009,


larchitecture oriente dveloppeur
Les nouveauts de BizTalk 2009 ..........................................................23
Dbuter avec BizTalk Server 2009........................................................24

\\ dossier : Composants
simplifiez-vous le code !

30

De lintrt dune approche composant de larchitecture logicielle ............31


Comment les composants amliorent linterface utilisateur ! ....................32
Comment crer des interfaces dynamiques............................................35
Des composants MVC pour PHP 5 ......................................................38
Dcuplez la puissance de Flex ..............................................................40
Trouver les bons composants ..............................................................42

\\ dveloppement web
Dveloppez votre site web avec ASP.NET ! ............................................44
jQuery et ASP.NET : un jeu denfant ! ....................................................51
Dynamic Data : Dynamiser ASP.NET......................................................53

\\ carrire
Travailler en freelance (2e partie) ........................................................56

44

\\ code
Intel Parallel Studio : simplifier le dveloppement parallle ! ....................58
JQuery : lenfant terrible du web 2 ! ....................................................62
Manipuler les documents Office 2007 avec le SDK Open XML v2 ............65
A la dcouverte de Rebol (2e partie) ....................................................68
Ecrire des extensions au langage Ruby avec C++ ............................72
C++Ox, une rvolution dans le monde de C++ ........................................76

\\ temps libre

CD ROM

Crer un jeu vido de A Z avec XNA ..................................................80


Les livres du mois ..............................................................................82

Parallel Amplifier
permet de trouver les
goulots dtranglement et
de donner des lments
de rponse la question
cruciale du
dveloppement parallle :
est-ce que mon code
utilise au mieux les
ressources et le potentiel
de performance du
processeur multi-core ?

Intel Parallel
Studio beta
Bienvenue dans
lunivers parallle.
Intel Parallel Studio
Beta Version
http://www.intel.com/software/parallelstudio

2 0 0 9 , I nt e l

Corpo

ratio

n. A

ll ri

g ht

sr

es

er

ve

d.

Parallel Inspector
permet de trouver
rapidement et sans failles
les erreurs classiques et
difficiles dtecter du
multi-threading : les
race conditions et les
deadlocks . Inspector
intgre galement un
analyseur de mmoire
trs performant pour
dtecter les erreurs et les
fuites de mmoire.

INTEL PARALLEL STUDIO EST COMPATIBLE AVEC VISUAL STUDIO 2005 ET 2008.
LES 3

58

Parallel Composer
comprend un compilateur
haute performance
C/C++, compatible avec
le compilateur Microsoft
ainsi que la librairie
multimdia Intel
Performance Primitives
(IPP) et la librairie de
multi-threading
Threading Building
Blocks (TBB).

voir article page 58

MODULES PEUVENT TRE INSTALLS ENSEMBLE OU SPARMENT.

Enregistrement ncessaire pour obtenir la cl dactivation :


https://registrationcenter.intel.com/BetaCenter/BetaForm.aspx?ProductID=1261&ProgramID=Programmez

03-05 edito sommaire116

22/01/2009

12:21

Page 4

Pour de plus amples infos: infragistics.com


Appelez ds aujourdhui
0800 667 307
Four Platforms. One Package.

Copyright 1996-2009 Infragistics, Inc. All rights reserved. Infragistics, the Infragistics logo and NetAdvantage are registered trademarks of Infragistics, Inc. Aikido and WebDataGrid are trademarks of Infragistics. All other trademarks or registered trademarks are the respective property of their owners. Patents pending.

03-05 edito sommaire116

22/01/2009

12:21

Page 5

PRO grammez !

dito\\

Le magazine du dveloppement

Quand les erreurs


deviennent des fautes
Un rapport explosif rdig par 30 organisations *,
pointe du doigt 25 erreurs de codage. Deux
dentre elles sont cause du piratage de plus d1,5
million de sites web et de plusieurs millions de PC zombies, chez les
utilisateurs de ces sites. Ces simples erreurs sont donc de vritables fautes ! Le rapport conclut en recommandant aux acheteurs
de logiciels dexiger de lditeur une garantie de la qualit du code,
et de " certifier que le code quil fournit ne comporte aucune des
25 erreurs de programmation ". Lditeur aurait la " responsabilit
de corriger ces erreurs et de supporter les dommages quelles
auraient causs ". Il prvoit lusage systmatique de logiciels de test
et ltude dans les coles dinformatique de ces erreurs.
Les grands classiques restent pourtant les mmes : injection SQL
ou de code, mauvais contrle des entres (par exemple sur un
champ), etc. Or pour le dveloppeur, ces oublis peuvent tre facilement corrigs sans que cela cote cher en temps, ou impacte rellement lensemble de lapplication. Mais encore faut-il y penser !
Et si dans certains cas les erreurs de programmation dcoulaient
de problmes de comprhension de ce langage technique omniprsent, qui mle le jargon et langlais ? Array, DSL, pattern,
anti pattern, Ajax, classes partielles, cross compilation, cloud
computing, SaaS, compilation dporte, remote debug, accessibilit, etc. Cest parfois une langue trangre pour le dveloppeur
non aguerri !
Dailleurs, nous nous posons la question, la rdaction de
Programmez, en crivant ou relisant les articles : faut-il traduire,
ou dcoder ?
Nous avons assist rcemment une runion autour de Visual
Studio. Et un des points, longuement abord, fut la traduction des
termes de lenvironnement de dveloppement en franais. Faut-il
tout prix tout traduire, ou bien mixer franais et anglais ? Car si de
nombreux dveloppeurs avancs privilgient les outils en anglais, la
majorit cependant prfre la version franaise, ce qui est lgitime.
Mais encore faut-il viter de donner une mauvaise traduction et
surtout de changer la terminologie dune version une autre !
Cest pour cela que les diteurs emploient des terminologues et
essaient dimpliquer les communauts dans cette rflexion.
Quelques exemples tout btes : faut-il traduire " Template " ?
Comment traduire " work item " ? Faut-il systmatiquement traduire
les Menus, au risque quand on scripte son outil, dtre incompatible
avec une version non franaise car nutilisant pas les mmes
termes de menu ?
Autre point dlicat, donner une unique dfinition pour un terme ou
tout du moins la mme approche. Ainsi, dans le monde des services en ligne, hbergs (SaaS pour faire court), ou dans lapproche
du " nuage informatique ", chaque diteur y met un peu ce quil veut.
Il existe l deux modes de lecture : une lecture marketing que lditeur veut faire passer, et une lecture technique quand elle existe !
Bon dchiffrement !
FRANOIS TONIC

ET

JEAN KAMINSKY

* http://www.programmez.com/actualites.php?titre_actu=Les-25-pires-erreurs-deprogrammation-selon-la-NSA&id_actu=4166
http://www.sans.org/top25errors/?utm_source=web&utm_medium=text-ad&utm_
content=Announcement_Bar_20090111&utm_campaign=Top25&ref=37029

Rdaction : redaction@programmez.com
Directeur de la Rdaction : Jean Kaminsky
Rdacteur en Chef :
Franois Tonic - ftonic@programmez.com
Ont collabor : F. Mazu, C.Remy, Y. Biet.
Experts : N. Bros, O. Lauzanne, E. Coirier, D. Nolting,
R. Baduel, C. Manoliu, G. Harrath, J. Revel, J. Pic,
D. Rethana, R. Benedetti, L. Bar, L. Capin, A. Boufous,
L.Lefort, R. de Wargny, S.Saurel. J. Chable, F. Pedro, N. Gryman.
Crdits photo : istockphoto, Carlos Alvarez
Franois Cointe " Architectures Orientes Sevices "
Publicit : Rgie publicitaire, K-Now sarl
Pour la publicit uniquement :
Tl. : 01 41 77 16 03 - diff@programmez.com
Editeur : Go-02 sarl, 6 rue Bezout
75014 Paris - diff@programmez.com
Dpt lgal : parution - Commission
paritaire : 0712K78366 ISSN : 1627-0908
Imprimeur : ETC - 76198 Yvetot
Directeur de la publication : J-C Vaudecrane
Ce numro comporte 1 cd rom
Abonnement : Programmez 22, rue Ren Boulanger,
75472 Paris Cedex 10 - abonnements .programmez@groupe-gli.com Tl. : 01 55 56 70 55 - Fax : 01 55
56 70 20 - du lundi au jeudi de 9h30 12h30 et de
13h30 17h00, le vendredi de 9h00 12h00 et de
14h00 16h30. Tarifs abonnement (magazine
seul) : 1 an - 11 numros France mtropolitaine :
45 - Etudiant : 39 - CEE et Suisse : 51,83
Algrie, Maroc, Tunisie : 55,95 Canada :
64,33 Tom : 79,61 - Dom : 62,84 Autres
pays : nous consulter. PDF : 30 (Monde Entier)
souscription en ligne.

LINFO
PERMANENTE
WWW.PROGRAMMEZ.COM

PROCHAIN
NUMRO
N117 mars 2009,
parution 28 fvrier

SGBD

Scurit, optimisation,
performance, mapping !

Hacking :

haro sur le code !


Comment renforcer,
optimiser le code ?

Comment choisir son


framework Ajax,
Prparez-vous
Windows 7

06-07

22/01/2009

12:25

MICR0808003-420x285
MICR0808003
420 285 ARENA 1

Page 6

06-07

22/01/2009

12:25

Page 7

3/10/08 14:45:04
14 45 04

08-09

22/01/2009

12:27

Page 8

actu \\ en bref
Avec Windows 7, Microsoft veut amliorer la consommation et la gestion de lnergie sur portable (netbook / notebook). Cela
passera par la disponibilit de nouvelles API
et une gestion trs fine de lactivation ou de la
mise en sommeil dun ou plusieurs curs du
processeur.
Perforce amliore encore la gestion des
projets et des sources avec la version
2008.2 de Perforce SCM, le systme de
configuration logicielle. Il est maintenant possible de voir la propagation de modifications
entre deux branches, pratique pour se
rendre compte de limpact dune intgration.
Autre nouveaut : la possibilit de dfinir rapidement une tche. On notera aussi une fonction intressante : dcouverte du rseau. Le
tableau de bord a aussi t amlior. Site :
www.perforce.com

Mobile

Palm Pr : la bonne rponse ?


Le constructeur du fameux Palm Pilot est-il sur le point de
renatre ? Aprs plusieurs annes trs difficiles et une concurrence froce, Palm a dvoil son nouveau produit : Palm Pr.
Sans vouloir clner le iPhone dApple, le Pr tente au contraire
dtre une alternative avec ses propres caractristiques. Dot
dun design russi, il fonctionne sur un systme Linux, le webOS.
Nous ne connaissons pas encore lensemble des dtails fonctionnels, ni le prix, ni la date exacte de disponibilit. Sur le SDK,
lheure o nous crivons ces lignes, peu dinformations circulent.
Nous savons que le SDK fonctionne sur Mac et aussi sur Windows. On disposerait dun runtime dexcution lintrieur dun
navigateur. Nous savons tout de mme que le kit de dveloppement est Palm Mojo Application Framework et le Palm Mojo
SDK. Les applications du Pr seront surtout des applications web utilisant HTML, CSS et
javascript, sans oublier JSON. Le stockage se fera via les capacits de stockage de
HTML5. Actuellement ce SDK est en pr-bta priv.

DeviceAnywhere renforce sa prsence


franaise avec louverture dun Datacenter de
test, Paris. La socit se spcialisant sur le
test applicatif sur terminaux mobiles, plus de
150 modles sont disponibles.
Symantec renforce la disponibilit et la
reprise dactivit en environnement VMware.
Cette annonce fait suite au rachat de Veritas.
Veritas Cluster Server de Symantec est une
solution complmentaire aux solutions VMware et permet de protger les applications critiques contre des arrts non planifis.
Quest Software lance PowerGUI 2.0
pour VMware. Il sagit dune bibliothque de
scripts PowerShell pour ladministration des
environnements virtualiss. Cette version
sintgre au SDK de Vmware, permet la cration de rapports ou encore la gestion des
sessions. Disponible gratuitement :
www.powergui.org
Le cityguide Qype lance sa nouvelle API
permettant dexploiter les donnes du site.
Elle sappuie sur http, XML et RESTful. Parmi
les fonctions disponibles : recherche dans
une ville, afficher des dtails (adresse, photos). Pour y accder, il est ncessaire de
possder une cl. Site : http://www.qype.fr/developers/api
Les utilisateurs MySQL ont leur club utilisateur et surtout un site web : lemurg.fr. Lassociation a pour but de promotionner MySQL,
de runir les utilisateurs, de participer aux
dveloppements du SGBD.

PROgrammez ! \\ Fvrier 2009

Web

Google prpare
Chrome 2
Lditeur avance rapidement sur son
navigateur intgr, Chrome. Cest
dsormais la v2 qui est activement en
prparation. Pour pouvoir tester Chrome 2, il faut donc mettre jour son Chrome via le Chrome Channel Changer. Il permet daccder aux diffrents canaux de mise jour : stables, bta, prversion
technique. Il suffit de slectionner le canal puis de mettre jour.
Cette version intgre les dernires volutions de webkit (moteur de rendu) avec un
nouveau mcanisme de zoom et lautoscroll. Le navigateur inaugure aussi sa propre
implmentation http en lieu et place de Winhttp. Autre bonne nouvelle, le passage
des tests Acid3. Chrome 2 permet aussi de crer diffrents profils (permettant de
partager la mme instance de navigateur entre plusieurs utilisateurs). Il ne reste
plus qu sortir les versions Mac et Linux !

agenda \\
FEVRIER
Jeudi 05 fvrier 2009, Paris 8e
Cocktail JAVA EE5, JAVA EE6,
GLASSFISH
Assistez une prsentation gratuite anime par
Alexis Moussine-Pouchkine Java Web Services
Architect Ambassador - Sun Microsystems.
http://www.demos.fr/espace-metier/informatique/
actualites/Pages/cocktail-java-glassfish.aspx
Du 10 au 12 fvrier 2009, Paris 17 e Palais des
congrs. Microsoft TechDays 2009, le
rendez-vous incontournable des professionnels de
linformatique.
http://www.microsoft.com/france/mstechdays/

Mercredi 11 fvrier 2009, Lille Salle du Gymnase


Place Sbastopol. Salon Les jeudis
http://www.lesjeudis.com/salons-informatiques/
Le Jeudi 12 fvrier 2009, Paris, Porte dItalie
Symposium vie prive et scurit sur
internet, organis par lEpitech. www.epitech.eu
MARS
Du 31 mars au 2 avril, Paris Expo Porte de Versailles. RTS Embedded Systems 2009
http://2009.salon-rts.fr/
Du 31 Mars au 2 avril, Paris Expo Porte de Versailles, Solutions Linux Open Source, 10e
dition de lvnement europen de rfrence sur le
march Linux et du logiciel libre. http://www.solutionslinux.fr/main.php

22/01/2009

12:27

Page 9

actu \\ en bref
Systme

Mthode

25 erreurs de dveloppement ne pas faire ! Les kits Azure mis jour


Que font des dizaines dexperts amricains et europens quand ils parlent
programmation ? Ils tablissent la liste
des 25 erreurs de programmation les
plus dangereuses, viter absolument !
La liste des consultants est impressionnante : Symantec, Microsoft,
NSA, EMC, etc. Lobjectif est de sensibiliser les dveloppeurs mieux scuriser leur code et donc les applications.
Ces erreurs se rpartissent en trois
grandes catgories : linscurit des
interactions entre les composants, les
risques de gestion des ressources et
la dfense poreuse
Dans la premire catgorie, nous
retrouvons des failles classiques du
dveloppement que lon rencontre malheureusement encore bien trop souvent : mauvaise validation des entres,
mauvaise sortie, injection SQL, cross
site scripting, injection de commande
systme, transmission en clair dinfor-

mations sensibles. Dans la partie ressource, nous retrouvons des erreurs


sur la gestion de la mmoire buffer, le
contrle (externe) des noms de fichier
ou du chemin daccs, linjection de
code. Enfin dans la 3e section, nous
sommes plus dans ladministration et
la scurit comme un contrle daccs
non conforme, un algorithme de cryptage cass mais tout de mme
employ, excution avec des privilges
non ncessaires. Pour chaque erreur,
les auteurs dcrivent le problme,
notent la criticit, le cot de correction, le niveau des attaques Et ils
dcortiquent point par point ce quimplique lerreur au niveau design et
architecture du code avant de proposer des solutions et des conseils.
Nous vous suggrons vivement de lire
et relire cette analyse que tout dveloppeur devrait avoir prs de son clavier !
Site : http://www.sans.org/top25errors/

Microsoft continue de dvelopper sa plate-forme Windows Azure. Aujourd'hui, l'diteur rend disponible une
nouvelle CTP (pr-version technique) : la CTP de janvier
2009. Elle contient les outils, les API ncessaires au
dveloppement d'applications pour Azure. Mais pour
dvelopper, il faut aussi avoir un IDE. On dispose galement d'une nouvelle CTP de Azure Tools for Microsoft
Visual Studio January CTP. Cette version comporte :
des corrections de bugs, le support du debug pour Silverlight des messages d'erreurs en cas de problmes
sur le Service Configuration et le Service Definition,
ainsi quune meilleure intgration avec la partie stockage. Pour accder Azure et surtout au portail dveloppeur des Azure Services, vous devez disposer dun
compte Live ID. Il permet dy dployer ses services.
Site : http://www.microsoft.com/azure/windowsazure.mspx

9782100524471 720 pages

9782100521746 352 pages

39

9782100525379 352 pages

29,90

9782100519811 592 pages

45

45

Tous nos ouvrages sont adapts en franais et disponibles en librairie.

08-09

22/01/2009

12:29

Page 10

vnements \\ salon

Microsoft TechDays :
des nouveauts
et du concret
Du 10 au 12 fvrier se tiendront les
TechDays de Microsoft Paris. Comme
les annes prcdentes, la premire
journe sera trs oriente dveloppeur, la
seconde plus entreprise et la troisime
avec une dominante scurit. Toutefois,
cette rpartition sera en grande partie
estompe car de nombreuses sessions
mleront dveloppement et approche
entreprise. Sur la partie purement
scurit, plus de 20 sessions sont
prvues ainsi que sur larchitecture.
Le futur immdiat
et le prsent
Un des axes du salon sera de prsenter et dexpliquer lensemble des nouveauts qui vont apparatre dici 12
mois : Windows 7, Windows Azure
(et le cloud en gnral), le multitouch
et toute la partie .Net 4, Visual Studio
2010. Mais la majorit des sessions
dveloppeurs se focaliseront sur les
technologies et outils actuels (.Net
3.5 SP1, Visual Studio 2008, SQL
Server, Biztalk). Un des fils rouges
retenu concerne lindustrialisation du
logiciel, notamment via Team Foundation, les DSL et ladoption dUML.
Le dveloppement web sera particulirement prsent avec RIA, Silverlight, Expression Web. Mais si les
technologies Microsoft sont bien
entendues trs prsentes, lopen
source nest pas oubli. Comme dans
ldition 2008, des diteurs libres
seront prsents sur scne, pour des
sessions ou sur les stands. On peut
ainsi noter une session PHP sur
plate-forme Windows. Parmi les
chantres de lopen source, citons la
prsence de Novell (virtualisation et
Mono) et de Sun. Pour grer en interne lensemble des contraintes (salles,
disponibilits, intervenants, etc.), un
projet spcifique a t dvelopp pour
concevoir un moteur de rgles, le

10

PROgrammez ! \\ Fvrier 2009

plus efficace possible. Pour cela,


Microsoft France a utilis le langage
F# qui sera expliqu durant ces 3
jours Ct frquentation, lditeur
espre arriver aux mmes chiffres
quen 2008, savoir environ 11 000
visiteurs uniques et 16 000 en tout
sur les trois journes. Cette anne,
les stands communautaires, Microsoft et les partenaires seront mieux
regroups et dispatchs entre les diffrents villages pour viter disoler les
sections comme ce fut le cas en
2008. Les dveloppeurs, et les
autres, pourront rencontrer des
experts (Microsoft et partenaires)
autour des Ask Me Expert.

Une Surface
en fer et en " toucher "
Une des attractions attendues du
salon est la prsence durant la keynote
dveloppeur et sur le stand de la
socit Wygwam dune Surface, la
" table " multitouch de Microsoft, sortie
officiellement lan dernier. Wygwam
est lune des trois socits retenues
par lditeur pour travailler sur la
technologie Sur face en France.
Comme nous a confi Gregory
Renard, le but est de permettre aux
visiteurs de toucher, dessayer, de voir
les relles capacits de Surface avec
des applications pr-installes. Ainsi,

CodeFluent 2009
lanc aux TechDays
Le Franais Softfluent sortira la
version 2009 de sa fabrique logicielle, CodeFluent durant le salon
vnement Microsoft. Version
majeure, elle intgre de nombreuses nouveauts : gnration
dinterface Sharepoint, services de
synchronisation avec Access, support de " Search " dans le langage
interne CFQL (recherche multicritre), modlisation dynamique
pour implmenter les patterns.
Ct base de donnes, une des
grosses nouveauts est le support
de SQL Server 2008 et de Linq to
SQL. Le retour des utilisateurs a
aussi permis lditeur daffiner
linterface et lergonomie de loutil.
Pour en savoir plus : http://www.softfluent.com/news/codefluent-2009-arrive-.aspx
on pourra " jouer " avec Virtual Earth.
On sattend aussi quelques belles
surprises durant les diffrentes
keynotes

Au-del de fvrier
Dautres vnements se drouleront
durant le premier semestre 2009.
Notons les deux principaux : un tour
de France avec les Microsoft Days et
sans doute une nouvelle dition de
(Re)Mix Paris une date et un
format non dfinis pour le moment.

Logiciel professionnel Document non contractuel Support technique gratuit: 15 requtes sur la version en cours de commercialisation

10-11

10-11

22/01/2009

12:29

Page 11

PLATEFORME PROFESSIONNELLE
DE DVELOPPEMENT (AGL)
Internet, Intranet, WEB 2.0, RAD PHP
Lien toutes les bases de donnes

NOUVELLE VERSION 14

WEB 2.0
Ajax en 1 clic
avec WEBDEV

x est
a
j
A
i
Ic
tivWEBDEV 14 permet de dvelopper jusqu
dsac

Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.

Sous lditeur
de code de
WEBDEV :
un clic et le
traitement
programm
devient Ajax

10 fois plus vite tous les types de sites et


dapplications relis aux donnes de votre
entreprise. L'activation dAJAX seffectue
naturellement: un simple clic indique que le
code effectuer est de
type Ajax. WEBDEV
14 est certainement le
t
e
,
seul environnement au
c
i
Un cl actif monde proposer
st
autant de souplesse et
Ajax e
de puissance.
AGL complet, langage
L5G, RAD PHP, dbogueur, Web Services,
gestionnaire de sources, installateur, base de donnes SQL intgre et lien avec toutes les
bases du march, composants, diteur dtats PDF et code-barres, rgles mtier, dossier,
outils dadministration...: tout est inclus, en franais.
Vous aussi ralisez vos sites WEB 2.0 10 fois plus vite... avec WEBDEV 14

WEBDEV 14
est compatible
avec
WINDEV 14

(logiciel professionnel, dossier gratuit sur simple demande)

Un des nombreux
exemples livrs avec
WEBDEV : portail
Intranet Honolulu,
tlcharger gratuitement (sur pcsoft.fr).

www.pcsoft.fr

info@pcsoft.fr

Dossier technique et tmoignages sur simple demande


Tl Province 04.67.032.032 Tl Paris 01.48.01.48.88

U N C O D E M U LT I - P L AT E F O R M E : W I N D O W S , W E B , M O B I L E

Fournisseur Officiel de la
Prparation Olympique

22/01/2009

17:21

Page 12

actu \\ enqute
Open Source

La polmique autour dOpenOffice


cache-t-elle une crise de dveloppeurs ?

Photo prise lors


de la confrence
OpenOffice.org 2007
par Guy Lunardi
epuis quelques semaines,
une polmique secoue une
partie des communauts
Open Source. La premire pierre fut
jete par un dveloppeur trs actif sur
OpenOffice, Michael Meeks, sur son
blog. Aprs avoir vrifi les chiffres et
fait des statistiques sur le projet, un
constat simpose : OpenOffice est pro-

fondment malade ! Car pour Meeks,


il y a pril. Il met en exergue le faible
nombre de dveloppeurs " permanents " (dveloppeurs actifs) pour
maintenir et dvelopper la suite
bureautique. A la mi 2008, 24 dveloppeurs dont la quasi totalit venant
de Sun ! A la mme poque en 2007,
il y avait presque 60 dveloppeurs
dont une quarantaine de Sun ! Malgr
tout la situation se tenait, tant que les
contributeurs extrieurs continuaient
crotre, ou rester stables, ce qui
nest plus le cas. Michael compare
leur effectif celui des contributeurs
actifs du noyau Linux, qui reste
important : en 2008, les chiffres
rassembls par Meeks indiquent plus
de 250 dveloppeurs soit 10 fois
plus que pour la suite bureautique.
Mme si aux priodes creuses, Linux
Kernel se contente d peine 160 personnes
Ce nest pas la premire fois que lon
pointe le problme de la communaut
des contributeurs de la suite. Meeks

Cherche contributeurs dsesprment ?


Cyril Lavier (contributeur actif dUbuntu)
apporte son clairage sur la situation : " De
mon point de vue, la baisse des contributeurs
dveloppeurs est visible, plusieurs projets
auxquels je contribuais (principalement au
niveau de la traduction franaise, ndlr) ont
fait une pause sur leur dveloppement.
Cependant, je n'estime pas que la crise ou le
dsengagement des entreprises soient les
deux seules causes. Il s'avre que beaucoup
de ces projets sont grs par des tudiants
ou des jeunes adultes (frachement arrivs
dans la vie active), donc durant leurs tudes
et le dbut de leur travail, ces personnes ont
encore assez de temps consacrer leurs
projets libres, ds qu'ils finissent leurs
tudes, ou voluent dans leur emploi (et dans
leur vie personnelle), le temps libre se rduit
considrablement. J'ai connu cette situation.
l'heure actuelle, j'ai moins de temps libre

pour contribuer qu'en 2006-2007, quand


j'tais encore tudiant et ensuite, jeune arriv
dans la vie active. "

LOpen Source profite de la crise


Tristan Nitot relativise les risques dune perte
de contributeurs: "Il est certain que la rduction d'effectifs qui touche l'ensemble des
industries, y compris le logiciel, aura un
impact ngatif sur l'emploi des ingnieurs
travaillant sur du logiciel libre, mme si
Mozilla continue d'embaucher. Pourtant,
nombreux sont ceux qui recommandent aux
informaticiens qui perdent leur emploi de
contribuer un logiciel libre pendant leur
recherche d'emploi. En effet, c'est une faon
de cultiver ses comptences, d'en rajouter
de nouvelles et aussi de gagner en visibilit. A
ce titre, je pense que la crise est neutre pour
le logiciel libre."

propose comme solutions possibles


de changer la gouvernance actuelle et
de sloigner de Sun, le projet tant
toujours trs li lditeur. Une charge contre Sun ? Meeks conclut sa
dmonstration ainsi : "Pourquoi mon
bug nest pas corrig ? Pourquoi linterface est-elle dplaisante ? Pourquoi
les performances sont-elles pauvres ?
Pourquoi le projet consomme-t-il plus
de mmoire que ncessaire ? Pourquoi est-il lent dmarrer ? ".

Sun critiqu
Certains commentateurs voulant garder lanonymat nous ont voqu une
possible manipulation, derrire cette
attaque. Novell, qui emploie Meeks,
est dailleurs critiqu par une partie
de la communaut (http://boycottnovell.
com/2009/01/09/interview-with-charles-hschulz/) pour ses positions et dveloppements envers OpenOffice et par
rapport au projet Go-OO et le partenariat tiss avec Microsoft, notamment
envers OpenXML. Meeks avait en
juillet 2008 lan nos confrres
derStandard.at que si Sun sortait
dOpenOffice.org cela ne pourrait tre
(entirement) une chose ngative
(http://derstandard.at/druck/?id=12169178
92794)
Cependant, Sun a raffirm ds minovembre 2008 la continuit de son
soutien au dveloppement dOpenOffice.
A lheure o nous mettons sous presse nous navions pas encore reu la
position officielle de Sun par rapport
aux chiffres avancs par Meeks.
Mme si cela se rvle un coup
dpe dans leau, cette polmique
montre les luttes dinfluences et les
risques de retrait dun cer tain
nombre de dveloppeurs pays par
des entreprises pour collaborer, dvelopper dans des projets open source !
A lire : http://www.gnome.org/~michael/
blog/ooo-commit-stats-2008.html
Franois Tonic

12

PROgrammez ! \\ Fvrier 2009

Logiciel professionnel Document non contractuel Support technique gratuit: 15 requtes sur la version en cours de commercialisation

12-13

12-13

22/01/2009

17:21

Page 13

NOUVELLE VERSION 14

PLATEFORME PROFESSIONNELLE
DE DVELOPPEMENT (AGL)
Pocket PC, Smartphone, Terminal
Windows CE, Windows Mobile

Mobiles : dveloppez
10 fois plus vite

VERSION
EXPRESS
GRATUITE
Tlchargez-la !

Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.

avec WINDEV Mobile

Les codesbarres sont


grs en
standard

WINDEV Mobile 14 permet de dvelopper jusqu 10 fois


plus vite les applications sur mobile dont votre entreprise et
vos clients ont besoin: gestion de stock, force commerciale,
golocalisation, saisies mdicales, expertises, relevs de terrain, prise de
commande temps rel, rglage de chane, ...
La puissance et la facilit de dveloppement de WINDEV Mobile 14 permettent un dveloppement en quelques journes.
Dploiement gratuit sans redevances (base de donnes incluse), rplication, WiFi, 3G, Internet, lien avec votre S.I., ...
Vous aussi ralisez vos applications mobiles 10 fois plus vite... avec
WINDEV Mobile 14

WINDEV
Mobile 14
est compatible
avec
WINDEV 14 et
WEBDEV 14

(Logiciel professionnel, dossier gratuit sur simple demande. Version Express gratuite en tlchargement libre sur www.pcsoft.fr)

Dossier technique et tmoignages sur simple demande

U N C O D E M U LT I - P L AT E F O R M E : W I N D O W S , W E B , M O B I L E
Tl Province 04.67.032.032 Tl Paris 01.48.01.48.88

F
P

www.pcsoft.fr

14-18

22/01/2009

12:32

Page 14

outils \\ java

Coder la vitesse
de la pense avec Eclipse !
Eclipse 3.4 propose de nombreuses fonctionnalits avances pour lcriture de code
Java. Nous allons voir dans cet article comment tirer parti de ces astuces pour amliorer
la vitesse du dveloppement.
Compltion
Tapez les premires lettres dun nom de classe, de champ ou de
mthode, et invoquez la compltion par la combinaison de touches
Ctrl+Espace (1). Eclipse propose alors une liste des lments
commenant par le prfixe donn, tris par pertinence. Slectionnez llment souhait dans cette liste pour linsrer, et si cest une
classe, rajoutez automatiquement la directive dimport correspondante. La compltion fonctionne aussi partir des initiales du nom
en CamelCase (2), ou des premires lettres de chaque groupe.
Par exemple, invoquer la compltion sur le prfixe CNFE ou
ClaNFExc propose ClassNotFoundException . [Fig.1]
Il est mme possible de demander la compltion pour les noms de
variables dans les dclarations. Par exemple, aprs FileWriter ,
la compltion propose fileWriter et writer comme noms de
variables. Si vous avez des conventions diffrentes, par exemple si
vous prfixez tous vos champs par f , vous pouvez le prciser
dans la page de prfrence Java > Code Style , et Eclipse en tiendra compte. [Fig.2] Pour crer automatiquement le corps dune classe anonyme avec le squelette de toutes les mthodes
implmenter, positionnez le curseur entre les parenthses dun
constructeur (par exemple new ActionListener() ), et invoquez la
compltion. Pour crer automatiquement vos getters et setters,
tapez get ou set et invoquez la compltion.
On dispose aussi de templates de code dans Eclipse. Par exemple,
tapez main suivi de la combinaison de touches Ctrl+Espace
pour insrer le code suivant :
public static void main(String[] args) {
}

(1) Tous les raccourcis


clavier sont redfinissables
dans Eclipse, dans la page
de prfrence " General >
Keys ".

Il existe des templates prdfinis pour la plupart des formes syntaxiques de Java. Il est aussi possible de dfinir ses propres templates : ouvrir les prfrences dEclipse, et aller dans la page Java
> Editor > Templates . Ceci permet de se dfinir des templates spcifiques, qui pourront ensuite tre exports et partags par les
membres dune quipe.

Quick fixes
Eclipse dtecte automatiquement les erreurs pendant la frappe, et
propose un mcanisme pour les corriger automatiquement. Ce
mcanisme porte le nom de quick fixes . Pour invoquer un quick
fix, positionnez le curseur texte lendroit de lerreur, et effectuez la
combinaison de touches Ctrl+1 (ou Ctrl+& sur un clavier
AZERTY). Eclipse affiche alors une liste dactions possibles pour corriger lerreur.
Par exemple, supposons que vous ayez dfini une classe Dimension ,
et que vous criviez dans votre code dimension.resize(1,2); .
Comme la mthode resize nest pas encore dfinie, ceci provoque une erreur quEclipse peut corriger par un quick fix qui va
crer dans la classe Dimension une mthode resize publique
prenant deux entiers en paramtres. [Fig.3]
Cest aussi un excellent outil pour crire du code rapidement. Pour
ceci, il peut tre utile domettre certaines parties du code, puis dinvoquer les quick fixes pour les insrer. Par exemple, tapez une
expression, puis utilisez le quickfix Assign statement to new local
variable pour dclarer une variable locale prenant comme valeur
lexpression. Eclipse infre alors le type de lexpression et un nom
pour la variable, qui se rvle judicieux la plupart du temps. [Fig.4]
Eclipse propose ainsi prs de 60 quick fixes (3) rien que pour le code
Java dans la version 3.4 (Ganymede). Il est aussi possible de dfinir

Fig.1

Fig.3

Fig.2

Fig.4

(2) Noms accols sans


espace, chacun
commenant par une
majuscule.

14

Suite page 18
PROgrammez ! \\ Fvrier 2009

15

22/01/2009

15:54

Page 15

actu \\ en bref
Librairie

Qt 4.5 avance et change de licence

Le rachat de Trolltech par Nokia modifie la stratgie de Qt.


Dsormais, la librairie C++ pour crer des interfaces graphiques
multi plates- formes sera disponible en licence LGPL 2.1 avec la
sortie de Qt 4.5 (mars prochain). La licence GPL est garde.
Dautre part, le source de Qt sera publique aussi bien pour la
partie desktop quembarqu ! Lditeur souhaite inciter les dveloppeurs contribuer sur les librairies. Le changement de licence
sexplique parfaitement ! Dautre part, une licence commerciale
sera aussi disponible, comme cest le cas actuellement. Pour
Nokia, il sagit outre les contributions, de stimuler une communaut et dlargir lusage de Qt. Et sans doute que Nokia souhaite
amliorer le support de Qt dans Symbian.
Qt 4.5 apporte des modifications assez profondes avec le
support du 64-bit sur le Framework Cocoa. Notons que pour
le dveloppeur Mac, il y aura le choix entre Carbon et Cocoa,
32 et 64-bits. WebKit sera aussi mis jour. Le dveloppeur pourra
dsormais passer par un debugger livr en standard pour le
moteur de Scripting Qt Script. Autre nouveaut intressante,
le support du format OpenDocument et diverses amliorations
sur Qt Designer. Site : www.qtsoftware.com

Google Maps en .Net ? Cest possible avec le framework


GMap.Net. Le but est dinterfacer Google Maps avec une application .net. Le tout se prsentant comme une dll fournissant
les contrles site : http://www.codeproject.com/KB/miscctrl/GMapNET.aspx
Comment valider son modle MVC issu de ASP.Net MVC ?
Avec le framework de validation xVal. Il utilise customattributes
et Castle. Autorise aussi linternationalisation des messages.
Un projet suivre : http://xval.codeplex.com/
Google arrte plusieurs outils et API: Google Catalog Search, Dogdball, Jaiku, Mashup Editor et Google Vido. Sur la
vido, YouTube prend donc toute sa place et cest un chec de
Google Vido, mis en place avant le rachat de YouTube !
La grand messe Brainshare de Novell naura pas lieu en
mars prochain. Ctait un lieu dchange et de rencontres
entre Novell, les partenaires et les clients. La raison de cette
annulation est la rduction (trs) forte de visiteurs, pour cause
de restrictions budgtaires. Un contenu en ligne est cependant prvu.

16-17

22/01/2009

12:39

Page 2

16-17

22/01/2009

12:39

Page 3

14-18

22/01/2009

12:33

Page 18

outils \\ java
suite de la page 14
ses propres quick fixes par lcriture dun plug-in, mais cela ncessite une connaissance approfondie des mcanismes mis en jeu, ce
qui sort du cadre de cet article.

Nettoyage du code
Outre le formatage (Ctrl+Shift+F), lindentation (Ctrl+I) ou les imports
(Ctrl+Shift+O), Eclipse peut aussi corriger automatiquement votre
code en faisant appel laction de menu Source > Clean Up .
Vous pouvez ainsi dfinir des rgles de codage quEclipse se chargera dappliquer votre code. Par exemple, vous pouvez forcer de passer par this pour accder aux champs, de mettre tout le temps
des accolades autour des blocs, mme lorsque ce nest pas ncessaire, de parenthser toutes les expressions de manire expliciter
lordre des calculs, dutiliser final partout o cest possible, etc.
Vous pouvez aussi demander Eclipse de supprimer les variables,
champs ou mthodes non utiliss, dajouter les annotations
@Override manquantes, de supprimer les espaces superflus la
fin des lignes, etc. [Fig.5]
Encore plus pratique : vous pouvez demander Eclipse de nettoyer
automatiquement votre code, suivant les rgles que vous aurez tablies, chaque fois que vous sauvegardez. Pour cela, passez par la
page de prfrence Java > Editor > Save Actions . Vous pouvez
aussi choisir dans ces prfrences de formater votre code chaque
sauvegarde, et de restreindre le formatage aux lignes modifies si
vous le souhaitez (afin de minimiser les diffrences sur le gestionnaire de versions). Une petite astuce pour le formateur : si vous avez
des commentaires que vous souhaitez que le formateur ignore,
commencez les par /*- au lieu de /* .

Exploration du code
Eclipse est un formidable outil de dcouverte de code Java. Face
un code Java inconnu, vous pouvez dcouvrir le type et la Javadoc
des lments en les survolant du curseur, et sauter leur dclaration en cliquant dessus avec la touche Ctrl enfonce (ou en utilisant le raccourci F3 ). Pour revenir ensuite l o vous tiez,
utilisez les flches dans la barre doutils, ou les raccourcis
Alt+gauche pour revenir en arrire, Alt+droit pour effectuer
lopration inverse, et Ctrl+Q pour revenir lendroit de la dernire dition. Si vous arrivez sur une mthode dans une interface, utilisez la Quick Type Hierarchy (raccourci Ctrl+T), qui vous donnera
la liste des classes implmentant linterface. Slectionnez une
de ces classes pour sauter la mthode implmente dans cette
classe. [Fig.6]
Avec loption Mark Occurrences active, slectionnez un lment
(variable, mthode, etc.) dans lditeur pour que toutes ses occurrences soient surlignes dans cet diteur. Slectionnez le type de
retour dune mthode pour mettre en valeur tous les endroits o la
mthode peut sortir. Slectionnez une exception dclare dans la
Fig.5

clause throws dune mthode pour voir apparatre tous les


endroits o cette exception peut tre renvoye dans la mthode. Et
enfin, slectionnez le nom dune interface dans la clause implements dune classe pour surligner toutes les mthodes implmentant cette interface dans la classe.
Pour chercher toutes les occurrences dun lment dans le projet
ou le Workspace, slectionnez cet lment et utilisez laction de
menu Search > References > Project/Workspace (ou le raccourci Ctrl+Shift+G). Si vous voulez savoir qui appelle une mthode,
slectionnez cette mthode et utilisez laction Open Call Hierarchy
(raccourci Ctrl+Alt+H).

Marqueurs de tches
Tapez TODO , FIXME ou XXX lintrieur dun commentaire
Java pour crer un marqueur de tche cet endroit, qui apparatra
dans la vue Tasks (faire Window > Show View > Tasks pour afficher cette vue). Trs pratique pour noter rapidement un point corriger sans dtourner sa concentration de la tche en cours. [Fig.7]

Raccourcis connatre
F3
Ctrl+Shift+R
Ctrl+Shift+T
Ctrl+O

Ctrl+L
Ctrl+T

Ctrl+Shift+O

Ctrl+Shift+G
Alt+Shift+T
Ctrl+Shift+F

Ctrl+3
Ctrl+Shift+L

Ouvre la dfinition du type slectionn. Fonctionne aussi par Ctrl+Clic sur un


lment dans le code source.
Ouvre une bote de dialogue qui permet douvrir nimporte quel fichier
du Workspace par son nom.
Ouvre un type (classe, interface, ) par son nom. Supporte les jokers (? et *)
et les noms en CamelCase.
Ouvre une vue hirarchique du code, qui permet daccder rapidement une mthode
dans lditeur courant, en tapant son nom. Utilis conjointement avec Ctrl+Shift+T,
permet datteindre trs rapidement nimporte quelle mthode de nimporte quelle classe.
Saute la ligne indique par son numro.
Montre lensemble des classes drives ou hrites (faire Ctrl+T nouveau) par
llment slectionn. Trs utile pour trouver rapidement quelle classe concrte
implmente une interface donne, ou dans quelle classe une certaine mthode
dune interface est implmente.
Organise les imports : ajoute les imports manquants, supprime ceux qui sont
inutiles. Slectionner le projet dans le package explorer avant dutiliser
ce raccourci pour organiser tous les imports du projet.
Cherche toutes les occurrences de llment slectionn (classe, mthode, etc.).
Propose une liste de refactoring applicables llment slectionn
Formate le code. Les rgles de formatage peuvent tre dfinies au niveau du
projet, de manire ce que tous les membres de lquipe travaillant sur le
gestionnaire de version (CVS, SVN, ) aient les mmes rgles.
Ouvre nimporte quelle vue, perspective ou diteur dEclipse par son nom.
Permet galement dexcuter des commandes.
Le mta-raccourci: il affiche une liste de tous les raccourcis existants
dans Eclipse.

Nicolas BROS
Ingnieur R&D chez Mia-Software
Fig.6

(3) La liste complte est disponible dans laide dEclipse, dans la section " Java Development User Guide > Reference > Available Quick Fixes ".

18

PROgrammez ! \\ Fvrier 2009

Fig.7

19-21

22/01/2009

12:53

Page 19

vnements \\ langage

Python 3 : volution en douceur


L'quipe de dveloppement du langage Python vient d'annoncer la sortie de Python 3,
dit Python 3000. Cette version ne rompt pas avec la philosophie du langage, il s'agit
plus d'une version ddie au "refactoring" : supprimer les mthodes obsoltes,
rorganiser la bibliothque standard, revoir l'API C... Python prne le fait qu'il ne
devrait y avoir qu'une manire naturelle de faire une tche. Ce grand mnage aide
tendre vers ce but. Mais ne croyez pas qu'elle n'apporte rien de nouveau ! Bien au
contraire, Python 3 s'est permis de rompre la compatibilit avec Python 2 pour
ajouter son lot de fonctionnalits longuement attendues !
Python est un langage libre dynamique et interprt. Il est dans la
mme catgorie que Perl, Ruby, PHP
et javascript. Ces langages dynamiques sont simples, agrables
programmer et trs productifs, mais
cela se fait gnralement au prix
d'une vitesse d'excution infrieure
par rapport aux langages compils
tels que Java et C#.
Comparativement aux autres langages dynamiques, les points forts de
Python sont la simplicit et la lisibilit.
Le crateur de Python, Guido van
Rossum, est parti du constat que le
code source tait beaucoup plus souvent lu et relu qu'crit et que donc la
lisibilit tait mettre en avant.
Cette lisibilit est l'aspect qui frappera
le plus les nouveaux utilisateurs de
Python et qui intresse beaucoup les
acadmiciens : le code est ainsi trs
proche de l'algorithme "pur".

Mais Python n'est pas que lisible, il


s'agit aussi d'un langage trs productif. Python dispose d'un ventail de
bibliothques trs large. Un bon
nombre est dj inclus avec le langage ("Livr piles incluses") et beaucoup
d'autres sont disponibles sur Internet
sur le Python Package Index[1]. Ce
grand nombre de bibliothques provient d'une communaut trs active.
Et c'est grce ce large ventail que
Python est utilis pour des tches
trs diverses allant de la programmation Web la gnration de code
assembleur. Python est un langage de

programmation dit "multi-paradigmes" permettant de programmer


suivant plusieurs styles (impratif,
fonctionnel, etc.), mais qui favorise
principalement la programmation
oriente objet.

LES NOUVEAUTS
DE PYTHON 3
Internationalisation
et encodages
Python 3 permet une meilleure internationalisation grce au passage
l'unicode pour les chanes de caractres (prvu dans la version 6 de
PHP). Jusqu'ici, les chanes de caractres taient des listes d'octets :
chaque caractre correspondant
un octet. Cette faon de faire n'est
plus adapte aux encodages volus
qui n'ont pas une longueur fixe de 8
bits par caractre (ex: utf-8).
Pour cela, Python disposait dj de
chanes de caractres spcifiques,
dites chanes unicode, qui permettent
de s'abstraire de l'encodage de la
chane et de la manipuler plus facilement, mais au prix d'encodages
(d'unicode vers l'encodage) et de
dcodages (vers unicode) successifs
qui peuvent produire des erreurs si
l'encodage est mal spcifi.
Par exemple, en Python 2 il fallait
crire u"Jrme" pour crire une
chane unicode et simplement "Jrme" pour sa contrepartie chane
simple. L'accent au deuxime caractre s'exprime par des valeurs diffrentes suivant l'encodage utilis.
En unicode, la manipulation ne pose
pas de problme, mais si c'est une
chane simple, le dveloppeur doit
connatre l'avance l'encodage utili-

s. De mme, l'interprteur doit


connatre quel est l'encodage utilis
pour interprter correctement les
caractres non ASCII. En Python 2,
on le prcise via une balise au dbut
du fichier.
Sans cette balise, l'encodage est
ASCII, qui n'autorise aucun caractre
spcial (accents, etc.).
En Python 3 plus de soucis, toutes les
chanes de caractres sont par
dfaut en unicode et l'encodage du
fichier est par dfaut en utf-8.

Formatage des chanes


de caractres
Python 3 introduit une nouvelle faon
de formater les chanes de caractres. Jusqu' prsent, Python nous
offrait de base soit l'oprateur " % "
sur les chanes de caractres, soit la
classe " string.Template ", d'un fonctionnement un peu quivalent au nouveau systme de formatage, mais un
peu complexe utiliser. L'oprateur
" % " est un oprateur binaire : il ne
peut prendre que deux paramtres.
Pas un de plus. Le premier paramtre tant la chane formate (avec
indications rudimentaires sur le format de la valeur), l'ensemble des
valeurs remplacer doit tre plac
dans le deuxime paramtre, au
moyen d'un tuple ou d'un dictionnaire.
Il y a donc un choix faire entre arguments positionnels (avec un tuple) ou
arguments nomms (avec un dictionnaire), sans possibilit de mixage.
La classe " string.Template " a t
prvue pour tre utilise avec une
phase de prparation.
En outre, elle ne permet pas de prciser un formatage propre chaque

Fvrier 2009 \\ PROgrammez !

19

19-21

22/01/2009

12:53

Page 20

vnements \\ langage
champ, par exemple la prcision d'un
rel. Python 3 introduit une mthode
" format " disponible sur les chanes
de caractres. Cette mthode utilise
son instance comme chane de formatage et ses arguments comme
valeurs remplacer. On dispose donc
de la puissance du passage des paramtres en Python. De plus, ce nouveau mcanisme permet de
personnaliser les options de formatage par type de valeur remplacer.
"Bonjour {nom}, il fait {0:.2f} C
dehors.".format(-3.5, nom="Emmanuel")
'Bonjour Emmanuel, il fait -3.50
C dehors.'
Les balises de formatages embarquent tout un petit langage permettant de prciser trs finement la
faon dont la substitution se fera.
C'est un rel progrs par rapport aux
mcanismes de formatages prcdents.

Print est une fonction


" print " tait jusqu'alors un mot cl,
instruction du langage. C'est une anomalie, puisque les mots cls servent,
dans les langages modernes, organiser ces instructions. "print" a donc t
transforme en fonction classique.
# En Python 2
print 'Hello world !'
# En Python 3
print('Hello world !')

Itrateurs
L'utilisation des itrateurs est maintenant gnralise dans Python 3. Par
exemple range() qui renvoyait une
liste, retourne maintenant un itrateur. D'autres fonctions au comportement quivalent ont galement t
modifies. Il en est de mme pour les
mthodes de la classe "dict" (keys(),
values(), items()).
Le passage aux itrateurs permet
d'acclrer l'excution du code puisqu'il est possible de parcourir les lments d'un itrateur sans avoir
besoin d'allouer de la mmoire. Cela
rend les mcanismes de cache particulirement efficaces.

Migration
des bibliothques
En rompant la compatibilit avec les
versions 2, Python 3 se coupe temporairement de toutes les bibliothques
tierce partie crites pour Python 2.
Bibliothques qui font la force de
Python. Un outil appel "2to3"[2], a
t dvelopp pour faciliter la migration des bibliothques de Python 2
Python 3. Malgr cet outil, porter une
bibliothque reste un travail relativement fastidieux.

Performances
Comme toujours, dans le cadre d'une
premire release majeure, les fonctionnalits et la stabilit ont t privilgies
par
rappor t
aux
performances. Du fait de certaines
gnralisations, Python 3.0 est, en

LINFO permanente

moyenne, 10% moins performante


que Python 2.6. Mais l'on peut s'attendre un renversement de la
balance avec les prochaines versions
de Python 3 : la communaut Python
tant connue pour tre capable d'optimiser son code une fois que celui-ci
est stabilis. Nanmoins, Python 3
reste tout de mme plus rapide que
Perl, PHP et Ruby.[3]

CONCLUSION
Python 3 est une ralit, le langage a
t pur et amlior pour lui permettre de relever les dfis du futur.
L'tendue des nouvelles fonctionnalits est bien plus vaste que ce que
nous permet la longueur de cet
article mais des ressources Web
vous permettront d'aller plus loin [4].
[1] http://pypi.Python.org/pypi
[2] http://docs.Python.org/library/2to3.html
[3] http://shootout.alioth.debian.org/gp4/
benchmark.php?test=all&lang=all
[4] http://docs.Python.org/3.0/whatsnew/3.0.html
Olivier Lauzanne
Ingnieur Python de la socit Ingeniweb du
groupe Alterway, diplm de l'Ecole
Centrale de Lyon, auteur de la bibliothque
pyquery et membre actif de l'association
francophone de Python (www.afpy.org).
Emmanuel Coirier
Ingnieur et Formateur Python de la socit
Ingeniweb du groupe Alterway, diplm de
l'Institut Galile et membre actif de l'association francophone de Python (www.afpy.org).

PRO grammez !

Lactu : le fil dinfo quotidien de la rdaction


La newsletter hebdo : abonnez-vous,
comme 30 000 professionnels dj. Cest gratuit !

Cest

PRATIQUE !

Le forum : modr par la rdaction et les auteurs


de Programmez, rejoignez les forums techniques
de programmez.com
Les tutoriels : une solution en quelques clics !
Le tlchargement : rcuprez les nouveauts.

www.programmez.com

Le magazine du dveloppement

19-21

22/01/2009

12:54

Page 21

22/01/2009

12:57

Page 22

spcial
EMIRE
AVANT-PR

Biztalk Server 2009

larchitecture oriente dveloppeur


1re partie

TLCHARGEZ
la version bta
www.progra
mmez.com

Franois Cointe " Architectures Orientes Sevices "

22-29

ujourdhui, la sortie de Biztalk Server


2009 permet de mettre le focus sur
la solution dintgration et darchitecture oriente services (SOA) de Microsoft.
Outil discret, Biztalk ne dmrite pas et sait
se rendre utile dans les entreprises. Mais,
jusqu prsent, Biztalk souffrait dun manque
dintgration .Net et surtout dune visibilit
inexistante ct dveloppeur. Cette version
2009 corrige le tir et mise plus que jamais
sur le dveloppeur. En avant-premire, nous
vous proposons une plonge dans Biztalk Server 2009 avec ce dossier en deux parties.
Le dveloppeur ne sintresse pas toujours
aux questions darchitecture, surtout sil ne
travaille pas directement pour, ou dans une
entreprise utilisant une SOA ou un environnement dintgration. Or, aujourdhui, avec le
tout service, le dveloppeur doit de plus en
plus connatre et comprendre les architectures de services, comment casser les applications monolithiques en diffrents services.
Tout cela prfigure la migration suivante vers
le cloud computing qui consomme avant tout
des services, des web services, de la SOA !

22

PROgrammez ! \\ Fvrier 2009

Et Biztalk Server 2009 peut les aider prparer cette prochaine tape.
Plus prosaquement, Biztalk Server 2009
apporte une intgration profonde et complte avec .Net et Visual Studio 2008. Ainsi,
bien que la conception Biztalk soit trs graphique, le dveloppeur garde toujours le
contrle et une vision du code. On accde,
en vrac : un debugger XSLT, aux tests unitaires, du build automatique. On bnficie
aussi dune intgration avec Team Foundation pour les projets en quipe et afin de
grer le code source, et aussi la disponibilit
dun bug tracking et du support de MS Project Server.
Cette version 2009 peut se rsumer 4
piliers : la plate-forme, productivit pour le
dveloppeur et les quipes, lintgration B2B
et SOA / Web Services. Biztalk se met jour
par rapport aux nouveaux outils serveurs de
Microsoft. Il supporte dsormais Windows
Server 2008 et sait fonctionner en environnement virtualis avec Hyper-V. Ct rfrentiel et donnes, SQL Server 2008 fait son
entre. Cette compatibilit nest pas innocen-

te sur les performances, notamment en 64bits ou encore sur les capacits fonctionnelles du BAM.
Mais noublions pas que Biztalk Server est
aussi, et surtout, un centre SOA. Et la principale nouveaut retenir est lapparition de
UDDI 3.0, lannuaire de services. La dcouverte de nouveaux services constitue toujours un dfi avec une architecture de
services et Biztalk tente ici de proposer une
solution standard pour amliorer la dcouverte et lutilisation de ces services. L aussi,
il y a du travail pour les dveloppeurs, notamment avec les nouveaux SDK et les adaptateurs. Mais la v2009 sait aussi souvrir aux
concurrents, en particulier avec les solutions
WebSphere et DB2.
Demain, Biztalk promet encore plus, notamment avec la couche serveur Dublin qui sannonce comme une rvolution dans les
services serveurs, la monte en charge dans
le monde Windows. Sans oublier Visual Studio 2010, .Net 4 ou encore la nouvelle gnration de Business Intelligence : Gemini.
Franois Tonic

22-29

22/01/2009

12:57

Page 23

spcial

Les nouveauts de BizTalk 2009


Les apports de BizTalk 2009 se rsument
quatre catgories : alignement sur la plate-forme
2008 pour une performance optimale,
amlioration de la productivit du dveloppement
grce une compatibilit Visual 2008 et Team
Server, rapprochement du concept SOA et
extension de loffre B2B.
izTalk 2009 permettra de
tirer parti des dernires versions des produits d'infrastructure de Microsoft : Windows
Server 2008, SQL Server 2008,
SharePoint, et Hyper-V. Pour les applications mission critiques, BizTalk
2009 sera encore plus performant
grce aux amliorations apportes
SQL 2008, et les configurations
Hyper V apportent dnormes avantages pour la gestion des serveurs
applicatifs sous x64. Hyper V va simplifier le processus "dveloppement
recettes - mise en production" grce
un environnent virtuel permettant
davoir une configuration identique
pour ces plates-formes. Important
pour la tolrance de panne, le serveur Windows 2008 offre BizTalk la
possibilit dtre mis en cluster travers des sous-rseaux portant des
adresses IP diffrentes. Jusqu
maintenant, il fallait mettre en place
un VLAN complexe pour avoir ce
genre de configuration.

Cycle de vie
BizTalk dans VS 2008/TFS profite du
suivi de projet grce l " Application
Lifecycle Management (ALM) support ".
Avec cette fonctionnalit, les dveloppeurs peuvent sappuyer sur les composants VSTS de " bug tracking ",
contrle du code, intgration de " project "
serveur, et suivi dquipe. La structure
des projets BizTalk a galement chang
avec la version 2009. Tout dabord,
ils sont gnrs en tant que projet C#
avec un hritage dinterfaces .Net
spcifique. Un projet BizTalk peut
donc maintenant contenir dautres
types dartefacts (classes C#, par
exemple). Un fichier assemby.cs est
galement ajout au projet afin de
rassembler les mtadonnes lies

une dll BizTalk. Les dveloppeurs vont


apprcier une nouveaut : lajout dun
type de projet " test " qui permet de
simuler le fonctionnement du flux
lintrieur de lenvironnement VS
2008. Ces projets de test permettent aux dveloppeurs, par exemple,
de suivre ligne par ligne lexcution du
code XSLT des maps BizTalk. Les
pipelines peuvent galement tre
dbogus de la mme manire,
offrant mme la possibilit dexcuter
un flux de bout en bout sans quitter
Visual Studio. Les projets BizTalk C#
sintgrent avec MSBUILD afin de synchroniser tout ce qui est BizTalk et
artefacts .Net dans un seul processus de recompilation et dploiement.
BizTalk 2009 est compatible .Net
3.5., ce qui veut dire que la partie
SOA sous WCF permettra dintgrer
les protocoles trs modernes - REST,
POX, RSS, ATOM, WS-* lintrieur
de BizTalk.
Le noyau BizTalk se rapproche de plus
en plus du concept du SOA. Il toffe
lintgration grce un couplage avec
lannuaire des web services UDDI 3.0,
une couche ESB version 2.0, et laddition de nouveaux adaptateurs WCF.
Lintgration UDDI permet de contrler et de configurer les services SOA
indpendamment de BizTalk. BizTalk
2009 fournit deux nouveaux adaptateurs WCF - SQL 2008 et Oracle EBusiness Suite en vue dune
intgration complte avec la plateforme Oracle. De nombreuses anomalies dans le pack adaptateur v1.0 ont
t corriges comme, par exemple, le
problme de " timeout " sur une
connexion RFC SAP en cas de non
rception de lIDOC. Larchitecture
ESB intresse beaucoup dentreprises
pour sa capacit fdrer lensemble
de services SOA et renforcer un

grand principe du SOA : " lagilit ".


Les messages traversant un ESB suivent un itinraire qui dtermine lensemble des services, orchestrations,
et transformations qui agissent sur un
message. Un ESB permet dattribuer
des itinraires dynamiques selon des
rgles mtier. BizTalk est bien adapt
cette architecture et cest la raison
pour laquelle Microsoft a annonc la
sortie de lESB 2.0 avec celle de BizTalk 2009. LESB 2.0 fournit un langage (Visual Domain Specific Language)
pour modliser des itinraires. Il
consiste en un pack adaptateur " pluggable " qui sert comme point dentre/sor tie de lESB. Un por tail
consacr la gestion de lESB est
galement fourni. Finalement, il y a
des modifications la console de
lAdministration BizTalk. LHAT nest
plus disponible mais un administrateur/dveloppeur sera en mesure
deffectuer des requtes sur les donnes du " tracking " depuis la console
dAdmin. Un deuxime article comprendra les aspects BAM SQL 2008,
B2B, RFID, Host Integration Services
et modlisation sous BizTalk et Oslo.
Dave Nolting
CODit / MS BizTalk Squad
Architect SOA & BPM
dave.nolting@codit.eu
Fvrier 2009 \\ PROgrammez !

23

22-29

22/01/2009

12:59

Page 24

spcial

Tlchargement sur le site


www.programmez.com

Dbuter avec BizTalk Server 2009


Lobjectif de cet article est de vous permettre, au travers de la cration en
pas pas dune petite application BizTalk Server 2009, davoir un premier
aperu sur les tapes du dveloppement de ce type de projet.
fin de pouvoir commencer, il
est tout dabord ncessaire
de disposer dun environnement avec tous les outils et bien sr,
BizTalk. Pour cela, trois solutions sont
envisageables :
- Configurer de A Z un environnement (ceci est trs formateur mais
prend du temps)
- Partir dun environnement o tous
les principaux outils sont dj prsents et ensuite installer BizTalk
Rcuprer lenvironnement dj
configur, sur notre site, vous trouverez la VPC (machine virtuelle) contenant le serveur BizTalk. La procdure
dinstallation y est dcrite ainsi que la
configuration de lenvironnement.
Une fois cet environnement BizTalk
configur,nous sommes fin prts
dmarrer.

Prsentation
du scnario projet
Notre but sera de construire un service de gestion de rapprovisionnement de stock. Un service reoit des
demandes de rapprovisionnement
sous la forme dun code produit associ une quantit (pour des raisons
de simplification, la rception se fera
par fichiers dposs dans un rpertoire). Le service traite les demandes
de manire diffrente en fonction de
la quantit :
- Les petites quantits (infrieures
20) sont mises en attente avant
dtre traites et les autres sont
traites immdiatement
Dtails dimplmentation :
- Lapplication grant les commandes
Fig.1

24

PROgrammez ! \\ Fvrier 2009

fournisseur prendra la forme dune


base de donnes SQL Server contenant une table que nous alimenterons
avec les demandes.

Implmentation - initialisation
du projet BizTalk
La premire tape de la ralisation
consiste dans la cration et la configuration du projet BizTalk dans Visual
Studio 2008 : Dans Visual Studio
nous choisissons le modle de projet
" Empty BizTalk ServerProject " puis
nous devons configurer les proprits du projet. La configuration consiste signer le projet et rentrer les
paramtres de dploiement BizTalk
dans les proprits du projet.
Il nous faut assigner une cl de signature dans la section " signing " et dfinir
lapplication BizTalk dans laquelle sera
dploy notre projet au travers de la
section " Deployment " (NB : une
application BizTalk est un conteneur
logique qui permet de regrouper des
schmas, orchestrations, ports ) :
[Fig.1]. A cette tape, notre projet est
initialis et nous pouvons continuer
avec la suite du dveloppement.

Implmentation-dfinition
des schmas
La premire tape dans un projet BizTalk est systmatiquement de dfinir
les formats des messages changs.
Cela se fait par la cration de schmas. Dans notre cas nous avons
deux types de schmas dfinir :
- Le schma de la demande de rapprovisionnement
- Les schmas permettant dintgrer
Fig.2

cette demande dans la base SQL


Server.
Nous allons donc tout dabord rajouter un premier schma pour la
demande. Ceci seffectue par lajout
dun lment de type schma dans
notre projet (Clic droit sur le projet
" Add new Item / Schema File ") .
Dans lditeur de schma, on peut
renommer llment racine, puis lui
rajouter des lments enfants pour
reprsenter le code produit et la
quantit demande. (Cela seffectue
dans le menu contextuel de llment
racine par " Insert Schema node /
Child Field Element ". Il nous est
aussi possible de prciser le type de
llment quantit (xs :int) au travers
de la fentre de proprit. [Fig.2]
Bien que nous ayons fini de dfinir la
structure de ces schmas, il nous
reste une opration de configuration
effectuer. Afin de faciliter laccs
la quantit depuis lorchestration,
nous allons faire ce que lon appelle
une " distinction " de champ.
Ceci seffectue en choisissant dans le
menu contextuel loption " Promote/Show Promotions " : [Fig.3]
Dans lcran des champs distingus,
il faut slectionner le champ quantit
et cliquer sur le bouton " Add " : [Fig.4]
Notre schma est maintenant finalis !

Implmentation-ajout
du schma pour laccs
la base de donnes
Nous devons dabord crer une base
de donnes (Stock) qui contiendra
une table (Demandes) pour stocker
les demandes de rapprovisionneFig.3

22-29

22/01/2009

13:01

Page 25

22-29

22/01/2009

13:01

Page 26

spcial
ment. Dans SQL Server Management
Studio nous ajoutons une base de
donnes Stock, puis nous crons une
table " Demandes " qui contiendra
deux champs : un champ produit de
type varchar et un champ quantit de
type int : [Fig.5]
Nous allons maintenant, dans Visual
Studio, utiliser ladapteur SQL pour
gnrer un schma nous permettant
deffectuer des insertions dans la
base de donnes. Au niveau de notre
projet BizTalk, il faut choisir, dans le
menu contextuel, loption " Add / Add
Generated Items " : [Fig.6]
Nous choisissons ensuite " Add Adapter
Metadata " et nous slectionnons
ladapteur " WCF-SQL " [Fig.7]
Nous arrivons alors dans un cran
qui va nous permettre de parcourir
les objets de la base de donnes et de
gnrer des schmas pour appeler
une procdure stocke ou encore
insrer, modifier, supprimer dans une
table Pour pouvoir accder notre
base il faut tout dabord rentrer lURI
suivante : mssql://.//Stock? Ensuite on clique sur le bouton " Connect "
et on a accs aux objets : [Fig.8]. On
choisit alors la table Demandes, puis
les oprations associes apparaissent : On choisit lopration " Insert "
puis on clique sur " Add " : [Fig.9]

Fig.4

Aprs validation, les schmas ncessaires ont t gnrs.

Implmentation-Cration
de lorchestration
Nous allons crer une orchestration,
qui aura la charge de recevoir les
demandes dapprovisionnement,
ventuellement de les mettre en
attente, puis de les transmettre la
base de donnes. Dans notre projet
nous rajoutons donc une nouvelle
orchestration (Add / New Item / BizTalk Orchestration). A ce stade, il est
ncessaire de faire une pause pour
prendre le temps de la rflexion sur
limplmentation de lorchestration.
Nous dsirons maintenant traiter
diffremment les demandes en fonction de leur quantit et imposer un
dlai aux plus petites. Notre solution
contiendra donc une premire rception suivie dune prise de dcision sur
lapplication dun dlai avant envoi
dans la base. Le problme tant
pos, voyons limplmentation.
Dans BizTalk le dveloppement dune
orchestration se fait principalement
au travers de deux outils :
- Lditeur (Designer) visuel dorchestration dans lequel on construit la
logique du processus en assemblant
des lments pris dans la bote

Fig.7

outils. [Fig.10]
- La fentre " Orchestration View " qui
nous permet de dfinir des
variables, des messages [Fig.11]
En premier, nous allons crer des
variables pour contenir les messages
reus et mis par lorchestration.
Cela se fera dans lorchestration view,
au niveau du dossier " Messages "
par le menu contextuel (" New Message "). Il faut ensuite donner un nom
au message et slectionner son type
dans les proprits (il suffit de naviguer vers le bon schma) : [Fig.12].
On cre ainsi trois messages :
- Un message de demande de rapprovisionnement (msgReappro)
- Un message denregistrement dans
la base (msgSaveReappro de type
Stock.Reappro.TableOp_dbo_Deman
des_Insert_InputMessage que lon
trouve dans les types de messages
multi-part).
- Et enfin un message pour la rponse
linsertion dans la base de donnes
(msgReponseDb) dont le type se trouve aussi dans les types " Multi-Part "

Communiquer :
cration des ports
Pour pouvoir communiquer, notre
orchestration a besoin de points dentre et de sortie : il sagit de ce que

Fig.9

Fig.5

Fig.8

Fig.6
Fig.10

26

PROgrammez ! \\ Fvrier 2009

22-29

22/01/2009

13:01

Page 27

spcial
lon appelle des ports logiques. On
peut les crer directement depuis lorchestration view (Un port de rception
et un port dmission) : [Fig.13].
Les points dexclamation nous signalent que le type des messages vhiculs par les ports nest pas prcis : Il
faut le slectionner dans la fentre de
proprit. Dans le cas du port OutDB
nous en avons dj un, gnr prcdemment par ladapteur SQL : [Fig.14].
Pour le port InDemandes, il nous faut
en crer un (option " Create One Way
Port Type ") et prciser le type de
message (ceci se fait au niveau des
proprits du paramtre Request du
port) : [Fig.15].
Au niveau du port de sortie OutDb il
nous faut galement prciser son
sens de communication (par dfaut
les ports sont en rception) au niveau
de la proprit " Communication
Direction " de manire configurer le
port en sortie.
A prsent, nous pouvons " construire "
notre orchestration en dposant des
lments depuis la bote outils. On
dposera ainsi comme suit : Une
rception, une dcision avec un dlai
dans une des branches, un envoi et
une rception que lon prendra soin
de renommer : [Fig.16].
Maintenant, la structure est pose il

Fig.11

ne reste qu configurer chaque lment. Au niveau des rceptions et


des envois il faut slectionner le message qui est reu ou envoy. De plus,
sur la premire rception il faut
mettre la proprit " activate "
" true " pour indiquer que la rception dmarre lorchestration.
Une fois ceci fait, il est possible de
relier les rceptions et les envois
leurs ports respectifs : [Fig.17].
Il nous reste paramtrer le test sur
la quantit dans llment " Decide ".
Cela se fait en double-cliquant et en
rentrant une expression valuer.
Dans notre cas: msgReappro.Quantite<20. Pour le dlai, la procdure
est identique. Nous rentrons lexpression suivante :
new System.TimeSpan(0,3,0);

Dernier point : pour pouvoir envoyer


dans la base de donnes, il est ncessaire de fabriquer un message au bon
format. Nous allons faire
cela grce une transformation. Juste avant lenvoi
vers la base, on dpose
une brique de transformation. Cela cre en fait deux
briques quil faudra paramtrer (une construction

Fig.13

de message et une transformation) :


[Fig.18].
Dans la premire brique, il faut prciser le message que lon construit
(msgSaveReappro) dans la deuxime, nous allons prciser en message
source la demande et en message
destination msgSaveReappro. [Fig.19].
A la validation, lditeur de transformation se lancera automatiquement.
Dans celui-ci, il faut alors simplement
relier les bons champs : [Fig.20].
Notre dveloppement est fini, nous
pouvons dployer le projet dans BizTalk
laide de la commande " Deploy " du
menu contextuel da la solution.

Configuration et test
Nous pouvons quitter Visual Studio. Il
faut maintenant connecter notre
orchestration des points dentre et
de sortie " physique " (fichier et base
de donnes). Cette opration se fait
dans la console dadministration de
BizTalk (accessible dans le menu

Fig.16

Fig.14

Fig.12
Fig.15

Fig.17

Fvrier 2009 \\ PROgrammez !

27

22-29

22/01/2009

13:01

Page 28

spcial
dmarrer / Microsoft BizTalk 2009
/ Microsoft BizTalk Administration).
Quand on dploie larborescence de la
console, on constate quune application " Stock " apparat : [Fig.21].
Dans cette application nous allons
crer un port de rception (dans le
dossier " Receive Ports " -> Menu
contextuel -> New -> One Way Receive Port). Nous lui donnons un nom,
puis nous allons tout de suite sur
" Receive Location " et nous slectionnons " new " : [Fig.22].
Nous slectionnons ladapteur File et
le pipeline XMLReceive : [Fig.23].
Puis slectionner " Configure " pour
rentrer les paramtres de rception
(emplacement du rpertoire). Aprs
validation, nous avons notre port de
rception. Nous devons maintenant
crer un port denvoi. Cette fois ci
Fig.18

nous choisissons " New -> Static


Solicit Response Send Port ". Il faut
ensuite choisir comme type de transport " WCF-Custom " et comme pipeline de rception " XmlReceive".
Ensuite nous slectionnons le bouton
configure. [Fig.24].
Dans le paramtre URI, il nous faut saisir :
mssql://.//Stock. Et dans Actions :
TableOp/Insert/dbo/Demandes
Ensuite sur le deuxime onglet (Binding) nous slectionnons sqlBinding :
[Fig.25].
Aprs validation, notre port est cr.
Nous allons maintenant configurer
lorchestration. Pour cela il faut aller
dans le dossier Orchestration et
double-cliquer sur celle-ci. On va alors
sur " bindings " et on slectionne les
paramtres : [Fig.26].

Tout est configur, nous pouvons


dmarrer notre application en slectionnant " start " dans son menu. Pour
tester, il suffit de dposer des fichiers
de tests dans le rpertoire dentre et
dobserver la table dans la base.

Conclusion
Nous avons vu la ralisation en pas
pas dune petite application BizTalk.
Ce parcours nous aura permis dapercevoir les schmas, transformations,
orchestrations et adapteurs. Le code
source du projet est disponible en
tlchargement, donc nhsitez pas
exprimenter.
Roch Baduel MVP BizTalk
Responsable ple Intgration/SOA
(MCNEXT)
rbaduel@mcnext.com
Fig.21

Fig.19

Fig.20

Fig.22

Fig.23

Fig.25

Fig.26

Suite
du
Spcial

BizTalk
Fig.24

28

PROgrammez ! \\ Fvrier 2009

le mois
prochain

22-29

22/01/2009

13:01

Page 29

30-43

22/01/2009

14:42

Page 30

dossier \\ composants

Composants
Simplifiez-vous le code !

e pas rinventer la roue et pouvoir rutiliser le code, des propos qui reviennent souvent
chez les dveloppeurs. Dans la pratique,
le composant, ce petit contrle que lon
rajoute dans lenvironnement de dveloppement, rend bien des services. Pourquoi
perdre du temps coder un grid ou un
graph si cela existe dj et permet dtre
plus complet, plus stable, plus pratique
manipuler ? Quand on utilise massivement
Ajax, javascript, on est heureux de pouvoir
se dlester dune partie du code sur des
contrles prts lemploi !
Dun autre ct, le dveloppeur peut se
dire, le composant, oui, mais je ne fais
pas un graph dynamique, ni un agenda
tous les jours. En effet, mais il ne faut pas
oublier que les composants proposent une
gamme de fonctionnalits, extrmement
large : du contrle dinterface 3D et dynamique la gnration dun fichier PDF la
vole avec paramtrage personnalis.
Bref, noubliez pas que le composant ne
se limite pas aux seules interfaces mme
si aujourdhui, ce sont les plus visibles, les
plus spectaculaires.

30

PROgrammez ! \\ Fvrier 2009

On trouve des composants pour tout, pour


tous les langages ou presque. Aujourdhui,
les contrles cls en main pour Ajax, .Net,
Java sont les plus connus, mais les composants PHP, Flex, notamment, se rpandent. Autre exemple, dans le
dveloppement web, il existe aussi de
nombreux composants pour les platesformes de blogs ou des solutions de
forum.
Bien entendu, il ne faut pas choisir un
composant les yeux ferms. Le dveloppeur doit dj savoir ce quil veut puis tablir une liste de packages composants.
Ensuite, les choses srieuses dbutent :
les tests. Impossible de choisir un composant sans le tester ! Plusieurs lments
sont considrer dans le choix quon fera:
les licences des composants, les critres
de redistribution, le nombre de composants dans le package, le langage support, la librairie graphique supporte, la
disponibilit du code source du composant, sa popularit, lefficacit du support
et de la communaut, sans oublier les
mises jour rgulires. Bref, tout ce qui
concerne la prennit du composant doit

tre votre proccupation. Car si vous


optez pour un composant sans accs au
code source et que lditeur ferme 3 mois
plus tard, que ferez-vous ? Il ne faut pas
oublier que le composant se comporte
souvent comme une bote noire et en cas
de bugs, comment faire pour les contourner ? Malheureusement, on ne sen aperoit que lorsque le dveloppement est dj
avanc. Dautre part, noubliez pas la politique de redistribution du composant, surtout si votre application est distribue
lextrieur. Faut-il payer une licence ?
Dans ce dossier nous allons aborder les
composants pour PHP, Flex et .Net. Nous
verrons aussi les bonnes pratiques
adopter, les prcautions prendre. Nous
verrons pourquoi des dveloppeurs les utilisent et ne peuvent plus sen passer !
Franois Tonic

Sources et complments
sur le site
www.programmez.com

30-43

22/01/2009

14:42

Page 31

dossier \\ composants

De lintrt dune approche


composant de larchitecture logicielle
La complexit des systmes
dinformation a toujours continu de
crotre et les technologies disponibles
ne cessent dvoluer. De nos jours, sur
un projet important, il nest pas rare que
les technologies utilises voluent de
faon majeure avant mme que le projet
qui les utilise arrive la fin.
our matriser cette complexit, lapproche de dveloppement
bas
sur
des
composants est devenue incontournable pour la russite, la maintenabilit et surtout lvolutivit dun projet
de dveloppement.
Lors dun atelier OOPSLA 2000 , Alan
Cameron Wills avait utilis une analogie avec les systmes HiFi pour imaginer la structure que devrait avoir un
logiciel bas sur des composants :
au plus haut niveau nous avons les
appareils avec lesquels le consommateur interagit (lecteur CD, amplificateur, enceintes...) ainsi que les
connecteurs et les interfaces standard permettant de les relier ;
un niveau plus bas nous trouvons
les sous-systmes dont ces appareils sont composs (alimentation,
unit de lecture CD, etc.) et un
autre jeu de connecteurs et dinterfaces standardises ;
en descendant encore dun niveau,
on trouve les circuits intgrs, les
transistors, les diodes laser, etc. et
nouveau des connecteurs et des
interfaces standard par le biais desquelles ces lments sont connects.
Cette petite illustration montre que la
maturit actuelle atteinte dans lindustrie lectronique est due lutilisation chaque niveau des composants
interconnects de faon standard. De
plus, comme dans beaucoup dautres
domaines matures, les composants
utiliss sont produits de manire
industrielle par des fabricants spcia-

liss et sont rutiliss pour assembler plusieurs types de produits. Dans


le domaine logiciel, cette maturit est
plus difficile atteindre car les composants du bas voluent encore trs
for tement et les sous-systmes
deviennent rapidement obsoltes.
Ceux qui conoivent des applications
au plus haut niveau sont donc partags entre tirer parti dun niveau intermdiaire structurellement obsolte
ou revenir un niveau plus bas avec
lassurance dune difficult voluer.
Pour conserver la similitude, lapproche de dveloppement de composants propose par CodeFluent
consiste construire des sous-systmes partir des besoins du haut
niveau en les modlisant et assemblant de manire automatise les lments du niveau bas. On obtient ainsi
une application au plus haut niveau
dcoupe en composants (les soussystmes) qui peut voluer au gr des
innovations sur les couches basses.
De manire concrte, CodeFluent se
prsente comme une vritable
fabrique logicielle, de bout en bout,
pilote par le modle pour lenvironnement .NET, avec une approche par
composant. Notre fabrique logicielle
est matrialise par l'excutable
CodeFluent.Build.exe. Il reoit en
argument le nom du fichier " pivot " du
modle. Dans notre exemple, la commande excuter en ligne de commande est :
CodeFluent.Build.exe
SoftFluent.Contacts.xml

Exemple de componisation
de larchitecture logicielle
Prenons alors un exemple simple :
une application de gestion en ASP.Net
avec une base de donnes SQL Server. Lapplication devra sintgrer
dans le systme informatique actuel
de lentreprise pour lequel le choix
dune architecture oriente services
(SOA) a t effectu. Il nous est donc
demand dexposer nos ser vices
mtier en tant que services Web.
Naturellement, nous allons utiliser
WCF pour exposer nos services.
Pour pouvoir utiliser la fabrique logicielle, nous devrons pralablement
dcrire nos entits ainsi que la configuration des producteurs de diffrents composants que nous
souhaitons utiliser (ces lments font
fonctionner la fabrique). A partir de
ces informations, loutil gnrera le
code des composants du projet.
Et le projet se dcoupera en deux parties : la description des entits mtier
et la configuration des producteurs
de composants. Ces lments vont
alimenter en entre la fabrique logicielle. Dans cette courte prsentation, vous aurez pu constater tout
lintrt dune approche par composant de lapplication. Et dites vous
bien que cette approche nest pas uniquement lie .Net, elle est valable
dans la plupart des langages utiliss
aujourdhui.
Catalin Manoliu,
consultant senior chez SoftFluent

Fvrier 2009 \\ PROgrammez !

31

30-43

22/01/2009

14:42

Page 32

dossier \\ composants

Comment les composants


amliorent linterface utilisateur !
L'interface utilisateur d'une application n'est qu'un composant parmi tant d'autres : ce
n'est que la partie visible de l'iceberg. Pourtant, pour la majorit des utilisateurs,
l'application est confondue avec son interface. Et lutilisation ou le rejet dun logiciel est
souvent li la qualit de son interface.
out doit tre simple pour lutilisateur, linterface doit tre
cohrente et intuitive, attrayante, personnalisable
Autant de challenges relever pour les concepteurs dapplications, les graphistes et les dveloppeurs. Une des solutions
qui simpose est lutilisation dune bibliothque de contrles utilisateurs commerciale offrant des solutions puissantes et simples
mettre en uvre pour la couche prsentation de nos applications.
Jai utilis plusieurs versions de la bibliothque Infragistics (ma premire exprience remonte 2004) pour raliser diffrent types
de projets (Web, Client Windows, CAB) et je dois dire que lapport dune telle bibliothque est considrable si on prend le temps
de bien connatre sa logique de fonctionnement et dexplorer sa
large gamme doutils. Une des raisons principales du choix de
Infragistics dans mon dernier projet est le CAB Extensibility Kit qui
tend les fonctionnalits du framework open source CAB de
Microsoft.

styles quil peut appliquer son application (Rappelons que tous les
contrles utilisateurs UltraLabel, UltraTextEditor, UltraComboEditor, UltraGroupBox et UltraButton utiliss dans ce formulaires
appartiennent la suite NetAdvantage for WinForms 2008 v1).
Dans le gestionnaire dvnement du chargement (Load) de notre
unique formulaire FormMain ajoutons lappel la mthode FillStyleList qui va charger la liste des styles disponibles :

Voici le corps de la mthode FillStyleList :

La preuve par A+B


A titre dexemple, je vais introduire un cas simple dutilisation de la
fonctionnalit de gestion dapparences nomme ApplicationStyling
de la bibliothque NetAdvantage for WinForms dInfragistics. La
fonctionnalit ApplicationStyling pour les applications Windows
sapparente lutilisation de fichiers de styles CSS pour les applications Web. Cette technologie permet de dfinir lapparence de
votre application dans des librairies de style et doffrir plusieurs
choix dapparence pour vos utilisateurs (Il faut noter que ces styles
ne sappliquent quaux contrles de la bibliothque Infragistics).
Voici quelques captures dcrans de notre application finie : [Fig.1]
La liste droulante libelle Style Name prsente lutilisateur les

Cette mthode cherche les fichiers de styles (dextension *.isl)


dans le sous-dossier Styles du dossier dexcution de notre application, puis alimente lUltraComboEditor cmbStyles. Enfin dans le
gestionnaire de lvnement ValueChanged de lUltraComboEditor
cmbStyles il nous suffit de charger le style slectionn en faisant
appel au composant StyleManager responsable de lhabillage de
tous nos contrles Infragistics avec le style demand :

Fig.1

Enfin il est important de noter que .Net 3.5 SP1 offre en standard
des fonctionnalits avances pour crer des interfaces utilisateur
pour tout type dapplications : Windows (Windows Forms et Windows Presentation Foundation), Web (ASP.Net, AJAX) et clients
riches (Silverlight) et que Visual Studio 2008 rend cette tche dautant plus facile avec des concepteurs de formulaires et des assistants contextuels intelligents.
Ghassen HARRATH
Expert .NET chez IP-Tech, SSII tunisienne spcialise dans les dveloppements
informatiques pour le march Franais (www.iptech-offshore.com)

32

PROgrammez ! \\ Fvrier 2009

30-43

22/01/2009

14:42

Page 33

Les outils de la Direction Informatique


Vous avez besoin dinfo
sur des sujets dadministration,
de scurit, de progiciel,
de projets ?
Accdez directement
linformation cible.

LINFORMATION SUR MESURE


Actu trie par secteur

Avis dExperts

Cas clients

Etudes
&
Statistiques
Infos des SSII
Vidos
Actus

Evnements

Newsletter

LINFORMATION EN CONTINU

www.solutions-logiciels.com

30-43

22/01/2009

14:42

Page 34

dossier \\ composants
Retour dexprience :
Yannick Biet, dveloppeur .Net
dans la socit e-GEE (Meylan)
Je me suis intress aux composants
Infragistics lors du dveloppement de la
couche graphique dune solution applicative. Alors en phase de refonte technologique, nous cherchions obtenir
une interface moderne et sduisante
pour nos clients, et permettant aux
dveloppeurs dafficher des donnes et
des formulaires de saisie complexes
aux utilisateurs sans obtenir une interface austre. Nous nous sommes
heurts trs tt deux problmatiques
qui nous ont pousss nous intresser
aux composants logiciels :
Nous devions pouvoir afficher des
plannings et aucun composant standard ne proposait une rponse fonctionnelle notre besoin,
Nous devions galement disposer
de composants performants pour
maquetter des solutions en accs
web de nos produits.
Il sagissait donc avant tout, de trouver
une solution face un manque des
composants fournis en standard avec
.net. Nous avions deux solutions :
crer nos composants ou utiliser un
composant tiers. Les avantages de la
seconde solution compensent largement linvestissement demand.
Certes, il faut acqurir des licences de

David Berenger
(Dveloppeur & consultant .Net,
Softfluent)
" Eviter de tout refaire, de tout
coder, principalement avec Ajax qui
est compliqu et pouvoir raliser une
application " user friendly ", en quelques lignes ou
via une simple API ! Nous utilisons rgulirement
Telerik. Nous utilisons aussi des composants,
Aspose, pour gnrer du PDF ou transformer des
fichiers en PDF, pareillement pour gnrer de lExcel, avec GemBox. Jutilise des composants quand
cela est utile. Je les tlcharge, je les teste. On
voit rapidement les meilleurs. Le prix na jamais
t un (rel) problme. Il nest pas aussi excessif
quon le pense ", explique David. Limportant est de
bien choisir. " La prennit est un lment considrer. Jai dj rencontr des bugs. Sans code
source, jai d remonter dans celui-ci avec Reflector. Le composant est souvent une bote noire.
Quand on rencontre un problme dans un composant JavaScript, cela devient rapidement un cauchemar ", prcise David.

34

PROgrammez ! \\ Fvrier 2009

composants additionnels mais les


cots induits sont drisoires si on
ramne leurs cots au prix dune journe dun ingnieur de dveloppement,
sans compter que pour le prix, nous
obtenons alors plus de 100 composants, le support technique. De ce
fait, lexploration des autres composants nous a permis damliorer grandement notre interface. Nous avons
pu en effet implmenter des menus en
" ribbons " au look Office 2007, rpondant ainsi au besoin de modernit de
notre interface, et lintgration des
autres composants de saisie (texte,
liste droulante, ) disposant euxaussi de diffrents styles visuels, dont
celui du look Office 2007 nous a permis de prsenter une interface cohrente et homogne, sans fausse note.

Extensibilit de laffichage
et de la personnalisation
des composants
Si les proprits par dfaut des
contrles ne correspondent pas vos
attentes, on peut utiliser des filtres
cration filter, qui permettent de personnaliser le composant, et des filtres
Draw Filter pour en modifier la prsentation. Le dveloppeur peut ainsi
dvelopper ses propres filtres, implmentant les interfaces particulires
" IUIElementDrawFilter " et " IUIElementCreationFilter ". Ces interfaces
contiennent les mthodes appeles
par le framework lors de la cration
ou de laffichage des composants. En
utilisant ces filtres, le dveloppeur a la
possibilit daccder aux diffrents
sous-lments constituant le composant, les " UIElement " (lment graphique de base du Framework). Les

utilisateurs peuvent retirer certaines


de ses briques ou en ajouter de nouvelles pour adapter la prsentation du
composant au contexte fonctionnel
souhait. Par exemple, dans la capture dcran ci-dessus, nous avons
implment plusieurs filtres pour
modifier laspect visuel des rendezvous de notre solution de planning. En
personnalisant ainsi le composant,
nous avons pu afficher plusieurs
lignes dadresses et les ressources
affectes au rendez-vous, chacune
personnalise par une icne.

Opter pour le look


Office 2007 !
Depuis la version 2007 volume 3,
NetAdvantage met disposition des
dveloppeurs le look Office 2007 :
Contrles dont la mise en relief change au survol de la souris, utilisation
de dgrads de couleurs et danimations pour les transitions dtat
mais surtout donnant accs aux nouveaux modes de reprsentation des
menus : Les rubans. On dispose
aussi dun diteur graphique intgr
au designer de fentre de Visual Studio, permettant de crer ses propres
onglets, menus, boutons, galeries,
onglets contextuels... Lensemble des
spcifications et des guides dimplmentation des rubans Microsoft est
respecte et bien videmment les
trois looks standard " Office 2007"
sont disponibles (Bleu, Noir, Gris
Royal). Et si une fentre fille de votre
application possde ses propres
rubans en mode design, ceux-ci
seront fusionns de manire automatique aux rubans de la fentre parente lors de son affichage.

30-43

22/01/2009

14:42

Page 35

dossier \\ composants

Comment crer des


interfaces dynamiques
Dans cet article nous allons plus particulirement voir lutilisation des
composants issus des gammes dILOG pour construire une interface
graphique sur diffrentes plates-formes. Notre principal exemple concernera
Elixir. Nous aborderons rapidement Java.
Une application Flex :
une agrgation de composants
Le code source dune application Flex est principalement
constitu dun fichier MXML qui dcrit lapplication. Chaque
balise MXML dans ce fichier reprsente un composant qui
constitue une des briques de lapplication. La plupart de ces
composants sont graphiques, mais il peut aussi s'agir de
composants logiques comme ceux permettant laccs un
service web. Une application Flex contient donc des donnes (ou alternativement laccs ces donnes travers
un service) et linterface permettant dafficher les donnes.
Par exemple, la petite application qui suit affiche, sous
forme dun arbre simple, lorganigramme dune socit, luimme dfini en XML :
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="black">
<mx:Script>
<![CDATA[
[Embed(source="user8.svg")]
public var user8:Class;

Le rendu dune telle application est le suivant : [Fig.1]


On peut noter dans cette application lutilisation de deux
composants ; un de type Label et lautre de type Tree
(arbre). Le composant de type Label est trs simple : il
affiche juste un texte spcifi en dur par la proprit " text "
et dune couleur dfinie par la proprit de style " color ".
Cette dernire pourrait tre dclare dans un fichier CSS
externe pour rendre plus flexible le style de lapplication.
Le composant de type arbre est tout simplement connect
la source donne en utilisant la proprit standard dans
le monde Flex, nomme " dataProvider " (ou fournisseur de
donnes). Les autres proprits importantes pour la
connexion aux donnes sont :
lattribut " labelField " qui permet au composant de savoir
o chercher le texte afficher dans larbre parmi les lments du fournisseur de donnes, dans notre cas dans
lattribut " name " des nuds XML ;
et lattribut " iconFunction " qui fournit une fonction
ActionScript permettant de retrouver limage de lemploy
courant et de lafficher comme icne dans larbre.
On dit que ces attributs permettent de lier le composant au
fournisseur de donnes.

// ...
private function pictureFunction(item:Object)
:Object {
return this[item.@picture];
}
]]>
</mx:Script>
<mx:XML id="">
<employee name="Jon" picture="user8">
<employee name="Martin" picture="user5">
<!-- other employees -->
</employee>
<employee name="Nandini" picture="user3"/>
</employee>
</mx:XML>
<mx:Label text="Organigramme de la socit" color
="white"/>
<mx:Tree dataProvider="{orgmodel}"
labelField="@name" iconFunction="pictureFunction"
width="100%" height="100%"/>
</mx:Application>

Aller plus loin


en utilisant des composants avancs
Tentons maintenant damliorer le rendu de notre application. Lavantage de la programmation base de composants est que si les diffrents composants respectent bien
les mmes paradigmes de programmation il devient relativement simple de faire voluer lapplication en remplaant
Fig.1

Fvrier 2009 \\ PROgrammez !

35

30-43

22/01/2009

14:42

Page 36

dossier \\ composants
un composant par un autre plus volu. Par exemple, dans
lextrait de code suivant, lapplication conserve le composant Label mais remplace larbre simple de la plate-forme
par un composant dorganigramme avanc OrgChart fourni
par la suite de composant Elixir. Vous pouvez noter que la
faon de lier le composant aux donnes est trs similaire
au cas prcdent et notamment la proprit " dataProvider
" est identique :
<ilog:OrgChart dataProvider="{orgmodel}"
width="100%" height="100%">
<ilog:fields>
<ilog:OrgChartFields nameField="@name"
pictureFunction="pictureFunction"/>
</ilog:fields>
</ilog:OrgChart>
Comme vous pouvez le voir ci-dessous, le rendu dj
beaucoup volu travers ce simple remplacement de
composant : [Fig.2]
Nous pouvons aller encore plus loin en utilisant un autre
paradigme des composants Flex. En effet sur cette plateforme, les composants affichant des donnes comme
larbre ou lorganigramme possdent une proprit nomme " itemRenderer " qui permet de spcifier un composant dlgu qui sera en charge de rendre chaque item,
dans notre cas chaque employ. Bien sr lorganigramme

Fig.2

dElixir fournit un tel dlgu par dfaut, mais il est relativement facile de le spcialiser et de le remplacer par votre
propre version. Un exemple typique est dajouter un bouton
douverture / fermeture sur chaque employ permettant
lutilisateur de choisir de visualiser ou non ses subordonns. Ceci est relativement ais en sous-classant le composant dlgu par dfaut :
package
{
public class ExpandCollapseItemRenderer extends Org
ChartItemRenderer
{
[Embed(source="expand.swf")]
private static const EXPAND_IMAGE:Class;
[Embed(source="collapse.swf")]
private static const COLLAPSE_IMAGE:Class;

Java et les composants


La plate-forme Java dfinit JFC/Swing comme modle de composants pour linterface utilisateur des applications desktop. Elle
fournit un ensemble de composants comme JFrame, JTable et
JTree permettant de construire rapidement des applications sur
le desktop. La suite de visualisation ILOG JViews tend
JFC/Swing et ajoute des composants graphiques permettant
dafficher et de manipuler interactivement des donnes clients.
Une des fonctionnalits uniques de JViews est que ses composants graphiques sont galement capables de se dployer pour
le Web. Pour ce faire, JViews a adopt le modle de composant
JSF (Java Server Faces) dfini par Sun. Le composant JSF est
alors charg dexporter pour le Web linterface graphique du
composant desktop. Le fragment de code suivant montre comment utiliser un composant JSF dans une page Web :
<jvdf:diagrammerView id="diagrammer"
style="width:600px;height:350px"
data="/data/diagrammer.idpr"/>
La particularit du modle JSF est que toute " lintelligence " de
lapplication est situe dans un serveur Java, et que lapplication
dploye consiste uniquement en un ensemble de pages HTML
et fichier JavaScript. Laccs aux donnes seffectue alors travers toutes les possibilits fournies par la plate-forme Java, et
ses nombreuses extensions.

36

PROgrammez ! \\ Fvrier 2009

private var _expandCollapse:Image;


//
de
//
//

afficher EXPAND_IMAGE ou COLLAPSE_IMAGE en fonction


ltat
effectuer une action quand on clique sur limage
...
}

}
Puis en lutilisant dans lapplication travers la proprit
" itemRenderer ":
<ilog:OrgChart id="orgchart" width="100%" height=
"100%"
dataProvider="{collection}" initialize="collection
.refresh() ">
<ilog:itemRenderer>
<mx:Component><local:ExpandCollapseItemRenderer
/></mx:Component>
</ilog:itemRenderer>
<ilog:fields>
<ilog:OrgChartFields pictureFunction="pictureFunction"/>
</ilog:fields>
</ilog:OrgChart>
Christophe Jolif (Principal Architect),
Yunpeng Zhao (Senior Scientist),
Eric Durocher (Principal Architect) - ILOG

30-43

22/01/2009

14:42

Page 37

SOA est devenu en peu de temps le mot-cl des dveloppements


logiciels. SOA est une nouvelle faon de faire qui sappuie sur un
ensemble de technologies existantes : UML, J2EE, .Net, XML, etc.
Matriser SOA implique de matriser ces technologies pour les associer
efficacement au sein dune nouvelle approche.
SOFTEAM Formation, forte de son exprience en Mthodologie, Architecture et
Dveloppement, a construit un cursus complet de formation SOA qui vous permet
de dbuter ds les phases amont, de poursuivre en architecture, et daller jusqu
la ralisation dans le langage de votre choix.

Soyez prts
pour les nouvelles architectures

SOA

et

Web 2.0 !

Nouveau catalogue Formation 2009 :


SOA
SOA

Ajax
Patterns

Java

SOA

Web 2.0

EA

SOA
EAI

Frameworks

SOA
SOA

UML 2
BPM

ESB

SOA

Mthodologie

Urbanisation

MDA Architecture

.NET

XML

J2EE

0
Web 2.

Web services

UML pour la matrise douvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Analyse et conception avec UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alignement Mtier du Systme dInformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Architecture dEntreprise (EA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mthodologie pour SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Architecture technique SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement de Web Services en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement de Web Services en C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Architecture distribue : la synthse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmation oriente objet avec Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement dapplications JEE 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement dapplications JEE 5 Front End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement dapplications JEE 5 Back End avec EJB 3 . . . . . . . . . . . . . . . . . . . . . . .
Matrise du framework (Struts / JSF / Spring / Hibernate) . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement dapplications .NET / C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppement dapplications RIA avec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(Ajax / Dojo / GWT / FLEX3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

5
5
1
2
1

j
j
j
j
j

Convergence SOA, UML2, BPMN, EA


Modlisation EA, BPMN, SOA avec Objecteering SOA Solution . . . . . . . . . . . . . . . . .
Analyse et Conception UML2 avec Objecteering Modeler . . . . . . . . . . . . . . . . . . . . . .
Expression de besoins en UML2 avec Objecteering Requirements. . . . . . . . . . . . . . .
Architecture MDA avec Objecteering MDA Modeler . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gnration de code Java, .NET C#, C++ avec Objecteering Developer . . . . . . . . . .

SOFTEAM Formation

Tl. : 01 53 96 84 30 - Fax : 01 53 96 84 01
Paris : 21 avenue Victor Hugo - 75016
Rennes - Nantes - Sophia Antipolis

Calendrier complet et inscriptions en ligne

www.softeam.fr

Objecteering

2
4
2
2
2
2
3
3
2
4
5
4
3
3
4
2
4

Your projects deserve a tool *

La convergence SOA, UML2, BPMN, EA,


pour le dveloppement guid par le modle
outil intgr assurant la modlisation complte
des applications et systmes,
facile utiliser : chaque acteur, chaque
phase, la reprsentation ddie,
alignement mtier du SI grce au rfrentiel
partag et la traabilit totale entre toutes les
vues et phases,
haute productivit grce la gnration
automatique de la documentation et du code.
* Vos projets mritent un outil.

www.objecteering.com
Tl. : 01 30 12 16 60 - sales@objecteering.com

The model-driven development compagny

30-43

22/01/2009

14:42

Page 38

dossier \\ composants

Des composants MVC pour PHP 5


eZ Components (http://ezcomponents.org) est une bibliothque de composants
ddie PHP5. Son dveloppement est assur et coordonn par Ez Systems. La
bibliothque est Open Source (licence New BSD). Dans cet article nous allons
dcrire lutilisation de MvcTools.
MVC dcouple la couche mtier, de la gnration du code ct
client et de la logique des actions. Ainsi, une modification de l'une
de ces trois couches permet un gain de rapidit :
de dveloppement, grce la r-utilisation de classes existantes,
de maintenance et volutivit, puisque les modifications d'une
couche ne devraient pas avoir de rpercussion sur les autres.
Le composant MvcTools fournit aux dveloppeurs tous les outils
pour architecturer une application. Son objectif n'est pas de fournir un framework complet mais seulement diffrentes briques qui
peuvent tre utilises. Ce composant est galement directement
utilisable sans framework, comme le dmontrent les applications
TheWire : une application du style de Twitter pour partager des
informations; ainsi que HelloMvc : l'exemple qui salue le visiteur
dans son langage favori. Les applications sont tlchargeables
avec SVN aux adresses suivantes :
TheWire : http://svn.ez.no/svn/ezcomponents/docs/examples/applications/TheWire/
HelloMvc : http://svn.ez.no/svn/ezcomponents/docs/examples/applications/HelloMvc

Classes principales
Le composant MvcTools fournit des classes pouvant tre utilises
dans diffrentes parties d'un framework MVC. C'est--dire des
fonctionnalits pour le dispatching, lecture de requte, routage,
gnration de vues, gnration de rponse et filtrage.

* Elle devrait retourner un tableau d'objets qui implmentent


* l'interface ezcMvcRoute. Par exemple des instances de
* la classe ezcMvcRegexpRoute.
*
* @return array(ezcMvcRoute)
*/
public function createRoutes()
{
return array(
new ezcMvcRailsRoute( '/:nom', 'helloControler', 'salutations
Personnelles' ),
new ezcMvcRailsRoute( '/', 'helloControler', 'salutations' ),
);
}
}
?>
Chaque route dfinit une expression ('/' ou '/:nom') ainsi qu'un
contrleur (helloControleur) et une action ('salutationsPersonnelles' ou 'salutations'). Le routeur peut se baser sur des urls prfixes, il est ainsi directement utilisable dans un autre projet sans
causer de conflit.

Contrleur
Parseurs de requte
Le parseur de requte est charg de lire la requte et de gnrer un
objet ezcMvcRequest correspondant. Au moment ou cet article est
crit, il en existe deux: un pour les requtes HTTP, et un pour les emails.

Routage
Le routeur analyse les donnes de la requte et slectionne le
contrleur adquat. MvcTools fournit actuellement deux types de
routes pour faciliter la programmation du routeur: une pour tester l'url absolue avec une expression rgulire et l'autre avec une
syntaxe similaire celle du framework Rails. Il faut tendre la classe ezcMvcRouter et implmenter la mthode abstraite createRoutes() pour qu'elle renvoie la liste de vos routes.
Exemple d'implmentation dans le cas de l'application Hello :
<?php
/**
* Le routeur de votre application hello.
*/
class helloRouter extends ezcMvcRouter
{
/**
* Cette mthode renvoie la liste des routes de l'application.
*

38

PROgrammez ! \\ Fvrier 2009

Le contrleur doit hriter de la classe abstraite ezcMvcController


pour tre utilisable avec le dispatcheur: c'est le dispatcheur qui
l'instancie grce aux informations renvoyes par le routeur,
encapsules dans un objet de classe ezcMvcRoutingInformation.
Le dispatcheur excute ensuite la mthode createResult() du
contrleur, qui doit retourner son rsultat encapsul dans un
objet de l'une des classes suivantes: ezcMvcInternalRedirect:
dans le cas d'une redirection interne; ou ezcMvcResult: pour
encapsuler les variables envoyer la vue. MvcTools fournit galement une exception jeter dans le cas o l'action n'a pas t
trouve: ezcMvcActionNotFoundException.

Vue
Les classes de gnration de vue actuellement mises disposition par MvcTools utilisent donc l'objet de classe ezcMvcResult
renvoy par le contrleur. Ainsi, il est possible d'utiliser le mme
objet de rsultat avec n'importe quel type de vue. Avant de commencer programmer la vue, il faut comprendre le concept des
zones. Les zones sont un moyen d'arranger les diffrentes parties d'une mise en page (layout en anglais). Considrez la mise
en page suivante : [Fig.1]
Il y a trois zones dans ce petit exemple :
La zone menu, par exemple avec un lien vers la page d'accueil.
La zone contenu, par exemple avec le corps d'un article.

30-43

22/01/2009

14:42

Page 39

dossier \\ composants

Fig.1

criveur de rponse
L'criveur de rponse a pour responsabilit de renvoyer une
rponse utilisable par le client grce l'objet de rponse renvoy
par la vue. Un seul criveur de rponse est actuellement livr
avec MvcTools: ezcMvcHttpResponseWriter.

Dispatcheur

La zone pagelayout, qui encapsule les deux autres, et fournit la


mise en page gnrale, les en-ttes HTML tels que les feuilles
de styles.
Chaque vue que vous dfinissez peut inclure plusieurs zones, chacune a un nom qui sert d'identifiant ainsi qu'un gnrateur. A l'instar du routeur, il faut tendre la classe de vue abstraite
ezcMvcView et implmenter une mthode qui doit retourner la liste
des zones de votre application. Toute les zones d'une vue n'ont pas
besoin d'utiliser le mme gnrateur. Le paramtre $layout dtermine si des zones de type mise en page gnrale doivent tre
incluses. Ainsi, il suffit d'appeler la mthode createZones( false ) de
la vue d'une autre application pour l'inclure, sans inclure sa zone de
mise en page, afin d'viter les conflits. Exemple :
<?php
/**
* La vue de votre application hello.
*/
class helloView extends ezcMvcView
{
function createZones( $layout )
{
$zones = array();
$zones[] = new ezcMvcTemplateViewHandler( 'menu', 'menu.ezt' );
$zones[] = new ezcMvcPhpViewHandler( 'contenu', '../
templates/salutations_generiques.php' );
if ( $layout )
{
$zones[] = new ezcMvcTemplateViewHandler( 'page_layout',
'layout.ezt' );
}
return $zones;
}
}
?>
Sont actuellement disponibles: ezcMvcPhpViewHandler pour les
templates en PHP, ezcMvcJsonViewHandler pour rpondre vos
requtes AJAX par exemple, et ezcMvcTemplateViewHandler qui
couple le composant Template de la bibliothque eZ Components. Les vues encapsulent les en-ttes ainsi que le corps de la
rponse un objet de classe ezcMvcResponse.

Le dispatcheur est responsable du flux complet de la requte.


Sans lui, les classes sont lchement couples donc facilement rutilisables. Le composant MvcTools livre un dispatcheur basique
pour l'instant: ezcMvcConfigurableDispatcher. Il dpend d'un objet
de configuration d'interface ezcMvcDispatcherConfiguration, et
c'est ce dernier qu'il dlgue les tches spcifiques tout au long
de son excution :
instanciation du parseur de requte,
cration de la requte de redirection fatale si ncessaire, donc
avec l'url de votre choix,
filtrage de la requte: ajout, modification, suppression de
variables de l'objet requte. Avant et aprs l'excution du routeur.
instanciation du routeur, vous pouvez ainsi importer les routeurs d'autres applications,
filtrage de l'objet de rsultat du contrleur,
instanciation de la vue,
filtrage de l'objet de rponse,
instanciation de l'criveur de rponse.

Conclusion
L'utilisation des eZ Components et de MvcTools est une option intressante pour la ralisation d'application Web. Il s'agit d'une
approche unique en langage PHP aujourd'hui, diffrente de celle
propose par d'autres framework. Cet article a permis de parcourir les principaux lments d'une telle implmentation. On peut
pour l'instant regretter que la documentation ne soit disponible
qu'en anglais, celle-ci est nanmoins excellente. L'abstraction de
protocole permet vos contrleurs d'tre nativement utilisables
pour crer des applications plus riches, par exemple: avec ou sans
AJAX, RSS, Atom, etc. Le prfixage des routes par-routeur permet
de r-utiliser directement les contrleurs d'autres applications. Le
systme de zone de la vue permet de r-utiliser directement les
vues d'autres applications.
James Pic
Dveloppeur indpendant, membre actif du groupe de dveloppement d'eZ
Components, il fait partie du ple de comptence ChocolatPistache.
avec la participation de
Derick Rethans
Architecte senior chez eZ Systems, responsable du projet eZ Components, il
est galement un important contributeur du projet PHP.
Roland Benedetti
Manager d'eZ Systems France
http://ezcomponents.org et http://ez.no.

GLOSSAIRE
MVC : acronyme de "Modle-Vue-Contrleur". MVC est un concept
utilisable dans des architectures logicielles d'application Web. MVC est
un patron de conception orient objet.
Parser / parseur : analyseur de document XML, il permet d'en extraire
les donnes (on parle de parsing de document) et de vrifier la validit
du document.

Fvrier 2009 \\ PROgrammez !

39

30-43

22/01/2009

14:42

Page 40

dossier \\ composants

Dcuplez la puissance de Flex !


Le dveloppement base de composants logiciels consiste dcomposer un logiciel en
plusieurs composants fonctionnels ou logiques, avec des interfaces bien dfinies
utilises pour la communication entre composants. Lobjectif de cette approche est de
rendre la cration de logiciel proche dautres activits dingnierie comme llectronique
ou la mcanique, dans lesquelles on pioche dans des banques de composants existants
que lon assemble selon les besoins, plutt que de rcrer tous les lments.
Un composant logiciel est un lment dun systme informatique
qui propose des services et/ou des vnements prdfinis, et qui
est capable de communiquer avec dautres composants.
Daprs Clemens Szyperski et David Messerchmitt, un tel composant devrait vrifier les conditions suivantes :
Ne pas tre spcifique un contexte donn
Etre assemblable avec dautres composants
Etre encapsul, c'est--dire non accessible autrement que par
les interfaces proposes
Etre une unit indpendante, dployable et versionnable indpendamment des autres lments du systme

Quelles contraintes ?
Dvelopper un composant qui soit effectivement rutilisable
demande un effort important, car le composant requiert:
Une documentation exhaustive
Des tests trs pousss
Un contrle de validit des entres trs robuste
Un transfert retour des messages derreur, l o cest appropri
Dtre dvelopp avec la conscience quil sera utilis de manire
non prvue

Exemple : macro composant en Flex


Nous allons ici prsenter un exemple bas sur un des composants Flex du KapLab, choisi pour sa simplicit dutilisation : le
RadarChart. Flex nous permet de raliser trs simplement de

nouveaux composants facilement rutilisables, ds lors quils sont


bass sur des composants existants. La ralisation dun composant entirement en AS3, sur la base dun UIComponent est en
revanche nettement plus complexe et ne sera pas aborde ici.
Objectifs du macro-composant
Nous allons fabriquer un macro-composant, form du composant
" DataGrid " du framework Flex, et du composant " RadarChart ",
disponible en tlchargement gratuit sur le site du KapLab
(http://lab.kapit.fr). Simple dutilisation, il suffit de lui spcifier un
dataProvider pour quil affiche tout seul les donnes de manire
correcte. Lobjectif est dobtenir un composant de reporting
" prt lemploi ", acceptant un simple fichier XML en entre pour
afficher ensuite un Radar et une liste permettant de slectionner
les sries afficher. Le composant se chargera dinterprter le
contenu du fichier XML afin den extraire la liste des sries et des
valeurs afficher (numriques). Par ailleurs, nous dfinirons aussi
un vnement custom afin de dtecter les sries slectionnes.
Le composant devra donc fonctionner tout seul, partir du
moment o on lui aura fourni la source de donnes XML, ainsi que
le nom de lattribut qui servira de label aux sries.
Le composant dvelopp sera utilis dans une application de test,
avec deux jeux de donnes XML diffrents, et une DataGrid permettant dafficher les donnes slectionnes.
Cration du composant
Avec Flex, il est possible de crer un nouveau composant avec de
lactionscript pur ou bien avec du code MXML. Nous utiliserons la
deuxime approche qui simplifie et raccourcit lcriture du code. Il
suffit donc de crer un nouveau fichier MXML et de choisir la classe de base dont il hritera, par exemple VBox. Le nom de ce
fichier MXML reprsente en fait le nom de la classe du composant cr, qui est immdiatement rutilisable.
Nous allons donc ici crer le fichier " RadarComponent.mxml ",
qui sera bas sur une HDividedBox :
RadarComponent.mxml
<mx:HDividedBox xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:radarchart="fr.kapit.radarchart.*">

</mx :HDividedBox>
Ce fichier MXML sera traduit en code AS3 avant dtre compil.
Ainsi, le fichier RadarComponent.mxml sera-t-il traduit en une

40

PROgrammez ! \\ Fvrier 2009

30-43

22/01/2009

14:42

Page 41

dossier \\ composants
classe du mme nom (RadarComponent), qui sera donc rutilisable soit dans du code AS3, soit dans des tags MXML.
Proprits du composant
Il nous faut dfinir linterface publique du composant, notamment
les proprits qui seront accessibles par lutilisateur. Nous aurons
besoin de deux variables :
labelField : cette proprit indiquera le nom de lattribut du
fichier XML de donnes, qui servira de titre aux sries. Par
dfaut, la valeur " name " sera utilise.
dataProvider : de type XML, cest la proprit principale, qui
nous permettra de transmettre les donnes afficher dans le
composant
[Bindable] public var labelField : String = "name";
public function set dataProvider(value:XML) : void
On remarquera que labelField est bindable, ce qui facilite son utilisation, et que la variable dataProvider est dfinie au travers
dune mthode setter. Ce dernier point est important, car il
nous permettra de contrler laffichage du composant au travers
de la mthode " commitProperties ", ce qui est la bonne faon de
faire avec Flex.
Evnement custom
Nous allons aussi dfinir une classe dvnement spcifique afin
de notifier des changements de slections sur les sries. Pour
cela, commenons par crer une nouvelle classe qui hrite de la
classe Event, et dans laquelle nous stockerons la liste des sries
slectionnes :
package fr.kapit.demo
{
import flash.events.Event;
public class SerieChangeEvent extends Event
{

}
}
Puis nous dclarons cet vnement dans notre composant laide des MetaData. Nous verrons dans le code source que cet vnement sera dispatch lors de la slection de nouvelles sries.
Traitement des donnes XML
Le setter du dataProvider effectue les oprations suivantes :
Dcodage du XML dans un tableau dobjets dynamiques
Stockage de ce tableau dans une variable interne prive (_dataProvider)
Positionnement dun flag de modification du dataProvider (_dataProviderChanged)
Invalidation des proprits (invalidateProperties) pour dclencher lappel la fonction commitProperties
Affichage du graphe et fonction commitProperties
Dans la fonction commitProperties, on effectue les oprations suivantes :
Remise zro du flag de modification du dataProvider

Cration des colonnes de la DataGrid


Cration des axes du graphique
Affectation du dataProvider de la DataGrid, ce qui dclenche
son affichage
Affectation du dataProvider du graphe, ce qui dclenche sa
mise jour
Utilisation du composant
Nous allons tout dabord crer une application principale, ComponentDemo.mxml, dans laquelle nous allons :
Importer deux jeux de donnes XML diffrents, via la directive
[Embed] : le fichier " world.xml " qui contient des informations
gographiques, et le fichier " planet.xml " qui contient des donnes sur les plantes du systme solaire.
Dclarer deux instances du composant cr, en spcifiant les
donnes dentre.
Le code complet est sur le site www.programmez.com.
On notera les points remarquables suivants :
Le mme composant peut tre rutilis autant de fois quon le
dsire au sein dune mme application
Pour des raisons de simplicit, notre composant est inclus dans
lapplication, mais il serait trs simple de len extraire et de le
packager sous la forme dune librairie SWC rutilisable dans diffrentes applications (ce qui est effectivement ncessaire pour
un composant du monde rel)
Nous avons pu fournir des jeux de donnes diffrents chaque
composant, en utilisant les interfaces dentre
Nous avons pu ragir lutilisation dun composant, au niveau
de lapplication qui lutilise, en nous branchant sur les vnements envoys par le composant (messages)
Lobjectif initial est donc atteint, mme sil ne sagit que dun
exemple trs simple. Au travers de celui-ci, nous avons pu cependant vrifier que Flex est le langage de choix pour le dveloppement dapplications base de composants. Le framework Flex
contient lui-mme plus de 100 composants pour fabriquer les
applications RIA, et la communaut de dveloppeurs en propose
encore bien plus.
Julien Revel
Associ et co-fondateur de Kap IT, il est Directeur Technique
et Innovation. Kap IT est une socit de conseil, de R&D logiciel
spcialis dans les applications Web 2. http://lab.kapit.fr

Fvrier 2009 \\ PROgrammez !

41

30-43

22/01/2009

14:43

Page 42

dossier \\ composants

Trouver les bons composants


JAVA
Gammes Ilog : lditeur rcemment rachet
par IBM propose plusieurs familles de composants pour les dveloppeurs Java. JRules,
un ensemble de composants pour les rgles
mtiers, et offre une gestion complte (cration, dploiement, monitoring. La famille
JView se spcialise dans la prsentation de
donnes, les graphiques. On a le choix entre
Diagrammer (librairie pour crer, grer des
graphiques, tableaux de bord) et Maps
(cartographie). www.ilog.fr
Infragistics NetAdvantage for JSF : package complet de composants Ajax pour JSF.
Propose de nombreux objets dinterface.
Rgulirement mis jour. Lditeur ne supporte plus la gamme JSuite.
Gamme Aspose : diteur peu connu en France, il propose plusieurs composants Java
orients bureautique, qui permettent par
exemple de manipuler, ouvrir, gnrer des
fichiers Excel, Word, PDF sans installer Office !
Supporte aussi OpenXML, OpenDocument,
RTF. Pratique et puissant ! Lditeur propose
galement un composant pour code barres
(Aspose.Bar Code). www.aspose.com
Chilkat : diteur quasi inconnu en France
mais trs prolifique, propose de trs nombreux composants pour utiliser, implmenter
le mail, zip, cryptage, SSH, XML, FTP, etc.
Disponible en diffrents langages dont Java,
.Net, Python, C++. http://www.chilkatsoft.com/
Et aussi : Extreme Component (http://www.zfqjava.com/), spcialis dans linterface, la prsentation. Eltima (www.eltima.com), propose
des composants dinterface pour Swing et les

O les acheter ?
Les tlcharger ?
Pour les contrles open source, gratuits, les sites des projets et des diteurs permettent de les rcuprer. Des
versions dessai sont souvent disponibles sur le site de lditeur.
Pour acheter, vous pouvez soit passer
par le site officiel quand une boutique en
ligne existe ou par des distributeurs. En
France, on citera : ComponentSource,
SOS Developers, Kapitec, STR.

42

PROgrammez ! \\ Fvrier 2009

graphiques. SoftwareFX avec ChartFX Developer Studio, PDFlib (composants pour PDF).

FLEX
Ilog Elixir : composants pour Flex et Air. Propose de nombreux objets dinterface (graph,
gauge, organigramme, cartographie). La version 2.0 sera prochainement disponible.
KapIt : diteur franais, il propose toute une
gamme de composants pour Flex, allant des
diagrammes la prsentation, en passant par
la console MVC, le treemap, etc. www.kapit.fr
Efflex : composants graphiques exploitant
Flex et Air. On dispose dun zoom de grid,
dun flip 3D Pratique et libre. www.efflex.org
FusionCharts : puissant composant anim
pour crer des graphiques. Supporte de
nombreuses sources de donnes. Il existe
aussi des composants de cartographie, de
widget. Pour en savoir plus sur loffre composants flex : http://flex.org/software/components

.NET
Infragistics : un des diteurs historiques du
march. Lditeur dcline ses contrles pour
.Net, ASP.Net, winforms, Silverlight, WPF.
Cela concerne aussi bien les objets dinterface que les classiques graphiques, diagrammes, radars, etc. Supporte les derniers
outils et versions .Net. www.infragistics.com
DevExpress DXperience : package complet
de composants dinterface pour Winforms et
ASP.Net. www.devexpress.com
Telerik fournit une large gamme de contrles
graphiques pour Winforms, WPF, Silverlight,
ASP.Net. Mais lditeur propose aussi des composants de mapping relationnel/objet, de
reporting. www.telerik.com

Lditeur possde aussi une gamme de composants


pour le reporting. www.componentone.com
ComponentArt : autre spcialiste de linterface, ComponentArt se spcialise dans linterface des sites ASP.net avec des contrles
Ajax particulirement puissants comme un
slecteur de couleur, le crateur du multipage, etc. La partie graphs et diagramme nest
pas oublie avec Charting pour ASP.net et
.Net, ainsi que des contrles de reporting.
www.componentart.com
Nsoftware : diteur de composants multi-langages (.Net, ActiveX, java, C, C++, etc.). Fournit de nombreux composants pour le rseau
(SSL, mail, SSH), la compression (Zip) ou
encore les fonctions business (paypal), Biztalk.
www.nsoftware.com
Xceed : une offre trs ouverte sur linterface
(3D, carrousel, diagrammes) aussi bien pour
.Net que WPF ou ASP.Net. Lditeur dispose
aussi dune solide offre sur le stockage, la
compression (en Stream, en local, et mme
en 64bit), sans oublier les fonctions de
rseau comme FTP. www.xceed.com
Et aussi : Iocomp, Dundas, Janus, SoftwareFX, Dart, VantagePoint

Les autres langages


Nevron : peu connu en France, Nevron dveloppe des composants haut de gamme pour
les graphiques, diagrammes et interfaces utilisateur en gnral. www.nevron.com
ComponentOne : loffre de lditeur concerne
ASP.Net Ajax, WPF, Silverlight et Winforms.
Studio Enterprise inclut lensemble des
contrles .Net + Actives et la partie mobilit.

Impossible de tout lister sur une seule page !


Il existe une of fre nombreuse sur les
autres langages et plates-formes : Ajax,
Javascript, PHP, Delphi, C, C++, Python. Sur
PHP, on peut citer lun des plus connus :
ezcomponent. Ou encore les contrles
de JomiTech (JCT). De nombreux diteurs
cits ci-dessus dclinent leurs composants
pour diffrents langages.

30-43

22/01/2009

14:43

Page 43

44-55

22/01/2009

14:37

Page 44

dveloppement web \\ ASP.Net

Dveloppez
votre site web avec

ASP.Net !

ASP.NET est un
langage web
appartenant la
plate-forme .NET de
Microsoft, qui vous
permet de crer des
sites web rapidement
et simplement. Nous
allons plonger au
cur dASP.NET pour
mieux lapprhender.
ASP.NET propose un
ensemble de
technologies qui vont
vous simplifier
lcriture
dapplications web
dynamiques.

SP.NET a accs toutes les classes du framework .NET qui


est un ensemble de composants pouvant tre utiliss dans
diffrents langages de programmation (grce la CLR), dont
les plus connus sont :
VB.NET (successeur de VB).
C#, langage spcialement conu pour la plate-forme .NET
IronRuby qui, comme son nom lindique, est un Ruby sous .Net.
IronPython qui, de la mme manire, est un Python sous .Net.

En rsum, peu importe le langage que vous voulez utiliser, Microsoft met disposition un ensemble doutils qui vous faciliteront lcriture dune application ou/et dun site internet. Lensemble de ces
outils, constitue le framework .NET. Nous en sommes aujourdhui
la version 3.5.

44

PROgrammez ! \\ Fvrier 2009

Pr-requis
Combien cotent .Net et les outils ? En fait, vous pouvez dbuter
le dveloppement ASP.Net gratuitement ! La gamme Express est
suffisante pour dmarrer en .Net et dans le dveloppement web !
Vous pouvez ds lors utiliser Visual Web Developer Express pour
dvelopper vos sites internet et SQL Server Express pour la partie
donnes.
Vous pouvez retrouver ces deux outils cette adresse :
http://msdn.microsoft.com/fr-fr/express/aa975050.aspx
Si nanmoins vous dsirez directement utiliser les outils professionnels, vous pouvez utiliser Visual Studio 2008.
Vous pouvez galement tlcharger le Framework 3.5 cette
adresse : http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en

44-55

22/01/2009

14:37

Page 45

dveloppement web \\ ASP.Net


Ce nest cependant pas obligatoire, le framework 2.0 est install
par dfaut et il suffira dvelopper en ASP.Net. Le framework 3.5
est aujourdhui le standard pour .Net. Ce dernier napporte pas
beaucoup de nouveauts pour le dveloppement web.

Mon premier projet ASP.Net


Que ce soit avec Visual Web Developer ou Visual Studio, la procdure est la mme. Premirement, vous devez crer un site web. Pour
cela, rendez-vous dans le menu File -> New -> Web Site. [Fig.1]
Slectionnez ensuite ASP.NET Web Site , donnez-lui un nom et cliquez sur Ok . Visual Studio / Web Developer cre pour vous un
ensemble de fichiers et de dossiers pour vous aider dmarrer.
Vous pouvez voir ces fichiers dans lexplorateur de solution. [Fig.2]
Default.aspx est souvent la page par dfaut dun site ASP.NET. Ceci
est configurable dans IIS qui est le programme traitant les
demandes sur des pages internet (qui coute sur le port 80 par
exemple). Cest ce que fait Apache si vous tes habitu travailler
avec PHP, Ruby etc.
Vous remarquez que Default.aspx est un fichier qui lui est attach.
Ce fichier sappelle Default.aspx.cs. [Fig.3]
Cest dans ce fichier que se trouvera toute la logique mtier de
notre page. Microsoft a voulu sparer le design et le code, ce qui
est une bonne chose. Vous aurez donc tout laspect graphique au
niveau de Default.aspx et tout laspect code au niveau de
Default.aspx.cs (on appelle le code contenu dans ce fichier: le code
behind). Ceci nest pas obligatoire, vous pouvez dclarer le design et
le code dans un mme fichier. Cependant, nous vous conseillons
fortement de toujours sparer le code, de linterface. Pour la
maintenance, lvolution, le debug de lapplication, cest bien plus
pratique. Le code se trouvera alors entre des balises script mais
cela nuit la lisibilit du code et la comprhension de celui-ci.
Default.aspx ressemble ceci lorsque vous louvrez :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.
aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<form id="form1" runat="server">


<div>
</div>
</form>
</body>
</html>
Cette page ne fait rien! Si vous voulez voir un aperu dans le navigateur, vous pouvez effectuer un clic droit sur le nom de la page dans
lexplorateur de solution et cliquer sur View in browser .
Vous verrez que votre navigateur par dfaut se lance et affiche une
page blanche. En fait, le contenu de votre page doit tre situ entre
les balises form . Nous reviendrons plus tard sur ces balises.
Si nous regardons la premire ligne de notre page, nous remarquons quelle indique de nombreuses informations sur la page :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default
.aspx.cs" Inherits="_Default" %>
Cette ligne est appele une directive . Toutes les directives dune
page commencent par <%@ et finissent avec %>. Elles permettent
de dclarer des informations qui sont ncessaires au compilateur
pour pouvoir compiler la page. Par exemple, nous avons besoin de
savoir quel langage est utilis (Language="C#") pour savoir quel
compilateur traitera la page, ou encore quel fichier contient le code
(CodeFile="Default.aspx.cs"). Le reste de la page devrait vous tre
familier si vous avez dj lhabitude de programmer des sites internet. On retrouve une ligne pour le dtd :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Note : Visual Studio gre trs bien ce dtd et vous indique une erreur lorsque
vous ne le respectez pas dans votre HTML.
Le reste de la page ne devrait pas vous poser de problme de comprhension, hormis le form .
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
Fig.1

</div>
</form>
</body>
</html>

Fig.2

Fig.3

Fvrier 2009 \\ PROgrammez !

45

44-55

22/01/2009

14:37

Page 46

dveloppement web \\ ASP.Net


Au niveau du code behind, nous avons ceci :
using
using
using
using
using
using
using
using
using
using
using

System;
System.Configuration;
System.Data;
System.Linq;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.HtmlControls;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Xml.Linq;

public partial class _Default : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)
{
}
}
On remarque directement de nombreux using qui permettent de
faciliter lutilisation des composants du framework.NET.
Par exemple, sans using System.IO vous devriez crire dans
votre code :
System.IO.File.Exists("file.txt");
Avec le using, vous simplifiez votre code :
File.Exists("file.txt");
Les using qui sont par dfaut affichs, dpendent du framework
que vous utilisez. Ici, en version 3.5. Ne vous inquitiez donc pas si
vous avez des using diffrents des miens. Ce qui suit est plus intressant. On voit la dclaration dune classe qui hrite de Page et
qui dclare une mthode Page_Load. Cette mthode est un exemple
devent handler. Celle-ci dclenche lvnement Load de notre page.
C'est--dire que cette mthode sera excute chaque fois que
nous nous rechargerons la page.
Load en anglais signifiant
Fig.4
Chargement .
Il existe des vnements qui sont
dclenchs au chargement de la
page que nous verrons un peu plus
loin dans cet ar ticle (cf.
http://www.loicbar.com/post/HTTP-Applications-et-HTTP-Modules.aspx).
Outre toutes les balises HTML que
vous connaissez, ASP.NET vous propose des contrles qui vont simplifier lcriture de vos applications
web. Ces contrles commencent
tous par <asp : . On retrouvera
parmi les plus utilis :
Le label
Le GridView
Le Repeater
Le Literal

46

PROgrammez ! \\ Fvrier 2009

Vous pouvez retrouver la liste entire de ces contrles dans la toolbox de votre Visual Studio / Web Developer. [Fig.4]
Pour insrer lun de ces contrles dans votre page, slectionnez-le
dans votre toolbox et dplacez-le sur votre page.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.
aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text=" Mon premier
label"></asp:Label>
</div>
</form>
</body>
</html>
Nous avons par exemple ajout un label notre page. Vous remarquez la proprit runat="server" qui permet dindiquer que ce
contrle devra tre valu au niveau du serveur.
Si vous lancez la page de votre explorateur, vous verrez que notre
asp :label ) a t transform en une balise span :
<span id="Label1">Mon premier label</span>
Que sest- il pass ? Le compilateur vu un contrle qui devait tre
interprt par le serveur, celui-ci la trait pour le remplacer par du
HTML, comprhensible par le navigateur. Dans ce cas-ci, lutilisation
dun contrle ne savre pas utile. Lutilit vient lorsque vous traitez
ce contrle dans le code behind. Vous avez en effet la possibilit
dditer les proprits du label en code behind (Text, etc.) :
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = "Ce label a t trait dans le code behind";
}
Ce qui donnera le rsultat suivant :
<span id="Label1">Ce label a t trait dans le code behind</span>

Note : ce que vous crivez dans le code behind pour la proprit Text prend
le dessus sur ce que vous avez crit dans le design de la page, car lvnement
Load de la page passe aprs le traitement du render de la page. La proprit de votre label est, dans un premier temps, gale Mon premier label
mais est ensuite rcrite au moment du Load.

Le web.config
Le Web.config est un fichier que vous retrouvez la racine de votre
application et qui contient toutes les informations sur la configuration de votre application. Si vous ouvrez le Web.config de votre application web, vous trouverez de nombreuses informations. Dtaillons
les plus importantes prendre en compte.

44-55

22/01/2009

14:37

Page 47

44-55

22/01/2009

14:37

Page 48

dveloppement web \\ ASP.Net


La dclaration des lments
qui se trouveront dans le Web.config :
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.
Configuration.SystemWebExtensionsSectionGroup, System.Web.
Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken
=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.
ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.
Configuration.ScriptingScriptResourceHandlerSection, System.Web.
Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=
31BF3856AD364E35" requirePermission="false" allowDefinition=
"MachineToApplication"/>
...
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
Les diffrentes libraires dont a besoin notre application :
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture
=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.DataSetExtensions, Version=
3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
La dclaration des contrles ASP.NET :
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly
="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.Web
Controls" assembly="System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
1]

Cest dans cette section que nous ajouterons nos propres contrles.
La dclaration de nos chanes de connexion vers une base de donnes :
<connectionStrings>
<add name="LimbourgBDConnectionString" connectionString="Data
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Programme
zBD.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>

Les contrles ASP.NET


Microsoft fournit de nombreux contrles que vous pouvez utiliser

48

PROgrammez ! \\ Fvrier 2009

pour enrichir vos applications web. On peut rpertorier ces


contrles en plusieurs catgories.
Les contrles standard
Ces contrles vous permettent dafficher des lments comme des
boutons, des labels, des champs de texte etc. On pourra par
exemple facilement crer un formulaire simple laide de ces
contrles :
<asp:Label ID="lbNom" runat="server" Text="Nom"></asp:Label> :
<asp:TextBox ID="tbNom" runat="server"></asp:TextBox> <br />
<asp:Label ID="lbPrenom" runat="server" Text="Prenom"></asp:Label> :
<asp:TextBox ID="tbPrenom" runat="server"></asp:TextBox> <br />
<asp:Label ID="lbEmail" runat="server" Text="Email"></asp:Label> :
<asp:TextBox ID="tbEmail" runat="server"></asp:TextBox> <br />
<asp:Label ID="lb" runat="server" Text="J'ai plus de 18ans"
></asp:Label> :
<asp:CheckBox ID="cbPLusDe18ans" Text="" runat="server" /><br />
<asp:Button ID="btGo" runat="server" Text="Envoyer" />
Ce qui affichera ceci sur votre navigateur internet : [Fig.5]
On peut regarder ce que cela gre au niveau du code source :
<span id="lbNom">Nom</span> :
<input name="tbNom" type="text" id="tbNom" /> <br />
<span id="lbPrenom">Prenom</span> :
<input name="tbPrenom" type="text" id="tbPrenom" /> <br />
<span id="lbEmail">Email</span> :
<input name="tbEmail" type="text" id="tbEmail" /> <br />
<span id="lb">J'ai plus de 18 ans</span> :
<input id="cbPLusDe18ans" type="checkbox" name="cbPLusDe18ans" /><br />
<input type="submit" name="btGo" value="Envoyer" id="btGo" />
Les contrles de validation
ASP.NET vous fournit un ensemble de contrles qui vous permettront deffectuer des vrifications sur les donnes entres par les
utilisateurs. On peut donc amliorer notre formulaire ci-dessus en
ajoutant un contrle pour vrifier si lemail nest pas nul.
<asp:Label ID="lbNom" runat="server" Text="Nom"></asp:Label> :
<asp:TextBox ID="tbNom" runat="server"></asp:TextBox> <br />
<asp:Label ID="lbPrenom" runat="server" Text="Prenom">
</asp:Label> :
<asp:TextBox ID="tbPrenom" runat="server"></asp:TextBox> <br />
<asp:Label ID="lbEmail" runat="server" Text="Email">
</asp:Label> :
<asp:TextBox ID="tbEmail" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="ValEmail" ControlToValidate="tbEmail" runat="server"
ErrorMessage="Email Requis"></asp:RequiredFieldValidator> <br />
<asp:Label ID="lb" runat="server" Text="J'ai plus de 18 ans">
</asp:Label> :
<asp:CheckBox ID="cbPLusDe18ans" Text="" runat="server" /><br />
<asp:Button ID="btGo" runat="server" Text="Envoyer" />
Il existe plusieurs contrles de ce type :
RequiredFieldValidator
RangeValidator
RegularExpressionValidator

44-55

22/01/2009

14:37

Page 49

dveloppement web \\ ASP.Net


CompareValidator
CustomValidator
Vous pouvez galement crer vos propres contrles de validation.
Pour plus dinformation, consultez les liens ci-dessous :
http://www.loicbar.com/post/Cr%c3%a9er-son-propre-contr%c3%b4le-deValidation.aspx
http://www.loicbar.com/post/Cr%c3%a9er-un-AjaxValidator.aspx
Les contrles riches
ASP.NET vous propose quelques contrles avec une relle plus value.
Par exemple, crer un calendrier dynamique en ASP.NET est vraiment
trs simple. Il existe en fait un contrle asp :calendar qui vous permet
dafficher un calendrier dynamique. Dans ce type de contrles, on
retrouve aussi la possibilit de crer des assistants trs facilement
(ex : cration de formulaires en plusieurs tapes). Vous pouvez aussi
installer et utiliser des composants externes pour amliorer votre
interface, (voir le dossier Composants dans ce numro !
Les contrles de donnes
Les contrles de donnes permettent de trs facilement aller
rechercher des donnes dans une base de donnes ou encore un
fichier XML. Vous utiliserez ces contrles pour tout ce qui concerne
la visualisation, lajout, la modification ou la suppression des donnes. Vous pourrez par exemple trs facilement afficher les donnes dans un tableau laide dun GridView et un DataSource
(ObjectDataSource, SQLDataSource ou XMLDataSource en fonction
de la source des donnes).

Note : Le framework 3.5 apporte de nombreuses nouveauts avec lajout du


ListView, du DataPager et du LINQDataSource. Plus dinformation ce sujet
sur mon ancien blog : http://loicbar.com/post/ListView-et-DataPager.aspx
Ci-dessous un exemple dutilisation du contrle repeater et SQLDataSource :
<asp:Repeater ID="Repeater3" runat="server" DataSourceID="DSCC">
<ItemTemplate>
<h1><%# Eval("Prenom") %> <%# Eval("Nom") %></h1>
<p><%# Eval("Titre") %> - <%# Eval("Biographie")%></p>
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="DSCC" runat="server"
ConnectionString="<%$ ConnectionStrings:LimbourgBDConnectionString %>"
SelectCommand="SELECT TOP 3 [PersonneId], [Nom], [Prenom],
[Biographie], [Titre] FROM [Personne] WHERE ([PersonneId] = @PersonneId)">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="1" Name="PersonneId"
QueryStringField="id" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
Fig.5

Ces quelques lignes vont permettre dafficher une liste de personnes. Eval permet de mapper un lment avec un champ de la
base de donnes. Le repeater est un peu comme une boucle qui
parcourt tous les lments de la source de donnes passe comme
valeur de la proprit DataSourceID . Ici la source de donnes
contient les rsultats de la requte SQL passe comme valeur la
proprit SelectCommand :
SELECT TOP 3 [PersonneId], [Nom], [Prenom], [Biographie], [Titre]
FROM [Personne] WHERE ([PersonneId] = @PersonneId)
@PersonneId dsigne un paramtre que nous dfinissons juste aprs :
<SelectParameters>
<asp:QueryStringParameter DefaultValue="1" Name="PersonneId"
QueryStringField="id" Type="Int32" />
</SelectParameters>
On indique ici que le paramtre doit tre trouv dans lurl de la
requte. On va en fait chercher le paramtre id de lurl. Sil nexiste pas, on prend par dfaut la valeur 1 .
Pour vous simplifier lcriture de ce code, Visual Studio vous fournit
un assistant de paramtrage dun DataSource. Pour lutiliser, rendez-vous en mode design et cliquez sur le petit icne en haut
droite de votre SQLDataSource. [Fig.6]
Cliquez ensuite sur Configure DataSource . Une nouvelle fentre
apparat o vous avez la possibilit de dfinir votre chane de
connexion votre base de donnes. Celle-ci peut tre dfinie en cliquant sur New Connection et en remplissant les diffrents
champs de connexion (nom du serveur, login, mot de passe, base de
donnes). En cliquant sur suivant, vous avez l un utilitaire qui vous
permet de crer votre requte. [Fig.7]
Cliquez ensuite sur suivant, puis sur terminer. Votre DataSource
est maintenant configur. Pour en savoir plus sur SQLDataSource,
consultez le lien suivant : http://msdn.microsoft.com/fr-fr/library/system.
web.ui.webcontrols.sqldatasource.aspx
Les contrles de navigation
Ces contrles vous permettent dafficher des lments de navigation standard comme des menus, des arbres dlments. On
peut en effet, trs facilement afficher un arbre dlments avec le
contrle asp :TreeView :

Fig.7

Fig.8

Fig.9
Fig.6

Fvrier 2009 \\ PROgrammez !

49

44-55

22/01/2009

14:37

Page 50

dveloppement web \\ ASP.Net


<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="Ordinateur">
<asp:TreeNode Text="Favory">
<asp:TreeNode Text="News">
<asp:TreeNode Text="MSN" NavigateUrl="http://www.msn.com"/>
<asp:TreeNode Text="MSNBC News" NavigateUrl="http:
//www.msnbc.msn.com"/>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>

Vous pouvez alors modifier les proprits de ces contrles dans le


code behind : Name.Value = "ici";
LorsquASP.NET voit un tag HTML avec la proprit runat, il sait quil
a affaire un contrle ASP.NET. Par exemple, ici, il sait que linput
est un HtmlInputText.
Plus dinformations :
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/html/default.aspx
PostBack et ViewState
Une petite introduction ce qui caractrise le modle de programmation ASP.NET. Revenons sur notre exemple de formulaire.
Lorsque nous voulons envoyer les informations de notre formulaire,
nous devons grer un vnement sur le clic du bouton. Pour cela,
nous devons lui dclarer un handler :

Pour donner ceci : [Fig.8]


Les contrles de Login
Ces contrles sont trs souvent utiliss pour grer tout ce qui est
gestion utilisateur . Vous pouvez trs facilement grer des
comptes utilisateurs avec ASP.NET. Celui-ci vous fournit les contrles
pour les actions suivantes :
Login dun utilisateur
Affichage du nom de lutilisateur actuellement connect
Enregistrement dun utilisateur
Perte de mots de passe
Changement de mot de passe
Affichage dlments en fonction du statut de lutilisateur (connect, non connect, dans un groupe, ou pas)
Gestion de rles dutilisateur (administrateur, membre, etc.).
Pour permettre lutilisation de ces composants, vous devez les
rgler laide de ladministration centrale de votre site ASP.NET :
[Fig.8]
Dans longlet scurit, vous pouvez choisir dutiliser lASP.NET MemberShip Provider en cliquant sur le lien Slectionnez le type d'authentification . Slectionnez alors Par internet . Pour plus
dinformation sur les composants login, consulter le lien suivant :
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/login/default.aspx
Pour pouvoir configurer correctement votre base de donnes SQL
avec SQL MemberShip Provider : http://www.loicbar.com/post/QUIZZ!Comment-utiliser-SQL-Server-pour-les-composants-login.aspx
Les contrles WebParts
Les WebParts d'ASP.NET vont nous permettre de crer des applications web de type portails. Vous surfez sur ce type de site trs souvent, par exemple en vous rendant sur Yahoo!, My Msn et
d'autres... Si vous venez de lunivers Java, vous tiez habitus au
portlet. Plus dinformation :
http://www.loicbar.com/post/Introduction-aux-WebParts-ASPNET-(1).aspx
http://www.loicbar.com/post/Introduction-aux-WebParts-(2).aspx
http://www.loicbar.com/post/Introduction-aux-WebParts-(3).aspx
http://www.loicbar.com/post/Introduction-aux-WebParts-(4).aspx
Les contrles HTML
Vous pouvez utiliser les contrles HTML dont vous avez lhabitude et
interagir avec eux dans le code behind en leur ajoutant la proprit
runat=server : Entrez votre nom :
<input id="Name" type=text size=40 runat=server>

50

PROgrammez ! \\ Fvrier 2009

<asp:Button ID="btGo" runat="server" Text="Envoyer" onclick=


"btGo_Click" />
Lorsque vous cliquez sur le bouton, il y a alors un Postback ou encore une requte POST sur la page en cours. Vous devez grer cet
vnement dans le code behind sur la mthode btGo_Click :
protected void btGo_Click(object sender, EventArgs e)
{
// Traitement ici
}
En HTML cest llment form qui permet denvoyer une requte
POST (ou GET). Si on regarde le code source de notre page on
remarque que notre form runat=server sest bien transform en
formulaire :
<form name="form1" method="post" action="Default.aspx" onsubmit
="javascript:return WebForm_OnSubmit();" id="form1">
.
</form>
On remarque que laction du formulaire est bien la page actuelle. Le
JavaScript est l car il y a des choses vrifier aprs lenvoi du formulaire ( cause de notre validator).
On remarque galement un input appel ViewState :
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value
="/wEPDwUKLTcwNjkwMjI1M2QYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmF
ja0tleV9fFgEFDWNiUEx1c0RlMThhbnOWq/eV0Z6qaaIUowq3lP+t4xSruA==" />
Ce champ hidden est gr automatiquement par ASP.NET pour sauvegarder ltat des diffrents contrles de la page. Cest grce
cela que, lorsque vous effectuez un PostBack, vos informations sont
toujours visibles dans le formulaire. Vous navez donc pas besoin de
sauver vous-mme ltat des diffrents lments de votre page en
ASP.NET.
Nous esprons vous avoir donn ou redonn envie de plonger dans
le dveloppement web avec ASP.Net et les futures volutions du langage, la possibilit dutiliser Ajax ou encore ASP.Net MVC. Rien que
du bon pour notre plate-forme prfre !
Loc Bar MVP et CEO de Wipus - http://blogs.developpeur.org/loicbar/default.aspx

44-55

22/01/2009

14:37

Page 51

dveloppement web \\ ASP.Net

jQuery & ASP.NET : un jeu denfant !


Les outils de manipulation du DOM (Document Object Model) ne manquent pas mais
aucun natteint lefficacit de jQuery. Jen veux pour preuve son extrme popularit.
Celle-ci na pas chapp Microsoft qui lintgre dsormais dans Visual Studio. Mais
voyons ce que cette bibliothque javascript apporte ASP.Net.
sp.Net souffre de manques laisss intentionnellement par
Microsoft. Les composants natifs tant en effet basiques,
on peut tout faire avec (lessentiel est l, il suffit de
ltendre) mais lusage, pour les customiser, on doit entrer dans
du code et des optimisations pas toujours vidents. Des diteurs se
sont engouffrs dans la brche, mais leurs composants sont propritaires et parfois chers. Avec jQuery, il est simple de trouver ou
de dvelopper des composants lgers et efficaces. Ils sont avant
tout en html/javascript et il est simple de les incorporer dans des
composants ASP.Net. De plus, la communaut est nombreuse et
active ! jQuery est une pure librairie javascript pour lexcution sur
navigateur web et elle tient en un fichier : jQuery-1.2.6.js (dernier en
date). Rien dautre nest ncessaire pour commencer. On peut par
ailleurs travailler sous Visual Studio le fichier html et les scripts
javascript quil contient. Si on aime Visual Studio cest aussi pour
lintellisense et le Ctrl+Espace. Qu cela ne tienne : Microsoft a
prvu un patch qui permet dobtenir lintellisense sur les scripts
javascript, dont la librairie jQuery. [Fig.1]

Mon premier composant Jquery


En html
Voici un composant qui pourrait savrer utile dans une RIA de gestion. Un tableau extensible, dont certaines cellules sont ditables,
afin dviter lternel cran " matre/dtails ". [Fig.2]
Maintenant, pour ceux qui connaissent javascript, imaginez le temps
quil faudrait pour le raliser en pur javascript et notamment avec
des " document.getElementById() " ! Eh bien avec laide de jQuery,
comptez une petite heure.
Premire tape, le tlchargement du fichier javascript de la librairie, afin de le rfrencer dans le html :

De mme la prsence du fichier secondaire jQuery-vsdoc.js assure lintellisense dans le designer. Seconde tape : lcriture coordonne du html et de la feuille de style.
<style type="text/css">
td.edited { background-color:#999; }
td.editable { color:#66F; }
.../...
tr.subTitle { font-weight:bolder; }
tr.details { empty-cells:show; }
</style>
<body>
.../...
<table class="interactiveTable">
<tr class="title"><td colspan="4">>> Group 1</td></tr>
<tr class="subTitle">
<td>Elements</td>
<td>Editable details</td>
<td>Editable details 2</td>
</tr>
<tr class="details">
<td>Element 1:1</td>
<td class='editable'>Details on 1:1</td>
<td class='editable'>Details on 1:1</td>

Fig.2

Le fichier doit tre visible par lexplorateur au mme titre que la


page elle-mme : [Fig.3]
Fig.1

Fig.3

Fvrier 2009 \\ PROgrammez !

51

44-55

22/01/2009

14:37

Page 52

dveloppement web \\ ASP.Net


</tr>
.../...
</table>
</body>
Limportant dans le code html est que sil est bien crit la base, il
doit suffire, sans rcriture spcifique. Si le tableau est bien structur, le script na plus qu cacher certaines lignes, rendre certaines cellules ditables, grer en somme toute la partie dynamique.
Pas de tag " magique " en plein milieu du html, juste du html. jQuery
est non intrusif. Troisime et dernire tape : le script :
<head>
.../...
<script language="javascript" type="text/javascript">
// <!CDATA[
$(document).ready(
function() {
.../...
});
// ]]>
</script>
</head>
L o des notions de javascript ne sont pas inutiles, cest pour bien
assimiler la ncessit dimbriquer les fonctions les unes dans les
autres pour le bon fonctionnement de lensemble. Ici par exemple
lensemble des fonctions faisant appel jQuery sont crites dans la
dclaration du gestionnaire dvnement " ready ". Lvnement correspondant la fin de chargement de la page, on sassure ainsi que
les scripts ne tentent pas dinteragir avec des parties non encore
charges. De la mme manire, si lon veut grer le fait quun clic
sur une cellule la transforme en zone de texte avec bouton et que le

Dployer son projet ASP.Net


Il existe plusieurs manires pour dployer un site ASP.Net. La
plus rapide est de passer directement par lenvironnement de
dveloppement (Visual Studio ou dition Visual Web Developer).
Il supporte plusieurs protocoles tels que webdav, ftp.
Quand on dploie de lASP.NET sur un serveur, celui-ci doit respecter des pr-requis techniques. Cest notamment sensible
dans lutilisation de serveurs mutualiss chez un hbergeur sur
lequel le dveloppeur na pas de " remote access ". Pour cela,
on peut utiliser loutil Web Platform Installer pour vrifier le serveur. Dautre part, avec IIS 7 (le serveur web de Microsoft), la
configuration se veut plus simple avec un simple web.config. Il
ny a plus besoin de fichiers MSI, ni de description. Il est bien
sr possible daller plus loin dans lautomatisation du build et du
dploiement en passant par un outil de type MS Build. Autre
point important vrifier : le niveau de scurit du serveur. Si
celui-ci est en mode medium trust, il faut que le dveloppement
soit sur le mme mode ; dans le cas contraire, des problmes
de scurit apparatront ! Enfin, si vous utilisez des extensions
comme MVC ou Ajax, il ny a pas dlment spcifique rajouter
sur le serveur, les DLL seront prsentes lors du dploiement.
Sur lhbergement, pour les professionnels, loffre se diversifie
un prix abordable comme chez ASP Serveur, Amen.
F.T.

52

PROgrammez ! \\ Fvrier 2009

Fig.4

clic sur le bouton met jour la


cellule avec la nouvelle valeur, il
va falloir inclure la dclaration
du gestionnaire dvnement
clic du bouton dans celle du clic
de la cellule, afin que les boutons crs la vole soient pris
en compte. Cest une petite
gymnastique intgrer, qui
devient vite assez exaltante. Attention en revanche la lisibilit du
code. Autre notion trs pratique et particulire jQuery, lensemble
des fonctions de manipulation renvoie llment manipul, ce qui
permet le chanage des expressions :
$("tr[@class=titleSelected]").removeClass("titleSelected").ad
dClass("title");
Ici par exemple on change la classe css dun ensemble de lignes du
tableau.
En ASP.net
Admettons prsent que lon veuille intgrer tout cela dans un userControl Asp.Net afin den disposer en mode design de faon intgre. De cette manire on pourra lier le tableau une source de
donnes, web-service, ADO.Net que sais-je encore. Rien de plus
simple. On a deux possibilits, soit on reprend lensemble du code
html du tableau dans le userControl, soit plus lgamment, on remplace le tableau par un gridView ou autre composant Asp.Net. Dans
ce dernier cas, on reprend simplement les classes css.
La dmarche inverse peut-tre adopte, savoir que lon peut aussi
bien partir dune page Asp.Net intgrant une somme de composants et lui ajouter une couche de vernis jQuery, de la mme manire que lon ajuste les feuilles de style aprs coup.
Entre les deux, un bon plan peut-tre de reprendre quelques-uns des
composants jQuery UI disponibles, de les adapter aux composants
Asp.Net du type grid, Calendar, TreeView etc. et ainsi de monter
moindres frais une bibliothque de composants rellement originaux. Par ailleurs, jQuery sassemble trs bien avec le framework
Asp.Net MVC. Dans tous les cas, le march est ouvert, on devrait
voir apparatre trs bientt de nombreux composants mariant les
deux mondes. [Fig.4]

CONCLUSION
Finalement quand on aborde jQuery, cest la simplicit dutilisation
qui vient dabord lesprit. Mais sa force est dans son caractre
autonome et non intrusif. Si lon ajoute son orientation composants
et ladhsion incroyable quil gnre, il devient clairement incontournable. Et il peut devenir un vrai plus pour vos dveloppements
Asp.Net. En revanche, pour la plupart des composants disponibles,
le simple copier/coller ne fonctionne pas tel-quel. Il y
a souvent un peu de code retoucher mais cest la
plupart du temps du javascript et rarement trs
complexe. Alors, si le javascript ne vous fait pas
peur, que vous ne craignez pas de remettre loccasion les mains dans le cambouis, jQuery est dcouvrir. Et pour cela, une seule adresse : jQuery.com.

Laurent Capin Consultant SFEIR


Aboubaker Boufous Ingnieur dtudes SFEIR

44-55

22/01/2009

14:37

Page 53

dveloppement web \\ ASP.Net

Dynamic Data : dynamiser ASP.Net


Dynamic Data est une nouvelle technologie prsente dans le service pack 1 de .Net 3.5.
Elle fournit une architecture permettant de construire des applications orientes
donnes. Il est donc possible d'afficher dynamiquement des pages bases sur le schma
d'une base de donnes.
Configuration utilise pour larticle :
Visual Studio 2008
SQL Server 2005
Framework .Net 3.5 SP1
La base de donnes Northwind

Cration dun premier projet Dynamic Data


Ouvrez Visual Studio et cliquez sur : file > new project, dans la partie Web choisissez Dynamic Data Web Application et nommez votre
projet : DemoDynamicData. Cliquez sur OK. A partir ce cet instant,
la structure de votre projet est cre.
Ajoutez prsent une connexion vers la base de donnes Northwind se trouvant sur votre serveur SQL dans le Server Explorer de
Visual Studio : [Fig.1].
La prochaine tape consiste lier votre application la base de donnes, pour cela vous allez utiliser la technologie LINQ. Ajoutez la
racine de votre projet un composant de type LINQ To SQL Classes
et appelez-le Northwind.dbml : [Fig.2].
Glissez-dposez ensuite toutes les tables de la base de donnes
depuis le Server Explorer vers votre nouveau fichier [Fig.3].
Une dernire modification dans le fichier Global.asax du projet est
ncessaire avant de pouvoir excuter lapplication. Ajoutez cette
ligne au dbut de la mthode RegisterRoutes :

premire page affiche la liste des tables prsentes dans votre fichier
Northwind.dbml. Chaque nom de table est en ralit un lien pointant
vers une liste des enregistrements prsents dans la table [Fig.4]. Au
dbut de chaque ligne se trouvent trois liens : Edit, Delete et Details.
Le premier permet ldition de lenregistrement, cliquez dessus pour
modifier llment : [Fig.5].
Le deuxime permet la suppression de lenregistrement, alors que
le troisime affiche son dtail dans une nouvelle page. Comme vous
pouvez le remarquer linterface est relativement intuitive.
Les relations entre les tables sont galement utilisables. Prenez par
exemple le cas de la table Customers, il est possible dobtenir toutes
les commandes lies un client prcis grce au lien Orders. En mode
dition, les colonnes de type " cls trangres " se transforment en
liste droulante afin de permettre la slection dune nouvelle valeur.
Dynamic Data fournit galement une notion de filtre. Pour illustrer la
manire dont l'application permet de filtrer les donnes, nous allons
utiliser la table Product. Les listes droulantes situes en haut de la
liste permettent de filtrer les enregistrements. Par dfaut, les
tables peuvent tre filtres sur les champs de type boolen et sur
les clefs trangres. Autre point intressant : l'application vrifie les
contraintes de la base de donnes et avertit l'utilisateur si les donnes entres sont incorrectes.

La notion de routage
model.RegisterContext(typeof(NorthwindDataContext), new Context
Configuration() { ScaffoldAllTables = true });
Compilez et dmarrez votre application. Vous venez de crer votre
premier projet Dynamic Data en quelques minutes.

Les fonctions fondamentales


Voyons prsent ensemble les fonctionnalits principales quoffre
Dynamic Data, de base, sans ncessit daucun dveloppement. La
Fig.1

Fig.2

Dynamic Data est bas sur le modle MVC. Cela signifie quil intgre la
notion de routage. Le routage permet de conserver des Url facilement
lisibles et comprhensibles par lutilisateur. Dans le site que nous
avons cr prcdemment, toutes les tables prsentes dans la base
de donnes sont affiches en utilisant le mme template de page.
Cependant leur Url est diffrente. Prenez par exemple la page listant
tout les produits, son Url est la suivante : http://xxxxx/Products/List.aspx
Concentrez-vous sur la fin de lUrl : Products/List.aspx, deux lments sont spcifis : le nom de la table et laction demande.
Fig.3

Fig.5

Fig.6
Fig.4

Fvrier 2009 \\ PROgrammez !

53

22/01/2009

14:38

Page 54

dveloppement web \\ ASP.Net


Demandez prsent ldition dun lment et regardez la fin de lUrl :
/Products/Edit.aspx?ProductID=1
De nouveau la table est spcifie ainsi que laction demande, plus
dans ce cas lID de llment modifier. Ce format durl est dfini
dans le fichier Global.asax de votre application :
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List
|Details|Edit|Insert" }),
Model = model
});
Ce routage par dfaut permet de dfinir que toutes les actions
(List,Detail,Edit et Insert) seront rediriges vers une url de type
{table}/{action}. Dans cet exemple, nous allons inverser {table} et {action} :
routes.Add(new DynamicDataRoute("{action}/{table}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List
|Details|Edit|Insert" }),
Model = model
});
Affichez nouveau la liste des produits et remarquez la nouvelle Url :
http://xxxxx/List/Products.aspx
Cette fois laction est place avant la table. Vous venez de voir les
bases du routage, ce concept est beaucoup plus puissant, il est possible par exemple de dfinir des rgles particulires pour certaines
tables ou actions. Cet article tant consacr Dynamic Data et non
MVC, nous allons en rester l pour ce sujet.

produit dau moins 5 caractres, dans le cas contraire un message


derreur devra tre affich. Commencez par ajouter une nouvelle
classe votre projet et nommez la Product.cs, cette classe viendra
complter la classe Product gnre par le systme, noubliez donc
pas le mot cl partial :
public partial class Product{

}
Nous allons travailler avec lvnement dclench lors de la mise
jour du nom du produit et renvoyer une exception sur le nom comptant moins de 5 caractres.
public partial class Product
{
partial void OnProductNameChanging(string value)
{
if (value.Length < 5)
throw new ValidationException("Le nom doit contenir
au moins 5 caractres");
}
}
Excutez lapplication et essayez de sauver un nom de produit contenant moins de 5 caractres.
Une autre possibilit existe pour valider les donnes sauves, ce
sont les attributs, ils sont par exemple trs utiles pour valider des
donnes de type numrique. Voyons comment ajouter une validation
vrifiant si la quantit en stock est comprise entre 0 et 500, dans le
cas contraire nous devons afficher un message derreur.
Reprenez le fichier Product.cs cr ltape prcdente et ajoutez y
une nouvelle classe, il sagit dune classe de " MetaData "

Personnalisation du template de page


Nous avons donc vu jusqu prsent que Dynamic Data gnrait
automatiquement les pages sur la base dun template de page,
essayons par exemple de modifier la page affichant la liste des lments dune table, il sagit de la page List.aspx. Elle se trouve cet
endroit : /DynamicData/PageTemplates/List.aspx
Le but de lopration est dajouter un logo sur le haut de la page,
commencez par charger votre fichier image dans lapplication.
Ouvrez ensuite le fichier List.aspx dans Visual Studio et ajoutez cette
ligne dans le haut de la page :
<asp:Image runat="server" ImageUrl="~/logo.jpg" />
Excutez nouveau lapplication et constatez que toutes les pages
de liste ont t modifies et affichent maintenant le logo.

public class ProductMetaData


{
[Range(0,500,ErrorMessage="La quantit doit tre comprise
entre 0 et 500")]
public Object UnitsInStock;
}
Cette classe contient la dfinition du champ UnitsInStock, il sagit du
champ que nous dsirons valider. Ce champ contient un attribut de
type Range, il permet de dfinir une valeur minimum et maximum
pour un champ numrique. Il permet galement de dfinir le message derreur si le champ ne peut pas tre valid.
Il reste ensuite lier cette classe avec la classe cre ltape prcdente, cela se fait galement laide dun attribut :

Personnalisation des templates de champs


Comme pour les pages, les champs peuvent galement tre modifis par lintermdiaire de templates. Les templates de champs se
trouvent dans ce rpertoire : /DynamicDate/FieldTemplates. Il
contient une srie de contrles utilisateurs reprsentant les diffrents types de donnes utilisables. Il y a deux contrles par type de
champ : un premier pour la lecture et un second pour ldition. Par
exemple Text.ascx et Text_Edit.ascx. [Fig.6].

Les validations personnalises


Il est galement possible den dfinir de nouvelles au niveau du site.
Lobjectif de cet exemple est dobliger lutilisateur entrer un nom de

54

PROgrammez ! \\ Fvrier 2009

[MetadataType(typeof(ProductMetaData))]
public partial class Product{

}
Vous pouvez maintenant relancer lapplication et tester cette
validation. Bonne programmation " dynamique " !
Ludovic LEFORT
SharePoint Technical Consultant MCP, MCTS & MVP
SharePoint
lefortludovic@gmail.com - http://lefortludovic.blogspot.com

Conditions Gnrales de Vente sur le site www amen fr AMEN RCS PARIS : B 421 527 797 IN WEB WE TRUST : Nous croyons au web * Pour toute souscription annuelle

44-55

44-55

22/01/2009

14:38

Page 55

- Conditions Gnrales de Vente sur le site www.amen.fr. AMEN RCS PARIS : B 421 527 797. IN WEB WE TRUST : Nous croyons au web. * Pour toute souscription annuelle.

NOUVEAU VDS+ dAMEN :


le bonheur est dans le serveur !

PARTIR DE

HT
/MOIS

soit 5,98 TTC/MOIS*

SERVEURS PRIVS AMEN :


BNFICIEZ DE RESSOURCES
GARANTIES QUI VOUS SONT
PROPRES (PROCESSEUR,
MMOIRE, DISQUE DUR...)
TOUT EN PROFITANT DUNE
PLATEFORME INFOGRE
24H/24 - 7J/7.

Hbergement multi-sites/multi-domaines
Interface dadministration : Plesk 8.6
Systmes dexploitation : Fedora Core 8,
Suse 10.3, Debian 4.0, Ubuntu 8.04
ou CentOS 5
Part CPU minimum : de 1 6
Mmoire garantie : de 256 Mo 1 Go
Espace disque : de 5 Go 30 Go
Bases de donnes : illimites
1 adresse IP fixe
Accs Root

Pour plus de renseignements : 0892 55 66 77 (0.34 /mn) ou www.amen.fr


NOMS DE DOMAINE

EMAIL

HBERGEMENT

CRATION DE SITE

- E - COMMERCE -

RFRENCEMENT

56-57

22/01/2009

14:50

Page 56

carrire \\ job
2e partie

Travailler en freelance

Les informaticiens ont la possibilit de travailler en freelance. Parfois subi, plus souvent
choisi, ce statut nest pas toujours bien connu. Nous poursuivons notre enqute dans
cette deuxime partie sur cette manire dexercer le mtier dinformaticien.
Pour qui travaillent
les freelances ?

Samuel Breton,
prestataire de
cration de sites
internet, qui a cr
sa socit, Lexik

Sami Jaber,
consultant et
architecte spcialis
en .net, qui a cr
sa socit, DNG
Consulting (" Design
New Guides " en
anglais ou
" Dvelopper de
Nouveaux Guides ")

" Il y a deux profils de clients, ceux qui


font un appel doffres et qui cherchent
un prestataire pour des projets one
shot, et que cela ne drange pas de
changer de prestataire pour chaque
projet. Et les autres, qui souhaitent
tre plus accompagns et rester
avec un partenaire de confiance ",
observe Samuel Breton.
Les freelances simposent gnralement leur client par leur niveau de
technicit et leur exprience, le ct
indpendant nest pas ncessairement pris en compte par les donneurs dordre. Lidal est de travailler
directement avec ses clients, mais en
ralit des SSII servent souvent dintermdiaire entre le freelance et le
client. Sur tout lorsquil sagit de
grandes entreprises qui ont des fournisseurs rfrencs. " Je travaille
directement avec certains clients
depuis plus de 10 ans, avec un pool
de jours par an. Dautres fois, je travaille avec une SSII qui rpond un
appel doffres ncessitant une technologie pointue : jaide la SSII gagner le
projet ", explique Sami Jaber.
Les petites entreprises, voire les particuliers, font volontiers appel aux
indpendants. Cest le cas de Nicolas
Payelle qui donne des cours dinformatique pour des retraits et conoit
des sites internet pour des entreprises.

Statut
et dpendances
Il est possible dtre indpendant et
salari la fois, en passant par une
structure intermdiaire, appele
" portage salarial ". " Le portage salarial est la meilleure porte d'entre
pour le travail indpendant : pas de
dclaration d'entreprise, pas de paperasses, un soutien amical, on s'occu-

56

PROgrammez ! \\ Fvrier 2009

pe directement de son premier client


- et des suivants. Et quand l'affaire est
lance, on a le choix de rester ou de se
mettre son compte, l'esprit libre ! ",
estime Dany Le Du, auteur de louvrage Le portage salarial (cf. Bibliographie).
Toutefois, selon Michel Paysant, " le
portage est marginal pour les informaticiens, car assez cher : une fois
retranches les charges sociales et
patronales, il ne reste que 35 40%
du montant factur au client, alors
quavec le statut de travailleur indpendant, il reste environ 50%. " Cest
pourquoi la grande majorit des informaticiens freelance sont leur compte. Ils ont le statut de travailleur
indpendant ou de crateur dentreprise (Sarl). Ce que confirme Sbastien Develay : " Les charges plus
importantes et les contraintes administratives plus leves mont conduit
opter pour le statut dindpendant.
De plus, la cration dun compte indpendant ne ncessite pas de dpt de
capital. "

Avantages et
inconvnients des
rseaux ou sites
fdrateurs
Les places de march, rseaux,
annuaires de dveloppeurs et autres
sites fdrateurs constituent une
opportunit incontournable pour obtenir des clients rapidement et de qualit, une source de contacts et de
contrats, fiable, rapide et efficace.
Leur intrt est vident pour de nombreux freelances : " Je peux enfin me
consacrer exclusivement mon
mtier : finies les interminables prospections commerciales ", dclare un
dveloppeur, utilisateur de la plateforme Codeur.com.
Le site fdrateur est surtout utile au
dbut, le temps de se faire une notorit. En effet, les donneurs dordre
souhaitent souvent des garanties bien
plus leves avec un indpendant
quavec une SSII, estimant que le
risque est plus grand. Une place de
march permet de rduire ce risque,
pris aussi bien par les porteurs de

Codeur :
mettre en relation
les donneurs dordre
et les prestataires
Serge Roukine,
cofondateur
de Codeur

Codeur est une place de march sur internet, runissant donneurs dordres et prestataires indpendants.
Cre la fin 2006, elle compte environ 4000 porteurs de projets inscrits et 7000 prestataires. Ces
derniers sont soit des freelances, soit des entreprises
individuelles, soit encore des petites SSII ou des web
agencies. Depuis le dbut, prs de 5000 projets ont
t dposs sur cette plate-forme. La frquentation
est en constante augmentation, du fait de la notorit
croissante : " Nous sommes passs dune quinzaine de
projets par jour avant lt 25 par jour actuellement ",
indique Serge Roukine, cofondateur de Codeur avec
Sbastien Peltey. Site : www.codeur.com

56-57

22/01/2009

14:50

Page 57

reportage \\ job
projets quant aux comptences et au
srieux des freelances, que les prestataires freelances eux-mmes, qui
nont pas toujours la certitude dtre
pays. Avantage que certains anciens
utilisateurs de ces sites mettent en
doute : " Les sites internet dappel
doffres reprsentent souvent des
abonnements relativement chers
pour des projets/prospects qui ne
sont pas toujours suffisamment bien
qualifis. " Quant aux retours dannuaires, " ils ne sont pas en rapport
avec nos attentes ", estime Samuel
Breton.
Claire Rmy

David Ngrier,
associ, directeur
technique de The
Coding Machine

Pour en savoir plus


Bibliographie :
S'installer son compte (2e dition, 2006), par Michel Paysant, Editions d'Organisation, collection Les Guides du freelance
Le portage salarial (2008), par Dany Le Du, Editions d'Organisation, collection Les Guides du freelance

Sites utiles :
www.freelance-europe.com : Freelance en Europe est un lieu de rencontre et dinitiatives pour la
dfense et la promotion des freelances.
www.unasa.org : le site de lUNASA (Union nationale des associations agres) fournit des donnes sur lemploi des TPE et professions librales en France.
www.auto-entrepreneur.fr : le statut dauto-entrepreneur (entreprise individuelle) doit entrer en
vigueur le 1er janvier 2009 (cf. Loi de modernisation de lconomie n 2008-776 du 4 aot
2008, Titre 1 chapitre I). Ce statut sadresse en particulier aux personnes qui ne veulent pas
ncessairement crer une socit commerciale pour exercer leur nouvelle activit et souhaitent pouvoir dbuter ou arrter facilement leur activit indpendante, y compris en tant dj
salari ou retrait.

The Coding Machine :


une SSII qui fait travailler
des freelances

Freelance.com :
une communaut
dindpendants

The Coding Machine (TCM) prend


des projets relativement importants, que la socit dcompose
en petits composants, lesquels
sont " distribus " entre diffrents
dveloppeurs. Il sagit la plupart
du temps de freelances. Situs
sur tous les continents, ils travaillent de chez eux. L'origine du
projet remonte dcembre
2003. Alors que les deux
membres fondateurs de TCM travaillent sur un projet de cration
d'entreprise portant sur le conseil
Open Source, ils ont l'ide d'adapter l'entreprise les mthodes
utilises par les communauts du
Libre. Paralllement, ils approfondissent la dfinition de la mthodologie Open Source pour raliser
des prestations de dveloppement. Aujourdhui, TCM reprsente une communaut de 400

Freelance.com propose aux

dveloppeurs inscrits, dont une


quarantaine avec lesquels la
socit travaille rgulirement.
" Lavantage de travailler avec des
freelances, par rapport une SSII,
cest la possibilit de monte en
charge trs forte en mettant beaucoup de dveloppeurs en parallle ",
explique David Ngrier, associ,
directeur technique de TCM. Cela
exige toutefois une manire particulire de travailler, pour viter les
surprises : " Les composants distribus aux freelances doivent
tre petits (reprsentant au maximum 10 jours de travail) ; il faut
avoir une bonne connaissance de
la communaut freelance.
Lorsque nous lanons un projet,
nous reprenons 3/4 de dveloppeurs connus et 1/4 de nouveaux. "
Site : www.thecodingmachine.com

entreprises les services de freelances en informatique. La spcificit de ce rseau est doffrir


ses clients lassistance dun
" Manager Conseil ", lui-mme
indpendant, qui assure ladquation entre loffre et la
demande, ainsi que le suivi de la
mission. Freelance.com facture
directement les clients, qui
nont donc quun interlocuteur.
Pour travailler avec ce rseau,
le freelance doit imprativement tre enregistr en profession librale ou socit ; il doit
possder une solide exprience
professionnelle et faire la preuve de sa fiabilit.

www.freelance.com

Nouvelle rubrique

4000 offres

demploi

en ligne

www.programmez.com
Fvrier 2009 \\ PROgrammez !

57

58-59

22/01/2009

14:52

Page 58

code \\ multicore

Enregistrement ncessaire pour obtenir la cl dactivation :


https://registrationcenter.intel.com/BetaCenter/BetaForm.aspx?ProductID=1261&ProgramID=Programmez

Avant-premire exclusive !

Intel Parallel Studio : simplifier


le dveloppement parallle !

Fig.2

Alors que les processeurs multi-cores (multi-curs) prolifrent, amliorer les


performances logicielles, et mieux utiliser la puissance processeur, demeure un enjeu
important pour rester comptitif, surtout pour les applications dveloppes en C ou C++.
Mais jusqu prsent le dveloppement parallle restait complexe aborder pour le
dveloppeur. Programmez ! vous invite dcouvrir en avant-premire la nouvelle
solution Intel, avec un tout nouveau plug-in Visual Studio, qui va radicalement changer
votre vision du dveloppement parallle.
Lanne 2009 sera non seulement lanne de la prolifLANGAGE : C++
ration en masse des
processeurs 4 curs
DIFFICULTE
SOURCE : NON
MOYENNE
(Quad-Core) et le dbut des
processeurs 8 curs (OctoCore), mais aussi lanne ou le dveloppeur sera de plus en plus
confront aux performances des applications, de son code source
sur ces processeurs. Bref, comment tirer parti des performances
pour acclrer les applications Windows ? Les techniques de programmation dite parallle et le " multi-threading " sont difficiles
matriser. Elles requirent souvent un travail intensif dapprentissage
et de structuration et gnralement une refonte partielle ou totale
du code. Les outils daide limplmentation du multi-threading disponibles sur le march sont rares et encore souvent complexes :
Intel propose depuis quelques annes des outils et des librairies
multi-plates-formes pour la programmation sous C et C++. Jusqu
prsent, ces outils taient surtout rservs aux dveloppeurs de
calculs hautes-performances ou limagerie numrique.

APPLICATION : MULTICORE

PARALLEL STUDIO : LE PREMIER PAS !


Annonce en aot 2008, la collaboration entre Intel et Microsoft va
aboutir cette anne au lancement dune nouvelle srie doutils appele Intel Parallel Studio (prvue au second trimestre). Celle-ci supportera galement la future Concurrency Runtime de Microsoft qui
permettra finalement davoir une infrastructure commune de gestion des ressources curs de processeur pour toutes librairies et
langages, que ce soit .net ou natif.

Intel Parallel Studio se prsente sous la forme de plug-in comprenant 4 modules distincts (et utilisables sparment) qui permettront
daborder la programmation parallle directement sous lenvironnement Visual Studio. Aujourdhui, 3 des 4 modules sont disponibles et
prts tre installs en version bta sur le CD :
1. Parallel Composer
2. Parallel Inspector
3. Parallel Amplifier
4. Parallel Advisor (disponible ultrieurement)

UNE INSTALLATION SIMPLE


ET UNE PARFAITE INTGRATION
Les 3 modules sont simples installer partir dun installateur commun et sintgrent parfaitement dans lenvironnement Visual Studio
2005 ou 2008. Chaque module peut-tre install sparment.
Aprs installation, les modules sont disponibles soit directement en
barre doutils [Fig.1]soit par le menu "outils " (" tools ").
Partant dune mthodologie prouve de dveloppement parallle en
4 phases [Fig.2], chaque module simbrique dans une de ces phases :
1. Phase " Design " (Parallel Advisor), rpondant aux questions par
o commencer ? quels segments de code bnficieront le plus du
multi-threading ?
2. Phase " Codage " (Parallel Composer)
3. Phase " Debug " (Parallel Inspector)
4. Phase " Tuning " (Parallel Amplifier)
Tous les modules sont utilisables et compatibles avec le compilateur
Microsoft Visual C++ (et aussi avec le compilateur Intel C++).

Fig.1

Les 2 barres doutils pour Inspector (" Check ") et Amplifier (" Profile ")

58

PROgrammez ! \\ Fvrier 2009

Fig.4

Fig.3

Configuration des analyses du


module Inspector

Analyse du niveau de paralllisme


(concurrency analysis)

58-59

22/01/2009

14:52

Page 59

code \\ multicore
Parallel Composer complmente Visual Studio avec de nouvelles
fonctionnalits et mthodes de multi-threading au niveau applicatif : il
comprend un compilateur haute performance C/C++, compatible
avec le compilateur Microsoft ainsi que la librairie multimdia Intel
Performance Primitives (IPP) et la librairie de multi-threading Threading Building Blocks (TBB). Le compilateur supporte ds prsent le
standard OpenMP 3.0, les fonctions lambda, ainsi que les fonctions :
autovectorization, auto-parallelization et spawn. La librairie TBB est
un lment cl du Composer. Elle offre une nouvelle approche relativement simple du multi-threading base sur des templates C++, ce
qui rend le code aisment portable et trs performant.
Parallel Inspector est loutil le plus innovant du trio (en attendant le
quatrime outil Parallel Advisor). En principe, il sagit dun debugger
spcifiquement adapt aux mthodes de dveloppement parallle.
Le but tant de donner confiance au dveloppeur et que son code ne
va pas gnrer des bugs imprvisibles et destructifs.
Inspector permet de trouver rapidement et sans failles les erreurs
classiques et difficiles dtecter du multi-threading : les " race
conditions " et les " deadlocks ". Inspector intgre galement un analyseur de mmoire trs performant pour dtecter les erreurs et les
fuites de mmoire. Loutil, trs flexible, peut tre facilement configur pour varier lintensit et la dure des analyses, et permettre ainsi
de faire des tests rapides ou bien des tests exhaustifs [Fig.3].
Parallel Amplifier est loutil danalyse de la performance et se place
dans la 4e phase de la mthodologie (phase de " tuning "). Loutil permet de trouver les goulots dtranglement et de donner des lments de rponse la question cruciale du dveloppement parallle :
est-ce que mon code utilise au mieux les ressources et le potentiel
de performance du processeur multi-core ?
Les fonctionnalits de Parallel Amplifier sont multiples et se basent
principalement sur des analyses de performance en profondeur au
niveau du processeur :
1. Analyse Hotspot des segments de code gros consommateur de
ressources processeurs.
2. Analyse du niveau de paralllisme (concurrency analysis) permettant dune part de reprer les segments de code qui sont
parallles et ceux qui ne le sont pas, et dautre part didentifier les
segments de code qui sont excuts de faon srielle et limitent
ainsi la monte en charge (" scalability "), voir [Fig.4].
3. Analyse de Locks and Wait pour dtecter les objets de synchronisation et de blocage qui consomment le plus de temps dattente.
Fig.5

UNE MISE EN UVRE PERMANENTE


Lintrt principal de Parallel Studio rside dans la simplicit dutilisation et lintgration dans Visual Studio, ce qui permet une mise en
uvre permanente tout au long du processus de dveloppement.

EXEMPLE SIMPLE
Prenons lexemple dun algorithme de rsolution de matrice creuse
(en anglais, " sparse matrix solver) utilisant la mthode par limination de Gauss (mthode LU); un algorithme classique pour rsoudre
des problmes dlments finis en mcanique.
Aprs compilation du code en C++, nous utilisons Amplifier pour
trouver un " hotspot " ventuel. Lcran de rsultats nous montre une
utilisation du processeur excessive pour une des fonctions [Fig.5].
Un double-click sur la fonction nous envoie sur les lignes code responsables du " hotspot " : [Fig.6]. Aprs analyses des matrices, nous
changeons le code de la faon suivante :
#pragma omp parallel for private (i,j,k, term, temp)
for (i = 0;i < dimension - 1; i++){
temp = A[i][i];
colindex = (i >> 1) << 1;
for (j = i + 1 ; j < dimension; j++){
term = A[j][i] / temp;
//for (k = i; k < dimension; k++){
for (k = colindex; k < colindex + 2; k++){
A[j][k] = A[j][k] - term * A[i][k];
}
b[j] = b[j] - term * b[i];
}
}
Le rsultat est immdiat : [Fig.7]. Un des grands avantages de Parallel Studio est de permettre des analyses comparatives cte--cte
[Fig.8]. Cet exemple relativement simple montre la facilit dutilisation
de Parallel Studio dans le quotidien de lutilisateur de Visual Studio.
Le paralllisme va devenir une imprative constante et normale
dans le processus de dveloppement logiciel.
Dans les articles prochains nous aborderons les autres outils plus
en dtail avec des exemples plus complexes.
En attendant, nous vous recommandons dinstaller Parallel Studio
(ou bien le ou les modules qui vous intressent) et de commencer
immdiatement avec de premires expriences. Plus dinformations
sont aussi disponibles en anglais sur le site http://www.go-parallel.com/.
Fig.6

Ralph
de Wargny

Directeur de la division outils de dveloppement dIntel


pour la rgion Europe centrale et du
sud. ralph.wargny@intel.com

La premire fonction cre un " hotspot "


Fig.7

Fig.8

Fvrier 2009 \\ PROgrammez !

59

60-64jquery

23/01/09

11:52

Page 60

code \\ javascript

jQuery : lenfant terrible du web 2 !


Avec lavnement du Web 2.0, le Javascript a fait un retour en force sur le devant de la
scne ces dernires annes. Puissant, mais original car bas sur la programmation oriente
objet par prototype, son utilisation en contexte industriel a rendu ncessaire la cration de
frameworks regroupant un certain nombre de fonctionnalits utilises couramment dans
ces applications Web, quelles soient visuelles (drag and drop, sliders, ) ou techniques
(manipulation du DOM, requtes AJAX, ).
jQuery se prsente sous la
forme dun fichier javascript
LANGAGE : JAVASCRIPT
unique pesant moins de
DIFFICULTE
20Ko
dans sa version comSOURCE : OUI
FACILE
presse pour environnement
de production, ce qui en fait une bibliothque ultra lgre. Elle est
compatible avec les principaux navigateurs du march et permet ainsi
de profiter du Javascript sans avoir se soucier du navigateur client
cible. Son utilisation se rvle pertinente dans les cas suivants :
Manipulation du DOM (Document Object Model)
Gestion des vnements
Simplification des requtes AJAX
Interfaces graphiques et effets visuels
Elle est en sus assez simple, puisque base sur un seul objet Javascript ! Il sagit de lobjet jQuery utilisable via lalias $(). Enfin, son
architecture lui permet dtre facilement tendue via lemploi de
plug-in, prsents foison sur internet, qui viennent parfaitement se
greffer sur le noyau de JQuery.

APPLICATION : WEB

PREMIERS PAS
Linstallation de la bibliothque est triviale puisquil suffit de tlcharger le fichier javascript de la version que lon souhaite utiliser et
ensuite de limporter dans son code javascript comme on le fait avec
nimporte quel fichier source Javascript habituellement. Notre premier exemple va consister modifier le DOM dune page HTML afin
dajouter un message dalerte sur lensemble des liens de cette dernire. La mise en place de notre code doit se faire une fois que le
DOM de notre page est totalement charg. Pour cela, nous mettons
en place un vnement document charg comme suit :
$(document).ready(function(){
// Traitement effectu lorsque le DOM est charg
}) ;
Le traitement que nous souhaitons raliser va utiliser un slecteur
JQuery pour rcuprer lensemble des lments liens de notre page
HTML et placer ensuite une fonction en callback pour lvnement
click de ces lments :
<html>
<head>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("a").click(function(){
alert($(this).text());

60

PROgrammez ! \\ Fvrier 2009

});
});
</script>
</head>
<body>
<a href="">Premier lien</a><br />
<a href="">Deuxime lien</a>
</body>
</html>
Une fois le chargement de cette page ralis, chaque lien se verra
appliqu une fonction callback appele lors de lvnement click.
Cette fonction se contente ici dafficher un message dalerte reprenant le contenu textuel du lien concern. Ce traitement na bien
entendu rien dextraordinaire et aurait pu tre ralis dautres
faons. Par exemple, via un parcours direct du DOM en utilisant la
mthode getElementsByTagName. Cette solution savre plus
longue que celle propose ci-dessus. Une autre solution consisterait
placer directement un attribut onclick sur les balises lien de notre
page HTML ! Ce qui deviendrait vite fastidieux dvelopper mais
galement maintenir, notamment en cas de changement du contenu du message dalerte

MANIPULATION AVANCE DU DOM


Le paragraphe prcdent nous aura permis de mettre en avant le
terrain de chasse privilgi de jQuery : la manipulation du DOM.
Longtemps considr comme le domaine de prdilection du framework Prototype, force est de constater que jQuery le surpasse sur
ce point dsormais ! En effet, la syntaxe utilise par jQuery se rvle
incroyablement puissante puisque proche des standards que sont
CSS (2.1 voire mme en version 3) et XPath. En outre, la slection
dlments du DOM peut se faire en combinant les 2 syntaxes et en
utilisant un certain nombre de filtres dont certains sont spcifiques
au framework. Ainsi, pour slectionner les sept premiers paragraphes du quatrime div du div did container, on pourra utiliser le
slecteur suivant : $("#container div:eq(4) p:lt(8)"). Cette slection
pouvant seffectuer via lutilisation de la fonction find de lobjet jQuery
pour un rsultat identique : $("#container").find("div:eq(4)").find("p:
lt(8)"). On peut ainsi constater que chaque mthode de lobjet jQuery
retourne elle-mme un objet jQuery, ce qui permet de chaner les
appels ses mthodes. En outre, jQuery propose galement les
fonctions filter et not sur cet objet. Alors que filter rduit la slection
aux lments correspondants lexpression du filtre, la fonction not
permet le contraire en enlevant tous les lments correspondants
lexpression passe en entre. Une fois un ensemble dlments du
DOM slectionns, jQuery offre un certain nombre de possibilits

60-64jquery

23/01/09

11:52

Page 61

60-64jquery

23/01/09

11:52

Page 62

code \\ javascript
dinteraction. La plupart des possibilits offertes par le DOM en
Javascript sont couvertes : cela va de lajout de classe ou de proprits CSS en passant par lajout de nuds pour arriver lajout
dvnements. Pour chaque vnement existant sur une page
HTML, comme onclick, onchange, onsubmit , il existe un quivalent sur lobjet jQuery. Lexemple suivant dtaille lutilisation de certaines de ces fonctionnalits :
<html>
<head>
<script type="text/javascript" src="lib/jQuery.js"></script>
<script type="text/javascript">
$(function(){
// criture en rouge du lien contenant programmez
$("a[href*=programmez]").css("color", "red");
// parcours des div d'id diffrent de test et ajout de
la classe yellow
$("div[id!=test]").each(function(){
$(this).addClass("yellow");
});
// slection des lments de la liste d'id liste et
mise en place
// d'une fonction callback sur l'vnement hover
$("#liste li").hover(function(){
$(this).addClass("red");
}, function(){
$(this).removeClass("red");
}).each(function(i){ // modification du contenu des
lments de la slection
$(this).html(i + ' ' + $(this).html());
});
});
</script>
<style>
#container, #container2{
width : 50%;
border : 1px solid black;
padding : 5px;
margin-bottom : 20px;
}
.yellow{
background : yellow;
}
li.red{
background : red;
width : 30%;
}
</style>
</head>
<body>
<div id="container"><a href="http://www.programmez.com">
Programmez.com</a><br />
Programmez ! est le magazine de tous les langages</div>
<div id="container2"><a href="http://www.developpez.com1"
>Developpez.com</a><br />
Developpez.com le site de tous les langages</div>
<div id="test">
<ul id="liste">
<li>First</li>

62

PROgrammez ! \\ Fvrier 2009

<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
</ul>
</div>
</body>
</html>
La page HTML de notre exemple possde 3 lments div dont le
dernier contient une liste de valeurs. Une fois le DOM de la page
charg, on va mettre en place une fonction que lon passe en entre
de lalias $(). Cette syntaxe est quivalente celle du premier
exemple qui, elle, utilisait la mthode ready sur le slecteur document. Notre fonction va tout dabord slectionner tous les liens de la
page dont lattribut href contient la chane de caractres "programmez" via une requte XPath et appliquer ensuite sur cet lment
une nouvelle proprit CSS pour modifier sa couleur dcriture.
Ensuite, on slectionne lensemble des lments div ayant un id diffrent de test et on utilise la mthode each sur lobjet jQuery retourn.
Cette dernire va permettre dappliquer une fonction sur chacun
des lments de lobjet sur lequel on lapplique. La fonction applique
se charge dajouter la classe yellow aux lments parcourus, ce qui
aura pour effet pratique la mise en jaune de larrire-plan des div
slectionns. Enfin, le dernier traitement de la fonction sintresse
aux lments de la liste en ajoutant 2 fonctions callback sur lvnement hover de ses lments. Ces dernires sont appeles respectivement lorsque la souris de lutilisateur passe au-dessus de lun
dentre eux et lorsque cette dernire quitte la zone dun lment de
la liste. Le but ici tant de mettre en rouge larrire-plan de llment
de la liste survol par la souris. Laffichage de cette page au sein
dun navigateur est prsent la figure 1.

REQUTES AJAX
Outre ses possibilits en matire de manipulation du DOM, jQuery
amne galement sont lot de fonctionnalits pour faciliter lutilisation
de requtes AJAX. La mthode principale utiliser se nomme ajax et
doit tre appele sur lalias $ comme suit : $.ajax(). Son utilisation
vite de se soucier des problmes de compatibilit inter-navigateurs et
est configurable rapidement via quelques paramtres simples. Ainsi,
le chargement dun fichier test.htm se fait de la manire suivante :
$.ajax({
type : "GET",
url : "test.htm",
error : function(msg){
alert("Erreur au chargement : " + msg);
},
success : function(data){
// Traitement des donnes reprsentes par data
}
});
Ici, la requte est de type GET et on met en place 2 fonctions callback qui seront appeles en cas derreur/succs de la requte. En
cas de succs, la fonction callback permet de traiter via la variable
data les donnes rcupres suite la requte AJAX. Les paramtres de la mthode ajax sont nombreux et couvrent la plupart des
besoins du dveloppeur dans la mise en place de requtes AJAX.

60-64jquery

23/01/09

11:52

Page 63

code \\ javascript
Dautre part, lobjet jQuery met votre disposition dautres
mthodes couvrant des besoins plus spcifiques. Leur emploi vite
de configurer de manire hasardeuse ses requtes AJAX et offre
un gain de temps intressant. Citons ainsi les mthodes post et get
qui ralisent respectivement de simples requtes POST et GET ainsi
que les fonctions getJSON et getScript qui permettent respectivement de rcuprer du contenu depuis un fichier au format JSON et
depuis un fichier Javascript. Les mthodes lies AJAX au sein de
JQuery ne sarrtent pas ces quelques exemples, bien au contraire. Le lecteur intress se rapportera la documentation de la
bibliothque afin de dcouvrir les immenses possibilits de celles-ci.
Enfin, voici un exemple de tableaux dont les donnes sont charges
via une requte AJAX depuis un fichier au format JSON :
<html>
<head>
<link rel="stylesheet" href="css/style.css" type="text/css" id
="" media="print, projection, screen" />
<script type="text/javascript" src="lib/jQuery.js"></script>
<script type="text/javascript" src="lib/jQuery.tablesorter.
js"></script>
<script type="text/javascript">
var refreshTable = function(table){
table.trigger("udpate");
table.trigger("appendCache");
} ;
var addRowToTable = function(table, data){
$("tbody", table).append("<tr><td>" + data.Id +"</td>
<td>" + data.Title + "</td><td>" +
data.Author + "</td><td>" + data.Publish + "</td>
<td>" + data.Price + "</td></tr>");
} ;
var loadContent = function(table, file){
$.getJSON(file, function(json){
for(i = 0;i < json.data.length; i++){
addRowToTable(table, json.data[i]);
}
refreshTable(table);
});
} ;
$(function(){
$("#sortable").tablesorter({widgets: ['zebra']});
$("input").click(function(){
loadContent($("#sortable"), "data/content.json");
});
});

Fig.1

</script>
<style>
#container{
margin-bottom : 20px;
}
</style>
</head>
<body>
<div id="container">
<table id="sortable">
<thead>
<tr>
<th>Id</th>
<th>Title</th>
<th>Author</th>
<th>Publish</th>
<th>Price</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<input type="button" value="Charger les donnes" />
</body>
</html>
La figure 2 prsente la page son chargement et la figure 3 quant
elle montre la page une fois les donnes charges, via un clic sur
le bouton prvu cet effet.

INTERFACE GRAPHIQUE
Au niveau interface graphique, jQuery nest pas en reste galement
puisque la bibliothque propose un grand nombre deffets visuels,
que ce soit dans son noyau ou via le grand nombre de plug-in disponibles sur internet. Parmi eux, on citera le projet jQuery UI qui est
dvelopp autour de Paul Bakaus et qui est associ officiellement au
projet principal jQuery. De ce fait, la ralisation deffets de type fade
in/out, slide up/down ou hide/show sur des lments du DOM
devient un jeu denfant, puisquil suffit dappeler la mthode jQuery
correspondante sur llment slectionn. Ainsi, pour mettre en
place un effet visuel slide sur un div did container, on procdera
comme suit :
function testSlide(){
$("#container").slideUp("normal");
$("#container").slideDown("normal");
}

Fig.2

Fig.3

Rendu du
tableau vide

Rendu du tableau
une fois les donnes
charges

Rendu de l'exemple au sein d'un navigateur


Fvrier 2009 \\ PROgrammez !

63

60-64jquery

23/01/09

11:52

Page 64

code \\ javascript
Les mthodes lies ces effets saccompagnent de nombreuses
options qui vont permettre leur configuration exacte, afin de prciser par exemple la vitesse souhaite pour la ralisation de leffet
Les apports du plug-in jQuery UI concernent des effets graphiques
plus pousss tels que le drag and drop, le redimensionnement ou la
slection de calques la souris. Lutilisation de ces fonctionnalits
savre rellement trs simple :
$(function(){
$("#container").draggable({helper: 'clone'}).resizable();
$("#container2").droppable({
accept : "#container",
activeClass : 'droppable-active',
hoverClass : 'droppable-hover',
drop : function(ev, ui){
$(this).append("<br />Dropped !");
}
}).resizable();
$("#container3").draggable().resizable();
});

plug-in existants et la ractivit de la communaut autour de jQuery


suffisent prouver que le dveloppement de plug-in est chose aise.
De ce fait, tout manque de fonctionnalits peut tre rapidement
contourn, soit en trouvant son bonheur dans la liste des plug-in
existants, soit en dveloppant soi-mme son propre plug-in rpondant ses besoins.
Pour illustrer cette facilit de cration, nous allons mettre au point
un plug-in somme toute banal, permettant de modifier la couleur
darrire-plan de llment sur lequel il est appel. Ce plug-in aura
pour nom backgroundcolor et sera ralis au sein du fichier jquery.backgroundcolor.js pour respecter les rgles de nommage des
plug-in jQuery. Voici le contenu de ce fichier :
(function($){
$.fn.backgroundcolor = function(options){
var defaults = {color : "white"};
var options = $.extend(defaults, options);
$(this).css("background", options.color);
};
})(jQuery);

En considrant une page HTML contenant 3 lments div did respectifs container, container2 et container3, on va pouvoir dfinir lesquels sont droppables ou draggables, tout en spcifiant les
comportements effectuer en cas de drop sur lun dentre eux. Les
paramtres nous offrent galement la possibilit de prciser quels
lments un lment peut accepter en action drop. Pour terminer,
on va utiliser la mthode resizable pour autoriser le redimensionnement des divs container et container3. Le rendu de cet exemple est
prsent aux figures 4 et 5.
Sur la figure 5, on constate que le div de couleur bleue a t redimensionn et que le div de couleur rouge est en train dtre dropp
dans le div de couleur verte qui autorise cette action.
Enfin, le plug-in jQuery UI ne se contente pas damener des fonctionnalits en termes dinteractions mais il apporte galement des composants utiliss frquemment dans les applications web et dont le
dveloppement savre fastidieux. Parmi ces composants, on citera
notamment :
Un datepicker qui permet de slectionner une date depuis un
calendrier
Un systme "daccordons" pour la gestion de menus
Des botes de dialogue modales
Un slider

La cration au sein de function($) permet dviter des collisions de


lalias $ avec dautres bibliothques ventuellement utilises et qui
se baseraient galement sur cet alias. Notre plug-in dvelopp nous
allons maintenant lutiliser comme suit :

PLUG-IN

CONCLUSION

Larchitecture rsolument simple du framework jQuery nest pas due


au hasard. En effet, elle est le rsultat dune volont de rendre le framework facilement extensible autour de son noyau. Le nombre de

jQuery a galement ses dfauts avec un manque relatif de performance sur la manipulation du DOM de par sa syntaxe hyper puissante de slection. En outre, il conviendra de choisir attentivement
ses plug-in et de prendre garde aux mthodes du framework puisquelles peuvent tre abandonnes, bien que fonctionnelles, si le
choix est fait par la communaut en charge du projet. Cest en
quelque sorte le petit revers de lutilisation de projets open-source.
Ainsi, il peut tre intressant de se tourner vers dautres frameworks Javascript du mme style, tels que Prototype, Ext Js, mootools et jen passe, afin de se faire sa propre opinion et de choisir
la bibliothque la mieux adapte ses besoins.

Fig.4

Divs au chargement de la page

64

Fig.5

Divs aprs diverses oprations

PROgrammez ! \\ Fvrier 2009

<script type="text/javascript" src="lib/jquery.js"></script>


<script type="text/javascript" src="lib/jquery.backgroundcolor.
js"></script>
<script type="text/javascript">
$(function(){
$("#container").backgroundcolor({color : "green"});
});
</script>
Ici, il est important de remarquer lordre des inclusions des fichiers
Javascript. On commence toujours par inclure la bibliothque jQuery
puis les diffrents plug-in que lon souhaite utiliser. Ensuite, on slectionne un lment du DOM et on applique notre mthode avec en
entre le paramtre color positionn "green". Ce plug-in reste bien
entendu basique et devrait tre tendu pour pouvoir tre utilis
convenablement avec jQuery, avec notamment la prise en compte
de lappel en chanes des mthodes

Sylvain Saurel Ingnieur Etudes et Dveloppement Java / JEE


sylvain.saurel@gmail.com

65-67

22/01/2009

15:09

Page 65

code \\ .net

Manipuler les documents Office 2007


sans Office avec le SDK Open XML v2
Aprs de nombreuses annes o Microsoft ne proposait la manipulation de documents
Office quau travers dOffice Automation, la sortie du format Open XML - rcemment
devenu une norme ISO - a bouscul cette contrainte.
En effet, dans lide de toujours rendre plus productifs
LANGAGE : .NET
les dveloppeurs, Microsoft
na cess de fournir des
DIFFICULTE
SOURCE : OUI
MOYENNE
outils pour crer ou consommer des documents Office ; et
cela sans ncessiter aucune instance dOffice sur la machine hte.
Ctait dj une ralit avec la sortie de .NET 3 et lespace de nom
System.IO.Packaging, puis la sortie de la premire version du SDK
Open XML ; aujourdhui, Microsoft frappe fort et confirme son engagement envers cette norme de documents bureautique avec la sortie du SDK Open XML v2.
La v2 encapsule la partie structurelle du fichier organis selon
la spcification Open Packaging Convention - et la structure XML
des diffrentes parties dun document dans un modle objet simple
et flexible manipuler. Ceci dit, comment cela se traduit-il en
pratique ? Un exemple tant plus parlant quun long discours, et
pour vous faire une ide rapidement, voici le code ncessaire un
dveloppeur pour crer un document Word entirement fonctionnel
avec le SDK v2 :

APPLICATION : OFFICE

using (WordprocessingDocument package = WordprocessingDocument


.Create(docName, WordprocessingDocumentType.Document))
{
// Ajouter une partie de contenu au document
package.AddMainDocumentPart();
// Crer le contenu de votre document
package.MainDocumentPart.Document =
new Document(
new Body(
new Paragraph(
new Run(
new Text("Hello World !")))));
// Enregistrer le contenu dans le document
package.MainDocumentPart.Document.Save();
}
La cration de document bureautique na jamais t aussi
simple ! La v2 grera lui-mme pour vous toutes les oprations de
gnration ou de manipulation de la structure XML et OPC. Pour
rsumer, vous pouvez manipuler entirement un document grce
au modle objet sans avoir jamais crer vous-mme une
quelconque structure XML. Par rapport aux prcdents SDK ou
librairies disponibles, cette approche simplifie lextrme la vie des
dveloppeurs.

Deux manipulations sont ncessaires de votre part pour utiliser le


SDK Open XML v2 : tlcharger la CTP du SDK Open XML et ajouter
la rfrence aux DLLs WindowsBase et DocumentFormat.OpenXml
votre projet.

Notez que le SDK supporte trs bien la programmation avec Linq To


XML comme nous le verrons par la suite - qui permet de requter
ou de construire une structure XML trs simplement et rapidement. Ct performance, il vous faudra moins de 3 secondes pour
gnrer 1000 documents avec le code prcdent sur une machine
standard.

LE SDK EN DTAIL
Lespace de nom System.IO.Packaging autorise la manipulation du
document au niveau de sa structure logique Open Packaging
Convention (OPC offre une structure daccueil flexible pour le stockage des parties dans le fichier compress final). La premire version
du SDK Open XML se contentait de permettre la manipulation des
parties de faon type (chaque partie possdait ainsi des proprits
et mthodes adquates sa fonction dans le document) ; la seconde version du SDK fournit quant elle des classes types pour le
contenu des parties (paragraphes, cellules, etc.).
Le kit permettra aussi de valider des documents Open XML existants ou ceux que vous avez composs. Nanmoins, soyez
conscients que le modle objet propos ici nest pas un remplaant
du modle objet dOffice tel quon le retrouve dans VSTO, et que vous
devez nanmoins connatre la structure gnrale des fichiers Open
XML. Dans la mme logique, ce SDK a t conu uniquement pour
manipuler le format Open XML, par consquent nesprez pas y
trouver de convertisseurs (vers HTML, XPS, doc, etc.), ni de validateur si vous manipulez directement le XML sous-jacent sans passer
par lAPI, ou encore doutils fonctionnels (recalcul de feuille Excel,
pagination dun document Word, etc.). Ce SDK traite uniquement le
format Open XML et il le fait bien, malgr sa jeunesse et son statut
de CTP. Car en effet, cette version est encore en Community Technology Preview et ne pourra tre dploye dans des solutions dentreprise avant le Go Live de lditeur.

LES OUTILS LIVRS AVEC LE SDK


Un SDK livr sans outil complmentaire nen tant pas vraiment un,
sachez que cette version du SDK saccompagne dune documentation et dune multitude doutils. Leur seul but est dpauler les dveloppeurs dans leur apprentissage et lutilisation au jour le jour du
SDK. Voici un dtail de chaque outil apport par la version disponible
lors de la rdaction de cet article.
Fvrier 2009 \\ PROgrammez !

65

65-67

22/01/2009

15:09

Page 66

code \\ .net
OpenXml Diff
Ce premier outil vous permettra de faire la diffrenciation entre le
contenu de deux documents Open XML. Cela a son intrt lorsque
vous gnrez des documents, si ceux-ci ne souvrent pas ou naffichent pas ce que vous espriez. Il vous suffira alors de les comparer
une version qui souvre, par exemple gnre par Office, pour
savoir ce que vous devrez modifier dans votre solution de gnration
de documents Open XML. [Fig.1]
Le Class Explorer
Cet outil est une documentation part entire dans laquelle vous
pourrez chercher les classes et les numrations proposes par le
SDK. En face de chaque classe, vous trouverez la section de la spcification Open XML de lECMA ainsi que la documentation MSDN de
la classe. [Fig.2]
Le Document Reflector
Cet outil est la Rolls des outils de ce SDK puisquil permettra aussi
bien aux dbutants quaux experts de pouvoir gnrer le code de gnration dun document complet, que ce soit un document Word, Excel
ou PowerPoint. En effet, il vous suffira douvrir un document avec cet
outil, et il gnrera pour vous lintgralit du code C# utilisant le SDK
Open XML v2 pour gnrer lidentique le document ainsi ouvert. En
plus de proposer cette fonctionnalit qui devrait augmenter la productivit des dveloppeurs de faon consquente, cet outil permet aussi
de prendre connaissance du XML de chaque partie ou des lments
du document (paragraphe, cellule, diapositive, etc.). [Fig.3]

UTILISER LE SDK OPEN XML PAR LA


PRATIQUE
Les scnarios dutilisation dun tel SDK sont assez nombreux, cela
peut aller de la simple gnration de factures ou de rapports lextraction de donnes pour exportation dans une base de donnes.
Noublions pas les scnarios de conversion ou de manipulation de
documents la vole (formatage dentreprise, suppression des donnes personnelles, etc.).
Dans cet article nous allons voir ensemble les deux scnarios de
base, savoir la gnration et la consommation de documents.
Dans le premier cas, il sagira dun document Word, dans le second
cas dun document Excel.
Gnration dun document Word
La gnration dun document Word passe par lutilisation du modle
objet du SDK qui se rvle tre efficace et rapide pour cette tche.
Pour gnrer le document du code suivant, nous crons simplement deux parties : la partie principale (celle qui contient les paragraphes du document) et la partie de style (contenant lensemble
des styles du document).
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Create("SampleDemo.docx",
DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
Fig.1

66

PROgrammez ! \\ Fvrier 2009

{
// Cration d'une nouvelle partie de contenu
MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
// Cration d'un nouveau paragraphe
Document mainDoc = new Document(
new Body(
new Paragraph(
new ParagraphProperties(
new ParagraphStyleId() { Val = "Title" }),
[Fig.4]
new Run(
new RunProperties(
new Italic()),
new Text("Bienvenue au SDK Open XML V2 !")))));
// Enregistrement de la partie
mainDoc.Save(mainPart);
// Cration d'une nouvelle partie de style
StyleDefinitionsPart stylePart = mainPart.AddNewPart<StyleDefinitions
Part>();
Styles styles = new Styles(
new Style(
new Name() { Val = "Title" },
new BasedOn() { Val = "Normal" },
new NextParagraphStyle() { Val = "Normal" },
new LinkedStyle() { Val = "TitleChar" },
new UIPriority() { Val = 10 },
new PrimaryStyle(),
new Rsid() { Val = "002C2DBE" },
new ParagraphProperties(
new ParagraphBorders(
new BottomBorder() { Val = BorderValues.Single, Color
= "auto", Size = (UInt64)4UL, Space = (UInt64)1UL }),
new SpacingBetweenLines() { Line = 240, LineRule = Line
SpacingRuleValues.Auto },
new ContextualSpacing()),
new RunProperties(
new RunFonts() { AsciiTheme = ThemeFontValues.MajorHigh
Ansi, HighAnsiTheme = ThemeFontValues.MajorHighAnsi, EastAsia
Theme = ThemeFontValues.MajorEastAsia, ComplexScriptTheme =
ThemeFontValues.MajorBidi },
new Spacing() { Val = 5 },
new FontSize() { Val = (UInt64)52UL },
new FontSizeComplexScript() { Val = (UInt64)52UL })
) { Type = StyleValues.Paragraph, StyleId = "Title" });
// Enregistrement des styles
styles.Save(stylePart);
}
Comme nonc prcdemment, lutilisation de cette v2 ncessite une
connaissance du format. Chaque classe utilise dans le code prcdent
Fig.2

Fig.3

65-67

22/01/2009

15:09

Page 67

code \\ .net
reprsente un lment ou un attribut XML quil vous faudra connatre
pour exploiter le format son maximum. Lexcution de lapplication
permettra de gnrer un document que vous ouvrirez sans aucun
problme dans Office 2007 ou Open Office 3.0. [Fig.4]
Utilis paralllement avec Linq et les nouvelles fioritures de la
nouvelle syntaxe de C# 3, la productivit des dveloppeurs atteindra
son apoge dans ce genre de projet.

CONSOMMER UN DOCUMENT EXCEL


Attaquons maintenant la discipline inverse de la prcdente partie, c'est--dire, la consommation de donnes dun document Open
XML. Lexemple qui suit procde lextraction des donnes dun
document Excel en utilisant le SDK et un peu de Linq.
static WorksheetPart ObtenirPartieFeuille(WorkbookPart classeur,
string nomFeuille)
{
try {
Sheet feuille = classeur.Workbook.Descendants<Sheet>()
.Where(s => nomFeuille.Equals(s.Name)).First();
return (WorksheetPart)classeur.GetPartById(feuille.Id);
}
catch (Exception) {
return null;
}
}
static Cell ObtenirCellule(WorksheetPart feuille, int index
Ligne, int indexColonne)
{
try {
Row row = feuille.Worksheet.Descendants<Row>()
.Where(r => indexLigne == r.RowIndex).First();
return (Cell)row.ChildElements.ElementAt(indexColonne);
}
catch (Exception) {
return null;
}
}
static string ObtenirValeurCellule(Cell cellule, SharedString
TablePart sharedStringTablePart)
{
if (cellule.ChildElements.Count == 0)
return null;
string value = cellule.CellValue.InnerText;
if ((cellule.DataType != null) && (cellule.DataType

Fig.4

Fig.6

== CellValues.SharedString))
value = sharedStringTablePart.SharedStringTable.Child
Elements[Int32.Parse(value)].InnerText;
return value;
}
static void Main(string[] args)
{
using (SpreadsheetDocument excelDoc = SpreadsheetDocument.
Open("Sample.xlsx", false))
{
WorksheetPart feuille1 = ObtenirPartieFeuille(excelDoc.
WorkbookPart, "Sheet1");
Cell cA1 = ObtenirCellule(feuille1, 1, 0); // Ligne 1, premire
colonne (base 0)
Cell cA2 = ObtenirCellule(feuille1, 2, 0); // Ligne 2, premire
colonne (base 0)
Console.WriteLine("{0} {1}", ObtenirValeurCellule(cA1,
excelDoc.WorkbookPart.SharedStringTablePart), ObtenirValeur
Cellule(cA2, excelDoc.WorkbookPart.SharedStringTablePart));
}
}
Le SDK rend la consommation dun document Open XML aussi aise
que la gnration. Les classes types du SDK rpondent la logique
de Linq to XML et elles vous permettront dcrire du code de faon
productive et intuitive sans vous garer dans les mandres techniques de la srialisation/dsrialisation XML.
A linstar de lexemple sur la gnration du document Word, il vous
faudra connatre les bases de la structure dun document pour tre
mme de rcuprer les donnes voulues. Par exemple, dans le
cas dun document Excel, vous devez savoir que les valeurs de type
chanes sont contenues dans une partie indpendante qui indexe
toutes les chanes de votre classeur afin den optimiser le stockage.
[Fig.5] et [Fig.6]

CONCLUSION
La cration de documents Office na jamais t aussi simple avant larrive du SDK v2. Cette version devrait apporter aux dveloppeurs de
la productivit et de la simplicit dans la manipulation de documents
Office, et cela, quel que soit le format utilis (Word, Excel ou PowerPoint). Les nombreux outils annexs avec cette version du SDK assureront galement deux objectifs : le premier de formation et le
second, daccroissement de votre productivit. Cette version du SDK,
bien quencore en CTP, est relativement stable et performante et
mrite que lon y prte attention pour les projets venir. Nanmoins,
son statut de CTP vous empchera de la dployer dans vos projets
clients pour le moment. Il faudra srement attendre la sortie du SP2
dOffice 2007 ou de Office 14 pour savourer la fracheur de cette
librairie qui naugure que de bonnes choses pour les documents Office
dans les annes venir. Egalement, noubliez pas de rejoindre la communaut Connect sur le site associ au SDK (https://connect.microsoft.
com/site/sitehome. aspx?SiteID=589) afin de dposer vos feedbacks, vos
bugs, etc. et de contribuer son amlioration.

Fig.5

Julien Chable Wygwam France


Expert Open XML, dveloppeur .Net

Fvrier 2009 \\ PROgrammez !

67

68-71

22/01/2009

15:10

Page 68

code \\ rebol

A la dcouverte de REBOL

2e partie

Nous continuons notre dcouverte de ce langage agrable, anti-conformiste, et par bien


des aspects rbolutionnaire.
Le mois dernier, nous nous
sommes familiariss avec
REBOL et ses fonctionnalits
LANGAGE : REBOL
de base. Aujourd'hui nous
DIFFICULTE
SOURCE : OUI
irons un petit peu plus loin.
FACILE
Pour cela nous allons bricoler
une micro base de donnes, type rpertoire tlphonique, et faire
circuler les donnes sur le rseau entre un serveur et un client graphique. Tout cela en un seul article peut sembler ambitieux. C'est
pourtant un jeu d'enfant car REBOL est expressif, puissant et concis.

APPLICATION : DCOUVERTE

1 REBOL ET LES OBJETS


Carl Sassenrath, le crateur de REBOL a t pendant longtemps un
inconditionnel de la programmation objet, puis aprs huit annes de
pratique, est revenu peu peu sur son opinion, jugeant finalement la
programmation objet "acadmique" telle qu'on la rencontre en Java
ou C++, peu productive. Pour le coup le paradigme objet de REBOL
est plutt libre et finalement trs souple. En REBOL un objet est
essentiellement un agrgat de valeurs regroupes dans un contexte
commun. Les valeurs peuvent tre des scalaires, des sries, des
fonctions, etc. Bref les objets sont des structures de donnes complexes. En REBOL un objet peut tre prototyp, ce qui ressemble la
dclaration de classe des langages acadmiques, puis instancis.
Nous voulons modliser une micro base de donnes qui dcrit les
membres du personnel de Programmez!. Chaque enregistrement
conservera les nom, prnom, salaire et rle de chaque membre.
Pour pouvoir instancier les objets en une ligne de code, nous allons
aussi nous doter d'une fonction make-membre. Nous plaons le tout
dans le fichier modele-membre.r que vous trouverez sur notre site.
REBOL [
Title: "Modele membre"
Date: 7-Aug-2008
File: %modele-membre.r
Author: "Fred"
Version: 1.0
Purpose: {definit un modle d'objet et une fonction de creation }
]
membre: make object! [
nom:
prenom:
salaire:
role: none
]
make-membre: func [
"Cree un objet de type membre"
p-nom [string!] "Nom"
p-prenom [string!] "Prenom"
p-salaire [integer!] "Salaire"

68

PROgrammez ! \\ Fvrier 2009

p-role [string!] "Role"


][
make membre [
nom: p-nom
prenom: p-prenom
salaire: p-salaire
role: p-role
]
]
Petite remarque en ce qui concerne le modle de donnes: contrairement aux apparences tous les membres se voient attribuer none par
dfaut et non pas le membre rle seulement. En effet REBOL supporte les affectations multiples. La disposition adopte dans notre code
pour but la clart et la lisibilit de la dfinition de l'objet, mais
nom: prenom: salaire: role: none
aurait t quivalent et aurait mis en vidence l'affectation multiple.

ET LA RUTILISATION DU
2REBOL
CODE
Nous pouvons maintenant crer notre base de donnes. Voici le
code, fichier create-db.r, qui se charge de l'opration.
REBOL [
Title: "Create DB"
Date: 7-Aug-2008
File: %create-db.r
Author: "Fred"
Version: 1.0
Purpose: {Cree une micro base de donnees }
]
; Charger le modele pour les enregistrements
do %modele-membre.r
db: []
insert
insert
insert
insert

db
db
db
db

make-membre "Kaminsky" "Jean" 1000000 "Big Boss Man"


make-membre "Tonic" "Francois" 10000 "Redac'Chef"
make-membre "Develay" "Sebastien" 100 "Webmaster"
make-membre "Mazue" "Frederic" 1 "Grouillot"

save/all %db.txt db
Par ce script nous pouvons commencer apprcier la puissance de
REBOL, appuye sur les types de haut niveau et sur les raffinements
de fonction. Nous appelons la fonction do, capable d'excuter aussi
bien un bloc de code qu'un script REBOL comme ici. Cet appel do
avec comme paramtre le fichier modele-membre a pour effet d'incorporer au dictionnaire de REBOL le modle d'enregistrement de
notre base de donnes ainsi que la fonction d'instanciation. Ensuite,

68-71

22/01/2009

15:10

Page 69

code \\ rebol
nous dfinissons notre base de donnes comme une srie vide. Il ne
nous reste plus qu' insrer les enregistrements et sauvegarder
le tout. Nous sauvegardons dans un fichier. Le point intressant est
que nous utilisons le raffinement all de la fonction save. Ceci pour
effet de sauvegarder notre srie sous forme srialise. Il nous suffira de la recharger avec la fonction symtrique load et son raffinement all pour retrouver nos donnes en mmoire, telles qu'elles y
taient au moment de la sauvegarde. Voici quoi ressemblent nos
donnes srialises :
#[object! [
nom: "Mazue"
prenom: "Frederic"
salaire: 1
role: "Grouillot"
]] #[object! [
nom: "Develay"
prenom: "Sebastien"
salaire: 100
role: "Webmaster"
]] #[object! [
nom: "Tonic"
prenom: "Francois"
salaire: 10000
role: "Redac'Chef"
]] #[object! [
nom: "Kaminsky"
prenom: "Jean"
salaire: 1000000
role: "Big Boss Man"
]]

foreach
append
append
append
append
append
]

item db [
t item/role append t " "
t "Nom: " append t item/nom append t " "
t "Prenom: " append t item/prenom append t " "
t "salaire: " append t item/salaire append t " "
t "|^/"

unset [t]
Pour trier la base de donnes charge sous forme d'une srie et
range dans la variable db, nous utilisons une fonction fort pertinemment nomme sort. Et puisque nous commenons bien
connatre REBOL, nous ne sommes pas surpris que cette fonction
possde de nombreux raffinements. Nous utilisons ici le raffinement
compare. Ce raffinement est ncessaire quand REBOL ne sait pas a
priori comment trier des valeurs. Si nous avions une srie de types
intgrs, par exemple des entiers
s: [1 3 2]
REBOL saurait la trier en ordre croissant
>> t: sort s
== [1 2 3]
Ou en ordre dcroissant via le raffinement reverse
>> r: sort/reverse s
== [3 2 1]

TRIER ET FORMATER
3CHARGER,
LES DONNES
Le chargement est une formalit, comme voqu plus haut. Nous
voyons que les enregistrements ont t sauvegards dans l'ordre
inverse de leur insertion dans la srie, ce qui n'est en rien surprenant. Pour notre propos, il est naturel de vouloir tre en mesure de
trier les enregistrements, par exemple en les classant par ordre
alphabtique du membre nom. Notre script read-db.r s'acquitte de
cette tche.
REBOL [
Title: "Read DB"
Date: 7-Aug-2008
File: %read-db.r
Author: "Fred"
Version: 1.0
Purpose: {lit une micro base de donnes }
]
; Charger le modele pour les enregistrements
do %modele-membre.r
db: load/all %db.txt
db: sort/compare db func [a b] [a/nom < b/nom]
text-db: ""

t: text-db

Pour un type utilisateur, nous utilisons comme nous l'avons dit le raffinement compare, ce qui demande de donner une fonction de tri en
argument supplmentaire sort :
func [a b] [a/nom < b/nom]
Cette fonction a l'allure des fonctions anonymes que l'on rencontre
avec des langages comme par exemple Python. Notre fonction est
gnrique en ce sens qu'elle va savoir trier n'importe quel objet,
pourvu que celui-ci comporte un membre nom. Ensuite nous transformons notre base de donnes en une chane de caractres. Les
enregistrements sont spars par le caractre |. Nous faisons ceci
pour montrer un exemple de travail avec les chanes en REBOL et
parce que nous avons choisi une communication en mode ligne
travers un socket, ainsi que nous le verrons plus loin. Mais il y aurait
bien d'autres (et meilleures) manires de procder. REBOL est un
langage plein de ressources sur le rseau. Nous rangeons la chane
de caractres dans la variable text-db. Mais pour la constitution,
nous travaillons avec une variable t, pour gagner du temps l'criture. Cela nous donne aussi l'occasion de dcouvrir deux particularits
de REBOL. t est dfinie ainsi
t: text-db
Si le contenu de text-db se retrouve bien dans t, cette dernire n'est
toutefois pas une "autre" variable. C'est seulement un synonyme de
text-db. Autrement dit, toute opration affectant le contenu de t se
rpercutera sur le contenu de text-db, et rciproquement. Pour
prendre une analogie avec d'autres langages, tout se passe comme
si text-db et t se comportaient comme des rfrences. Cette carac-

Fvrier 2009 \\ PROgrammez ! 69


Les TUTORIELS sur www.programmez.com

68-71

22/01/2009

15:10

Page 70

code \\ rebol
tristique de REBOL peut surprendre l'utilisateur non prvenu. A la
fin de notre script nous faisons :

Version: 1.0
Purpose: {sert une micro base de donnes via TCP }
]

unset [t]
Aprs quoi t n'existe plus, mais text-db elle, en revanche, continue
exister :) Une dernire remarque. Si notre script read-db tait invoqu par un autre script et que ce dernier contienne une variable t,
celle-ci serait affecte par notre petit tour de passe-passe qui doit
donc tre employ avec prcaution.

LES PORTS DE
4REBOL,
COMMUNICATION ET LE RSEAU
REBOL se veut un langage particulirement l'aise sur le rseau, et
il l'est effectivement. Il embarque nativement une ribambelle de protocoles rseau, dont, naturellement, TCP que nous allons utiliser
pour crire un serveur rudimentaire. Mais avant cela, dcouvrons
une fonctionnalit d'entres/sorties propre REBOL: les ports. Un
port REBOL regroupe deux concepts. D'abord il gnralise la notion
de fichiers, car il permet de travailler, outre les fichiers disques,
avec le rseau, les consoles, les bases de donnes, etc. et ceci
avec un jeu commun de fonctions. Ensuite, toutes les donnes
devant transiter travers des ports sont places dans des sries.
Pour travailler avec les ports, on n'utilisera donc pas des fonctions
de lecture/criture dans des fichiers comme read ou write, mais
des fonctions d'insertion/extraction de donnes dans des sries.
Pour prendre un lment de comparaison, on peut dire que le port
REBOL se rapproche des flux Java. Illustrons ceci par un tout petit
exemple qui pourrait tre saisi directement dans la console REBOL :
close insert open/new %mon-fichier.txt "Programmez!"
Par cette simple ligne de code, nous ouvrons un port ayant comme
support physique un fichier et nous insrons la chane Programmez!
dans le port. Comme nous l'avons dit plus haut, insert est une fonction qui travaille avec les sries. Nous pouvons relire le contenu du
fichier de manire similaire :
p: open %mon-fichier.txt
print copy p
close p
Ici la fonction copy, comme son nom le suggre, retourne une copie
de la srie de donnes du port. Tout se passe comme si le contenu
du port tant lu entirement en une fois. Mais si l'on reprend la comparaison avec les flux Java, nous trouvons ici une diffrence notable:
le port n'est pas vide de donnes l'issue de la lecture. Ainsi on pourrait trs bien appeler copy plusieurs fois conscutivement.

5 UN SERVEUR RUDIMENTAIRE
Les ports REBOL sont un vaste sujet qui mrite d'tre approfondi,
mais le peu que nous en savons nous permet dj d'crire un serveur rudimentaire :
REBOL [
Title: "DB Server"
Date: 7-Aug-2008
File: %db-server.r
Author: "Fred"

70

PROgrammez ! \\ Fvrier 2009

do %read-db.r
server-port: open/lines/no-wait tcp://:6969
forever [
connection-port: first server-port
wait connection-port
print copy connection-port
insert connection-port text-db
wait connection-port
close connection-port
]
Nous commenons par appliquer la technique vue plus haut: nous
excutons le script read-db.r. Ainsi notre base de donnes et sa
reprsentation textuelle sont charges en mmoire. (On part de l'hypothse simplificatrice que la base de donnes n'est pas modifie
tant que le serveur tourne ;) Ensuite nous ouvrons notre port de
communication. Le simple fait de mentionner le protocole TCP dans
le nom du port enclenche le travail avec les sockets. Nous donnons
6969 comme valeur de port du socket. Le terme de port ici ne doit
pas prter confusion: Les ports REBOL sont diffrents des ports
de socket. Ensuite dans une boucle perptuelle, nous nous mettons
l'coute du port REBOL. Pour ouvrir ce port nous avons utilis le
raffinement lines, donc la communication s'effectuera ligne par
ligne. Nous attendons une requte du client, c'est--dire une ligne de
texte quelconque mise par celui-ci. Nous imprimons cette ligne en
cho sur la console ct serveur. On remarque que c'est bien copy,
fonction de manipulation de srie, qui est utilise pour extraire les
donnes. Puis en rponse la requte nous crivons dans le port,
au moyen de la fonction de srie insert, la ligne reprsentant les
donnes de notre base. Le code de notre serveur est vraiment trs
simple. Mais remarquons quand mme qu'il fonctionne en mode
synchrone, ce qui est acceptable seulement pour une communication en peer to peer la maison ou dans le cadre de cet article. Un
vrai serveur doit fonctionner en mode asynchrone pour accepter
des connexions simultanes, ce qui est un peu plus compliqu,
mme en REBOL, et sort du cadre de cet article d'initiation.

6 LE CLIENT
Le code du client est lui aussi extrmement simple :
REBOL [
Title: "DB Client"
Date: 7-Aug-2008
File: %db-client.r
Author: "Fred"
Version: 1.0
Purpose: {client de db-server.r }
]
p: open/lines/no-wait tcp://localhost:6969
insert p "requete"
wait p

68-71

22/01/2009

15:10

Page 71

code \\ rebol
print copy p
close p

LE DIALECTE DES INTERFACES


7VID
GRAPHIQUES
Les RIA tant dans l'air du temps, nous n'allons pas nous contenter
d'un client en mode texte, mais crire un petit client graphique, ce
qui en REBOL est un jeu d'enfant. Nous utilisons pour cela
REBOL/view (excutable rebview ou rebview.exe selon votre plateforme), une extension de REBOL/Core. Cette extension est un dialecte REBOL destin la cration d'interfaces graphiques. REBOL a
cette caractristique unique d'avoir t conu pour tre enrichi de
dialectes, ce que l'on nomme dans d'autres contextes des DSL, ou
Domain Specific Languages, c'est dire des langages ddis une
tche bien particulire. Ici le dialecte s'appelle VID et il est ddi la
cration d'interfaces graphiques. La dfinition des dialectes REBOL
est base sur la fonction couteau suisse parse dont nous avons
parl le mois dernier. Un des atouts majeurs d'un dialecte ou DSL,
est videmment une redoutable efficacit dans son domaine ;) Ainsi
en va-t-il du dialecte VID qui permet d'crire un code remarquablement concis. Voici titre d'exemple un jeu de pousse-pousse cod
en REBOL
Rebol [Title: "Sliding Tile Game"]
view center-face gui: layout [
origin 0x0 space 0x0 across
style p button 60x60 [
if not find [0x60 60x0 0x-60 -60x0]
face/offset - empty/offset [exit]
temp: face/offset face/offset: empty/offset
empty/offset: temp
]
p "A" p "B" p "C" p "D" return p "E" p "F" p "G" p "H" return
p "I" p "J" p "K" p "L" return p "M" p "N" p "O"
empty: p 200.200.200 edge [size: 0]
]
Ce code a t emprunt sur le site http://musiclessonz.com/rebol_tutorial.html et vous en voyez le rsultat ci-dessous [Fig.1]. Construire une
interface graphique en REBOL est ludique. Nous commenons ainsi:

view est une fonction qui attend un layout en argument et le fait


apparatre sur l'cran. layout est la fonction qui construit ce layout,
c'est--dire un assemblage de contrles partir des arguments
qu'elle reoit. Parmi ceux-ci figure toujours un bloc dans lequel sont
dfinis ces contrles, appels faces en REBOL. Si notre premire
ligne de code ouvre une fentre minuscule, nous pouvons amliorer
trs facilement les choses :
view layout [text "Programmez!"]
Notre fentre contient maintenant un contrle affichant du texte.
Voulons-nous y ajouter encore un bouton capable de ragir un clic
de souris ? [Fig.2].
view layout [text "Programmez!"
button "Cliquez moi" [alert "Abonnez vous! :)"]
]
Dans le bloc de code dfinissant le layout nous avons ajout un bouton. Et ce bouton est attribu un bloc de code qui sera excut
lors du clic par l'utilisateur. Le lecteur qui voudra aller plus loin se
familiarisera trs facilement avec VID partir de sa documentation.
Voici maintenant le code de notre client graphique :
REBOL [
Title: "DB Client GUI"
Date: 7-Aug-2008
File: %db-client-gui.r
Author: "Fred"
Version: 1.0
Purpose: {client graphique de db-server.r }
]
<

get-data: func [
][
p: open/lines/no-wait tcp://localhost:6969
insert p "requete"
wait p
result: copy p
close p
result
]

U
D
N

view layout []

Fig.1

Fig.2

Deux lignes de
code pour une
interface
totalement
fonctionnelle.
Un jeu de pousse-pousse, cod avec
seulement quelques lignes de REBOL

view layout [my_area: area wrap


across
button "Get DB" [ my_area/text: get-data
system/view/caret: head my_area/text
system/view/focal-face: my_area
show my_area]
button "Clear" [ my_area/text: none show my_area]
button "Quit" [quit]
]
On remarquera dans ce code trs concis comment nous dfinissons
le focus sur le contrle de texte et comment nous y positionnons le
curseur. Enfin, point important, bien remarquer l'emploi de la fonction show pour rafrachir l'affichage quand un lment de l'interface
est modifi.

Notre client
graphique en action

Frdric Mazu - fmazue@programmez.com


Fvrier 2009 \\ PROgrammez !

71

72-75

22/01/2009

15:13

Page 72

code \\ c++

Ecrire des extensions


au langage Ruby avec C++
Ruby, comme tous les langages de script, n'est pas un foudre de guerre. Ce n'est pas ce qu'on lui
demande. Mais parfois il est besoin d'acclrer un script ou encore d'accder une librairie
native. On crit alors une extension en code natif. Voyons comment procder avec C++.
Les langages de script apportent l'avantage de la conciLANGAGE : C++
sion du code, ainsi que la
DIFFICULTE
facilit et la rapidit de l'criSOURCE : OUI
LEVE
ture de celui-ci, parce que ce
sont des langages de haut niveau. Le revers de la mdaille avec les langages de scripts, en raison mme de leur nature, se situe au niveau de
la vitesse d'excution. Dans l'immense majorit des cas d'utilisation des
scripts cette lenteur n'est pas pnalisante. Mais parfois le besoin de
s'affranchir d'un goulet d'tranglement, ou encore le besoin d'invoquer
une API native ncessite l'criture d'une extension. Ruby, le langage de
script qui nous intresse aujourd'hui prvoit cette situation, et fournit un
jeu d'API et de macros pour s'interfacer avec du code C. Nous allons
tudier comment manier ce jeu d'API et crire un peu de code C et surtout beaucoup de C++, langage que votre serviteur prfre C.

APPLICATION : RUBY

DU CODE C OU C++
1EMBARQUER
DANS DU CODE RUBY
Mais avant d'entrer dans le vif du sujet, commenons par dcouvrir
une curiosit qui peut se rvler utile dans certaines occasions. Il
existe une gemme Ruby, du nom de RubyInLine qui permet d'embarquer du code C ou C++ directement dans du code Ruby. Une fois
cette gemme installe, voici un exemple de ce qu'il est possible de
faire (attention, respectez la disposition du code) :
require 'inline'
class Programmez
inline do |builder|
builder.c '
void hello()
{
puts("Programmez!");
puts("Abonnez vous! :-)");
}'
end
end
Programmez.new.hello
Pour que cela fonctionne, la gemme RubyInline fait le travail que nous
ferons ensemble plus loin, elle gnre la vole une extension en C
(ou C++) puis la compile pour aboutir la cration d'une librairie. Les
esprits curieux peuvent consulter le rpertoire .ruby_inline pour tudier le code gnr. Le procd est amusant mais malheureusement
RubyInLIne ne connat qu'un sous-ensemble rduit de C et C++. C'est
pourquoi nous mettons maintenant les mains dans le cambouis.

72

PROgrammez ! \\ Fvrier 2009

2 UNE EXTENSION EN C
Ruby dispose d'un mcanisme de gnration de makefile, partir
d'un petit script. Voici un exemple basique pour la compilation d'une
extension du nom de Programmez :
# fichier extconf.fb
require 'mkmf'
extension_name = 'Programmez'
dir_config(extension_name)
create_makefile(extension_name)
Excuter ce script par
ruby extcon.rb
aboutit la gnration d'un makefile. Ensuite la commande:
make
construira l'extension partir de tous les fichiers C et ou C++ qu'elle
trouvera dans le rpertoire courant. A quoi ressemblent ces fichiers
C/C++ ? Voici un exemple de base, en C, de type Hello World!
#include "ruby.h"
#include <stdio.h>

VALUE ModuleProgrammez = Qnil;


VALUE hello(VALUE self)
{
puts("Programmez!");
puts("Abonnez vous! :)");
return Qnil;
}
void Init_Programmez()
{
ModuleProgrammez = rb_define_module("Programmez");
rb_define_method(ModuleProgrammez, "hello", hello, 0);
}
Nous y remarquons d'abord la prsence d'une fonction d'initialisation de l'extension. Le prfixe Init_ est requis et la casse du nom de
la fonction doit correspondre celui de l'extension. Dans son inter-

72-75

22/01/2009

15:13

Page 73

code \\ c++
face avec C, Ruby manipule toutes les valeurs sous le type gnrique
VALUE qui peut tre vu comme une sorte de rfrence. Une VALUE
nulle a la valeur Qnil. Le reste du code parle de lui-mme. Nous renvoyons le lecteur la documentation pour le dtail des API utilises.
Une fois l'extension compile, ce qui ne pose aucun problme sous
Linux, on peut la tester dans l'interprteur interactif, comme ceci :
irb
irb(main):001:0> require 'Programmez'
=> true
irb(main):002:0> include Programmez
=> Object
irb(main):003:0> hello
Programmez!
Abonnez vous! :)
=> nil
irb(main):004:0>

3 LE MME EN C++
Travailler avec C c'est bien, mais de l'avis de votre serviteur travailler
avec C++ c'est mieux car ce langage est plus expressif et facilite la
gestion des erreurs. Par contre il y a quelques petites subtilits,
mme avec un simple exemple de type Hello World. Transposons en
C++ l'exemple prcdent.
#include <iostream>
using namespace std;
#include "ruby.h"

c'est--dire recevant un nombre indfini de paramtres. Un compilateur C laisse passer cela. Un compilateur C++, plus chatouilleux ne
l'accepte pas, d'o le transtypage. Enfin, il est ncessaire que l'dition de liens incorpore la librairie standard C++. Pour cela, et sous
Linux il convient d'ajouter une ligne dans le fichier extconf.rb :
# avec un espace devant -lstdc++
$LIBS = $LIBS + ' -lstdc++'

4 COMPILER SOUS WINDOWS


Sous Windows, les
Fig.1
choses peuvent s'avrer
moins directes en raison
des disparits entre
compilateur et versions
de compilateurs. Pour
travailler l'aise, la
meilleure solution, de
l'humble avis de votre
serviteur, est de compi- Configuration d'un projet de type Makefile pour coml e r v o u s - m m e v o t r e pilation d'une extension Ruby sous Visual Studio.
Ruby partir des sources. L'opration est sans histoire en suivant
les indications qui viennent avec la distribution. Ensuite si l'on utilise
le compilateur Microsoft, c'est une bonne ide d'utiliser Visual Studio, version Express (et gratuite) ou suprieure. On crera alors un
projet de type makefile. On ajoutera, en plus des fichiers C++, le
fichier extconf.rb au projet, puis on configurera les commandes de
construction ainsi : [Fig.1]

Commandes

Valeur

Build Command Line


Rebuild All Command Line
VALUE ModuleProgrammez = Qnil;
VALUE hello(VALUE self)
{
cout << "Programmez! C++ " << endl;
cout << "Abonnez vous! :)" << endl;
return Qnil;
}
extern "C" void Init_Programmez()
{
ModuleProgrammez = rb_define_module("Programmez");
rb_define_method(ModuleProgrammez, "hello",
reinterpret_cast<VALUE (*)(...)>(hello), 0);
}
D'abord il est pertinent d'inclure les en-ttes C++ standard en premier. Sans cela, un compilateur (celui de Visual Studio 2008 par
exemple) pourrait drailler cause des dclarations contenues dans
l'en-tte ruby.h. Ensuite, les extensions tant des librairies charges
dynamiquement par Ruby, celui-ci doit trouver la fonction point d'entre (ici Init_Programmez). Le nom de celle-ci ne doit pas tre dcor par le compilateur, c'est pourquoi nous dclarons la fonction
extern "C". Enfin il faut remarquer le transtypage de la fonction hello.
Notre fonction hello ne reoit qu'un seul paramtre, mais rb_define_method s'attend recevoir un pointeur sur fonction variadique,

nmake
ruby extconf.db
nmake
nmake clean

Clean Command Line

Etant bien entendu que l'excutable Ruby est point par le PATH de
votre systme. Enfin, sous Visual C++ et pour assurer un bon comportement du code en cas de leve d'exception, on imposera une
option de compilation en ajoutant une ligne dans le fichier extconf.rb:
$CFLAGS= $CFLAGS + '/EHsc'

5 UNE EXTENSION DE CLASSE


Augmenter les performances peut tre une raison qui prside
l'criture d'une extension Ruby. Utiliser les ressources d'une librairie native peut tre une autre raison. Nous allons maintenant crire
une extension plus labore, illustrant principalement ce dernier
point. Ce sera aussi l'occasion d'aborder certains aspects pas toujours trs bien documents de l'interface Ruby/C. Nous voulons que
notre extension soit vue par Ruby comme une classe Ruby ordinaire.
Cette classe sera un conteneur de caractres. Les caractres sont
rangs de manire contigu dans une zone de mmoire dont il faudra assurer la gestion. La classe disposera d'un accesseur permettant d'obtenir un caractre en fonction de son rang. Un mauvais
indice lvera une exception Ruby. Si l'indice est correct, l'accesseur
retournera une chane constitue de cet unique caractre. La classe disposera d'une mthode pour redfinir le contenu de la zone
mmoire. Pour le programmeur Ruby qui utiliserait la classe, cette
zone mmoire et les donnes qu'elle contient sont totalement
Fvrier 2009 \\ PROgrammez !

73

72-75

22/01/2009

15:13

Page 74

code \\ c++
opaques. La seule ressource native que nous utilisons est la gestion
mmoire. Notre exemple reste volontairement simple pour tre portable sur n'importe quel systme disposant de Ruby et d'un compilateur C++. Toutefois cet exemple pourra tre adapt sans difficult
la gestion d'un handle de fichier, d'un smaphore, ou de n'importe
quoi d'autre, le principe tant toujours le mme. Enfin notre code
doit tre robuste aux exceptions C++, afin de ne pas perturber le
fonctionnement de l'interprteur Ruby. Voici le code qui ralise tout
cela et que nous allons analyser en dtail:

}
// Ne pas laisser passer une exception C++
catch(std::bad_alloc)
{
std::cerr << "Impossible allouer memoire pour CharHolder"
<< std::endl;
// et la place, lever une exception Ruby
rb_raise(rb_eRuntimeError, "Exception Ruby, manque de memoire");
}
return Data_Wrap_Struct(klass, CharHolderMark, CharHolderFree,
chd);

#include <new>
#include <iostream>
#include <cstdlib>

#include "ruby.h"

static VALUE GetAt(VALUE object, VALUE index)


{
struct CharHolderData* chd;
int at;
char buffer[2];

static const char* default_text = "Programmez!";


static VALUE ModuleProgrammez = Qnil;
static VALUE CharHolder = Qnil;

// Avant toute chose,


// Vrification du type reu
Check_Type(index, T_FIXNUM);

struct CharHolderData
{
char* p;
int length;
};

// rcuprer les donnes maintenues dans la classe


Data_Get_Struct(object, struct CharHolderData, chd);
at = NUM2INT(index);
if(at < 0 || at > chd->length-1)
rb_raise(rb_eRuntimeError, "Exception Ruby, indice incorrect");

static void CharHolderMark(struct CharHolderData* chd)


{
}
static void CharHolderFree(struct CharHolderData* chd)
{
delete[] chd->p;
delete chd;
std::cout << "Memoire de CharHolder liberee" << std::endl;
}

static VALUE CharHolderAllocate(VALUE klass)


{
struct CharHolderData* chd;
try
{
// Allocation d'une CharHolderData sur le tas,
// c'est obligatoire...
chd = new CharHolderData;
int size = strlen(default_text);
chd->length = size;
size++; // 0 final ;)
// Les deux lignes ci-dessous
// pour test manque de mmoire
// std::bad_alloc ba;
// throw ba;
chd->p = new char[size];
strcpy(chd->p, default_text);
std::cout << "Allocation memoire pour" << std::endl;
std::cout << "la classe CharHolder effectuee" << std::endl;

74

PROgrammez ! \\ Fvrier 2009

// Fabriquer une chaine Ruby partir d'un caractre


buffer[0] = chd->p[at];
buffer[1] = 0;
return rb_str_new2(buffer);
}
static void Set(VALUE object, VALUE text)
{
char* newtext;
int newlength;
struct CharHolderData* chd;
// Avant toute chose,
// Vrification du type reu
Check_Type(text, T_STRING);
newtext = rb_string_value_cstr(&text);
newlength = strlen(newtext);
// rcuprer les donnes maintenues dans la classe
Data_Get_Struct(object, struct CharHolderData, chd);
try
{
// Les deux lignes ci-dessous
// pour test manque de mmoire
// std::bad_alloc ba;
// throw ba;
char* t = new char[newlength+1];
strcpy(t, newtext);

72-75

22/01/2009

15:13

Page 75

code \\ c++
// Si tout est en ordre valider
// les rsultats
delete[](chd->p);
chd->p = t;
chd->length = newlength;
std::cout << "Reallocation memoire CharHolder effectuee"
<< std::endl;
}
// Ne pas laisser passer une exception C++
catch(std::bad_alloc)
{
std::cerr << "Impossible de reallouer memoire pour CharHolder"
<< std::endl;
// et la place, lever une exception Ruby
rb_raise(rb_eRuntimeError,
"Exception Ruby, manque de memoire");
}
}
extern "C" void Init_Programmez()
{
// Cration du module
ModuleProgrammez = rb_define_module("Programmez");
// Cration de la classe Ruby
CharHolder = rb_define_class_under(
ModuleProgrammez,
"CharHolder", rb_cObject);
// Dfinition de la mthode d'allocation
rb_define_alloc_func(CharHolder, CharHolderAllocate);
// Dfinition de la mthode GetAt
rb_define_method(CharHolder, "GetAt",
reinterpret_cast<VALUE (*)(...)>(GetAt), 1);
// Dfinition de la mthode Set
rb_define_method(CharHolder, "Set",
reinterpret_cast<VALUE (*)(...)>(Set), 1);
}
Commenons par le commencement, savoir le point d'entre, qui
est la fonction Init_Programmez. On y trouve d'abord la cration du
module. Rien de nouveau sur ce point par rapport aux exemples prcdents. Vient ensuite la dclaration de classe de nom CharHolder
au moyen de la fonction rb_define_class_under. L'appel retourne une
VALUE, type fourre-tout de l'interprteur RUBY comme nous l'avons
mentionn plus haut. Le suffixe under du nom de fonction signifie en
bon franais "sous". Toute classe Ruby est sous-classe d'une autre
classe, d'o la prsence de ce suffixe. Ici il s'agit de la classe cosmique Object connue en permanence de l'interprteur sous le nom
de rb_object. Ensuite, et grce l'API rb_define_alloc_func, on attribue la classe une fonction baptise CharHolderAllocate et grant
la mmoire utilise par notre code au sein de la classe. Enfin on dfinit les deux accesseurs de la classe.

GESTION DE MMOIRE UTILISATEUR


SOUS INTERPRTEUR RUBY

Regardons maintenant attentivement le code de CharAllocate.


D'abord, nous veillons ne pas laisser en sortir une exception C++
en cas d'insuffisance mmoire. Si cette ventualit se produisait,
cela mettrait fin Ruby, alors que celui-ci continuera peut-tre

fonctionner malgr tout. Donc toute exception C++ est capture,


puis on lve le cas chant une exception Ruby en lieu et place.
Ensuite nous allouons sur le tas, c'est videmment obligatoire, une
structure devant contenir les donnes que nous initialisons. Cette
initialisation entrane une autre allocation mmoire qui elle non plus
ne doit pas dboucher sur une exception C++. Remarquons bien la
toute dernire ligne de notre fonction. Grce un appel l'API
Data_Wrap_Struct nous associons notre structure de donnes
une fonction de marquage et une fonction de libration de ressources. Notre fonction de marquage ne fait rien. Mais, dans un
autre contexte, nous devrions ventuellement y marquer comme utilise une classe qui serait englobe par la ntre. La fonction de libration de ressources est triviale. En interne Ruby fait un comptage
de rfrence sur les objets qu'il gre. Quand le compteur tombe
zro, l'interprteur libre les ressources occupes par les objets,
non sans avoir auparavant appel les fonctions de libration de ressources dtenues par les objets. C'est ce moment l que notre
fonction CharHolderFree sera appele. L'accesseur GetAt illustre 4
points intressants. D'abord, Ruby tant un langage dynamiquement typ, nous devons nous assurer, via la macro Check_Type, que
l'utilisateur invoque notre mthode en lui passant un nombre entier
propre sur lui. Ceci fait, nous rcuprons un pointeur sur notre
structure contenant nos donnes natives. Pour cela, nous
employons l'API Data_Get_Struct qui est la rciproque de l'API
Data_Wrap_Struct vue plus haut. Ensuite nous voyons comment
convertir, au moyen de la macro NUM2INT, un nombre Ruby en un
entier natif. Naturellement, nous testons maintenant de faon triviale la validit de l'indice et levons une exception Ruby si quelque chose
cloche. Enfin nous voyons comment retourner notre caractre, ce
qui revient construire une chane Ruby de un caractre, au moyen
de l'API rb_str_new2. Avec ce que nous savons, le code de notre
accesseur Set est simple: vrification de type, rcupration de
valeur et de structure comme vu plus haut. L encore, toutes les
ventuelles exceptions C++ sont museles. Enfin nous avons pris
garde de ne bien raffecter les valeurs dans notre structure, la longueur du texte notamment, qu'une fois la rallocation du tampon
mmoire effectue. Ceci afin d'tre sr que notre classe conserve
un tat cohrent mme si la rallocation mmoire lve une exception C++. Sur le site, le lecteur trouvera un script baptis test.rb qui
teste les fonctionnalits de notre classe, ainsi que son comportement en cas d'erreur de
Fig.2
typage, d'indice, etc.
[Fig.2] Dans le source C++
DemoClasse.cpp, le lecteur trouvera divers
endroits deux lignes de
code mises en commentaires :
Comportement de notre classe sous le script test.rb.
// std::bad_alloc ba;
// throw ba;
Ces lignes simulent un manque de mmoire. Retirez les commentaires, recompilez, et vous pourrez visualiser ce qui se passerait en
cas de manque de mmoire dans l'interprteur Ruby lors de l'initialisation ou de l'utilisation de notre classe.
Frdric Mazu
fmazue@programmez.com

Fvrier 2009 \\ PROgrammez ! 75


LACTU AU QUOTIDIEN www.programmez.com

76-77

22/01/2009

15:15

Page 76

code \\ c++

C++0x, une rvolution dans


le monde de C++
C++0x est le nom du prochain standard C++, devant sortir officiellement dans le courant
de cette anne 2009. Cette volution est si riche qu'elle s'apparente plutt une rvolution.
Au fil du temps C++ est
devenu trs riche, alliant la
programmation de bas
LANGAGE : C++
niveau et des possibilits
DIFFICULTE
SOURCE : NON
incroyables avec des foncAVANC
tionnalits telles que les templates. Le standard C++0x venir, va encore considrablement
enrichir le langage. Deviendra-t-il encore plus complexe, difficile et
" pigeux " pour autant ? Il semble que non, et c'est encore un de ces
paradoxes dont ce langage a dcidment le secret. De nombreux
nouveaux mots-cls, une syntaxe enrichie, de nouvelles fonctionnalits, et pourtant il devrait tre plus confortable l'utilisation et mme
plus performant l'excution, grce, notamment, l'introduction de
la smantique de dplacement (move semantic) en alternative la
smantique de copie, seule supporte jusqu' prsent. Passer,
mme brivement, en revue toutes les fonctionnalits nouvelles de
C++0x est naturellement impossible ici. Nous prfrons nous
concentrer sur quelques-unes, particulirement intressantes.

APPLICATION : NOUVEAUT

LES CONCEPTS
Une des grandes forces de C++ est la programmation gnrique au
moyen de templates. Une des grandes difficults en C++ est ... l'criture et l'utilisation des templates. Tout codeur C++ a un jour t
confront cette situation: une erreur dans le code template, qui ne
compile donc pas, et voil que le compilateur met un flot intarissable
de messages d'erreur absolument incomprhensibles. Une msaventure qui a dgot bien des dbutants et fatigue mme les programmeurs expriments. Examinons avec un cas concret, une fonction
gnrique retournant le plus petit des deux arguments reus.
template<typename T>
const T& min(const T& x, const T& y) {
return x < y ? x : y;
}
Ce code trs simple recle le problme. Rien n'annonce l'utilisateur de cette fonction que dans son corps l'oprateur < est employ.
(Nous supposons pour l'exemple que cette fonction est complexe et
fait partie d'une librairie dont nous avons la documentation, mais
que le code est absolument illisible, comme tout bon code C++
base de template :). Si l'utilisateur passe un type n'ayant pas d'oprateur <, le compilateur va se fcher tout rouge au moment de l'instanciation du template. Ici l'exemple est certes simple, mais dans le
cas gnral, l'absence de l'oprateur se manifeste dans les trfonds
de l'implmentation, d'o un flot intarissable de messages incomprhensibles. Le concept remdie cela en dfinissant un contrat sur
les types manipuls par la fonction gnrique, ou, exprim autre-

76

PROgrammez ! \\ Fvrier 2009

ment, une contrainte sur les types. Le crateur de la fonction est


oblig de respecter le contrat, l'utilisateur galement. Voici ce que
cela donne pour notre exemple, et avec les deux nouveaux mots-cls
concept et requires :
concept LessThanComparable<typename T> {
bool operator<(const T& x, const T& y);
}
template<typename T>
requires LessThanComparable<T>
const T& min(const T& x, const T& y) {
return x < y? x : y;
}
Le concept ci-dessus dclare qu'un type qui veut s'y conformer doit
disposer de l'oprateur <. Ensuite nous revenons notre fonction
gnrique dclare comme requrant que tout type T manipul soit
conforme au concept dclar en amont. Passons du ct client. Il
est naturel de vouloir invoquer notre fonction ainsi.
min(1, 2);
Cet appel qui compilait avec l'ancienne version de la fonction min ne
compile plus, mais sans mettre des messages incomprhensibles.
Le compilateur dira simplement qu'il ne sait pas que int rpond au
concept LessThanComparable. Nous devons l'en informer explicitement en dclarant une concept map :
concept_map LessThanComparable<int> { }
Le type intgr int disposant de l'oprateur < tout va bien. Par
contre si nous donnons une concept map errone :
concept_map LessThanComparable<std::complex<int> > {
}
Immdiatement le compilateur verra l'absence de l'oprateur, avant
l'instanciation du template, donc sans entrer dans les abysses de
l'implmentation, et pourra donc mettre un message clair. Bien
entendu dclarer une concept map pour des cas aussi simples est
lourd. C'est pourquoi une automatisation est prvue. On crira :
auto concept LessThanComparable<typename T> {
bool operator<(const T& x, const T& y);
}
Avec cet auto concept, c'est le compilateur qui gnrera les concept
maps selon les besoins, soulageant ainsi l'utilisateur d'une besogne

76-77

22/01/2009

15:15

Page 77

code \\ c++
fastidieuse. Revenons un instant du ct concepteur. Le concept
garantit que le code n'utilise pas un oprateur imprvu l'insu de
notre plein gr. Ainsi si min est crite ainsi :
template<typename T>
requires LessThanComparable<T>
const T& min(const T& x, const T& y) {
return x > y ? y : x;
}
Le compilateur se plaindra immdiatement de l'usage de l'oprateur
> qui ne figure pas dans la liste des requis. A nouveau le message
d'erreur mis sera clair. On voit que ce mcanisme force autant le
concepteur que l'utilisateur respecter des contraintes sur un type,
et ainsi une instanciation de templates ne peut plus chouer. Il est
d'ores et dj possible de se faire la main sur les concepts de C++
avec le compilateur exprimental ConceptGCC (http://www.generic-programming.org/software/ConceptGCC/)

LE MULTITHREADING
Avec la venue de ce nouveau standard, C++ commence pallier une
lacune: une bibliothque standard trop loigne des besoins industriels. Les dtracteurs de C++ et partisans de Java ou C# mettent
souvent en avant, non leur langage prfr, mais plutt les bibliothques qui l'accompagnent. C++ commence donc enrichir ses
bibliothques. Bon nombre de ces enrichissements sont des
emprunts la fameuse librairie Boost (www.boost.org). Ainsi une
extension pour le travail avec les expressions rgulires, mais surtout une extension pour le travail avec les threads, ce qui l'heure
des processeurs multicoeurs tait absolument indispensable. Cette
extension permettra d'crire du code portable au niveau source.
Gros soulagement pour le dveloppeur donc, qui ne devra plus se
plonger dans les particularits des API des systmes htes. Ceux
qui sont familiariss avec Boost vont s'y reconnaitre :

class worker
{
public:
void operator()();
};
C++Ox: The Dawning of a New Standard
worker my_worker;
std::thread t(my_worker);
Nous sommes en C++, donc l'instance de my_worker est copie lors
de l'instanciation du thread. Il est possible de l'viter ainsi :
std::thread t(std::ref(my_worker));
Encore plus intressant, une fonction (ou un constructeur de classe)
de thread peut recevoir des arguments :
void with_params(double d i,std::string s,std::vector<int> v);
std::thread t(with_params, 1.0,
"Programmez!",std::vector<int>(1, 2 ,3));
Et bien entendu, cette extension pour la programmation multithread
vient avec toute la panoplie de fonctionnalits de synchronisation
requises, et que nous ne dcrivons pas ici.

LES TEMPLATES VARIADIQUES


Cela n'a pas chapp votre il de lynx d'expert en C++, dans
l'exemple ci-dessus le constructeur de la classe std::thread peut
recevoir un nombre variable d'arguments. Exactement de la mme
manire que la fonction printf du C peut recevoir un nombre variable
d'arguments. printf est une fonction variadique. Dsormais, les entits gnriques de C++ pourront tre instancies grce une nouvelle fonctionnalit pertinemment baptise les templates variadiques :
template<class ... Types> class MaClasse { };
template<class ... Types> void f(Types ... args);

void worker();
std::thread t(worker);
Une fonction de travail 'worker' est ainsi excute dans un thread.
Nous sommes en C++, donc la librairie de thread est crite avec des
templates et donc est gnrique. Plutt qu'une fonction nous pouvons passer un objet fonction c'est--dire une instance d'une classe
ayant un oprateur () :

De quoi repousser encore plus loin les possibilits de C++ et donner


du grain moudre des gnrations de dveloppeurs et de srieux
maux de ttes aux implmenteurs :) Il reste normment dire sur
C++0x, nous y reviendrons trs certainement. Souhaitons que ce
nouveau standard soir rapidement finalis, et surtout rapidement
pris en charge par les compilateurs.
Frdric Mazu - fmazue@programmez.com

Abonnez-vous e et pour

2,7
1

seulement par numro au format PDF (pour le monde entier)

de plus par mois : abonnement illimit aux archives


(numros du magazine, et articles, en PDF)

Abonnez-vous sur www.programmez.com

78-81

22/01/2009

15:17

Page 78

ludique \\ xna
1re partie

Crer un jeu vido de A Z avec XNA


Cette srie darticles a pour objectif de
vous faire dcouvrir les bases de la
programmation dun jeu vido. Si lunivers
est plus sympa quune application
classique, cela demande toutefois
beaucoup de travail et dorganisation. Pour
un dbutant, il vaut mieux tre raliste sur
ses objectifs et boucler chaque projet de A
Z. Dans notre cas, nous partagerons notre
exprience, autour dun jeu de gestion de
type Sim City / Civilisation. Nous
dvelopperons en C# et XNA.
ous nous pencherons sur la programmation gameplay
(c'est--dire la programmation qui touche directement la
logique du jeu en elle-mme). Nous donnerons dans ce
premier article peu dexemples de code (disponible sur le site
www.programmez.com) afin de mieux pouvoir se concentrer sur les
explications des concepts. Cest parti !
Premiers Objectifs
- Charger la carte de la France avec ses villes
- Se dplacer et zoomer sur la carte
- Construire quelques btiments avec des touches du clavier
- Slectionner les villes et btiments

Le Game Design
Premire chose faire : avoir une ide ! Et consigne par crit sil
vous plat. Ce cahier des charges, ou encore spcifications fonctionnelles , se nomme un Game Design Document dans le jargon.
Cest un lment central du dveloppement. Il faut par contre noter
que celui-ci est trs rarement fixe et volue (trs) rgulirement au
cours du dveloppement. Il est cependant prfrable que les principes de base restent immuables. Une bonne pratique adopter
est de regrouper lavis de personnes externes tout au long du projet :
de lide sur le papier sa finition. Cest ce quon appelle des playtests . Ils sont notamment trs utiles pour valider ce que lon a dj
fait et surtout prendre les mesures ncessaires pour corriger les
dfauts de conception le plus tt possible.
Voici le concept de notre jeu rsum en quelques mots : le joueur
doit satisfaire les besoins de plus en plus nombreux de la population
par la construction de btiments adquats tout en respectant lenvironnement. Il devra galement investir dans la recherche pour amliorer le rendement de ses infrastructures au cours du jeu.

Quelles diffrences par rapport


une application classique ?
Avant de commencer dcrire la programmation gameplay, un peu
de thorie simpose. Un foss spare la programmation classique (en
gnral vnementielle) de celle dun jeu (en gnral squentielle).

78

PROgrammez ! \\ Fvrier 2009

Les ressources
Un jeu est une application multimdia qui ncessite des images, des
modles 3D, des scripts, des sons et dautres lments extrieurs
au programme. Les ressources reprsentent ces lments chargs
en mmoire par le jeu afin de les utiliser. Elles sont en gnral trs
gourmandes et ncessitent dtre bien gres.
La boucle de jeu
Un jeu, cest simplement une grande boucle qui se rpte jusqu la
fin du programme. Ni plus, ni moins. De manire gnrale, elle excute toujours la mme chose dans un ordre bien prcis :
- Mise jour des entres utilisateurs : clavier, souris, joystick, etc.
- Mise jour des entits du jeu : cration / destruction, dplacement, etc.
- Rendu lcran
Une machine tats
Tout dabord quest-ce quun tat de jeu? Et bien cest une partie
bien spcifique de lapplication : lintroduction, le menu principal, les
sous-menus, le jeu en lui-mme, etc. Chaque tat a une manire de
fonctionner bien distincte mais excute globalement toujours les
mmes fonctions (Draw, Update, etc.) dcrites dans la boucle de
jeu. De plus, chaque tat ncessite de charger des ressources qui
lui sont propres. Alors comment grer ces cas-l ? La manire la
plus simple de procder est dutiliser le pattern Etat.
Les diffrentes couches dun jeu
De manire gnrale un jeu moyen se
divise en plusieurs couches . Un
schma ci-contre vaut mieux que toute
explication.
API bas niveau : ce sont les bibliothques qui permettent en gnral
deffectuer le rendu, de lire des sons,
de grer les entres utilisateurs ou
bien mme la physique. Elles sont gnralement conues pour une
plate-forme bien prcise. Par exemple pour le rendu, Direct X est
utilis pour Windows alors qu Open GL est la rfrence sous Mac
OS X et Linux.
Middleware : Communment appel moteur, ce sont des bibliothques de plus haut niveau qui ajoutent toutes les fonctionnalits
dont un jeu peut avoir besoin, comme la gestion des entits de jeu,

79-116

22/01/2009

15:18

Page 55

DVELOPPEZ VOTRE SAVOIR-FAIRE


Nouvelle Formule

mensuel n111 - septembre 2008

PRO grammez !
PRO
grammez
PRO
grammez! !
Le magazine du dveloppement

Numro Spcial 10 ans !


elle elle
Nouv
No
e
uluv
www. programmez.com
Form
EXCLUS
Formule
IF
PROGRAMMEZ !

mensuel n112 - octobre 2008


mensuel n115 - janvier 2009

Les rvlations
du livre choc

www. programmez.com
www.programmez.com

L e m Laeg am
z iangea zdi un ed d vue ldopvpeel o
mpepnetm e n t

EnquteCD-Rom

BoostezJeux
Java !
MULTI-TOUCH

Vos virtuel
rserv aux
lecteurs
langages
Logiciels tlcharger
favoris
en AVANT-PREMIRE
Les
Exclusif ! Vers Microsoft 3.0
Lquipe
The Shads,
de lEpita
ABC Project

La Rvolution du

Doper Java 7 au multicore


Astuces pour optimiser votre code Java
Les architectures Java EE

Olympiques
Cdu
ARRIRE
Les projets
secrets
Dveloppeur
dveloppement
!
de Microsoft

FREELANCE
ImagineCup rvle

Programmez ! est le magazine


du dveloppement
Langage et code, dveloppement web, carrires
et mtier : Programmez !, c'est votre outil de veille technologique.
Pour votre dveloppement
personnel et professionnel,
abonnez-vous Programmez !

les nouveaux talents


Comment a marche ?
Les outils, les technologies
Ladisponibles
MODLISATION
Chrome et les dveloppeurs
Coder pour l'iPhone 2.0
Le Google Developer Day !
de A Z
Au coeur du e-lab de Bouygues

Le match

Eclipse - Netbeans

Spcial

PHP
Java

!
ATTENTION usse
Tarifs en hachain !
le mois pro

Quels modles et outils choisir ?

Mes premiers modles en quelques clics


Les bonnes
pratiques
Choisir loutil
idal300
!licencesUML

Les dernires versions compares


GAGNER
Tout savoir sur Eclipse 4.0

technique

Vido
ENFIN DISPONIBLE
SUR LE WEB !
SQL Server
2008

Flash

Choisissez votre formule

Les nouveauts
PHP 5.3 :
AspectJ

par aspect facile !


Crer La
sonprogrammation
moteur
de template en PHP 5

Linux

Matriser le bitmap avec JavaSpaces :


UML et PHP : le duo d'enfer
ActionScript 3
Crer votre grid computing
Dcouvrez le Resource
Voyage
au cur
PHP et la programmation
par
Multicur
Google
Coder les
API YouTube !
Governor
Jeux : du noyau Linux
Etvosaussi
: votrecomposants
Programmer
curs
Intgrer Google Maps
et JSFlive
Vido
en
streaming
sur
site
Dvelopper des jeux en Java
iPhone / .net
Linux : Dvelopper
avec OpenMP
M 04319 - 111 - F: 5,95 E
Mozilla
Piloter votre
des extensions Nautilus
M 04319 - 112 - F: 5,95 E
La charge processeur
Crer votre extension XUL
.NetMedia Center
Google
Langage
Windows
avec WMI
pour Firefox !
Dvelopper
une application
Mettez du drag & drop
Dcouvrez Rebol !
avec
iPhone
Speech
Server
dans
GWT6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
Printed in France
- Imprim en France - BELGIQUE 6,45 - SUISSE 12
FS - LUXEMBOURG

3:HIKONB=^UZ^Z]:?k@b@l@b@a;
3:HIKONB=^UZ^Z]:?k@l@b@c@a;

Pie Menu : un menu original


dcouvrir !

M 04319 - 115 - F: 5,95 E

Architecture

3:HIKONB=^UZ^Z]:?a@l@b@p@a;

Les atouts de OSGi

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

11 numros par an :
soit

45 *

Numros

Abonnement 1 an au magazine : 45

(au lieu de 65,45 tarif au numro) Tarif France mtropolitaine

Abonnement Intgral : 1 an au magazine + archives


sur Internet et PDF : 57 Tarif France mtropolitaine
Abonnement PDF / 1 an : 30 - Tarif unique
Inscription et paiement exclusivement en ligne
www.programmez.com

3 GRATUITS
+ Abonnement INTGRAL

Abonnement Etudiant : 1 an au magazine : 39

(au lieu de 65,45 tarif au numro) Offre France mtropolitaine

*Tarif France mtropolitaine

ACCS ILLIMIT aux ARCHIVES du MAGAZINE pour


Cette option est rserve aux abonns pour 1 an au magazine, quel
que soit le type dabonnement (co, Numrique, Etudiant). Le prix de
leur abonnement normal est major de 12 (prix identique pour toutes

OUI, je mabonne

1 par mois !

zones gographiques). Pendant la dure de leur abonnement, ils ont


ainsi accs, en supplment, tous les anciens numros et articles
/dossiers parus.

Vous pouvez aussi vous abonner en ligne et trouver tous les tarifs

www.programmez.com

PROGRAMMEZ

M. Mme Mlle

Entreprise :

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

Fonction : ...................................................

Nom : ........................................................................................ Prnom :....................................................................................................................................


Adresse :

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

Code postal :
Tl :

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

Ville :

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

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

E-mail :

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

Je joins mon rglement par chque lordre de Programmez ! Je souhaite rgler rception de facture
A remplir et retourner sous enveloppe affranchie :
Programmez ! - Service Abonnements - 22 rue Ren Boulanger - 75472 Paris Cedex 10.
abonnements.programmez@groupe-gli.com

PRO grammez !
Le magazine du dveloppement

Offre limite,
valable jusquau
28 fvrier 2009
Le renvoi du prsent bulletin implique
pour le souscripteur l'acceptation
pleine et entire de toutes les
conditions de vente de cette offre.
Conformment la loi Informatique et
Liberts du 05/01/78, vous disposez
d'un droit d'accs et de rectification
aux donnes vous concernant.
Par notre intermdiaire, vous pouvez
tre amen recevoir des propositions
d'autres socits ou associations.
Si vous ne le souhaitez pas, il vous
suffit de nous crire en nous prcisant
toutes vos coordonnes.

PROG 116

Abonnement 1 an au magazine : 45 (au lieu de 65,45 tarif au numro) Tarif France mtropolitaine
Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 57 Tarif France mtropolitaine
Abonnement Etudiant : 1 an au magazine : 39 (au lieu de 65,45 tarif au numro) Offre France mtropolitaine

78-81

22/01/2009

15:17

Page 80

ludique \\ xna
la camra, la gestion des ressources, etc. Un middleware peut galement ajouter un niveau dabstraction supplmentaire qui permet
de rendre le code du jeu portable sur diffrentes plates-formes sans
se soucier des API bas niveau. Ogre 3D en est lexemple parfait.
Jeu : ce sont les bibliothques et lexcutable qui contiennent le
code du jeu proprement parler. Ce code utilise de manire gnrale
les fonctionnalits offertes par le middleware. Si celles-ci ne suffisent pas, on peut galement dfinir ses propres outils bien spcifiques.
XNA dans tout a ?
XNA englobe la fois la couche API bas niveau puisquil repose
directement sur Direct X et une partie du middleware. En effet,
dune part il tend les fonctionnalits de DirectX et en simplifie lutilisation, dautre part il propose un panel de classes de plus haut
niveau qui permet par exemple de grer facilement les ressources.
Cette plate-forme offre de multiples avantages :
Gratuit avec Visual Studio C# Express
Trs Simple daccs. On ne se concentre que sur le code du jeu
Productif
Cross Platform, c'est--dire quelle permet de dvelopper la fois
sur PC et XBOX 360
XNA est un bon middleware pour dbuter ou pour un projet de petite
taille. Mais il a galement ses limites ds lors que la taille du projet
augmente. Il faut alors dvelopper son propre moteur pour tendre
ses fonctionnalits ou en utiliser un tiers dj ralis (comme le trs
connu Torque X par exemple).
Notre petit moteur maison : ECOT Engine
Pour notre projet nous avons choisi de dvelopper un petit moteur
qui est venu complter les quelques lacunes de XNA dans certains
domaines. Nous y avons ainsi rajout par exemple une GUI (Graphic
User Interface), une gestion des sprites (animation 2D), des tats
de jeu, un systme de particules, un systme de statistiques et
dautres outils bien utiles. Tout ceci est accessible via la classe Kernel. Par simplification, nous lavons volontairement lighter mais il
sadaptera la progression des articles.

A lattaque !
Attaquons nous tout dabord au dveloppement du gameplay proprement parler, c'est--dire des classes qui reprsentent directement des lments concrets dans le jeu.
La carte (ou map) reprsente le terrain o les villes et btiments
seront construits. Dans notre jeu, ce terrain est lchelle dun pays
et peut couvrir des rgions aussi diverses que des plaines, des
dserts, des montagnes ou bien des forts. Il faut donc pouvoir
modliser cela de manire simple et gnrique. Pour cela nous utilisons ce que lon appelle des tiles.
Une tile reprsente un morceau de terrain afficher. Cela peut
tre de lherbe, du sable, de leau mais aussi des arbres, des
rochers ou bien mme des lments dcoratifs. Ce sont les
briques que nous allons assembler les unes ct des autres
dans une grille afin de construire notre map. Les tiles sont regroups dans des fichiers nomms tilesets. Cest notamment une astuce trs pratique pour la gestion de la mmoire puisquune fois la tile
dj charge, son utilisation est peu coteuse. Ce procd a notamment t trs utile sur les premires consoles.
Afin de pouvoir modliser galement la faune et la flore, nous allons

80

PROgrammez ! \\ Fvrier 2009

utiliser deux couches de tiles pour le terrain :


- Larrire-plan : herbe, sable, terre, eau
- Les lments : montagnes, forts, fleurs
Les lments sont affichs par-dessus larrire plan. Passons maintenant au code. La classe Tile renseigne sur la texture associe (le tileset), la position du tile dans la texture et la famille du tile (son type) :
public class Tile
{
public Texture2D Texture;
public Point UVPosition;
public TileFamily Family;
public static float Size = 64;
}
Notre map sera modlise par deux tableaux deux dimensions
contenant des tiles, un pour larrire-plan, lautre pour les lments :
private Tile[,] tiles;
private Tile[,] elements;
Laffichage
Pour afficher notre map lcran nous utilisons la mthode Render
de la classe Map. XNA nous permet de dessiner facilement un lment 2D grce la classe SpriteBatch.
La map est en gnral plus grande que ce que nous pouvons afficher lcran, nous dessinons donc uniquement les tiles visibles
pour loptimisation.
Le procd est galement utilis pour la 3D. Grce la position de
la camra obtenue par Kernel.Instance.Origin, au zoom obtenu par
Kernel.Instance.Camera.Zoom et la taille de lcran obtenue par
Kernel.Instance.Width et Kernel.Instance.Height, nous sommes
capables de slectionner les bons tiles.
public void Render(GameTime gameTime)
{
SpriteBatch spriteBatch = Kernel.Instance.SpriteBatch;
int x = (int)(Kernel.Instance.Origin.X / Tile.Size);
int xLimit = Math.Min(x + (int)Math.Ceiling(Kernel.Instance.Width
/ Tile.Size / Kernel.Instance.Camera.Zoom) + 1, this.size.Width);
int yBeg = (int)(Kernel.Instance.Origin.Y / Tile.Size);
int yLimit = Math.Min(yBeg + (int)Math.Ceiling(Kernel.Instance.Height
/ Tile.Size / Kernel.Instance.Camera.Zoom) + 1, this.size.Height);
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.
Immediate, SaveStateMode.None, Kernel.Instance.Camera.TransformMatrix);
// Dessine les tiles uniquement visibles
for ( ; x < xLimit; x++)
for (int y = yBeg ; y < yLimit; y++)
if (this.DrawTile(MapLayer.Background, x, y, 1))
this.DrawTile(MapLayer.Elements, x, y, 1);
spriteBatch.End();
}

78-81

22/01/2009

15:17

Page 81

ludique \\ xna
Intgration
Ok, nous avons prsent les lments de base de notre gameplay
c'est--dire pour le moment notre map. Il faut maintenant videment
lintgrer notre fameuse boucle de jeu, rendre tout cela interactif
et grer laffichage.
Des classes pratiques
Dans un jeu, nous avons souvent besoin daccder rapidement
tout un panel dautres classes. Nous ne pouvons pas toutes les passer en paramtre, cela polluerait le code. Nous utilisons donc, de
manire raisonnable le pattern Singleton pour les classes importantes. Le code du jeu en lui-mme nest donc pas crit directement
dans ltat de jeu. Nous avons cr la classe singleton GameController pour la logique et GameRenderer pour le rendu.
Le GameController
Cest une des classes principale du jeu, cest elle qui fait linterface entre
toutes les autres classes du jeu. Lorsquon linitialise, le GameController soccupe grossirement de charger la map et de placer la camra :
public void Initialize()
{
// Charge la map
map = new Map(string.Format(@"Maps\{0}.etm", mapName));
// Centre la camra sur la map, assigne le zoom et les limites
Kernel.Instance.Camera.Position = new Vector2(map.Size.Width
* Tile.Size / 2, map.Size.Height * Tile.Size / 2);
Kernel.Instance.Camera.Zoom = 0.8f;
Kernel.Instance.Camera.MinLimit = new Vector2(0.0f, 0.0f);
Kernel.Instance.Camera.MaxLimit = new Vector2(
map.Size.Width * Tile.Size,
map.Size.Height * Tile.Size);

Nous surchargeons les mthodes LoadContent pour charger notre


map en mmoire :
public override void LoadContent(bool loadAllContent)
{
// Cre le controller
new GameController("France").Initialize();
// Cre le renderer
new GameRenderer();
base.LoadContent(loadAllContent);
}
La mthode Update se contente dappeler celle de notre GameController, de mme que la mthode Draw appelle celle de notre GameRenderer.
La classe Game
Grce XNA, il ny a plus de boucle de jeu grer manuellement. Il suffit de driver la classe Game qui propose des mthodes de base, que
nous avons juste remplir, un peu comme notre classe GameState.
protected override void BeginRun()
{
// Initialise le moteur
engine.Initialize("Bootstrap", "ECOT.Game.Text");
// Cre les tats de jeu qui s'enregistrent automatiquement
new EcothinkState();
new GameplayState();
// Dfinit l'tat de jeu par dfaut
engine.StateManager.SwitchTo("Ecothink", null);

Kernel.Instance.Cursor.Enable = true;
initialized = true;
}
Les tats de jeu
Les tats de jeu sont grs par notre classe StateManager qui permet de passer dun tat lautre. Cette classe hrite directement
de la classe DrawableGameComponent fournie par XNA. Contentons nous de savoir quun DrawableGameComponent est mis jour
et affich automatiquement par XNA. Dans notre petit jeu, nous
allons pour linstant crer deux tats :
- Ltat Intro, que nous ne dcrirons pas ici
- Ltat gameplay
Nous allons donc crer la classe GameplayState qui hrite de la
classe GameState de notre moteur. Cest dans cette classe que
toutes les mises jour et le rendu du jeu principal auront lieu.
Elle possde 5 mthodes importantes :
- LoadContent : qui permet de charger les ressources en mmoire
et dinitialiser ltat.
- UnloadContent : qui fait linverse.
- HandleInput : qui permet de rcuprer les entres utilisateur.
- Update : qui permet de mettre jour la logique.
- Draw : qui permet dafficher les lments lcran.

base.BeginRun();
}
Et cest tout ! La mise jour et le rendu se feront
automatiquement du fait que notre classe StateManager est un composant de jeu affichable.
Je vous invite regarder le code qui se trouve sur
le site www.programmez.com afin de mieux comprendre tous les mcanismes que nous ne pouvons expliquer ici.
Jespre que cet article vous aura donn un avant- got de ce qui
vous attend dans les prochains articles.
LIENS UTILES
UML : http://smeric.developpez.com/java/uml/etat/
PlayTest : http://www.bruno-urbain.com/html/10tipsforplaytest.htm
Tutoriaux : http://www.riemers.net/
Creator Club : http://creators.xna.com

Laurat de lImagine CUP dans la catgorie jeu vido


et soutenue par Microsoft, ECOThink dveloppe des
jeux vido innovants grce la technologie XNA.
contact@ecological-tycoon.com
Frdric PEDRO & Nicolas GRYMAN

Fvrier 2009 \\ PROgrammez ! 81


Recevez la Newsletter www.programmez.com/inscription.php

23/01/09

12:17

livres \\

Page 82

par Franois Tonic

Difficult : ***
Editeur : Eni ditions
Auteur : J-N Anderruthy
Prix : 20,95
Google, outre le moteur
de recherche, fournit de
trs puissants outils de
marketing en ligne pour crer des campagnes de publicit en ligne, avoir de la publicit et pour finement analyser le trafic de
son site. Le but est de gnrer du trafic et
du business. Le livre se destine lensemble
des dveloppeurs web, du novice aux
experts sans oublier le webmaster. Nous
verrons tout dabord comment ne pas
perdre dargent lors de la mise en place
dune campagne russie avec Google
AdWords et comment optimiser les cots et
les conversions afin den maximiser la rentabilit. Le lecteur comprendra comment utiliser loptimiseur de campagnes et comment
rgler au mieux chaque fonction pouvant
influencer la campagne. La troisime partie
du livre est consacre AdSense et la
cration dun systme publicitaire faisant la
promotion de vos propres produits ou de
ceux dun annonceur tiers. A lire et relire !

Programmer
objet avec
Oracle
Difficult : ****
Editeur : Vuibert
Auteur : Christian Soutou
Prix : N.C.
On a tendance oublier
que Oracle nest pas seulement un SGBD,
cest aussi une plate-forme de dveloppement comme peut ltre SQL Server avec

livre du mois

Google Adwords,
analytics et AdSense

82

Difficult : *** - Editeur : Eyrolles


Auteur : Aurlien Vannieuwenhuyze - Prix : 35
Avec Flex 3, Adobe propose une plate-forme technologique complte alliant avec Air, la partie offline, et
lanimation avec Flash. Dot de puissants services
serveurs, Flex est sans doute la plate-forme internet
riche la plus complte, la plus mature ! Mais la matriser ncessite une solide exprience et une
connaissance approfondie de Flex Builder et dActionScript. Lambition de lauteur est de brasser lensemble de la technologie :
le SDK, le builder. Ainsi on prend connaissance des contrles, de laccs aux
donnes, des conteneurs, de linterface, des skins, etc. Air est bien entendu
abord. La bonne ide du livre est de prsenter des cas concrets de mise en
uvre pour mieux comprendre lutilit de Flex et de certaines fonctions. Lauteur aborde aussi le futur Flex 4, une excellente ide ! Au final, un bon ouvrage
que tout dveloppeur Flex doit lire et possder.

Le web : 15 ans dj
et aprs ?
Difficult : **
Editeur : Dunod
Auteur : J-P Corniou
Prix : 19,90
N un peu par " hasard ", il est aujourdhui
incontournable, mme sil est fragile dans
ses fondations Souvent qualifi de rvolution virtuelle, le web a pourtant un impact
rel sur lconomie, lemploi. Dans un style
clair et vivant lauteur explique comment le
" rseau " sest construit et quels ont t les
boosters de ce formidable dcollage :
moteurs de recherche, messagerie lectronique, e-commerceIl nous conduit rfl-

Difficult : ***
Editeur : OReilly
Auteur : collectif
Prix : 28
.Net est la nouvelle
terre de prdilect i o n d e R u b y,
notamment avec le
projet IronRuby permettant dintgrer
Ruby la plate-forme. Cet ouvrage vise
comprendre comment utiliser Ruby
dans et avec .Net, ainsi que Rails. Les
auteurs abordent bien entendu les

PROgrammez ! \\ Fvrier 2009

Programmation Flex 3

Net. Lauteur, spcialiste reconnu, revient


sur les larges possibilits objet dOracle, de
la v9 la v11g., et force est de reconnatre
que lobjet est fortement prsent dans
Oracle. On saura mme stocker des objets,
raliser rapidement un mapping avec JDBC
ou utiliser Oracle XML DB. Une rfrence !

Rails for .Net Developers

en anglais

82-116

aspects MVC et Crud (ActiveRecord),


sans oublier les formulaires, les tests et
linteraction avec Ajax.

Developing FaceBook
Platform Applications
with Rails
Difficult : ***
Editeur : OReilly
Auteur : M. J. Mangino
Prix : 26
Facebook est lun
des rseaux sociaux
les plus en vogue actuellement. Et grce

chir aux mutations que le web a introduites


dans nos vies et dans la socit.

Sharepoint 2007
Difficult : ***
Editeur : ditions Eni
Auteur : collectif
Prix : 39
Sharepoint est un
serveur puissant
mais
souvent
mconnu. Ce livre
vous plonge au
cur de sharepoint, du dveloppement .Net et des composants pour personnaliser Office SharePoint
Server. On comprendra mieux webparts, les
flux, les formulaires, etc. La partie dploiement dvoile les rflexes avoir, les bonnes
pratiques pour russir. Les deux derniers
chapitres permettent au lecteur d'envisager
l'utilisation des dernires technologies (.NET
3.5) et des techniques de dveloppement
plus avances.

aux API de la plate-forme, on peut rajouter ses propres applications. Dans cet
ouvrage, lauteur explique comment
coder pour Facebook en Rails ! On
revient tout dabord sur ce quest la
plate-forme sociale et les applications qui
la forment. Puis on attaque directement
avec une premire application. Au-del
de lexemple assez simple de dpart, il
convient de mieux intgrer les fonctions
sociales de Facebook comme la notification, les commentaires, les invitations,
etc. Rapide lire et agrment de nombreux codes, le dveloppeur web y trouvera une bonne base de dpart.

01/02-83/84-116

22/01/2009

12:19

Page 3

Le Salon europen ddi Linux et aux Logiciels Libres

ll

31 mars, 1er et 2 avril 2009


Paris Expo - Porte de Versailles

pour visiter le salon et obtenir votre badge daccs gratuit,

connectez-vous sur www.solutionslinux.fr

un vnement

Silver sponsor

Solut ions Linux/Open Source - 2/6 rue des Bouret s - 92150 Suresnes
Tl : 33 (0) 1 41 18 63 33 - Fax : 33 (0) 1 41 18 60 68 - www.solutionslinux.fr

01/02-83/84-116

22/01/2009

12:20

Page 4

FAITES EVOLUER VOTRE CODE.


Linnovation en dveloppement parallle.
Analysez, compilez, dboguez, contrlez et optimisez votre code pour
le multicore avec Intel Parallel Studio. Fait pour les applications srielles
daujourdhui et les innovations parallles de demain.
Pour en savoir plus et tester la version beta: www.intel.com/go/parallel

2009, Intel Corporation. Tous droits rservs. Intel, le logo Intel, sont des marques dIntel Corporation, dposes ou enregistres aux tats-Unis et dans dautres pays.

FrenchPub 21cmx28.5cm EvoRev.indd 1

1/19/09 4:50:57 PM

Vous aimerez peut-être aussi