Académique Documents
Professionnel Documents
Culture Documents
Programmez N116
Programmez N116
22/01/2009
12:18
Page 1
PROGRAMMEZ !
PROgrammez !
www.programmez.com
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
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
Jeux :
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
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
22/01/2009
12:21
Page 3
PRO grammez !
sommaire\\
Le magazine du dveloppement
\\ 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
\\ dossier : Composants
simplifiez-vous le code !
30
\\ 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
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).
22/01/2009
12:21
Page 4
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.
22/01/2009
12:21
Page 5
PRO grammez !
dito\\
Le magazine du dveloppement
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 :
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
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/
22/01/2009
12:27
Page 9
actu \\ en bref
Systme
Mthode
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
39
29,90
45
45
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
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
WEBDEV 14
est compatible
avec
WINDEV 14
Un des nombreux
exemples livrs avec
WEBDEV : portail
Intranet Honolulu,
tlcharger gratuitement (sur pcsoft.fr).
www.pcsoft.fr
info@pcsoft.fr
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
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
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.
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)
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) {
}
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
14
Suite page 18
PROgrammez ! \\ Fvrier 2009
15
22/01/2009
15:54
Page 15
actu \\ en bref
Librairie
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
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
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
Fig.7
19-21
22/01/2009
12:53
Page 19
vnements \\ langage
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-
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.
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
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 !
Cest
PRATIQUE !
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
TLCHARGEZ
la version bta
www.progra
mmez.com
22-29
22
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
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
23
22-29
22/01/2009
12:59
Page 24
spcial
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
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
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
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
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
Fig.13
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
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
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
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
Sources et complments
sur le site
www.programmez.com
30-43
22/01/2009
14:42
Page 31
dossier \\ composants
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
31
30-43
22/01/2009
14:42
Page 32
dossier \\ composants
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 :
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
30-43
22/01/2009
14:42
Page 33
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
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
30-43
22/01/2009
14:42
Page 35
dossier \\ composants
// ...
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>
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;
36
}
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
Soyez prts
pour les nouvelles architectures
SOA
et
Web 2.0 !
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
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
SOFTEAM Formation
Tl. : 01 53 96 84 30 - Fax : 01 53 96 84 01
Paris : 21 avenue Victor Hugo - 75016
Rennes - Nantes - Sophia Antipolis
www.softeam.fr
Objecteering
2
4
2
2
2
2
3
3
2
4
5
4
3
3
4
2
4
www.objecteering.com
Tl. : 01 30 12 16 60 - sales@objecteering.com
30-43
22/01/2009
14:42
Page 38
dossier \\ composants
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.
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
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
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.
39
30-43
22/01/2009
14:42
Page 40
dossier \\ composants
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
</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
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
41
30-43
22/01/2009
14:43
Page 42
dossier \\ composants
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
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
30-43
22/01/2009
14:43
Page 43
44-55
22/01/2009
14:37
Page 44
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.
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
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
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
45
44-55
22/01/2009
14:37
Page 46
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;
46
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
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>
48
44-55
22/01/2009
14:37
Page 49
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
49
44-55
22/01/2009
14:37
Page 50
50
44-55
22/01/2009
14:37
Page 51
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
Fig.3
51
44-55
22/01/2009
14:37
Page 52
52
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.
44-55
22/01/2009
14:37
Page 53
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.
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
53
22/01/2009
14:38
Page 54
}
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 "
54
[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.
PARTIR DE
HT
/MOIS
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
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 ")
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
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
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.
Freelance.com :
une communaut
dindpendants
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
Avant-premire exclusive !
Fig.2
APPLICATION : MULTICORE
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)
Fig.1
Les 2 barres doutils pour Inspector (" Check ") et Amplifier (" Profile ")
58
Fig.4
Fig.3
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
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
Fig.8
59
60-64jquery
23/01/09
11:52
Page 60
code \\ javascript
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
});
});
</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
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
<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
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();
});
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
PLUG-IN
CONCLUSION
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
64
Fig.5
65-67
22/01/2009
15:09
Page 65
code \\ .net
APPLICATION : OFFICE
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.
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]
66
{
// 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.
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
67
68-71
22/01/2009
15:10
Page 68
code \\ rebol
A la dcouverte de REBOL
2e partie
APPLICATION : DCOUVERTE
68
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
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-
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
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
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
Notre client
graphique en action
71
72-75
22/01/2009
15:13
Page 72
code \\ 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
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>
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++'
Commandes
Valeur
nmake
ruby extconf.db
nmake
nmake clean
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'
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"
struct CharHolderData
{
char* p;
int length;
};
74
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.
76-77
22/01/2009
15:15
Page 76
code \\ c++
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
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.
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 () :
Abonnez-vous e et pour
2,7
1
78-81
22/01/2009
15:17
Page 78
ludique \\ xna
1re partie
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.
78
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
PRO grammez !
PRO
grammez
PRO
grammez! !
Le magazine du dveloppement
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
Olympiques
Cdu
ARRIRE
Les projets
secrets
Dveloppeur
dveloppement
!
de Microsoft
FREELANCE
ImagineCup rvle
Le match
Eclipse - Netbeans
Spcial
PHP
Java
!
ATTENTION usse
Tarifs en hachain !
le mois pro
technique
Vido
ENFIN DISPONIBLE
SUR LE WEB !
SQL Server
2008
Flash
Les nouveauts
PHP 5.3 :
AspectJ
Linux
3:HIKONB=^UZ^Z]:?k@b@l@b@a;
3:HIKONB=^UZ^Z]:?k@l@b@c@a;
Architecture
3:HIKONB=^UZ^Z]:?a@l@b@p@a;
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
3 GRATUITS
+ Abonnement INTGRAL
OUI, je mabonne
1 par mois !
Vous pouvez aussi vous abonner en ligne et trouver tous les tarifs
www.programmez.com
PROGRAMMEZ
M. Mme Mlle
Entreprise :
........................................................................................
Fonction : ...................................................
.........................................................................................................................................................................................................................................
Code postal :
Tl :
...............................................
Ville :
...................................................................................................................................................................
........................................................................................
E-mail :
....................................................................................................................................
Je joins mon rglement par chque lordre de Programmez ! Je souhaite rgler rception de facture
A remplir et retourner sous enveloppe affranchie :
Programmez ! - Service Abonnements - 22 rue Ren Boulanger - 75472 Paris Cedex 10.
abonnements.programmez@groupe-gli.com
PRO grammez !
Le magazine du dveloppement
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
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);
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
23/01/09
12:17
livres \\
Page 82
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
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
Programmation Flex 3
en anglais
82-116
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
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
ll
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
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.
1/19/09 4:50:57 PM