Vous êtes sur la page 1sur 84

i

S
t
o
c
k
p
h
o
t
o
/
J
a
m
i
e

F
a
r
r
a
n
t
Windows, iOS, Android, Open Source, Java, web : le choix des dveloppeurs, les outils, les bons conseils
Ant
Intel HTML5 Porter Tool,
APISpark, Windows 8 MVVM
SharePoint 2013
TFS TeamBuild
Heroku, Lua
Au cur des outils et des technologies
100 % dveloppeur
L E MA G A Z I N E D U D V E L O P P E ME N T
www.programmez.com
Printed in EU - Imprim en UE - BELGIQUE 6,45
SUISSE 12 FS - LUXEMBOURG 6,45 DOM Surf 6,90
Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
&:HIKONB=^UZ^Z]:?a@b@g@l@k"
M 04319 - 161 - F: 5,95 E
Devenez
dveloppeur
de jeux vido !
Carrire
Firefox OS
Lautre systme pour
smartphone !
Les nouveauts de
Devoxx France 2013
Communaut Java
Mensuel n161 - mars 2013


is
t
o
c
k
p
h
o
t
o
/
J
a
m
ie

F
a
r
r
a
n
t
La b o te
o utils du
dvel o ppeur
pour couv 20/02/13 22:04 Page 30
02/83/84-161 20/02/13 08:28 Page 2
Le smartphone explose
Le march du smartphone demeure lun des plus actifs ou tout du moins lun des plus
stratgiques pour Apple, BlackBerry (ex-Rim), Google et Microsoft, ct systme et les
constructeurs.
L
es moindres problmes deviennent des
drames : iOS 6.1 apporte des soucis
dautonomie lis un problme Exchan-
ge, BlackBerry Z10 est bon mais sera-t-il le
sauveur de BlackBerry ? Nokia pourrait
aussi aller voir du ct dAndroid, problmes
et bugs avec Windows Phone 7.8 et sur la
Surface Pro, etc.
> Un march de plus
en plus concentr malgr
la concurrence
Quand on regarde les derniers chiffres Gart-
ner sur les ventes mondiales des tlphones
portables, le doute nest pas permis : au 4e
trimestre 2012, Samsung est devenu le
premi er vendeur de tl phones (tous
modles confondus, du plus basique au
smartphone) avec 106 millions dappareils
contre 85 pour Nokia et un petit 43 pour
Apple. Si on considre toute lanne 2012,
Samsung dpasse Noki a (384 mi l l i ons
contre 333), Apple arrivant 3e avec 130
millions dunits. La chute de Nokia est
impressionnante. Le smartphone tant
encore un march nai ssant pour ce
constructeur. La multiplication des modles
par Samsung a fini par payer.
Si nous considrons uniquement le smart-
phone, qui prend de plus en plus dimportan-
ce, Gartner pense quils reprsenteront 1
milliard dunits fin 2013 sur un march glo-
bal de 1,9 milliard de tlphones. Et si nous
regardons uniquement ce critre, la situa-
tion change radicalement : Android arrive
1er avec 144 millions dunits, iOS
est plus que jamais 2e avec 43M.
dunits et trs loin derrire, Black-
Berry, avec 7,3 millions (sur un an,
l e constructeur subi t une trs
svre chute). A noter que le syst-
me Symbian va disparatre ds
2013, Bada est insignifiant, et
Windows Phone affiche 6,1 mil-
lions dunits. Chiffres pour le 4e
trimestre 2012.
Ces chiffres sont intressants pour
comprendre le march smartpho-
ne et donc la logique dveloppeur
daujourdhui. Soyons clair, pour un
diteur ou un dveloppeur qui souhaite se
faire connatre, vendre une application, le
choix est trs simple : Android et iOS.
Le reste de la concurrence est trop loin
derrire.
> BlackBerry 10 et Windows
Phone 8 : mme combat
Pour Microsoft, si le lancement de Windows
Phone 8 est finalement relativement bon
(intrt des utilisateurs et un App Store qui
PROgrammez ! < 3 > MARS 2013
A
buzzword
se remplit), le systme souffre de deux pro-
blmes cruciaux : manque de notorit, trop
peu de modles de tlphones disponibles.
Microsoft doit absolument largir loffre. Et
paralllement, il doit aussi draguer les dve-
loppeurs pour quils dveloppent sur la plate-
forme : prouver quils peuvent gagner de
largent. Il ne suffit pas davoir x applications
mais davoir un modle conomique rel et
actif. Les dysfonctionnements de Windows
Phone 7.8 doivent tre un avertissement
pour Microsoft : attention rester vigilant
BlackBerry 10 est pour BlackBerry (ex-RIM)
lopration de la dernire chance. Avec deux
modles, dont le tout tactile Z10 (qui arrive
un peu au compte-gouttes sur les diffrents
marchs), l e constructeur attend tout
dabord une stabilisation avant desprer une
relance de sa part de march. Si sur cer-
tains pays, BlackBerry a russi jusqu pr-
sent se prserver, aux Etats-Unis, la chute
a t abyssale.
Loffre BlackBerry 10 est cependant sdui-
sante : un modle Z10 de qualit et bien fini
(un modle avec clavier existe aussi), un sys-
tme performant avec de belles fonctions
(comme le Hub, la gestion perso/pro) appa-
raissant comme un mixte entre iOS et
Android sur linterface. Ct dveloppement,
BlackBerry mise sur plusieurs modles :
natif / Cascade, HTML5, Adobe Air et Java.
Le ct Java facilitant le portage des applica-
tions Android. Le but de BlackBerry est que
le dveloppeur puisse repackager trs rapi-
dement une application Android pour Black-
Berry 10. Aujourd hui, Android
2.3.3 est support mais lobjectif
est de proposer Android 4.x cou-
rant 2013. Lenjeu est crucial pour
le constructeur car si le dvelop-
peur ne dveloppe pas spcifique-
ment pour BlackBerry, il faut lui
faciliter la tche.
Pour 2013, clairement, la bataille
Microsoft et BlackBerry est de
savoir qui sera la 3e plateforme
mobile aprs Android et iOS. Mais
eux de convaincre les dvelop-
peurs et les utilisateurs #
03 19/02/13 22:27 Page 3
s
o
m
m
a
i
r
e
p
r
o
c
h
a
i
n
n
u
m

r
o
numro 161 - mars 2013
Donnez votre avis sur ce numro : www.programmez.com/magazine_ sa
Responsive Interface - Responsive Design :
comment et pourquoi crer des interfaces
capables de sadapter automatiquement
aux contextes utilisateurs ?
Mthodes agiles : Scrum - Scrummaster
Mtier Webmaster :
Etre webmaster en 2013 : profils, nouvelles comptences, salaires.
Sources des articles sur
www.programmez.com
A lire dans le prochain numro
N162-Avril 2013, paratre le 30 mars 2013
DOSSIER
DOSSIER
La bote outils
du dveloppeur
Loutillage dun dveloppeur iOS Windows ............31
Bote outils Windows :
les bonnes pratiques dun dveloppeur ..................32
Le dveloppement iOS au quotidien :
quels outils utiliser ? .................................................. 34
IDE Java : il y a du monde ! ........................................37
Passage en revue de la bote
outils idale du dveloppeur Android ....................42
Les outils complmentaires et utiles ........................44
BUZZWORD
Le smartphone explose ..................3
ACTUS
En bref ..............................................6
RESSOURCES
Tout savoir sur Devoxx France 2013 ....................10
MATERIEL
Une pluie de nouveaux SSD......................................12
DVELOPPEUR DU MOIS
Antonio Goncalves :
du JUG Paris Devoxx..............................................16
12
10
VEILLE TECHNO
Firefox OS : lautre systme pour smartphones........18
Dbuter avec Firefox OS ................................................20
OUTILS
Nouveauts autour du dveloppement
ActionScript avec Flash Builder 4.7 ............................22
Agenda ..............................................................................23
Les nouveauts sociales de SharePoint 2013 ..........24
04-05-2 edito som161 20/02/13 14:25 Page 4
e_ satisfaction.php
Abonnement : Programmez, 17, Chemin des Boulangers, 78926
Yvelines Cedex 9 - Tl. : 01 55 56 70 55 - abonnements.programmez
@groupe-gli.com - Fax : 01 55 56 70 91 - 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 : 49 - Etudiant : 39 - CEE et Suisse : 55,82 -
Algrie, Maroc, Tunisie : 59,89 Canada : 68,36 - Tom : 83,65
- Dom : 66,82 - Autres pays : nous consulter. PDF : 30 (Monde
Entier) souscription exclusivement sur www.programmez.com
Editeur : Go-02 sarl, 21 rue de Fcamp 75012 Paris -
diff@programmez.com. - Rdaction : redaction@program-
mez.com - Directeur de la Rdaction : Jean Kaminsky.
Rdacteur en Chef : Franois Tonic - ftonic@program-
mez.com. Ont collabor ce numro : F. Mazu, S. Saurel.
Experts : C. Villeneuve, B. Lane, C. Tran,V. Saluzzo, K.
Alnijres, M. Perfetti, T. Templier, J. Louvel, L. Rebours, J.
Thiriet, L. Menu, C. Doillon, P. Rapin, S. Fabre, P. Lhoste,
Illustration couverture : istockphoto/Jamie Farrant,
Assassins Geek
Publicit : Rgie publicitaire, K-Now sarl.
Pour la publicit uniquement : Tl. : 01 41 77 16 03 -
diff@programmez.com. Dpt lgal : parution -
Commission paritaire : 0717K78366 ISSN : 1627-0908.
Imprimeur : S.A. Corelio Nevada Printing, 30 alle de la
recherche, 1070 Bruxelles Belgique.
Directeur de la publication : J-C Vaudecrane
es.

d
i
t
o
WebKit,
pourquoi es-tu si mchant ?
// mode troll
Sans moteur de rendu, le navigateur web serait
incapable dafficher la page internet. Depuis plus
dun an, WebKit est le troll par excellence. Ce
mois-ci, le sujet revient une fois de plus en Une
avec le passage du navigateur Opera WebKit, tout en jetant son
propre moteur
Rappelons les vnements : Opera, navigateur alternatif , possdait
son propre moteur de rendu, Presto. Il avait beau tre lger, perfor-
mant et efficace, Opera na jamais pu simposer auprs des utilisateurs.
Mais aujourdhui, les performances et les fonctionnalits de ces
moteurs sont vitales pour le navigateur et mieux vaut une large commu-
naut dutilisateurs et de dveloppeurs pour assurer lvolution du
moteur.
Opera a donc tranch : migrer purement et simplement sur WebKit.
Aujourdhui, ce moteur est la rfrence aussi bien sur lordinateur que
sur les terminaux mobiles : Apple, Google, Nokia, Qt, Adobe, Amazon,
Oracle, BlackBerry lutilisent. A lorigine du projet tait KHTML, WebKit
tant un fork initi par Apple pour tre le cur de Safari. Le projet fut
rendu open source en 2005. La popularit de ce moteur na jamais
cess de crotre.
WebKit dj omniprsent a cannibalis un nouvel acteur, et de son plein
gr ! Oui, et alors ? Certains ont voulu y voir un nouvel IE6, une mono-
culture pour le web, des standards mal supports, etc. Bref, tout sauf
WebKit ! Mais Haavard (employ dOpera) a longuement dcrit le pour-
quoi du comment de ce changement : oui, la monoculture est mauvai-
se, mais Opera na jamais t en position de prtendre la premire
place . Et ce changement est l justement pour acclrer la crois-
sance dOpera et devenir un contributeur important du moteur (projet
open source et collaboratif rappelons-le). Opera soutient les standards
ouverts et veut peser sur les fonctionnalits du moteur.
Il y a un an, Daniel Glazman (co-chairman du groupe de travail CSS du
W3C) dnonait en WebKit un nouvel IE6 du web dont les dveloppeurs
ne devraient pas utiliser les prfixes. Microsoft faisait la mme mise en
garde, tout en privilgiant ses propres prfixes. Nous avions analys le
problme dans le n150 de Programmez !.
Si WebKit est populaire, est-ce la faute dApple ?
Non. Si les navigateurs ont adopt WebKit, cest parce que le moteur a
prouv ses capacits voluer, sa maturit, ses performances. Mozilla
possde aussi un excellent moteur, Gecko, mais il ne sest jamais impo-
s lextrieur de Firefox et le virage mobile a t tardif. Microsoft met
en avant Trident dIE10, mais il reste dans le primtre de lditeur.
Ne faudrait-il pas jeter la premire pierre Mozilla et Microsoft pour
ne pas avoir voulu ou su promouvoir leur moteur de rendu ? Microsoft
naurait-il pas intrt sortir Trident (idem pour Gecko) en projet open
source et faire comme WebKit, des Nightly build pour les utilisateurs
avancs et dveloppeurs et IE pour la stabilit, avec une version majeure
annuelle ?
Pour le moment, je vous propose : shutdown -r now
[ftonic@programmez.com] Franois Tonic
Blog Opera : http://my.opera.com/haavard/blog/2013/02/13/webkit
Post de Danial Glazman : http://goo.gl/6UNoE
// fin de commentaires

F
.

T
o
n
i
c
48
CARRIRE
Devenir dveloppeur
de jeux vido ......................................46
Un secteur attrayant mais trs concurrentiel
et sous pression ..............................................................47
De nombreux mtiers et des dveloppeurs
au cur des jeux..............................................................48
Un bon tudiant ou dveloppeur ne fait pas
forcment un bon dveloppeur de jeux vido ! ..........51
JE DEBUTE AVEC...
Dmystifier le dveloppement
des plug-ins d'Eclipse (Partie 4) ....................................52
Dployer une application Java EE
dans le Cloud avec Heroku ............................................56
Lua, vous avez dit Lua ? ................................................60
CAS DUSAGE
Cration dactivits pour TeamBuild ............................64
PRATIQUE
Dvelopper facilement vos API web
avec APISpark ..................................................................68
Dvelopper une application Windows 8
avec MVVM ......................................................................72
WEBMASTER
Dcouvrir l'outil de construction de projets ANT ......77
BUGTRACK
Android Developer Tool sur Linux 64 :
bugs et installation ..........................................................81
04-05-2 edito som161 20/02/13 14:25 Page 5
Nous aimons les dveloppeurs , voil en
substance ce quil fallait comprendre. Avec
les nouveaux outils, les nouveaux systmes,
Microsoft veut repartir lassaut mais en
tant plus juste dans les discours. Il a rappe-
l que Windows ntait pas seulement HTML 5
et JavaScript, mais aussi (et surtout ?) du
C++ et C# / XAML.
Lditeur doit convaincre le dveloppeur de
(re)venir. Aujourdhui, sans applications, une
plateforme ne vaut pas grand chose. Or il
faut remplir les App Store Windows 8, pour
les tablettes et dsormais Office.
Microsoft a voulu mettre en avant le dvelop-
peur/designer qui prend une place importan-
te dans les projets mobiles et Windows 8, car
lergonomie est primordiale ainsi que les
usages. En collaborant avec des dvelop-
peurs, en travaillant des applications inno-
vantes, nous avons une position privilgie
pour observer ce qui se joue aujourdhui sur la
scne du numrique : le design est au cur
du mtier de dveloppeur, et inversement, le
numrique est au cur des proccupations
des designers, qui sont de plus en plus nom-
breux intgrer nativement le digital dans
leurs projets. Cest en tout tat de cause lav-
nement dun duo dveloppeur/designer
qui voit le jour. Cest encore plus vrai depuis le
lancement de Windows 8 et son emblma-
tique interface Modern UI : tous les pro-
Avec les nouveaux systmes
Windows, le dveloppeur reste
plus que jamais convaincre et
courtiser. Microsoft a profit
des derniers TechDays pour
raffirmer son attachement aux
programmeurs. Il faut dire que
la communication parfois un
peu hasardeuse autour de
XNA, Silverlight, la mise en
avant systmatique de HTML 5 /
CSS/ JavaScript et le secret du
SDK de Windows Phone 8
avaient agac une partie de la
communaut.
duits Microsoft, toutes les applications dve-
loppes sur Windows rpondent dsormais
ce dresscode design. Ce nest pas une
mode, cest le signe dune transformation
profonde de la nature mme dune applica-
tion logicielle : ce nest plus une somme de
fonctionnalits, cest un systme intelligent
et immersif qui accompagne un usage , a
comment Jean Ferr.
Microsoft propose Modern.IE ddi au dve-
loppement web et la ralisation dun bon
site pour IE (et les autres navigateurs). Site :
http://www.modern.ie/fr-fr
> Beaucoup de matriel !
Ldition 2013 des TechDays a t marque
par une prsence pl us i mportante de
constructeurs et particulirement pour la
partie portable hybride et tablette, deux
marchs en pleine explosion. Mais la partie
smartphone restait finalement assez discr-
te. HP, Samsung, Dell taient trs prsents.
Intel dmontra une technologie maison pro-
metteuse : Perceptual Computing. Une
sorte de Kinect mais plus discrte et trs
efficace. Actuellement, seul le kit dvelop-
peur est disponible. Parmi les communauts
PROgrammez ! < 6 > MARS 2013
i
actu
Microsoft TechDays 2013 :
lesdveloppeurs lhonneur
sur place, notons la prsence de Kinect
Genius Bar, la communaut franaise pour
Kinect Windows ! A dcouvrir absolument :
http://kinectgeniusbar.com
> Deux sessions normes !
Dsormais incontournables : Coding4fun et
Geek in the house ! Salle pleine craquer, en
direct live, ambiance lectrique, interve-
nants djants, voil la recette de ces ses-
sions hors normes. Coding4Fun a t la
hauteur du dfi. Mitsu Furuta a cod en live
un Z-Order dobjet graphique qui a laiss sur
place toute la salle. Encore plus fort : le
Sandwich Locator. Aprs minuit, on prend
tout sandwich qui se prsente. Malheureu-
sement Coding4fun ne se raconte pas, il
faut le voir pour se mettre dans lambiance.
Autre session, Geek in the house. Avez-vous
dj imagin un casque de moto reprenant
celui dIron Man avec vision augmente,
multi-cran virtuel, casque neuronal, pilotage
de louverture du casque par smartphone ?
Salah Amer (geek++ qui alimente un serveur
avec un panneau solaire) la fait ! Enfin
presque, la Police na pas trop apprci lex-
prience.
> Quelques liens
Site officiel (avec replay des sessions) : http://www.microsoft.com/france/mstechdays/
Session Lhistoire de HTML5 pour les dveloppeurs Windows Phone 8 : http://fr.slide-
share.net/davrous/lhistoire-dhtml5-pour-les-dveloppeurs-windows-phone-8
Session dveloppez des applications mobiles avec un cloud : http://fr.slideshare.net/Micro-
soft_France/dveloppez-des-applications-mobiles-ios-android-windows-phone-et-windows-8-avec-un-cloud-
super-simple
Session Mcanismes internes de la scurit de Windows 8 : http://fr.slideshare.net/Micro-
soft_France/mcanismes-internes-de-la-scurit-de-windows-8
Session Amadeus Hotel Call Center (WPF) : http://fr.slideshare.net/Microsoft_France/conce-
voir-et-valider-larchitecture-dune-application-wpf-modulaire-avec-visual-studio-2012
D
.
R
.
06-09 19/02/13 22:28 Page 6
06-09 19/02/13 22:28 Page 7
V
ous laurez compris, le but de loutil
est de convertir un projet iOS (donc
un projet Objective-C provenant de
Xcode) en projet HTML / CSS / JavaScript,
en utilisant notamment JSON. Intel prcise
bien que cet outil ne fera pas de conversion
100 % des projets iOS mais il est l pour
faciliter le travail et aller plus rapidement,
notamment sur le code basic : naviga-
tion, interfaces simples , etc. Et nous
lavons constat durant nos tests : loutil
vite de tout rcrire mais il demeure un
important travail de refactoring, de rcritu-
re partielle et surtout de mapping manuel
des appels API non convertis, ce qui peut
rapidement devenir fastidieux.
> On parse, on mappe,
on gnre
Fondamentalement, HTML5 App Porter Tool
permet de :
faire une conversion du code Objective-C
en code JavaScript
de transcrire les appels et les typages API
diOS en objets et appels JavaScript /
HTML 5
les couches des vues provenant dInterface
Builder migres en fichiers HTML et CSS
les fichiers projets Xcode en projet Visual
Studio 2012.
Prcisons demble que loutil dIntel fonc-
tionne uniquement (pour le moment ?) avec
Windows 8 et Visual Studio 2012. Un point
ngatif. Pourquoi ne pas proposer un sup-
port dEclipse par exemple ? Le code Objecti-
ve-C vers JavaScript passe par un format
intermdiaire dabstraction ainsi, le code est
pars dans un arbre syntaxique intermdiai-
Intel HTML5 App Porter Tool :
une vraie-fausse bonne ide de conversion Objective-C ?
Mi-fvrier, Intel proposait une bta dun
nouvel outil de conversion de code
Objective-C en HTML5 / JavaScript :
HTML5 App Porter Tool.
re avant de gnrer
en sortie les fichiers
de code JavaScript :
le code converti et
les API non suppor-
tes. Les appels API
diOS sont mapps
en appel s JavaS-
cript. Les appels API
non supports sont stocks dans un espace
rserv. Puis, loutil gnre les fichiers
finaux HTML5 / CSS et JavaScript.
> Quid des frameworks
supports ?
La prudence dIntel est de mise : tout nest
pas possible avec la version bta et tout ne
sera pas possible. iOS sappuie sur des mil-
liers dAPI rparties entre de nombreux fra-
meworks allant de la librairie de base,
comme le Foundation framework, au frame-
work danimation ou de cartographie. Actuel-
lement, deux frameworks sont supports
(pas totalement) : UIKit et Foundation. Les
autres frameworks ne sont pas supports,
ou alors limits quelques classes.
Un projet iOS comprend, principalement :
des fichiers projets, codes et dinterfaces.
La partie interface est lie Interface Buil-
der et aux fichiers XIB. Ces fichiers sont
convertis par loutil en fichiers HTML et CSS.
Les connexions, vnements, contrleurs de
ces fichiers sont mis dans des fichiers .js.
Attention, Intel liste les widgets et proprits
supports. Les interfaces trop complexes
risquent d tre mal ou pas converties,
mfiance aussi sur les interactions trop
nombreuses.
PROgrammez ! < 8 > MARS 2013
i
actu
> App Porter Tool, puis VS 2012
Aprs avoir rcupr le projet Xcode, vous
devez ouvrir HTML5 App Porter Tool puis indi-
quer le dossier contenant les fichiers projets
(.pbxproj). Loutil demande les modules
convertir et le processus de conversion soccu-
pe du reste. Selon la taille du projet, la gnra-
tion sera plus ou moins longue. A la fin du
processus, vous aurez accs deux rapports :
translation report et ToDo Report. Le premier
fournit le dtail de mapping entre les .m et .js.
Le rapport ToDo donnera les tches faire
pour finir le portage. Loutil donnera une indica-
tion du taux de conversion. Nous avons effec-
tu quelques tests sur lexemple fourni par
Intel et avec des exemples officiels dApple :
aucune conversion ne sest excute immdia-
tement. Il faut modifier, rajouter, supprimer du
code. Du refactoring sera prvoir. Parfois,
les lignes de code JavaScript pourront tre mal
formes. Dautre part, loutil gnre beaucoup
de fichiers JS / HTML / CSS, ce qui nest pas
sans inconvnient pour la qualit du code, sa
structure et tout simplement pour sy retrou-
ver. La licence accorde est valable jusquau 8
aot 2013. A voir comment voluera loutil.
Site : http://software.intel.com/fr-fr/html5
Documentation : http://software.intel.com/fr-
fr/articles/technical-reference-intel-html5-app-por-
ter-tool-beta
06-09 19/02/13 22:28 Page 8
g
Zend met jour
le Server et le Studio.
Zend Studio 10 se focalise tout naturelle-
ment sur le dveloppement PHP avec le
support complet de PHP 5.4. Le dvelop-
peur bnficie dune contextuelle, dun mode
debug plus rapide (PHP et JavaScript), de
lintgration avec le serveur, livr avec Zend
Framework 1.12 et 2.1. Zend Studio sim-
plifie la cration d'applications mobiles avec
un back-end serveur, afin que mme les
dveloppeurs sans exprience pralable
puissent russir rapidement. Le dvelop-
peur cre des applications tournant sur
Apache Cordova (PhoneGap) et qui fonc-
tionnent sur de nombreux systmes
mobiles. Loutil est disponible ds mainte-
nant, prix normal : 299 . Zend Server 6
doit permettre de contrler et dassurer une
qualit de service (SLA). Et le serveur est
disponible sur les Cloud IBM, Amazon,
VMware, Red Hat. Une version gratuite de
Zend Server 6 est galement annonce. Elle
est destine aux dveloppeurs qui veulent
tirer parti de ses avantages en termes de
dbogage et mesure des performances
durant le dveloppement.
Tout comme les versions payantes, elle dis-
pose d'une stack PHP certifie, du profila-
ge et du dbogage PHP.
g
Spring prpare larrive
de la v4 de
son framework.
Lditeur, filiale de VMware, a dvoil les prin-
cipales nouveauts de la prochaine version
de sa librairie. La version 4, qui doit arriver
courant 2013, supporte Java 8, Java EE 7,
le WebSocket. Ces nouveauts permettront
dtre au plus prs des volutions de la pla-
teforme Java. Dtails sur :
http://blog.springsource.org/2013/01/16/next-
stop-spring-framework-4-0/
g
Selon le baromtre TIOBE,
Java redevient le langage
le plus demand (18,387 %)
aprs avoir t supplant par C durant
quelques mois. En 2e place, nous retrou-
vons C (17,080 %) et enfin en 3e position,
Objective C qui fait un nouveau bond impor-
tant (+ 2 places) et frle les 10 %. C++ arri-
ve 4e. Les trois premiers langages mono-
polisent 45 % des demandes ! Ce classe-
ment indique seulement la popularit des
langages dans les requtes sur les moteurs
de recherche et non lutilisation effective des
langages.
i
actu
g
Facebook
complte les
outils pour les
dveloppeurs.
Aprs avoir mis en place
un agenda des
changements et des
nouveauts API, Facebook
rajoute un lment intressant pour tout dveloppeur : les alertes derreurs API. Cet
outil doit prvenir le dveloppeur de tout problme dAPI par une notification et par mail.
Pour en savoir plus : https://developers.facebook.com/docs/alerts/
06-09 19/02/13 22:28 Page 9
quable sur les performances de leur applica-
tion Java. Chaque anne sera diffrente et
offrira de nouvelles perspectives, affaire
suivre donc.
La thmatique Jeux, Web et Mobile vous
emmnera au cur des derniers frame-
works ou outils pour offrir une exprience
riche et avance aux internautes desktop ou
mobile sans faire aucun compromis vis--vis
de lindustrialisation. Sir Tim Berners Lee a
invent le Web en 1989. Il est depuis en
rvolution permanente. La frnsie de larri-
ve des possibilits offertes par HTML5
nest pas finie, et pourtant la tendance est
lindustrialisation des technologies standards
du web. Cela rapproche les dveloppeurs
Java des technologies du navigateur. Par
ailleurs, la tendance est une sparation de
plus en plus stricte entre les serveurs qui
dlivrent des services REST et des clients
web ou mobiles riches qui grent lergono-
mie, la prsentation et le design.
Nous parlerons de frameworks de SPA, de
performances front- end, des API mal
connues dAndroid ou encore dAPI HTML5
permettant de raliser des Jeux lourds
dans un navigateur. Evidemment, tout cela
se fera avec la prsence de quelques stars,
comme Devoxx France sait si bien le faire...
Avec la thmatique Langages alternatifs
vous irez la rencontre de peuplades mytho-
logiques et pourtant bien relles comme les
Haskelliens, les Scalaistes ou ces clojuriens
(non rien de rien...) qui vivent dans des
forts sauvages recules, loin de toute civili-
sation. Peut-tre mme croiserez-vous des
dveloppeurs qui ne sont pas sur la JVM !
Vous dcouvrirez lusage des dialectes caba-
listiques et aurez peut-tre la chance de
> Le quotidien
du dveloppeur
La thmatique Dveloppeur au quotidien a
pour ambition de couvrir lensemble de ce
qui fait la vie dun dveloppeur. Tous les jours
nous interagissons avec un cosystme
riche et complexe aussi bien sur le plan tech-
nique quhumain. Et ces dernires annes
les changements sont nombreux ! Entre luti-
lisation des pratiques agiles, limpression-
nant boum des plateformes de e-learning, en
passant par lmergence du Cloud, notre
faon de travailler volue quasi quotidienne-
ment. Nous allons donc vous donner la pos-
sibilit de sortir de votre zone de confort,
peut-tre mme de remettre en cause
quelques-unes de vos certitudes pour vous
emmener encore un peu plus prs de lexcel-
l ence et de ce que sera notre mti er
demain.
Nous vous proposons cette anne de dcou-
vrir des outils et pratiques, qui feront de
vous un dveloppeur plus pragmatique et
plus efficace ds votre retour de Devoxx
France le lundi matin !
> Parlons un peu de
DevOps !
La thmatique Infrastructure, hardware
dhier et de demain a pour ambition de dis-
cuter un peu de ce quil y a sous le capot
avec un aspect prospectif. Nous souhaitons
aborder les aspects infrastructure, scurit,
des problmes trs bas niveaux de serveurs
comme la consommation des data centers,
et de tout ce qui nous permet de faire fonc-
tionner notre quotidien de dveloppeur. Cela
souvre bien entendu aux rponses DevOps,
mais aussi aux sujets plus spcifiques que
Tout savoir sur Devoxx France 2013
Devoxx France est une confrence
organise Paris par l'quipe du
Paris JUG, depuis 2012. Durant 3
jours, cette deuxime dition
proposera des prsentations et
vnements, principalement en
franais, autour de notre mtier de
dveloppeur. Cest donc l'occasion de
runir pendant ces 3 journes (du 27 au 29 mars 2013) les dveloppeurs, les
architectes et les dcideurs techniques autour de cinq grandes thmatiques. Lquipe
de Devoxx France vous prsente les tendances et les nouveauts, en avant-premire.
sont lembarqu et la domotique. Ce track
est novateur. Cest une premire cette
anne, car il est un peu en marge des sujets
classiques de la confrence qui se focalise
traditionnellement sur les langages tournant
sur la JVM, les technologies du web et lenvi-
ronnement de dveloppement.
Il nous a sembl quau crpuscule du minitel
et du X25 chez France Tlcom, et laube
du tout internet, nous arrivions une tape,
et quil pourrait tre agrable de faire lcart
entre hier et demain dans notre Hardware.
Bien sr nous serons dans les thmes
daujourdhui, mais nous ouvrons la porte
une certaine histoire ou prhistoire de linfor-
matique.
> Java, toujours au coeur
de lvnement
La thmatique Java est le coeur de la confe-
rence Devoxx France. La JVM, les patterns,
les principes de dveloppements, les librai-
ries, les tests, autant de sujets sur lesquels
les intervenants exposeront leur points de
vue, partageront leurs expriences, ou pr-
senteront un outillage novateur. Ces der-
ni res annes nous obser vons une
effervescence croissante de la communaut
et l'exploration de concepts nouveaux. Avec
les avances ralises ou les connaissances
acquises par la communaut en France ou
dans le monde, Devoxx est une opportunit
efficace pour en profiter. Nous aurons par
exemple quelques personnes qui travaillent
sur le coeur de la JVM, d'autres qui tablis-
sent le standard Java EE, avec pour rappel
une sortie de Java EE 7 prvue pour mai.
Nous aurons aussi l'honneur de recevoir des
personnes ayant achev un travail remar-
PROgrammez ! < 10 > MARS 2013
i
ressources
D
.
R
.
10-11 19/02/13 22:42 Page 10
sushis, etc... L'ambiance est studieuse,
mais aussi festive ! Au total, il y aura environ
140 prsentations et une vingtaine de spon-
sors avec leur stand.
Pour ce qui est des tarifs, vous pouvez venir
uniquement le mercredi pour les universits
150, pour les confrences, le jeudi et
vendredi 350 HT pour les deux journes,
ou les 3 jours 450 HT. Et grce notre
partenaire Oxiane vous pouvez utiliser votre
droit individuel la formation (DIF) pour vous
inscrire.
boire avec de vrais locaux, le verre de lami-
ti que certains appellent la li-monade.
Vous apprendrez quavec un diteur de texte
(sorte dIDE de ces contres primitives) on
peut trononner en rondelles dimmenses
arbres de donnes (appels baobabs BigDa-
ta) ou invoquer des centaines de dmons en
criant : Go.
Enfin, vous dcouvrirez comment ont t
rajouts dans le dernier JDK8 certains
ingrdients exotiques, pour permettre
tous les habitants de Java de bnficier des
bienfaits de la programmation fonctionnelle.
> Une track pour les DSI
Grande nouveaut cette anne Devoxx
France, la thmatique aprs-midi des DSI .
Cet espace dchange ddi aux dcideurs a
pour but de savoir comment une technologie
mergente sintgre dans les SI. Le thme
choi si cette anne sera l e Cl oud. Hui t
exemples concrets pour des entreprises
allant de la start-up linstitutionnel vont
tre abords par des DSI.
Les cas dutilisations vous claireront sur les
avantages mais aussi les cueils du Cloud.
Ils dcriront les impacts techniques et orga-
nisationnels de ce service dans leur entrepri-
se. A lissue de cet aprs-midi, vous aurez en
main des lments cls pour vos arbitrages.
Vous voulez en savoir plus sur le Cloud,
rservez vite le jeudi 28 mars 2013 entre
14h et 18h.
Comme vous pouvez le constater, Devoxx
France c'est avant tout la voix du dvelop-
peur. Nous souhaitons dfendre une vision
o le dveloppeur est un passionn, un arti-
san et un maillon indispensable de la ralisa-
tion de vos projets informatiques.
Nous comptons runir entre 1200 et 1400
personnes du 27 au 29 mars 2013. La
journe commence par un petit djeuner
d'accueil, puis un djeuner et une pause-
caf. Nous avons rserv 6 salles d'une
capacit d'environ 250 personnes, dans les-
quelles auront lieu les confrences.
Il y a plusieurs styles de prsentations allant
de 15 minutes (Quicky) 3 heures (Universi-
t) ou de la plnire du matin la confren-
ce plus classique dune heure.
Nous avons aussi 3 salles de plus petite
taille qui accueilleront des ateliers et des
confrences informelles. Ces salles donnent
sur un hall d'exposition de 660 m2, o nos
partenaires tiennent leurs stands et animent
les pauses. Lors de l'dition 2012, des v-
nements inattendus ont eu lieu : tournois de
babyfoot, danses de robots, fabrications de
(732857$17
&(6795$,
35(7(17,(8;
&(6781
3(8
/(&2/('(/$
180(5,48(
*(1(5$7,21
Iconoclaste ou surprenante, dun dynamisme insouponn quand il faut
lancer un projet ou une entreprise, telle est la gnration numrique et son
cole, Epitech. Depuis 15 ans, par une pdagogie qui assume sa diffrence,
par une conance dans nos tudiants et dans leurs projets audacieux, nous apportons aux entreprises
ce nouveau vent de passion indispensable. La gnration numrique transforme chaque jour le monde.
Son cole a un nom, Epitech, lcole de linnovation informatique.
tablissement denseignement suprieur priv
www.epitech.eu
AP EPITECH TYPO PROGRAM 135x210.indd 1 19/02/13 11:27
i
ressources
> Information pratique
Lieu : Hotel Marriot Rive Gauche (Paris 14e)
Alors nhsitez plus et venez rencontrer vos
pairs Devoxx France.
Pour en savoir plus : http://www.devoxx.com/
10-11 19/02/13 22:42 Page 11
L
e disque SSD se retrouve de
plus en plus en standard sur
les ordinateurs, particulire-
ment sur les portables. Lhybri-
de disque dur SSD commence
simplanter pour mixer les per-
formances et les capacits de
stockage, comme l a ( trs
chre) option dApple.
PNY sort une nouvelle famille de
SSD ddis aux entreprises et
serveurs : SSD Prevail et Prevail
Elite. Pour PNY, ces disques
offrent des performances et une
robustesse suffisante pour tre
utiliss avec des applications
gourmandes en ressources et
performances disques comme
la CAO. Le constructeur met en
avant l es performances sys-
tmes et les logiciels comme le
temps douverture. Ces SSD
montent jusqu 85 000 IOPS et
les capacits vont de 120 480
Go. Le contrleur est un San-
Disk SF 2281 (pour les deux
modles). Il repose sur du SATA
III / 6G. Par contre, la mmoire
utilise varie entre le Prevail et le
Prevail Elite. A partir de 119 .
De son ct, Intel lance un nou-
veau SSD mSata ddi aux ultra-
books (et NUC ?) : SS Intel 525
Series 6 go/s. Ct performan-
ce, il affiche un IOPS de 50 000
(maxi mum), et une cri ture
squentielle de 520 Mo/s. Intel
travaille beaucoup sur les traite-
ments antichoc pour viter cor-
ruption et pertes de donnes.
L'Intel SSD 525 ouvre la voie
vers un nombre virtuellement illi-
mit de solutions embarques
cratives, dans des domaines
tels que le divertissement en
vol , l es stati ons de travai l
mobiles, les micro-serveurs ou
les tlphones sur IP , indique
le constructeur. La capacit
varie de 30 240 Go. Il poss-
de une fonction de cryptage AES
128 bits et une garantie de 5
ans. Intel propose aussi la SSD
Toolbox, une suite doutils de dia-
gnostic et de gestion des SSD,
malheureusement rserve
Windows !
Toshiba est aussi un important
constructeur de SSD. Il vient
dannoncer de nouveaux mca-
nismes de cryptage et defface-
ment scurit pour ses disques
de la gamme PX (SSD multi-
niveaux de cellule, architecture
standard). Lun des principaux
i ntrts de ces di sques est
l ef f acement scuri s avec
Sanitize. Toshiba propose aussi
aux constructeurs de portables
dinclure ce type de fonction par
dfaut en cas de vol ou dintru-
si on mal vei l l ante. Cer tai ns
modles ne seront disponibles
quau 1er trimestre.
Une pluie de nouveaux SSD !
Le Kinect likeen approche !
L
eap Motion, le principal concurrent de Microsoft Kinect,
arrive doucement mais srement. Leap est un petit botier
que lon connecte son ordinateur pour pouvoir contrler, utili-
ser des logiciels ou jouer avec les gestes de la main et des
doigts, comme on peut le faire avec Kinect. Il sagit dune nou-
velle approche de linterface naturelle, le tout tenant dans un
botier de la taille dun iPod. Les principaux usages sont : le jeu,
linteractivit dans des mondes et objets 3D, crer des conte-
nus directement sur lcran mme sil nest pas tactile. Sur-
tout il fonctionne aussi bien sur PC que Mac. Autre argument
le prix : 69,99 $ !
Actuellement, Leap est toujours en pr-commande (il devrait
tre disponible courant fvrier) mais les dveloppeurs peuvent
dores et dj obtenir le kit de dveloppement (le constructeur
slectionne les dveloppeurs). Plusieurs milliers ont
t envoys depuis dcembre. Le
dveloppeur est au
centre de la pro-
bl mati que Leap
pour crer des appli-
cations optimises et
compatibles et surtout
crer les usages. Le SDK
comprend le tlcharge-
ment du SDK proprement
dit, laccs aux documenta-
tions techniques, les outils de dveloppement et un prototype
du Leap Motion. Mais vous pouvez accder au SDK sans avoir
le matriel. Le constructeur sest associ Asus pour propo-
ser le botier par dfaut sur certains modles
PROgrammez ! < 12 > MARS 2013
i
matriel
Le constructeur
franais Archos continue
miser sur le march des tablettes, que ce
soit en sortant des tablettes Android ou
des accessoires. Archos a dvoil fin jan-
vier un clavier Bluetooth pour iPad. Il per-
met de caler liPad et davoir une sorte de
station complte. Mais il ne possde
aucun connecteur pour brancher la tablet-
te. Prix : 69 TTC. Autre nouveaut,
lArchos 97 Titanium HD. Il intgre un cran IPS, Android 4.1, laccs Google Play,
Archos Media Center et un processeur 4 curs 1,6 Ghz. Sur la connectique, nous retrou-
vons une mmoire flash de 8 Go, une sortie mini-HDMI, un slot microSD. Prix : 169 TTC.
Dbut janvier, le constructeur avait prsent son Archos TV, une sorte de Google TV qui
devrait tre disponible courant fvrier au prix de 129 .
12-15 19/02/13 22:48 Page 12
12-15 19/02/13 22:49 Page 13
PROgrammez ! < 14 > MARS 2013
i
matriel
O
penVIBE est une technologie
pour pouvoir piloter un ordina-
teur, des logiciels par la pense.
OpenVIBE 2.0 souvre largement
aux jeux vido. Pour rappel, Open-
VIBE est un projet dinterface cer-
veau-ordinateur de lINRIA, avec le
soutien de plusieurs partenaires.
Des diteurs de jeux ont active-
ment particip cette
volution (Ubisoft, Kylo-
tonn Games...). Il aura
fallu presque 3 ans pour
sortir cette nouvelle pla-
teforme. Une interface
cerveau-ordinateur per-
met ses uti l i sateurs
d envoyer des com-
mandes un ordinateur
en utilisant uniquement
leur activit crbrale. Lactivit lectrique
mi se par l e cerveau est anal yse en
temps-rel et traduite en commande pour
un ordinateur, ou tout autre systme auto-
matis, permettant ainsi de piloter un cur-
seur vers l a droi te ou l a gauche,
simplement en imaginant les mouvements
de sa main. Le projet OpenViBE2 fait suite
ce premier projet, et vise explorer plus en
avant ces technologies en les tudiant dans
un contexte applicatif parti-
culirement complexe : celui
des jeux vido. Lobjectif est
damliorer les interfaces
cerveau-ordinateur. Pour les
chercheurs et les diteurs, la commande
mentale est une nouvelle voie prometteuse
dans les jeux mais les chercheurs noublient
pas lutilisation de cette technologie pour les
handicaps lourds. Un des problmes est de
pouvoir traiter efficacement les signaux du
cerveau : filtrer les signaux, les interprter.
Cela passe notamment par llimination des
bruits parasites tels que les mouvements
musculaires, mouvements de mchoire,
etc. Bref, utiliser uniquement lac-
tivit crbrale utile. De ce projet,
les chercheurs ont pu dcouvrir
de nouveaux concepts dinterac-
ti ons : i nterface mul ti j oueur,
adaptation automatique du monde
virtuel ltat mental du joueur.
Les industriels du jeu vido ont tra-
vaill directement avec des labora-
toires acadmiques de l'Inria, de
l'Inserm, du CEA et GIPSA-Lab,
pour mettre au point des jeux
vido bass sur lactivit crbra-
le. Cette collaboration a permis de
mieux spcifier les actions de
recherche scientifique tout au long du projet
et de converger vers des solutions plus
adaptes aux contraintes technologiques du
domaine dapplication. Un projet de standar-
disation a par ailleurs t pilot par UBISOFT
pour dfinir le casque idal afin de mieux
correspondre au march du jeu vido. Des
jeux ont t dvelopps conjointement avec
lINRIA pour tester et affiner les architec-
tures logicielles et matrielles. Si le projet a
bien volu et permet douvrir une nouvelle
perspective, il faut maintenant passer au
stade industriel et proposer des solutions
concrtes. Le premier projet navait pas pu
atteindre ce stade. Site : http://openvibe.inria.fr
HP lance
son Chromebook
T
rs discret depuis
quelques mois, le
systme connect de
Google, ChromeOS, a
encore du mal trouver
son march et
multiplier les machines
le supportant. HP a
dvoil dbut fvrier, un
portable spcifique : le
HP Pavilion 14. Il
possde un cran 14,
pse tout de mme 1,8
kg (ce qui est assez
lourd), 2 Go de mmoire
vive, un disque SSD de
16 Go (taille ridicule).
Lautonomie serait de
4h15 et le tarif
denviron 240 euros.
Reste voir lintrt
rel de cette machine.
L
e Raspberry Pi Modle A contient 256 Mo de
mmoire vive (RAM), un port USB et, contrai-
rement au Modle B existant, ne possde pas de
connexion Ethernet. Par consquent, en plus
d'tre vendu un prix infrieur, le nouveau Modle
A prend moins de place et consomme beaucoup
moins d'nergie que le Modle B. L'arrive du
Modle A est une bonne nouvelle pour les per-
sonnes qui souhaitent dvelopper des applications
faible consommation lectrique avec leur Rasp-
berry Pi , se rjouit Glenn Jarrett, Global Head of
Product Marketing chez RS. Le prix propos le
rend encore plus intressant pour les intgra-
teurs de systmes et plus accessible dans les
domaines professionnels o le budget est limit,
comme par exemple le monde de lducation .
Lditeur Canonical a montr les premiers prototypes de
smartphones utilisant son systme mobile bas sur Ubuntu
Le systme devrait tre disponible courant 2013 et les premiers terminaux en
danne. Mais reste trouver des constructeurs, convaincre les dveloppeurs et
diteurs. Il pourrait utiliser des applications natives et HTML5. Ubuntu for Android
permet dinstaller et dutiliser Ubuntu depuis un terminal mobile Android
Inria sort la nouvelle version de son projet OpenVIBE
Raspberry Pi Modle A
est disponible
12-15 19/02/13 22:49 Page 14
12-15 19/02/13 22:49 Page 15
Comment es-tu tomb dans l'informatique
et plus spcialement dans le dveloppe-
ment ?
Antonio : Grce aux jeux. A 13 ans jai eu un
Commodore 64 cassettes et jai commen-
c dvelopper mes propres jeux en Basic.
Puis jai eu lextension Power Cartridge qui
ma permis de dvelopper en assembleur. Je
me souviens avoir dvelopp un jeu de
casse-briques avec effets 3D... sur cran
monochrome bien sr. Je suis un des rares
avoir fait un bac informatique (le Bac H
lpoque). Puis un jour, au salon Sicob, je
suis tomb nez nez sur une station Next.
Jy ai vu lavenir et jai voulu participer cet
avenir. Jai ensuite dvelopp en C, en Ada,
Smal l tal k, j ai f ai t mon mmoi re de
recherche en Prolog, jai mme mis les
mains dans du Cobol, et dcouvert Java en
1998. Il ne se passait rien en France autour
de ce langage cette poque l, alors jai
tout pl aqu pour al l er fai re du Java
Londres durant 2 ans. Aujourdhui, je conti-
nue dvelopper, mme si mes missions
senrichissent de conseils, de mentoring ou
de formations.
Pour toi, qu'est-ce qui fait que l'on aime
toujours et encore le dveloppement, la
technique ?
Antonio : Je dteste penser que cest de lin-
n... mais jai limpression quil y a quelque
chose de cet ordre. Etant gamin je jouais aux
Antonio, duJUGParis Devoxx
Antonio Goncalves est dveloppeur
senior Java EE. Indpendant depuis 7
ans, il a travaill auparavant en SSII et
chez BEA Systems. Ingnieur
informatique des Arts et Mtiers, son
parcours a t sinueux dans des
universits lautre bout du monde
(Brsil) ou plus prs de nous (Espagne
et Grande Bretagne). Il est un des
crateurs du Paris JUG, de Devoxx
France, du podcast Les Cast Codeurs,
et lauteur de trois livres sur Java EE. Il
a reu le titre de Java Champion et
plus rcemment, a fait partie du
palmars des 100 personnes les plus
influentes en informatique pour 2013.
LEGO, aux mcanos, je dsossais des radios
pour rcuprer les transistors, les leds, et
les souder sur des circuits lectroniques
pour voir ce que cela faisait. Jai retrouv le
ct mcano lorsque je dveloppais en
assembleur tant adolescent, car jtais trs
proche du systme. Aujourdhui, je mamuse
dsosser des serveurs dapplications pour
voir ce quils ont sous le capot. Jai donc lim-
pression dexercer toujours la mme pas-
sion depuis plus de 30 ans.
Tu as gard un regard trs geek : gadget,
veille techno, c'est important pour ton job
et ta passion ?
Antonio : La veille techno est primordiale :
toujours lafft de la dernire librairie en
Alpha, toujours en qute de lAPI qui va me
simplifier la vie, toujours besoin de tester de
nouvelles fonctionnalits du langage. Par
contre, pour ce qui est des gadgets lectro-
niques, ce nest pas trop mon truc. Jai un
tlphone Android... et cest peu prs tout
(je nai mme pas de tl la maison).
Etre dveloppeur n'est pas toujours facile :
pression, volution constante, frustration
des projets et des "chefs", c'est quoi pour
toi d'tre dveloppeur aujourd'hui ? Le job
a-t-il chang depuis tes dbuts ?
Antonio : On ne va pas non plus trop se
plaindre, il y a pire comme boulot. Comme je
le disais, dans le fond, mon job na pas vrai-
PROgrammez ! < 16 > MARS 2013
i
dveloppeur du mois
ment chang : il y a 30 ans jimbriquais des
mcanos, aujourdhui jempile des API. En
revanche, au quotidien il y a eu des rvolu-
tions. Jai commenc linformatique une
poque o il ny avait ni internet (du moins,
pas pour le grand public ni pour les socits)
ni adresse e-mail. Les compilations taient
coteuses, il fallait donc relire son code
deux fois. Aujourdhui, je passe ma vie sur
internet, je tlcharge des librairies open
source, je compile en continu sur mon IDE,
je communique sur des forums, je partage
mon code sur GitHub... ce niveau, je peux
dire que mon travail aujourdhui na plus rien
voir avec celui des dbuts.
Mais cette volution constante, bien que
gnratrice dune forme de stress (nous
sommes des ternels bta-testeurs), fait
partie intgrante de notre travail, et cest
pour cela que jaime faire ce mtier : jap-
prends tous les jours de nouvelles choses
(mme si elles ressemblent souvent aux
mcanos de mon enfance).
Pour ce qui est des projets.... malheureuse-
ment, de ce ct l non plus a ne change
pas. Le cerveau dun tre humain ne sait
naturellement pas grer les projets de gran-
de taille (disons, un projet qui implique plus
dune personne). Nous devons les dcouper
en sous-projets, en tches, en sous-tches,
y affecter des tres humains, diviser, multi-
pl i er pui s cumul er l e nombre de
jours/hommes pour avoir une estimation du
16-17 19/02/13 22:51 Page 16
des SSII qui me posaient tous la mme ques-
tion et comment voyez-vous votre carrire
dans 5 ans ?. Pour tre accept dans le
job, je ne pouvais que rpondre dans 5 ans
je me vois chef de projet, mon dieu, chef de
projet, quelle horreur ! Je ne peux donc
rpondre cette question car il y a 5 ans je
navais pas encore cr le Paris JUG, je
navais pas encore crit mon livre Java EE 6,
je navais pas encore cr Devoxx. Aujour-
dhui, en plus de mon travail de dveloppeur
chez mes clients, ces activits font partie
intgrante de ma vie et me prennent beau-
coup de temps.
Si tu mavais demand il y a 5 ans comment
vois-tu ton job voluer, jamais je naurais
rpondu dans 5 ans je me vois monter la
plus grosse confrence indpendante pour
dveloppeurs. Cest bon de se laisser des
inconnues (vive les maths), cest important
de ne pas tout prvoir lavance, cest sain
de se laisser surprendre.
Des conseils aux tudiants et dvs qui
nous lisent ?
Antonio : Oui, ne devenez pas chef de pro-
jets. Votre passion, vos tudes, vos valeurs,
cest le dveloppement. La gestion dun pro-
jet cest une passion diffrente de la vtre,
des tudes diffrentes de celles que vous
avez faites, des valeurs diffrentes des
vtres. Chacun son mtier.
Faites le vtre le mieux que vous pouvez, per-
svrez, et aidez-nous changer la vision du
dveloppeur : un dveloppeur peut avoir plus
de 40 ans, il peut gagner plus que son chef
de projet... et il peut mme avoir les cheveux
longs et ne pas porter de cravate, et a, a
vaut de lor. #
cot, pour ensuite driver, revoir les estima-
tions et les budgets la hausse... pour bien
souvent arrter le projet. Pas mal de fiasco
dans notre mtier. Il suffirait simplement
davouer que les humains ne savent pas pla-
nifier les gros projets informatiques et quil
faudrait juste monter des quipes de dve-
loppeurs passionns (juniors, seniors), moti-
vs, et les laisser faire de leur mieux en se
basant sur des itrations courtes. Et arrter
le projet rapidement si lon voit quon a pris la
mauvaise voie. Mais nos chefs utilisent des
techniques de gestion de projets issues du
BTP, non adaptes notre mtier. Les ponts
et les cathdrales sont faits pour durer des
sicles, les projets informatiques dpassent
rarement la dcennie. Pourquoi appliquer
les mmes techniques de gestion de projet ?
Nous continuons donc errer de projets
coteux en projets en retard. Point optimiste
quand mme, je travaille de plus en plus sur
des projets agiles o dveloppeurs, utilisa-
teurs et oprationnels vont dans le mme
sens, ce qui change un peu la donne.
Et en dehors du boulot, qu'est-ce que tu
aimes faire ? Comment trouves-tu l'qui-
libre entre travail, vie prive, passion,
famille ?
Antonio : En dehors de linformatique, qui
reste une vraie passion pour moi, jai deux
autres passions : ma fille et la musique. Ma
fille grandit, jarrive donc mler les deux et
lemmne voir des concerts. A 8 ans elle
aime Michel Petrucciani et chante dj les
Pink Floyd. Ayant fait de lhistoire de lart,
jcume aussi les expositions et galeries pari-
siennes... et puis, retour mes mcanos,
jadore faire la cuisine. Cest une manire de
continuer dans la geekitude, cest--dire
empiler des ingrdients, fouiller dans des
pices, essayer de nouveaux mlanges,
dcouvrir de nouveaux gots.
Peux-tu nous prsenter ton quotidien en
quelques mots ?
Antonio : Si par quotidien tu penses activi-
t qui se rpte tous les jours, alors je ne
peux rien prsenter. Ce qui me passionne
dans mon mtier, et mon statut dindpen-
dant, cest que les semaines ne se ressem-
bl ent pas. Par exempl e, j e sui s en ce
moment enferm chez moi crire un livre
sur Java EE 7. Dans quelques semaines je
commencerai une mission de conseil chez
un client. Puis je marrterai pour prparer
et participer Devoxx France. Je dois ensui-
te dvelopper une application, pour enfin
retourner chez un nouveau client. Le reste
de lanne va tre cadenc par la publication
de mon livre, donc, la tourne des conf-
rences europennes pour en parler, et
dautres clients qui auront dautres besoins.
Comment vois-tu ton job voluer ?
Antonio : Je ne peux l encore rpondre
cette question. Elle me rappelle trop les RH
PROgrammez ! < 17 > MARS 2013
i
dveloppeur du mois
Antonio et son bureau
Comme je nai plus le temps dassem-
bler les mcanos car jutilise ce temps
empiler des API, je nai plus non plus le
temps de bidouiller mes ordinateurs.
Jai arrt dassembler des pices dta-
ches pour avoir des serveurs Windows
boosts (censs tre puissants), arr-
ter de compiler les drivers wifi pour
accder internet sous Ubuntu. Je suis
donc pass de lautre ct de la force,
je suis sous Mac. Jai un Mac Book Pro,
deux Mac Mini, un cran 27 pouces et
un switch pour passer de lun lautre.
Je nutilise plus de souris mais le track
pad. Super important, je nai presque
plus de papier ou de stylos sur mon
bureau. Jai un scanner extra rapide, je
scanne donc tous les documents papier
que je reois puis les jette. Jai aussi
une Dymo pour imprimer des petites ti-
quettes coller sur les enveloppes pour
ne plus avoir utiliser de stylo. Et bien
sr, vous laurez compris, je travaille
toujours toujours en musique. Essentiel-
lement du jazz instrumental pour pou-
voir me concentrer.
ne devenez pas
chef de projets


16-17 19/02/13 22:51 Page 17
> Les enjeux
Mozilla fte en 2013 ses 15 ans d'existen-
ce. Pour rappel, il sagit dune fondation
but non lucratif dont lobjectif premier est
d tre communautai re et l i bre. Mozi l l a
connat trs bien l'univers du web depuis les
origines. Elle regarde la bataille actuelle
autour de la mobilit entre iOS, Android,
Windows Phone.
Mais le march se doit tre ouvert, et
Mozilla le rappelle au travers d'un Hackaton.
Cet vnement tait trs attendu par l'en-
semble des visiteurs pour connatre les dfis
qui seront lancs par la Team Mozilla et sur-
tout les principales valeurs qu'il ne faut pas
perdre, comme le rappelle Tristan Nitot
(fondateur de Mozilla Europe) :
Learn autrement di t, apprendre, se
remettre en cause et surtout donner l'en-
vie de dcouvrir et de faire des choses
ensemble.
Le Hack doit vous permettre de bidouiller,
et principalement vous donner l'envie de
crer quelque chose travers le code pour
vous pousser vers linnovation. Bien sr, ce
petit truc en plus, va vous permettre de
vous approprier de nouvelles technologies
et de ne pas tre seulement un simple utili-
sateur de la solution.
Firefox OS : lautre systme
pour smartphones
Mozilla tait jusqu prsent loign des problmatiques de la
mobilit, mme si la fondation cherche trouver sa place sur
le march des navigateurs mobiles largement domin par les
navigateurs bass sur WebKit. Au-del, Mozilla veut tre une
alternative Android, iOS, Windows Phone, BlackBerry. Mais proposer une nouvelle
plateforme ne va pas de soi. Canonical cherche aussi une place avec Ubuntu pour les
terminaux mobiles. Mozilla a dvoil deux terminaux Firefox OS (Keon / Peak) mais sans
date de sortie, sans tarification. Lquation est la fois simple et complique : intresser les
constructeurs et oprateurs, motiver les dveloppeurs aller sur cette plateforme. Si
lalternative est bonne pour la concurrence et linnovation, est-elle rellement crdible.
A vous de juger ! # Franois Tonic
La fte, car c'est trs bien de se runir
pour faire avancer la technologie, mais il
faut clbrer les innovations et les rsul-
tats obtenus.
> La vision Mozilla
Le fait de proposer un nouvel OS pour les ter-
minaux mobiles doit rpondre aux attentes
de libert que vous connaissez dj au tra-
vers du web. Il y a 20 ans, les premiers
rseaux apparaissaient (AOL / Compuserve /
Minitel) qui taient des rseaux innovants
pour l'poque, propritaires et ferms car ils
ne pouvaient pas communiquer entre eux. Le
phnomne a t renvers avec l'arrive d'in-
ternet qui proposait la libert d'changes et
de partage de la connaissance sur des prin-
cipes simples, sur des standards ouverts,
sans l'obligation d'avoir des kits de dveloppe-
ments spcifiques et une documentation
abondante. De nos jours, la comparaison est
identique. La ralit montre que le secteur
de la tlphonie et des tablettes propose la
mme approche que nous avons pu
connatre, c'est--dire un modle qui semble
ouvert et libre alors que vous tes dpendant
d'une plateforme de distribution (market),
avec l'obligation d'utiliser l'outil de dveloppe-
ment associ (SDK) au systme d'exploita-
PROgrammez ! < 18 > MARS 2013
i
veille Techno
tion, d'apprendre un nouveau langage (pas
toujours, NDLR), dont le propritaire peut du
jour au lendemain supprimer votre ralisa-
tion de son catalogue sans pravis (soumis-
sion des applications, NDLR). Le rsultat
peut alors tre un problme de libert, mais
aussi conomique par rapport au temps que
vous avez pass. Ce qui pourrait tre peru
comme une vision allant lencontre de la
philosophie du web.
> FIREFOX OS, cest quoi ?
Firefox OS est une plateforme complte pour les
terminaux mobiles, s'appuyant sur les technolo-
gies standards du web : HTML 5 / CSS 3 /
Javascript... Les applications sexcuteront
dans le navigateur. Ce systme se structure
autour dune architecture systme classique :
services, noyau, applications. La plateforme de
distribution s'appellera Marketplace (ton-
nant non ?) et offrira de nombreux avantages
car vous pourrez utiliser la plateforme de
Mozilla ou le placer ailleurs (par exemple chez
vous). Ainsi, vous pourrez montiser les applica-
tions, sur le principe de vente directe, sans
besoin de passer par un intermdiaire (donc
sans soumission, mais se posera alors de facto
la notion de qualit et de contenu, NDLR).
Mozilla sentoure de partenaires pour l'aider
dans ce projet. Car la fondation ne peut dvelop-
per un tel systme seule. Il faut impliquer des
oprateurs, constructeurs, dveloppeurs, etc.
Architecture
FirefoxOS s'appuie sur une architecture 3
niveaux :
A l'occasion du FirefoxOS applications Days organis par la
fondation Mozilla les 25 et 26 janvier dernier lEpita Paris, et
en simultan dans 25 autres villes du monde entier, nous avons
pu connatre l'avancement du projet Firefox OS et impliquer
les dveloppeurs web dans ce nouveau systme d'exploitation...
Prsentation.
18-21 19/02/13 23:26 Page 18
tions sur vos serveurs ou sur un service
dhbergement comme Git. Toutefois, vous
avez toujours la possibilit de placer le 'mani-
fest' ou le lien dans le marketplace pour tre
rfrenc dans le catalogue.
> Conclusion
La version 1.0 de FirefoxOS est disponible
depuis quelques semaines, et une nouvelle
version est en cours de dveloppement.
Ainsi, vous bnficierez de la mise jour
automatiquement sans besoin de devoir
changer de tlphone ou de faire une mise
jour manuelle. Concernant le matriel, vous
pouvez dj installer et utiliser Firefox OS sur
les tlphones compatibles Android 4.x.
Ressources
Page officielle de Firefox OS :
http://www.mozilla.org/fr/firefoxos/
MarketPlace officiel de Mozilla :
http://www.mozilla.org/fr/apps/
Simulateur Firefox OS :
http://people.mozilla.org/~myk/r2d2b2g/
FirefoxAppDays : https://wiki.mozilla.org/Engage-
ment/Developer_Engagement/FirefoxAppDays
# Christophe Villeneuve
Consultant pour Neuros, auteur du
livre PHP & MySQL-MySQLi-PDO,
Construisez votre application ,
aux ditions ENI. Rdacteur pour
WebRIVER, membre des Teams
DrupalFR, AFUP, LeMug.fr,
Drupagora, PHPTV.
Gonk est la distribution Linux servant de
core system . A cela se rajoutent les
services fondamentaux de tlphonie.
Gaia est l'interface comprenant une
application systme et une suite d'applica-
tions comme la gestion des SMS, la possi-
bi l i t d' uti l i ser l e tl phone et un
navigateur.
Gecko est le moteur de rendu HTML. Il
est utilis par Firefox. Cest lui qui permet
dafficher et dexcuter les applications.
Avec cette architecture, il n'est pas nces-
saire d'avoir plus, car cela rpond ce quon
attend d un tl phone. Bi en entendu,
lorsque vous allumez votre tlphone, Fire-
foxOS utilisera un mode lazy -loader pour
charger cette architecture, qui est un mode
trs rapide, par rapport un mode clas-
si que de chargement de donnes sur
di sque. Ce mode permet en quel ques
secondes de pouvoir utiliser votre tlphone
(comme les autres systmes, NDLR).
Les Applications Web :
le modle de dveloppement
Comment utiliser ? Comment dployer les
applications ? Le dveloppeur passe par la
diffusion et le partage. Plusieurs modes de
dploiement sont possibles :
Un hbergement sur appCache : directe-
ment sur la plateforme Mozilla
En sappuyant sur le memcache
A partir d'un package en zip externe
Par ailleurs, suivant le choix du type d'appli-
cation que vous allez raliser, vous utiliserez
des niveaux d'accs diffrents. Trois modes
d'applications sont proposes :
Le mode application certifie
Le mode privilge est un certificat, qui
accde la mmoire du tlphone. Inclut
laccs aux services matriels.
Le mode Install est un mode ouvert,
c'est--dire que vous pourrez installer sur
votre terminal n'importe quelles applications.
Les permissions
Suivant le choix du type d'application, celle-ci
disposera d'un certain niveau d'accs au sys-
tme suivant les besoins du projet. Par
exemple une application exploitant le mode
GPS ne disposera pas des mmes droits
qu'un projet qui utilisera un accs aux pho-
tos. Par consquent, le projet utilisera le
niveau d'accs du systme suivant la fonc-
tionnalit et la finalit de lapplication.
Il existe diffrents types de permissions et
d'accs au contenu. Par exemple le systme
XHR, web application manager...
L'utilisation
Le multitche a t incorpor dans la ver-
sion de base car le comportement de navi-
gation et d'utilisation d'une application est le
mme que sur un ordinateur (cest le parti
pris de Mozilla).
Au niveau de l'applicatif, vous naviguez dune
application une autre sans difficult, car
celle que vous n'utilisez pas passera en fond
de tche (background), sous certaines
conditions.
Ces conditions sont multiples, car lorsqu'une
application passe en arrire-plan, celle-ci se
met en sommeil. Si le systme d'exploitation
dtecte quil lui manque de la place mmoi-
re, il fermera les applications que vous n'utili-
sez pas pour librer les ressources. Mais
soyez vigilant sur le multitche.
La publication
La publication d'une application sur Fire-
foxOS peut s'effectuer de 2 manires, par le
marketplace ou lexternalisation.
Le Marketplace est un webmarket classique,
gr par Mozilla. Il s'agit d'une plateforme de
partage sur laquelle vous pouvez lister, clas-
ser et rechercher des applications, identique
aux autres systmes du march.
Il se dcompose en plusieurs zones :
Le nom de l'application
Une description
Une capture dcran
La possibilit de tlcharger l'application
De tester directement en ligne avant de le
tlcharger
Chaque fiche applicative possde une zone
ouverte pour noter, commenter.
L'externalisation est le 2e mode de publica-
tion. Vous ne passez pas directement par le
marketplace de Mozilla, mais directement
chez vous. Vous pouvez hberger les applica-
PROgrammez ! < 19 > MARS 2013
i
veille Techno
18-21 19/02/13 23:26 Page 19
> Rappel
Larchitecture de Firefox OS repose donc sur 3 piliers :
Gonk est la distribution Linux, la base du systme
Gaia est l'interface
Gecko est le moteur de rendu HTML
Nous allons nous intresser Gecko. Cest par lui que lon va pouvoir
coder et optimiser son application HTML 5 / CSS 3.
Nous vous invitons consulter la documentation officielle :
https://developer.mozilla.org/fr/docs/Mozilla/Firefox_OS
Toutes les fonctions HTML / CSS / JavaScript disponibles y sont lis-
tes et expliques.
> Le dveloppement
Structure d'une application
La structure d'une application Firefox OS se
compose de diffrents fichiers qui peuvent tre
regroups dans des sous-dossiers : [Fig.1].
Vous devez bien garder cette structure en
tte et en comprendre le fonctionnement.
Manifest.webapp
Le fichier 'Manifest.webapp' contient les informations dinteraction
entre le navigateur (et donc aussi avec le systme) et lapplication. Il
est obligatoire. Ce manifeste est structur au format jSON avec des
informations obligatoires comme : un nom, une description, les
icnes, le nom du ou des dveloppeurs et les permissions.
En voici un exemple :
{
"version": "1.0",
"name": "Programmez",
"description": "Programmez of the mobile",
"launch_path": "/index.html",
"icons": {
"16": "/img/icons/programmez-16.png",
"48": "/img/icons/programmez-48.png",
"128": "/img/icons/programmez-128.png"
},
"developer": {
"name": "Christophe Villeneuve",
"url": "http://www.programmez.com"
},
"installs_allowed_from": ["*"],
"appcache_path": "/cache.manifest",
"locales": {
"fr": {
"description": "Programmez sur Firefox OS",
"developer": {
"url": "http://www.programmez.com"
}
}
},
Dbuter avec Firefox OS
Comme nous venons de le voir, Firefox OS est un nouveau systme pour terminaux mobiles. Le succs
de cette plateforme viendra de la confiance des constructeurs et des dveloppeurs pour garnir lApp
Store dapplications. Nous allons maintenant voir comment crer une application et la dployer.
"default_locale": "en"
}
Ce fichier est modulable. Il est possible d'ajouter des critres suppl-
mentaires qui sont disponibles sur la page du manifeste de Mozilla,
par exemple le FullScreen :
https://marketplace.firefox.com/developers/docs/manifests
Notre exemple montre 2 sous-fonctionnalits. Le support de plu-
sieurs langues est possible, avec l'anglais par dfaut et le franais en
langue alternative. Ainsi la description et laffichage varient selon la
langue du terminal. Il est possible dajouter dautres langues.
L'autre particularit est de proposer plusieurs dimensions d'icnes
de l'application, ce qui est utile car le tlphone prendra l'icne dfi-
nie par dfaut suivant le matriel et la dimension de l'cran, le syst-
me affichera l'icne prvue avec la taille associe [Fig.2]. Un grand
classique sur les smartphones.
> L'application
Notre application affichera un texte centr horizontalement et verti-
calement. Comme notre exemple est ralis en HTML5/CSS3, il est
100% compatible avec votre navigateur deskop. Pour effectuer ce
dveloppement, nous allons avoir besoin d'un fichier index.html et
d'un fichier CSS. Vous pouvez voir le rsultat [Fig.3].
Le fichier index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Programmez sur Firefox OS</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/programmez.css">
</head>
<body>
<div id="container">
<p>P R O G R A M M E Z</p>
Le magazine du dveloppement
</div>
</body>
</html>
Le source de ce fichier index.html ci-dessus, utilise la base view-
port , qui donne la surface de la fentre du navigateur disponible.
Cette valeur est importante car la zone de contenu varie suivant les
modles de tlphones.
Le fichier programmez.css
p {
background: #dddddd;
font-weight:bold;
color:#FF0000;
height:200px;
PROgrammez ! < 20 > MARS 2013
i
veille Techno
Fig.1
18-21 19/02/13 23:26 Page 20
line-height:200px;
text-align:center;
}
#container{
position:absolute;
text-align:center;
line-height: 200px;
position:relative;
border:2px solid #000000;
vertical-align:center;
}
Le fichier programmez.css contient la feuille de style. Nous appli-
quons une bordure avec un texte qui sera centr pour la balise
container . Par ailleurs, le texte dfini par la balise <p> propo-
sera un effet d'affichage diffrent.
> Validation
Lorsque vous avez ralis votre application et effectu les premiers
tests, passez lapplication sur lmulateur Firefox OS. Il est ncessai-
re que lapplication passe ce test pour pouvoir dployer le projet.
Les tests
L'environnement de test est une tape incontournable avant le dploie-
ment de votre application sur mobile. Cette tape s'effectue par l'inter-
mdiaire de votre navigateur desktop : vous devez installer l'extension
du simulateur de Firefox OS, disponible partir des extensions ou de
l'adresse suivante [Fig.4] : http://people.mozilla.org/~myk/r2d2b2g/
Pour lancer l'mulateur, vous effectuez l'opration travers le navi-
gateur Firefox par le menu : outils \ developper web \ firefox OS Simu-
lator. L'cran [Fig.5] propose une liste d'applications que vous devez
tlcharger sur votre disque dur ou travers un lien URL. Ainsi,
vous pouvez lancer votre simulateur de tlphone avec Firefox OS.
Comme sur votre ordinateur, la fonction de glisser-dposer n'existe
pas, vous devrez effectuer le geste avec votre souris.
Le mode debug
Lors d'un dveloppement, les tests visuels ne suffisent pas pour
rsoudre les problmes ventuels. Firefox OS Simulator propose
Firefox Remot Debugger pour vous aider corriger rapidement
les bugs de vos applications. Vous pouvez aussi combiner l'mula-
teur Firefox OS Simulator et Firefox Nightly . Vous vous retrou-
verez avec une bote outils trs puissante.
Si vous lancez le mode debug, vous pouvez effectuer du dbogage en
mode pas pas , ou encore mettre des points d'arrts. Ces op-
rations sont trs utiles pour connatre les valeurs des variables utili-
ses ou savoir si la fonction est bien prise en compte. Bon debug !
> Dploiement
Il existe plusieurs mthodes pour partager une application. Si vous
choisissez une publication directement sur l App Store de Mozilla,
l'opration s'effectue en 4 tapes partir de l'adresse suivante :
http://marketplace.firefox.com/developer
Bien entendu, la validation du Manifest est de nouveau effectue et
le code HTML est automatiquement re-contrl et vrifi.
> Conclusion
Notre exemple est trs simple mais montre les principales tapes.
Firefox OS respecte les spcifications web du W3C, ce qui facilite le
travail du dveloppeur. Noubliez pas que vous pouvez faire des appli-
cations pour Firefox OS, accessibles via le navigateur ou directement
sur le terminal (applications web natives, mais pas natives au sens
C++, NDLR).
Ressources
Doc Firefox OS : https://developer.mozilla.org/fr/docs/Mozilla/Firefox_OS
Market place : https://marketplace.firefox.com/developers/
DOC de dbuggage : https://developer.mozilla.org/ms/docs/Tools/Debugger
Hacking Firefox OS : https://hacks.mozilla.org/2012/11/hacking-firefox-os/
# Christophe Villeneuve
PROgrammez ! < 21 > MARS 2013
i
veille Techno
Fig.4
Fig.5
Fig.3 Fig.2
18-21 19/02/13 23:26 Page 21
> Des nouveaux outils
Lapparition dAdobe Scout (nom de code Monocle) pour analyser les
performances et les goulets dtranglement est une avance majeu-
re. Pour avoir le maximum dinformations, il est ncessaire dactiver
la tlmtrie dtaille au niveau du projet [Fig.1]. Dans le cas o vous
navez pas accs au source dune application ou si vous utilisez une
version antrieure de Flash Builder ou Flash Professionnal, vous pou-
vez toujours utiliser Adobe Scout pour analyser vos fichiers SWF ou
AIR, mais avec moins de compteurs de performance. Il existe nan-
moins des scripts Python pour activer ces compteurs, avec laide du
logiciel TelemetryEasy de Joseph Labrecque (http://inflagrantedelicto.
memoryspiral.com/2012/12/telemetryeasy-advanced-telemetry-utility-for-adobe-
scout/).
Voici un aperu dune session de dbogage sur une tablette Android
[Fig.2]. Dans le cas dune session mobile/tablette, il est ncessaire
dinstaller pralablement Adobe Scout pour ces priphriques, dispo-
nibles sur leurs store respectifs.
Pour le dveloppement mobile via WIFI, je me suis prpar un fichier
debugtablet.cmd (pour Windows uniquement, facilement portable
sous iOS) :
ipconfig | find "192.168"
c:
cd "C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)
\sdks\4.6.0\lib\android\bin"
adb devices
adb tcpip 5555
adb connect 192.168.xx.yy
adb devices
pause
Cela me permet de lancer lapplication en mode sans fil.
> Nouveauts de Flash Builder 4.7
Adobe Flash Builder 4.7 est dsormais disponible en 64 bits et
intgre le nouveau compilateur ASC 2.0, beaucoup plus rapide.
A noter, la sparation dans le SDK de Flex et de AIR : il est dsor-
mais possible de changer le SDK AIR indpendamment du SDK Flex,
afin par exemple dutiliser le SDK open source Apache Flex, donn
la fondation Apache(http://incubator.apache.org/flex/). La premire sortie
du SDK Apache Flex 4.8 est iso fonctionnelle avec la version Adobe
Flex 4.6, mais au moment o vous lirez ces lignes, la version 4.9
Nouveauts autour du dveloppement
ActionScript avec Flash Builder 4.7
En novembre 2012, Adobe dvoilait la
version 4.7 de Flash Builder, accompagn
doutils tels Adobe Scout pour le profiling,
et un changement de cap vers la cration
de jeux multi-plateformes (Gaming SDK).
Petit tour de loutil.
PROgrammez ! < 22 > MARS 2013
i
outils
Fig.1
Fig.2
dApache Flex sera sortie depuis quelques semaines, avec son lot de
nouveauts. Un installeur pour Apache Flex est disponible la mme
adresse. Pour le dveloppement dAIR Native Extensions, jai remar-
qu que Flash Builder 4.6 menlevait chaque lancement dune appli-
cation la ligne suivante dans application.xml :
<extensions>
<extensionID>com.magicalhobo.utils.PenTablet</extensionID>
</extensions>
Pour viter ce problme, je me suis cr un fichier de commandes
Windows :
22-28-2 19/02/13 22:53 Page 22
SET AIR_SDK=%USERPROFILE%\Documents\flex_sdk_4.6.0.23201B
SET ANE_PATH=..\..\PenTabletLib\bin
"%AIR_SDK%\bin\adtpause.bat" -package -XnoAneValidate -storetype
pkcs12 -keystore test.p12 -storepass test -target native OnyxPen
Tablet OnyxPenTablet-app.xml OnyxPenTablet.swf -extdir "%ANE_PATH%"
> Dveloppement de jeux en ActionScript
Flash Builder soriente dsormais vers le dveloppement de jeux.
Adobe a mis disposition Adobe Game Developer Tools contenant :
Adobe Scout
Adobe Gaming SDK : frameworks Starling, Feathers, Away3D et
des AIR Native Extensions(ANE)
Flash C++ Compiler : compilateur C++ pour rutiliser le code
C/C++ existant
Starling est un framework simplifiant laccs aux primitives Stage3D,
lequel permet lutilisation du GPU pour une performance accrue.
Associ Feathers(http://feathersui.com/), de la socit Gamua, linter-
face utilisateur est stocke sur le GPU avec des thmes personnali-
sables : boutons, barres de dfilement, texte, listes,
Starling ressemble fortement aux classes actionscript standard,
nommes de la mme faon. Par exemple, starling.display.Sprite
remplace flash.display.Sprite, il faut donc porter une attention parti-
culire aux imports en tte de vos classes, avec lautocompltion, il
faut choisir la bonne bibliothque [Fig.3]. Ceci est droutant au dbut.
# Bruce Lane
Dveloppeur du logiciel Onyx-VJ et musicien
(http://www.batchass.fr)_Administrateur systme la communaut d'agglom-
ration Sophia-Antipolis (http://www.casa-infos.fr)
i
outils
Fig.3
f
MARS
Le 26 mars 2013, Paris, Quai de Grenelle,
Journe Franaise des Tests Logiciels 2013.
Un tat de lieu du march des tests logi-
ciels en France sera prsent, ainsi que les
rsultats du premier Observatoire des
Pratiques du Test Logiciel , lanc en
dcembre dernier par le CFTL.
http://www.jftl.org/
Du 26 mars au 28 mars 2013, Porte de
Versailles - Pavillon 5 - Paris. Les Salons
INTRANET & Collaboratif et RSE 2013 tien-
dront leur 8e dition. Vous y dcouvrirez
les outils, conseils, services, applications
intranet, solutions dentreprises collabora-
tives, rseaux sociaux dentreprise.
http://www.salon-intranet.com/
f
AVRIL
Du 02 avril au 06 avril 2013, Espace Cap
15, au pied de la Tour Eiffel, Symfony Live
Paris 2013. Deux jours de formations, deux
jours de confrences et une session de
certification Symfony. Un Symfony Live
Paris 100 % francophone !
http://paris2013.live.symfony.com/
Du 03 avril au 04 avril 2013, CNIT Paris la
Dfense, Big Data Paris 2013. 1500 parti-
cipants, 60 exposants et 100 speakers
sont attendus pour deux journes de conf-
rences, dexposition et retours dexprience
BigData. http://www.bigdataparis.com
11 avril : Scrum Day
Organise par le French Scrum User
Group, cette journe sera entirement
consacre Scrum. Le but est dexpliquer
lagilit, de presenter des cas concrets.
O : IBM France Bois Colombes.
Site : http://www.scrumday.fr
Agenda
LINFO permanente
Lactu : le fil dinfo quotidien de la rdaction
La newsletter hebdo : abonnez-vous,
comme 38 000 professionnels. Cest gratuit !
Cest PRATIQUE !
Le forum : modr par la rdaction et les auteurs de
Programmez!, rejoignez les forums techniques
de programmez.com
Les tutoriels :
une solution
en quelques clics !
Le tlchargement :
rcuprez
les nouveauts.
www.programmez.com
22-28-2 19/02/13 22:53 Page 23
D
ans un premier temps, commenons
par expliquer ce quest un Rseau
Social dEntreprise, ses objectifs, ses
usages et les impacts occasionns par sa
mise en place. Un Rseau Social dEntrepri-
se est un espace centralis qui permet de
favoriser la mise en relation et le partage
des connaissances entre les individus tra-
vers un outil simple de communication,
dchange et de collaboration. Cet espace se
caractrise par une mise en avant des
expertises et connaissances des membres
du rseau travers leurs activits, pour per-
mettre lentreprise dtre plus productive
et efficace.
Maintenant, interrogeons-nous sur lintrt
dun rseau social interne en entreprise. La
principale raison au jour daujourdhui se
situe dans la diffrence entre lexprience
rencontre dans la vie personnelle et les
rseaux sociaux dits publics tels
que Facebook, Twitter ou
Viadeo/Linkedin et celle
offerte en entreprise
avec des por tai l s
vieillissants de com-
munication et de col-
laboration ne rpondant
pl us aux besoi ns uti l i sa-
teurs, et plus particulirement
la Gnration Y ou Digital Natives.
Dans ces conditions, pour redonner limage
dune entreprise innovante, le RSE importe
les pratiques du grand public pour amliorer
les usages dj mis en place dans le monde
de lentreprise. Lutilisateur retrouve donc
les habitudes de consultation dinternet, tout
en tant orient business, et non seulement
communication et partage.
On pourrait citer par exemple, que la mise
en place dun Rseau Social dEntreprise a
permis de rduire efficacement le nombre
de mails envoys et reus ou encore que la
culture collaborative (co-cration, gestion
lectronique de documents, communauts
de travail, gestion dappel ides dinnova-
tion,...) commence tre ancre dans les
Les nouveauts sociales de SharePoint 2013
Les Rseaux Sociaux dEntreprise (ou RSE) commencent apparatre dans le paysage
des Systmes dInformation franais. Selon lObservatoire de lintranet, 14% des
entreprises sondes utilisent rgulirement un Rseau Social dEntreprise, le reste des
entreprises tant plus attentif aux rsultats obtenus par ces pionniers. Cependant, ils
sont trs favorables en mettre un en place dans les mois qui viennent.
habitudes de travail de chacun. Par ailleurs,
la gestion des connaissances en interne a
grandement t amliore avec notamment
une mise en avant des meilleures rponses
et des experts prsents sur le rseau.
Microsoft ne proposait pas nativement de
plateforme Rseau Social dEntreprise son
offre SharePoint 2010, mme si des fonc-
tionnalits sociales existaient avec la brique
Mysite, comme une fiche profil et un mur
dactivits non interactif. Conscient de ce
point faible, Microsoft a ragi en proposant,
avec sa nouvelle version SharePoint 2013,
une nouvelle exprience ses utilisateurs
travers une refonte complte de son offre
sociale avec, par exemple, la mise en place
dun mur dactivits et dun outil de
micro-blogging ou la cration la deman-
de de communauts. Par ailleurs, la
stratgie Rseau Social dEntreprise de
Microsoft ne se limite pas qu SharePoint
mais continue avec lacquisition de Yammer
en Juin 2012 pour un montant de 1,2 Mil-
liard, ce qui lui permettra de proposer une
offre Rseau Social dEntreprise dans le
Cloud en mode freemium. Microsoft a dsor-
mais toutes les armes en main pour devenir
lun des leaders sur le march. Nous allons
maintenant dtailler toutes les nouveauts
apportes par SharePoint 2013 concernant
la brique sociale.
> Navigation & Ergonomie
Premier changement visible, la nouvelle
interface Windows 8 qui suit la ligne dito-
PROgrammez ! < 24 > MARS 2013
i
outils
riale de Microsoft concernant la suite Office
et son prochain systme dexploitation Win-
dows 8. Autre bouleversement important,
linstallation en natif dune seule et mme
barre de navigation globale tous les sites
qui permet lutilisateur de naviguer entre
ses diffrents sites dquipes, ses commu-
nauts, ses documents et son profil. En
effet, sous SharePoint 2010, lorsquon est
sur un site dquipe, le seul moyen daccder
son profil, ses sites, ses documents et
son mur dactivits tait de cliquer sur son
nom en haut droite. Dsormais, ces
quatre fonctionnalits sont toujours pr-
sentes sur la nouvelle barre de navigation.
Mme si sous SharePoint 2010, il tait pos-
sible avec quelques modifications du
code HTML et ses feuilles de styles
davoir la mme barre de navigation
[Fig.1]. Enfin, comme sur SharePoint
2010, une barre de recherche sera
prsente sur la quasi-totalit des
pages.
> NewsFeed
Aussi appel Mur dactivi-
ts, cette fonctionnalit per-
met lutilisateur de visualiser
l es acti vi ts de ses col l gues
(ajouts ou synchroniss depuis lannuai-
re dentreprise) ou des site dquipes/com-
munauts auxquel s i l appar ti ent et
dinteragir comme par exemple en laissant
des commentaires. Elment essentiel dun
Rseau Social dEntreprise, le mur dactivi-
ts offert nativement par SharePoint 2010
ne rpondait pas aux critres en termes de
fonctionnalits et dexprience utilisateur :
pas de commentaires possibles, pas dinter-
action ni de conversations avec un contact,
pas de remontes dactivits des sites, un
mur de discussion (note board) mal plac,
etc... Lajout dune surcouche sociale telle
que NewsGator ou Calinda Software, pour
ne citer queux, tait donc obligatoire si lon
souhaitait avoir une exprience utilisateur
proche de celle rencontre sur les outils
22-28-2 19/02/13 22:53 Page 24
Partager des documents et les visualiser
directement depuis le navigateur, sans
avoir besoin du client lourd Office install
sur son poste de travail, grce Office
WebApps
Partager des liens avec un affichage plus
convivial en cachant ladresse url par un
texte. Pour les liens, il est noter que lors-
quon insre un lien dune vido provenant
de Youtube, la description et limage de
prvisualisation de cette vido apparais-
sent. Les utilisateurs pourront donc regar-
der la vido directement depuis le mur
Aimer un post, le commenter, le suivre ou
encore le verrouiller si besoin
Utiliser des tags avec le hastag reprsent
par le symbole # pour donner un thme
son post, ce qui donne la possibilit de don-
ner un sens au message et de pouvoir visua-
liser toutes les conversations lies ce tag
De la mme manire que Twitter et ses
Trending Topics, ces hashtags permet-
tront aussi de connatre les sujets popu-
laires sur le rseau avec lapparition dun
Trending Tags. Ce dernier permettra daffi-
cher les trois tags les plus utiliss sur le
Rseau Social dEntreprise linstant T (et
par extension les plus populaires) et propo-
sera lutilisateur de suivre ces tags si ce
nest pas dj fait
Voir les messages qui lui sont directement
mentionns.
Autant de fonctionnalits permettant de rap-
procher les collaborateurs et de favoriser
les changes pour amliorer la communica-
tion et la collaboration au sein de lentrepri-
se. Une des par ti cul ari ts propre
SharePoint 2013 est la possibilit pour lutili-
sateur de visionner lensemble des conversa-
tions et activits de tous les membres du
rseau grce au filtre Everyone (cf la capture
prcdente) du NewsFeed, mme si ces der-
niers ne font pas partie de ses collgues. En
effet, cette fonctionnalit permet donc de
lever les limites de la sphre personnelle
(mes collgues et moi), de dcloisonner rel-
lement lentreprise en permettant toutes
les personnes dans lentreprise, qui nont
aucun lien, mais qui partagent des comp-
tences ou centres dintrts communs, de
se connecter pour en discuter.
> SkyDrive / SkyDrive Pro
A premire vue, on pourrait penser quil
sagit dune nouvelle fonctionnalit de Share-
Point 2013. Cependant, ce nest quun
changement de nom de longlet MyContent,
mme sil apporte quelques changements et
grand public. Lucide sur ce problme, Sha-
rePoint 2013 se devait dtre au niveau de
ce que proposent les rseaux sociaux grand
public mais galement dentreprises comme
BlueKiwi ou Jive si lon parle de solutions
concurrentes SharePoint, ou bien de
NewsGator ou Calinda Software pour les
extensions sociales de SharePoint, pour ne
citer queux. Pari russi car comme le
montre cette capture dcran [Fig.2], ce mur
dactivits permet de retrouver les activits
et conversations que lutilisateur a souhait
suivre. En suivant des collgues, des tags,
des sites et des documents, lutilisateur verra
remonter sur son mur tous les lments lis
ses suivis. En effet, lutilisateur verra toutes
les activits de ses collgues, leurs mises
jours de profils, toutes les conversations avec
ses tags, les conversations qui lui sont direc-
tement adresses (avec le symbole @userna-
me) , l es acti vi ts l i ntri eur de ses
communauts et sites dquipe, ainsi que les
modifications des documents suivis. Lutilisa-
teur aura donc une vi si on gl obal e des
changes qui se droulent sur le Rseau
Social dEntreprise et pourra galement y par-
ticiper, mme sil ntait pas convi au dpart
dans la conversation. Les changes au sein
de lentreprise seront donc publics, acces-
sibles tous les collaborateurs et non plus
stocks dans des botes mails entre quelques
destinataires privilgis. De plus, grce la
recherche sur les conversations, nimporte
quel utilisateur pourra retrouver toute discus-
sion qui lui serait utile dans son projet. Ainsi
ce mur dactivits permet damliorer la com-
munication interne entre collaborateurs mais
galement de chambouler la communication
sens unique en passant par une rduction
du temps de recherche de linformation avec
un moteur de recherche global qui ira indexer
toutes les conversations, les questions et
leurs rponses associes, tout en rduisant
les mails et conversations prives.
Autre nouveaut sur ce mur, lapparition dun
outil de type micro-blogging qui permet de
sexprimer trs rapidement et de partager
des documents, des images, des liens ou
des vidos. Ainsi, comme pour tout outil de
rseautage, les fonctionnalits classiques
sont prsentes :
Poster un statut ou un message pour ses
collgues.
Poster un message directement ses com-
munauts membres (ou les sites dquipe
comme on le verra plus loin) depuis son mur
Partager des images et en afficher une
miniature
PROgrammez ! < 25 > MARS 2013
i
outils
Fig.1
Fig.2
22-28-2 19/02/13 22:53 Page 25
avant tout changer et partager des ides,
des informations (ax donc sur la conversa-
tion et le forum de discussion) alors que le
site dquipe est avant tout un site pour col-
laborer et travailler (ax sur les bibliothques
de documents et les listes de tches).
> Site de type Communaut
SharePoi nt 2013 i ntrodui t dsormai s l a
notion de communaut qui manquait sous
SharePoint 2010, mme sil est vrai que sous
cette version, un site dquipe pouvait gale-
ment tre utilis comme une communaut.
Une communaut a pour but premier de ras-
sembler des collaborateurs autour dun thme
donn, quil soit professionnel ou personnel,
pour changer et converser en toute tranquilli-
t [Fig.5]. En effet, la communaut repose
essentiellement sur la brique Forum de discus-
sion qui permet chaque membre de discuter,
de poser des questions et den attendre une
rponse de la part des membres. Nous allons
maintenant dtailler dautres fonctionnalits
propres une communaut :
Tout dabord, il est noter que toutes les
communauts sont prives par dfaut. Si le
Community Manager (la personne en char-
ge de modrer et danimer la communaut)
souhaite louvrir au public, il doit ajouter le
nouveauts trs intressantes. Pour rappel,
MyContent liste lensemble des documents
auxquels lutilisateur a accs ainsi que ses
documents personnels quil peut partager
avec ses collgues sil le dsire [Fig.3].
Cet onglet, divis en deux catgories, permet
de lister dans un premier temps lensemble
des documents que lutilisateur a en sa pos-
session et les documents auxquels on lui a
donn un accs en lecture ou en criture et
dans un deuxime temps, les documents sui-
vis par lutilisateur. Pour chaque document,
lutilisateur a la possibilit de lditer, de le
partager avec ses collgues, de le suivre ou
bien de le lire en prvisualisation, si Office
Web Apps est install comme le montre la
capture dcran. Notons quOffice Web Apps,
permet galement de crer de nouveaux
documents ou dditer les documents Office
(Word, Excel, Powerpoint, OneNote) directe-
ment, sans avoir install le client lourd sur sa
machine. Une des particularits de SkyDrive
est la possibilit offerte lutilisateur de syn-
chroniser les documents prsents dans
cette bibliothque sur son poste de travail
travers un explorateur Windows, et inverse-
ment si la suite Office 2013 est installe sur
le poste utilisateur, avec notamment SkyDri-
ve Pro. En effet, ce dernier installera un dos-
sier spcial dans lexplorateur Windows sur
le poste de travail de lutilisateur, ce qui lui
permettra de possder en quelque sorte un
disque dur virtuel, accessible nimporte
quel moment, quil ait internet ou non, pour
travailler en ligne ou hors ligne. Ce fonction-
nement est le mme que lon peut retrouver
sous SharePoint 2010 et SharePoint Works-
pace mais ce dernier ne fait plus partie de la
suite Office. On peut galement noter quune
des nouveauts que lon retrouvera sur qua-
siment toutes les listes sous SharePoint
2013 est galement prsente : lapparition
dun moteur de recherche localis et dans
notre cas, uniquement index sur cette
bibliothque de documents. Enfin, lutilisateur
a galement la possibilit de visionner len-
semble des documents quil suit pour voir
lactivit de ces documents remonte sur le
mur dactivits ainsi quune suggestion de
documents qui seraient intressants suivre,
en fonction de ses collgues, de ses exper-
tises, de ses centres dintrts ou de ses acti-
vits sur le Rseau Social dEntreprise.
> Sites
De la mme manire que longlet SkyDrive
permettait de recenser lensemble des docu-
ments suivis, longlet Sites offre galement
la mme possibilit de lister lensemble des
sites que lutilisateur suit afin que les activi-
ts de ces derniers remontent sur son mur
dactivits [Fig.4].
On retrouve galement un module de sug-
gestion de sites suivre, qui se base, selon
ses activits, sur le Rseau Social dEntrepri-
se, de ses collgues, de ses expertises ou
de ses centres dintrts.
Enfin, une des nouveauts attendues par les
utilisateurs concerne la possibilit pour cha-
cun de se crer des sites dquipe, trs rapi-
dement, grce au bouton +New Site. Le
processus de cration de sites dquipe
devient donc plus facile et plus simplifi aux
utilisateurs, tout en allgeant la charge de
travail des Community Managers ou des
Administrateurs qui nauront plus se pr-
occuper des processus de cration. Nan-
moins, il est noter que cette fonctionnalit
ne serait possible que si loption dautocra-
tion de sites est active dans lAdministra-
tion Centrale de la ferme SharePoint.
Nous allons maintenant dtailler les deux
principaux types de sites que lon rencontre-
ra trs souvent sur le Rseau Social dEntre-
pri se : l es communauts et l es si tes
d qui pe. Le si te de type communaut
sadresse plutt aux utilisateurs qui dsirent
PROgrammez ! < 26 > MARS 2013
i
outils
Fig.3
Fig.4
22-28-2 19/02/13 22:53 Page 26
groupe Everyone comme membre
Ce dernier a galement la possibilit dacti-
ver lauto-approbation lorsquun visiteur
souhaite devenir membre de la commu-
naut. Ce processus permet au Communi-
ty Manager de filtrer les arrives des
membres et de naccepter que sur profil
Enfin, dans le cas o la communaut est
ouverte et sans restriction de lecture ou
dcriture (comprendre que le visiteur a les
droits de contribution), ce dernier deviendra
automatiquement membre de la commua-
nut ds la publication de son premier post
Qui dit communaut dit membres. Une
liste des membres de la communaut est
donc affiche pour permettre de voir rapi-
dement tous les collaborateurs qui lont
rejointe. Pour chaque membre, un mini-
tableau dactivits (nombre de questions
poses et de rponses donnes) est affi-
ch ainsi que leur date dadhsion, sans
oublier leur badge obtenu ou leur nombre
de points. Qui plus est, le membre peut
quitter tout moment sa communaut sil
le dsire sans aucune action de la part du
Community Manager
Les sujets de discussion peuvent tre clas-
ss selon les catgories voulues, sorte de
thme crer pour permettre une meilleu-
re visibilit des thmes abords dans la
communaut
Le Community Manager peut pingler un
sujet de discussion sil considre que ce
dernier est utile ou important la commu-
naut pour que les membres puissent le
voir trs rapidement, sans plucher tous
les autres sujets
De la mme manire que Yahoo Answers,
le CM (pour Community Manager) ou lau-
teur de la question peut galement dsi-
gner la meilleure rponse possible pour
lafficher directement sous la question, et
permettre ainsi aux membres de la voir
directement, sans parcourir toutes les
rponses du fil de discussion. Autre indica-
teur possible, si la communaut estime
quune rponse est la meilleure, elle peut
aussi laimer. Ainsi chacun pourra voir la
rponse avec le plus de like et donc
comprendre que la communaut approuve
cette rponse, sans pour autant quelle
soit valide par le CM.
Lintroduction de la ludification (traduction
franaise de gamification) au sein du
Rseau Social dEntreprise en permettant
chaque membre de gagner des points au
fur mesure de sa contribution (que ce
soit en posant une question, en donnant
des rponses ou l orsqu une de ses
rponses est dsigne comme tant la
meilleure ) entrane plus de contribution
et d espri t compti ti f de l a part des
employs. Plus le membre gagne des
points, plus il est reconnu par la commu-
naut comme tant une personne identi-
fi e comme expert dans un domai ne
particulier.
De la mme manire, il est possible au CM
dattribuer des badges certains membres
pour les mettre en avant, comme par
exemple, un badge Expert attribu un
membre qui est considr comme expert
dans un domaine particulier, un badge
Modo pour les modrateurs, etc.
Le forum de discussion sous SharePoint
2013 retrouve donc peu prs les grandes
fonctionnalits que lon retrouve sur un
forum grand public, mme sil en manque,
comme par exemple la possibilit de ver-
rouiller un sujet, qui existe pourtant sur le
micro-blogging ou dinsrer une signature.
Par ailleurs, il existe dsormais un site ser-
vant dannuaire de communauts qui permet
de centraliser toutes les communauts exis-
tantes et aux membres du Rseau Social
dEntreprise de dcouvrir les communauts
les plus populaires ainsi que de rechercher
celles quils dsirent rejoindre ou bien de
PROgrammez ! < 27 > MARS 2013
i
outils
vrifier quaucune autre communaut nexis-
te sur le mme thme avant de faire une
demande de cration.
Il est noter quil est possible dajouter lap-
plication NewsFeed pour le micro-blogging
dans une communaut pour favoriser la
communication informelle ou non entre les
membres et qui remonteront sur le mur de
lutilisateur. En effet, les conversations du
forum ne remontent pas sur le mur dactivi-
ts, on peut juste savoir quune personne a
post une question sur le forum mais on ne
peut pas connatre le contenu du sujet, ni les
rponses qui suivent. Ainsi le forum servira
uniquement de questions/rponses alors
que le micro-blogging servira toute autre
communication et ne polluera pas le forum
de discussions inutiles.
> Team Site
Modle de site particulirement utilis
depuis SharePoint 2003 pour la collabora-
tion, le Team Site ou site dquipe version
2013 senrichit du module de micro-blogging
NewsFeed par dfaut, en plus des listes
classiques comme le calendrier, les tches,
l es bi bl i othques de documents ou l es
annonces, ce qui permet damliorer encore
plus la collaboration existante et de favoriser
la communication [Fig.6].
Toutes les conversations de ce mur local
remonteront sur le mur personnel de lutili-
sateur, ce qui lui permettra dtre toujours
au courant des conversations du site dqui-
pe sans pour autant y accder.
Autre nouveaut qui sera trs utile pour la
conduite de changement, SharePoint 2013
intgre dsormais un guide de dmarrage
permettant daccompagner interactivement
le nouvel utilisateur pour quil puisse matri-
ser toutes les fonctionnalits du site.
Concernant les autres listes (ou nouvelle-
ment appel Apps), on constate que peu de
nouveauts sociales ont t intgres sauf
bien sr les documents que lon peut suivre
ou aimer. On peut cependant noter une am-
lioration des remontes des tches affec-
tes lutilisateur dans un site dquipe.
En effet, toutes ses tches apparatront sur
son profil et plus particulirement dans My
Tasks qui regroupera toutes ses tches
af f ectes de tous l es types de si tes
membres. Enfi n, de l a mme mani re
quune communaut peut intgrer des Apps
(les listes) pour collaborer, le site dquipe
peut galement activer le module commu-
nautaire afin dintgrer les fonctionnalits
propres aux communauts, savoir le
Fig.5
22-28-2 19/02/13 22:54 Page 27
Social dEntreprise. Par ailleurs, un systme
de push a t instaur afin denvoyer des
notifications dvnements (comme par
exemple lajout dun lment dans une liste
ou sa modification par un utilisateur) sous
forme de tuiles si on prend le cas dun Win-
dows Phone.
> Conclusion
En conclusion, SharePoint 2013 reprend les
fonctionnalits proposes sous SharePoint
2010 et les enrichit pour enfin proposer un
Rseau Social dEntreprise, avec une exp-
rience utilisateur proche de ce quon trouve
dans le grand public. Outre la possibilit de
visualiser les activits de ses collgues et dy
interagir, cette nouvelle version amliore la
collaboration en entreprise grce la sug-
gestion de documents utiles, la cration
simplifie de sites dquipe, ou bien sr, la
gestion de la connaissance interne avec la
slection des meilleures rponses.
On peut donc clairement dire que, Share-
Point 2013 a enfin abord le virage du social
et la clairement russi, mme si on peut
toujours regretter que Microsoft ait encore
rat celui de la mobilit.
# Christopher Tran
Consultant fonctionnel SharePoint MCNEXT
www.mcnext.com
PROgrammez ! < 28 > MARS 2013
i
outils
forum de discussion, la modration, la liste
des membres et le systme de valorisation
des contributeurs [Fig.7]. Fonctionnellement,
le profil utilisateur a peu volu. Lergonomie
et la navigation ont cependant t amlio-
res pour permettre de le rendre plus clair
et convivial par rapport au profil sous Share-
Point2010. On remarque donc une meilleu-
re prsentation du profil, plus espac et plus
lisible, divis en trois colonnes :
A gauche, une photo de lutilisateur plus
grande et un menu de navigation vertical :
la photo restera toujours prsente du
moment quon reste sur le profil.
Une partie centrale qui affiche la descrip-
tion de lutilisateur et ses expertises (sur
lesquelles chaque visiteur peut cliquer pour
poser une question concernant lexpertise
concerne), pui s ses acti vi ts sur l e
Rseau Social dEntreprise
A droite, des informations supplmen-
taires personnelles ou professionnelles,
ainsi quun organigramme si on visite le
profil dun collgue, semblable celui de
SharePoint 2010.
Le profil utilisateur est donc mieux organis
et plus lisible par rapport sa version 2010,
plus proche des fiches profil des rseaux
sociaux grand public. Comme expliqu dans
la partie Site dquipe, lutilisateur peut
dsormais voir toutes les tches qui lui sont
assignes, et ce, depuis tous les sites
dquipe et communauts desquels il est
membre. Outre la liste des tches, classes
par sites dquipes et communauts, une
frise de temps est galement disponible
pour permettre une visualisation temporel-
le et laider dfinir ses priorits.
> Compatibilit Mobile
La possibilit de consulter son intranet est
devenue au cours de ces derniers mois une
fonctionnalit essentielle de tout produit ou
logiciel informatique tant la mobilit est deve-
nue commune et vitale dans le monde de
lentreprise. Cependant, SharePoint 2013
ne rpond quen partie ce besoin en
offrant une version mobile du Rseau Social
dEntreprise toujours aussi archaque, qui
consiste afficher des listes sans mise en
page De plus, la version mobile ne per-
met pas dafficher des sites de publication,
uniquement des sites dquipe, ce qui handi-
cape trs fortement les sites internet bass
sous SharePoint.
Il est cependant possible dactiver la vue PC
pour profiter pleinement de toutes les fonc-
tionnalits et mises en page du Rseau
Fig.6
Fig.7
22-28-2 19/02/13 22:54 Page 28
Abonnement intgral 2 ans au magazine
+ Archives Internet et PDF 88 *
n Abonnement 1 an au magazine : 49 * (au lieu de 65,45 , prix au numro )
n Abonnement Intgral : 1 an au magazine + archives Internet et PDF : 59 * (au lieu de 65,45 , prix au numro )
n Abonnement 2 ans au magazine : 78 * (au lieu de 130,90 , prix au numro )
n Abonnement intgral 2 ans au magazine + archives Internet et PDF : 88 *
n Abonnement Etudiant : 1 an au magazine : 39 * (joindre copie carte tudiant)
n Abonnement Etudiant : 1 an au magazine + archives Internet : 49 * (joindre copie carte tudiant) (*) Tarifs France mtropolitaine
P
R
O
G

1
6
1
O
f
f
r
e

l
i
m
i
t

e
,

v
a
l
a
b
l
e

j
u
s
q
u

a
u

3
1

m
a
r
s

2
0
1
3
n M. n Mme n Mlle Entreprise : I___I___I___I___I___I___I___I___I Fonction : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
Prnom : I___I___I___I___I___I___I___I___I___I___I___I___I___I Nom :I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
Adresse : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
Code postal : I___I___I___I___I___I Ville : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
Tl : I___I___I___I___I___I___I___I___I___I___I___I___I (Attention, e-mail indispensable pour les archives sur internet)
E-mail : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I @ I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
n Je joins mon rglement par chque lordre de Programmez ! n Je souhaite rgler rception de facture
Abonnement 1 an au magazine
49 * (au lieu de 65,45 , prix au numro)
1
2
3
4
Abonnement Etudiant 1 an au magazine 39 *
+ Archives Internet et PDF 49 *
5
Abonnement Intgral : 1 an au magazine
+ Archives Internet et PDF 59 *
Abonnement 2 ans au magazine
78 * (au lieu de 130,90 , prix au numro)
Oui, je mabonne
retourner avec votre rglement
Programmez, 17 route des Boulangers 78926 Yvelines cedex 9
Toutes les offres en ligne : www.programmez.com
Code, gestion de projets, dveloppement web, mobilit, Programmez ! est la fois votre outil pratique,
des articles de code par les meilleurs experts et votre veille technologique.
Abonnez-vous partir de 3,80 seulement par mois
OFFREZ-VOUS
UN ABONNEMENT jusqu
-50%
(*) Tarifs France mtropolitaine

iStockphoto/Jam
ie Farrant
Windows, iOS, Android, Open Source, Java, web : le choix des dveloppeurs, les outils, les bons conseils
Ant
Intel HTML5 Porter Tool,
APISpark, Windows 8 MVVM
SharePoint 2013
TFS TeamBuild
Heroku, Lua
Au cur des outils et des technologies
100 % dveloppeur
L G HB C B Z ! D G O U O G V G L O P P G HG D T
www.programmez.com
Printed in EU - Imprim en UE - BELGIQUE 6,45 SUISSE 12 FS - LUXEMBOURG 6,45 DOM Surf 6,90 Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
&:HIKONB=^UZ^Z]:?a@b@g@l@k"
M 04319 - 161 - F: 5,95 E
Devenez
dveloppeur
de jeux vido !
Carrire
Firefox OS
Lautre systme pour
smartphone !
Les nouveauts de
Devoxx France 2013
Communaut Java
Mensuel n161 - mars 2013
istockphoto/Jamie Farrant
La b
o te

o utils du
dvel o
ppeur
29 aboV9-161_23 abo 158 21/02/13 11:46 Page29
P
our bien dvelopper, il faut avoir les
bons outils au bon moment pour le
bon projet. Cela peut paratre une
vidence mais cest une ralit. Un envi-
ronnement de dveloppement peut faire
gagner ou perdre beaucoup de temps.
Le dveloppement implique lutilisation
doutils de plus en plus nombreux dont la
spcialisation augmente.
Si lIDE sera lenvironnement de rfren-
ce, on doit lui adjoindre de multiples
complments pour les tests, les bonnes
pratiques, la scurit, le debug, voire,
pour lintgration continue, la gestion
des builds, etc. La notion doutil est trs
large, cela va de lIDE ultra complet la
bibliothque de composants, aux API.
Un environnement de dveloppement
rsulte de plusieurs facteurs :
- il peut tre impos
- certaines technologies, certains lan-
gages et contextes techniques ne lais-
sent pas beaucoup de choix
- laffinit du dveloppeur avec loutil
- trouver un bon compromis entre leffi-
cacit, la productivit et les contraintes
Comment choisir ? Comment dfinir son
envi ronnement de dvel oppement ?
Quelles bonnes pratiques adopter ?
Des dveloppeurs vous donnent leurs
recettes, leurs conseils.
# Franois Tonic
PROgrammez ! < 30 > MARS 2013
dossier dveloppeur


is
t
o
c
k
p
h
o
t
o
/
J
a
m
ie

F
a
r
r
a
n
t
La b o te
o utils du
dvel o ppeur
30-45 20/02/13 09:59 Page 30
PROgrammez ! < 31 > MARS 2013
dossier dveloppeur
P
etite prcision avant de commencer,
je travaille sur Mac, pour les non Mac-
addict, je voulais vous trouver des
quivalents mais ne les ayant pas tests, ce
ne serait pas trs utile...
> Lditeur de texte
Le nerf nvralgique de la guerre ! Cest sur
lui que vous allez passer 85% de votre
temps, il vous en faut donc un qui vous plaise
et qui soit utile ! Au placard le bloc-notes de
base et bienvenue lditeur intelligent ! Il en
existe un certain nombre, je vais vous pr-
senter les 3 avec lesquels jai eu loccasion
de travailler.
> Coda :
http://panic.com/coda/
Mon premier diteur sous Mac. Design
sympa, fonctionnalits intressantes, il sera
utile pour vous connecter directement aux
FTP et modifier les fichiers en ligne. Un sys-
tme de gestion de projet vous permet de
retrouver votre dernier site rapidement. Il a
une coloration syntaxique intressante et
vous permet de le configurer encore plus via
un systme de plugin tlchargeable.
En revanche, jai trouv quil tait un petit
peu trop usine gaz , jai donc chang
pour passer TextMate.
> TextMate :
http://macromates.com/
Beaucoup plus light, beaucoup plus sobre, il
conviendra tous ceux qui aiment le minima-
liste. Il a pourtant les fonctionnalits essen-
tielles : la gestion des projets, la coloration
syntaxique en fonction des langages et lau-
to-compltion (mme si elle reste encore
amliorer).
Autre point fort, il possde une ligne de com-
mande qui permet douvrir nimporte quel
fichier text avec TextMate au lieu de VI ! Et
a, cest tout simplement gnial !
I l en exi ste encore beaucoup d autres
Loutillage dun dveloppeur iOS - Windows
Je vous prsente aujourdhui les diffrents outils que jutilise lors de mes
dveloppements web. Je ne vais pas vous parler denvironnements de travail pour le
dveloppement iOS et Windows 8 pour la simple raison quon est un peu forc dans le
choix de loutil, savoir Xcode pour iOS et Visual Studio pour Windows 8. Je vous
prsente en revanche une palette doutils, que lon aime ou que lon naime pas, pour
dvelopper dans ce monde quest internet.
comme Sublime Text, Smultron ou encore
Espresso. Chacun son point fort et son
point faible. Un seul conseil : testez-les, tra-
vaillez avec quelque temps, et vous trouverez
vite celui quil vous faut.
> Le logiciel FTP
Outre Filezilla et son design prhistorique, jai
test Transmit (http://panic.com/transmit/), de
Panic Inc., la mme socit qui a dvelopp
Coda, et je peux dire que je ne le lche plus.
Il permet de grer ses favoris, de modifier
les fichiers en ligne, de grer les droits sur
les dossiers, bref, toutes les fonctionnalits
classiques dun FTP avec un petit plus : on
peut monter virtuellement un disque rseau
li un ftp et le grer comme un dossier
local. Mis part cela, le design est trs
sympa.
> Loutil de gestion de base
de donnes
Vous grez encore vos bases de donnes via
PhpMyAdmin ? Stop ! Fermez immdiate-
ment cet onglet de votre navigateur et allez
rcuprer Sequel Pro (http://www.sequelpro.com/),
qui est gratuit en plus, pour pouvoir vous
connecter vos DB. Avec une interface
sympa, vous aller pouvoir vous connecter
vos bases normalement, ou via Socket ou
encore SSH. Plus besoin de demander lad-
mi n sys d i nstal l er PhpMyAdmi n ou de
perdre votre temps avec la console... Vous
allez pouvoir grer vos favoris, crer des
nouvelles bases, tables et autres, grer les
utilisateurs, excuter des requtes, grer
les liaisons... bref, une petite rvolution dans
la gestion de bases de donnes.
Pour les utilisateurs Windows, je nai pu
trouver d qui val ent aussi pouss que
Sequel, mais ne dsesprez pas, a viendra
un jour !
En complment de Sequel, je vous propose
gal ement l outi l MySQL Workbench
(http://www.mysql.fr/products/workbench/), utile
pour grer les structures de vos bases et
avoir un mapping de vos tables.
> Loutil de versionning
Travaillant de plus en plus sur des projets
plusieurs dveloppeurs, nous utilisons Git en
guise de dpt de travail. Il me permet gale-
ment davoir une sauvegarde de mes projets
lorsque je travaille seul. En guise doutil, je ne
me sers pas de la ligne de commande, ni
mme du logiciel Github mais de Tower
(http://www.git-tower.com/). Il est un peu lourd,
mais va vous tre utile pour grer vos
dpts Git (Github et autres). Je ne vais pas
en parler davantage, car il reste un outil Git
classique.
Pour le SVN, je me suis pench sur Versions
(http://versionsapp.com/) qui est un quivalent
Tower mais pour SVN.
> Autres outils
Voici quelques outils qui sont en rapport plus
ou moins direct avec le dveloppement :
1Password : trousseau de mot de passe
dont le fichier principal peut tre partag
avec dautres collaborateurs via DropBox
Adium : clients de messagerie multi canal
Sparrow : client mail un peu lourd mais
utile
Dropbox : srieusement, jai besoin de
vous dire ce que cest ?!
Voil donc une liste non exhaustive des diff-
rents outils avec lesquels je travaille. Il y en a
dautres, bien entendu, plus ou moins int-
ressants. Si je peux vous donner un conseil,
fouinez, fouillez, cherchez sur le web les der-
niers logiciels la mode, discutez avec
dautres devs qui pourront galement vous
en apporter des nouveaux...
# Laurent Menu
Dveloppeur passionn
de "l'internet"
http://www.lmenu.fr
30-45 20/02/13 09:59 Page 31
PROgrammez ! < 32 > MARS 2013
dossier dveloppeur
> L'environnement
de dveloppement
Ce nest pas un secret, je suis un dvelop-
peur .NET. Je dveloppe essentiellement des
applications destination de deux plate-
formes, Windows Phone et Windows 8. Jai
aussi parfois travailler sur des applications
Silverlight, WPF ou mme ASP.NET MVC.
Mon environnement de dveloppement est
constitu dun pc portable sous Windows 8
sur lequel jai install Visual Studio 2012 et
le SDK Windows Phone 8. Afin de pouvoir
tester correctement mes dveloppements
jai ma disposition un tlphone Windows
Phone 7, un autre sous Windows Phone 8
et enfin une tablette Surface.
Visual Studio supporte lajout de greffons
dont certains sont tellement utiles quils en
deviennent indispensables. Parmi ces exten-
si ons i ndi spen-
sables se trouve le
gesti onnai re de
paquet NuGet. I l
permet daccder
des dpts et
d i nstal l er des
bibliothques dans
votre projet, auto-
mati quement au
bon endroit et avec
toutes leurs dpen-
dances. Certains
proj ets f ont une
utilisation encore
Bote outils Windows :
les bonnes pratiques dun dveloppeur
Tout bon bricoleur se doit davoir une bote outils bien fournie. Et quoi de plus
bricoleur quun dveloppeur ? La seule diffrence cest quon remplace les clefs Allen
par quelque chose de quand mme bien plus fun.
plus pousse de NuGet en proposant des
lignes de commandes permettant de gn-
rer du code. Viennent ensuite une srie dex-
tensions que jutilise pour le dveloppement
plutt orient web : Microsoft Web Develo-
per Tools, Visual Studio Extensions for Win-
dows Library for Javascript, Web Essentials
2012 et enfin la petite dernire, TypeScript
For Microsoft Visual Studio 2012. Ces
extensions me permettent dajouter le sup-
port de LESS, de TypeScript, damliorer le
support de WinJS, de lauto-compltion et
pleins dautres petites choses qui amliorent
le quotidien du dveloppeur et surtout sa
productivit.
> Les bibliothques
Outre les greffons il y a aussi un certain
nombre de bi bl i othques que j aj oute
presque chaque fois. La premire est
MvvmLight. Elle apporte un support simple
et robuste de Mvvm, du Messenging et sur-
tout le petit bonus, un moteur dinversion de
contrle (IOC) simple. Ce dernier fait toute la
diffrence dans une application Windows
Phone ou Windows 8 o on cherche en
gnral faire lger. Plus spcifique Win-
dows Phone on va retrouver le Silverlight-
Toolkit ainsi que le Coding4Fun Toolkit. Le
premier apporte des contrles graphiques
plus classiques ou mme la gestion de tests
unitaires alors que le second apporte des
bonus ergonomiques et des contrles un
peu plus fun vos applications ou des outils
de surveillance de lutilisation mmoire etc.
Jadore vraiment le Coding4Fun Toolkit et je
pense que vous aimerez aussi ses Toast-
Prompt, ses popups non bloquantes etc
Jajoute aussi de manire quasi systmatique
YLAD (Your Last About Dialog) et ReviewBug-
ger. YLAD est magique, elle gnre pour
vous cette page A propos quon oublie
souvent de faire avant de publier lapplication
sur le Store. En plus, elle supporte la localisa-
tion et permet donc de traduire cette page
dans toutes les langues dclares par lappli-
cation. ReviewBugger fait partie des choses
simples qui changent tout, il permet de
compter le nombre de fois o a t lance
lapplication et de demander lutilisateur de
noter lapplication au bout de n fois.
Voici pour la liste des bibliothques que jutili-
se le plus, il va sans dire que ces dernires
sont toutes installables via NuGet.
> Contrle de code sources
Puisquil faut bien entendu archiver ses
sources jutilise Team Foundation Server
(TFS). Dans le cadre des projets dentreprise
cest un TFS 2010 mais pour mes projets
personnels, mon choix sest port sur TFS
Online. Les deux sintgrent parfaitement
dans Visual Studio et cest ce qui a arrt
mon choix. Bien que ntant pas la personne
ReviewBugger
PortableLibrary
PerformanceAnalysis
30-45 20/02/13 09:59 Page 32
PROgrammez ! < 33 > MARS 2013
dossier dveloppeur
permettre de se sauver de quelques bugs
difficilement dtectables.
La troisime est de toujours faire en sorte
de rafrachir linterface le plus rapidement
possible. Par exemple, pour une application
de news on va dabord chercher les donnes
en cache et les afficher ; pendant ce temps-
l on peut tlcharger les mises jour et
ds quune srie darticles est charge,
rafrachir linterface. Bref, tout ce qui am-
liore la sensation de vitesse et de fluidit que
va ressenti r l uti l i sateur est bonne
prendre. Javais dailleurs rdig un article
dans un prcdent numro de Programmez
qui montrait comment amliorer le temps de
chargement dune application Windows 8 et
qui expliquait toute cette problmatique en
dtai l . Le derni er poi nt, et non des
moindres, consiste prendre rgulirement
des mesures sur la performance de lappli-
cation. Visual Studio fournit un certain
nombre doutils pour cela. Certains, comme
le Performance Analysis sont plutt orients
uti l i sati on CPU et nergi e, tandi s que
dautres, comme le Memory Analysis, se
chargent de di agnosti quer l uti l i sati on
mmoire, voir quand elle augmente, si elle
diminue et donc de trouver les fuites ou
arbres visuels trop lourds pour ce qui est
requis par lapplication. Plus tt et plus rgu-
lirement ces analyses sont faites, plus
faciles sont les corrections. Cest le mme
principe quavec les tests unitaires, plus le
temps avance et plus on accumule de la
dette technique.
Et cest ainsi que se finit le tour de ma bote
outi l s. Pui ssi ez- vous y avoi r trouv
quelques matriels utiles.
# John Thiriet
Consultant/Formateur MCNEXT
http://www.mcnext.com
que nayant pas t ais, ma forc avoir
un code trs simple et maintenable.
Jorganise aussi gnralement mes applica-
tions en plusieurs projets. Le projet principal
contient les vues et les view models. Le
modle est contenu dans un autre projet de
type Portable Library, de faon pouvoir
tre utilis dans une autre application ou
bien mme ct serveur. Un autre contient
les services de lapplication (accs aux don-
nes, appels rseaux, persistance) et un
dernier contient les interfaces de ces ser-
vices. Etant un fervent dfenseur des prin-
cipes DRY, KISS et SOLID jutilise presque
systmatiquement de linversion de contrle
et de linjection de dpendances sur ces ser-
vices. Cela me permet de tester le compor-
tement des view models qui utilisent ces
services en injectant des bouchons.
> Quelques conseils
Au fil du temps jai acquis certains rflexes
que je considre comme tant des bonnes
pratiques mais qui nengagent que moi.
La premire dentre elle est de toujours par-
tir du principe quune application est multi-
lingue et donc doit tre dveloppe comme
telle. Tous les textes doivent tre stocks
dans des fichiers ressources et aucun texte
en dur dans l e code ou dans l e
XAML/HTML, ni aucun formatage de date
ou de chiffres en dur ne doit tre prsent.
Cest quelque chose dassez contraignant au
dbut mais qui rend de grands services
assez rapidement.
La seconde est de loguer toutes les erreurs
avec, si possible, un petit texte explicatif ou
une excepti on personnal i se pour l es
erreurs auxquelles on sattend le plus.
Quand bien mme ces erreurs ne seraient
pas stockes dans un fichier, rien que le fait
de les afficher dans la console derreur peut
qui les a crs je profite des Builds automati-
ss et de lintgration continue sur certains
projets. Cest vraiment trs pratique et per-
met de remonter les erreurs trs rapide-
ment pourvu que les tests unitaires soient
faits. Et justement, puisquon parle de tests
unitaires, jutilise les tests intgrs dans
Visual Studio cest--dire les MsTests. De
manire gnrale, en couplant tests uni-
taires, intgration continue et builds automa-
tiss on gagne beaucoup en qualit et
productivit. TFS offre de plus une gestion
de la mthodologie agile en natif, ce qui est
un plus lorsque les projets le ncessitent.
> Organisation du code
Afin damliorer la testabilit, lisolation et le
partage du code jutilise aussi beaucoup de
Portable Library. Les projets de type Por-
table Library sont intgrs dans Visual Stu-
di o 2012 et permettent de crer des
bibliothques que lon peut rfrencer dans
diffrents types de projets. A la diffrence
dune bibliothque dont le code serait com-
patible avec plusieurs plateformes mais qui
serait compil pour chaque plateforme, les
Portable Library ne ncessitent pas dtre
compils pour une plateforme spcifique. On
configure la Portable Library pour cibler les
plateformes intressantes pour lapplication
et ensuite, seules les API communes aux pla-
teformes slectionnes deviennent dispo-
ni bl es. Par exempl e, si on sl ecti onne
Windows Phone 8 et Windows 8 on aura
accs aux Task, mais si on slectionne Win-
dows Phone 7 et Windows 8 alors on ny
aura pas accs. Il est donc important de
bien choisir ses plateformes.
A titre dexemple, jai dvelopp mon applica-
tion personnelle en utilisant une Portable
Library qui cible Windows Phone 7, WPF
4.5, Silverlight 5 et Windows 8 ce qui, bien
TFS YLAD
30-45 20/02/13 09:59 Page 33
PROgrammez ! < 34 > MARS 2013
dossier dveloppeur
Le dveloppement iOSau quotidien :
quels outils utiliser ?
Lorsque l'on commence un dveloppement, la premire question que l'on se pose est :
"Quel environnement de dveloppement vais-je utiliser ?". Les habitus des
langages populaires tels que Java ou C++ auront l'habitude de devoir choisir parmi
une multitude d'EDI. Les puristes prfreront srement l'utilisation de 'Vi'. Cependant,
Apple a choisi de proposer directement le sien, XCode. Celui-ci est spcialement
adapt au dveloppement pour les plateformes Apple et remplit parfaitement son rle.
> L'environnement de dveloppement : XCode
XCode fournit un ensemble d'outils :
Interface Builder - gnrateur d'interfaces graphiques pour iOS et OSX
Instruments - outil d'analyse des performances
Apple LLVM - compilateur C/Objective-C
iOS Simulator - simulateur d'iOS [Fig.1].
De plus, XCode 4 a ajout le versionning via l'utilisation de Git en
natif, de quoi faciliter le travail en quipe. A noter que si lon souhaite
dvelopper des applications pour lApp Store dApple, il est forte-
ment recommand de dvelopper son application avec XCode.
Celui-ci intgre directement les outils pour pouvoir envoyer son
application sur le store, condition bien sr que vous ayez sous-
crit au programme de dveloppeur Apple ( 79)
On aime
I
On aime moins
Interface Builder Peu de personnalisation de linterface
Intgration de Git native
Intgration dans OS X
> La documentation Apple
Tout dveloppeur a dj t confront un problme majeur : une
documentation bien faite. Apple a normment mis sur cet aspect.
A linstar de MSDN de Microsoft, la documentation d'Apple sur le
dveloppement en Objective-C est trs complte, aussi bien en infor-
mations quen exemples. Il en est de mme pour l'ensemble de ses
frameworks. Voici la documentation iOS en ligne :
https://developer.apple.com/library/ios/navigation/
Celle-ci est organise en plusieurs domaines :
Type de ressource (Article, Tutoriel, Exemple de code, etc.)
Sujet (XCode, Scurit, Audio, Data, etc.)
Framework (Cocoa Touch, Core Services, etc.)
De plus, un formulaire de recherche permet de trouver facilement
une documentation sur un sujet, ou encore le document de rfren-
ce d'une classe native de Cocoa.
On aime
I
On aime moins
Lintgration de la documentation Limpossibilit pour les utilisateurs
dans XCode de contribuer la documentation
La recherche avance
Les exemples fournis par Apple
> Les frameworks utiles connatre
Ni le langage Objective-C, ni le framework CocoaTouch ne sont com-
pliqus utiliser. Cependant, comme dans bien des langages, il exis-
te des bibliothques (ou frameworks) qui permettent de simplifier
leur utilisation. Voici une liste trs utile. Bien sr elle nest pas
exhaustive car de nombreuses bibliothques de qualit existent.
NimbusKit
http://nimbuskit.info/
Ce framework est une rcriture d'un ancien framework : Three20.
Les dveloppeurs ont choisi de rcrire totalement Three20 car
celui-ci n'tait pas document correctement. Cela a conduit un
nouveau framework, NimbusKit, avec pour objectif : Toute fonction-
nalit non documente correctement ne sera pas publie .
NimbusKit propose une multitude de composants permettant de
combler certaines lacunes du framework d'Apple : une simplification
de certains composants natifs (tels que les labels, les tables, etc.),
l'implmentation de composants (une grille, les badges, etc.) et des
outils permettant de faciliter le dveloppement quotidien tels qu'un
outil de dbogage visuellement intgr une application.
On aime
I
On aime moins
La richesse des composants Rien
La documentation associe
SSToolkit
http://sstoolk.it/
Ce framework est dans le mme esprit que NimbusKit : bien docu-
ment, il met disposition des composants facilitant le quotidien.
SSToolkit n'est pas meilleur que NimbusKit, ils proposent des
concepts similaires et fournissent chacun leurs propres compo-
sants. Le choix entre les deux sera tabli selon les fonctionnalits
que l'un ou l'autre propose.
On aime
I
On aime moins
La richesse des composants Rien
La documentation associe
Fig.1
Aperu XCode
30-45 20/02/13 09:59 Page 34
PROgrammez ! < 35 > MARS 2013
dossier dveloppeur
JSONKit
https://github.com/johnezang/JSONKit
JSONKit permet de simplifier la manipulation du format JSON
(Fichier, chane de caractres, etc.). Il en existe plusieurs du mme
type (SBJson, TouchJSON, etc.), cependant d'aprs John Engelhart,
le dveloppeur de JSONKit, celui-ci est le plus rapide.
On aime
I
On aime moins
La simplicit dutilisation Rien
La comparaison avec les autres frameworks
BButton, GMGridView, MBProgessHUD, etc.
Encore une fois, il existe une multitude de frameworks avantageux. Ne
pouvant tous les citer, voici une liste de trois composants intressants :
BButton - Bouton mimant le style des bouton de Twitter Bootstrap
(https://github.com/mattlawer/BButton)
GMGridView - Grille de contenu (inexistant avant iOS6)
(https://github.com/gmoledina/GMGridView)
MBProgressHUD - Pop-up de progression personnalisable
(https://github.com/jdg/MBProgressHUD)
> Les frameworks rseau
Apple fournit un ensemble de composants ddis au dveloppement
rseau (NSURLConnection, CFNetwork.framework, etc.), cependant
l'utilisation d'un framework tiers permet de combler quelques
lacunes ou de simplifier une implmentation.
AFNetworking
Ce framework est lun des plus utiliss actuellement par les dvelop-
peurs iOS. Sa simplicit dutilisation et le large soutien quil reoit de la
communaut open source sont des critres de choix essentiels pour
tous les dveloppements ncessitant lutilisation de connexions rseaux.
Parmi ses fonctionnalits, voici celles quil faut absolument retenir :
- Entirement asynchrone et distribu (via lutilisation de NSOpera-
tion et NSOperationQueue)
- Codage/Dcodage automatique de plusieurs formats : JSON,
XML, pList, Image, etc.
- Utilisation des blocks Objective-C
Sites Web : https://github.com/AFNetworking/AFNetworking /
http://afnetworking.com
On aime
I
On aime moins
La documentation du framework Labsence de logger intgr
La programmation par block
SocketRocket
Ce framework permet dimplmenter un client WebSocket depuis
votre application iOS. Totalement conforme la norme RFC6455
(norme du WebSocket), ce framework vous permettra de communi-
quer avec tous vos serveurs WebSocket.
De la mme manire que AFNetworking, ce framework est entire-
ment asynchrone et utilise une file dattente afin de ne pas tre blo-
quant dans nos applications. Cependant, nayant pas la mme
fonctionnalit quAFNetworking, ils peuvent tre totalement compl-
mentaires. Site Web : https://github.com/square/SocketRocket
On aime
I
On aime moins
Le respect de la norme RFC6455 Labsence dimplmentation serveur
La simplicit dutilisation
RestKit
Ce framework, bas sur AFNetworking, permet de mapper directement
les retours dun web service lobjet relationnel dApple (bas gnrale-
ment sur lutilisation dune base de donnes) : CoreData. RestKit permet
la srialisation / dsrialisation de requtes au format JSON et YAJL.
Sites Web : https://github.com/RestKit/RestKit / http://restkit.org
On aime
I
On aime moins
La rutilisation du framework AFNetworking Le peu de documentation
Lintgration avec CoreData
> Les frameworks 2D/3D
Lorsque l'on pense au dveloppement mobile, on pense forcment
un jour au jeu. Ayant pris une place consquente sur ces plate-
formes, voici quelques frameworks qui vous permettront d'aborder
le sujet plus facilement.
Cocos2D
Le plus connu, et srement le plus utilis est sans aucun doute
Cocos2D. Il propose une API simple et complte permettant de dve-
lopper un jeu en 2D de A Z. Une rcriture de Cocos2D, appele
Cocos2D-X, permet le dveloppement multiplateforme en s'appuyant
sur le langage C++ (ou JavaScript). La liste des plateformes suppor-
tes s'tend rgulirement : Android, iOS, Windows Phone, etc.
Site Web Cocos2D pour iPhone : http://www.cocos2d-iphone.org
Site Web Cocos2D-X : http://www.cocos2d-x.org/
On aime
I
On aime moins
Le portage vers un environnement Labsence de dveloppement 3D
multiplateforme
La simplicit dutilisation
CoronaSDK
CoronaSDK est un framework permettant le dveloppement d'appli-
cations multiplateformes unifies sous un seul et mme langage :
Lua. Bien que CoronaSDK ne soit pas uniquement ddi au dvelop-
pement 2D/3D, il est souvent utilis pour a. Et pour cause, les
dveloppeurs ont totalement rcrit leur propre moteur de rendu
OpenGL-ES, entirement utilisable avec le langage Lua.
Site Web : http://www.coronalabs.com/products/corona-sdk/
On aime
I
On aime moins
Laspect multiplateforme Lutilisation dun langage de script
La rcriture du moteur peu connu (on aurait prfr du JavaScript)
de rendu OpenGL-ES
Unity3D
De plus en plus utilis pour les jeux AAA, Unity3D est le framework
3D utiliser pour un dveloppement multiplateforme ultra-complet.
Unity3D fournit un environnement de dveloppement spcifique,
compos de MonoDevelop et d'un environnement de conception 3D
simple d'utilisation. Il permet le dveloppement dans 3 langages dif-
frents : C# (Mono), JavaScript et Boo.
Il est toutefois ncessaire d'avoir une licence pour pouvoir dvelop-
per des jeux sur mobile et les publier sur les stores.
noter : son aspect multiplateforme dpasse de loin celui de Coro-
naSDK ou de Cocos2D-X. Unity permet le dveloppement pour iOS,
Android, Windows, PS3, Xbox360, Wii U et Flash Media Player.
Site Web : http://www.unity3d.com
Fig.3
Benchmark Lecture JSONKit Benchmark Ecriture JSONKit
Fig.2
30-45 20/02/13 09:59 Page 35
PROgrammez ! < 36 > MARS 2013
dossier dveloppeur
On aime
I
On aime moins
La diversit des plateformes accessibles Le prix de la licence
(Console, PC, Mac, Web, Mobile)
Lutilisation du C# via Mono
> O trouver d'autres frameworks ?
Le web regorge d'espaces o trouver des frameworks intressants.
Les deux principaux sites web qu'il vous faut connatre pour cela sont :
GitHub - Plateforme de source-control, base sur Git et oriente
rseau social, qui est majoritairement utilise par les dveloppeurs
pour mettre en ligne leurs frameworks.
CocoaControls - Bibliothque de frameworks ddie Cocoa. Elle
est principalement contribue par les dveloppeurs eux-mmes,
leur permettant ainsi de donner plus de visibilit leurs travaux
(http://www.cocoacontrols.com)
> Le dbogage au quotidien
Toute personne ayant dj dvelopp une application a t confron-
te une phase de dbogage. Certains langages, tels que Java, per-
mettent de dboguer trs facilement. Cela est principalement d au
fait que le compilateur Java transforme le code en byte code, qui lui-
mme est interprt par une machine virtuelle ddie. Ceci permet
d'avoir des traces compltes et facilement interprtables.
Objective-C tant un langage hritant compltement du C, il n'a pas
de mcanisme similaire, ne simplifiant pas toujours le dbogage
d'une application. Nous allons voir quelques outils intressants pour
faciliter cette tape.
> Un BugTracker automatis
Appel aussi Crash Recover, ce genre d'outil, directement intgr
dans le code, permet de rcuprer un maximum d'informations sur
un crash survenu dans l'application lorsque celle-ci est utilise dans
un environnement de production. Plusieurs services permettent la
centralisation sur internet : BugSense, TestFlight, Crittercism, Hoc-
keyApp. Chacun de ces services a ses points forts et ses points
faibles. Le critre de choix dpendra principalement du got du dve-
loppeur et du prix que celui-ci est prt mettre.
Si un seul devait tre retenu, ce serait TestFlight qui, en plus de grer
les crashs, permet la livraison de version bta. Il n'est cependant
compatible qu'avec iOS.
> Un logger complmentaire
Apple fournit un outil permettant d'afficher des logs lors d'une utilisa-
tion en mode debug. Il est parfois intressant de pouvoir logger une
application lorsque celle-ci est publie en release, notamment dans
les phases de recette o il est compliqu de faire l'ensemble des
tests avec un client. Voici une liste non exhaustive permettant cela :
TestFlight - fournit un logger distant en plus d'un analyseur de crash
LumberJack - rcriture d'une API de log plus flexible, simple et puissante
La plupart des socits redveloppent leurs propres mthodes de
log bases sur la mthode fournie par Apple (NSLog) sans savoir
qu'il existe des frameworks plus performants pour cela.
> Quelques outils intressants
Apple fournit un outil avec XCode, principalement utilisable pour ana-
lyser les performances d'une application, appel Instruments .
Celui-ci peut aussi tre utilisable pour obtenir plus d'informations sur
l'application lorsque cette dernire subit un crash (analyse des
threads, dump mmoire, etc.). La toile permet aussi de trouver des
petites merveilles. C'est par exemple le cas de DCIntrospect
(https://github.com/domesticcatsoftware/DCIntrospect) qui permet d'avoir
un dbogage visuel des composants graphiques [Fig.4].
> Un gestionnaire de dpendance : CocoaPods
Certains dentre vous auront dj utilis ce quon appelle des ges-
tionnaires de dpendances . En voici certains :
Maven pour Java
NPM pour NodeJS
Aptitude pour GNU/Linux Ubuntu
Gems pour Ruby
NuGET pour .Net
Depuis Aot 2011, date de la cration du dpt sur GitHub, il existe
un projet open source ddi la mise en place dun gestionnaire de
dpendances adapt au langage Objective-C : CocoaPods.
CocoaPods a deux objectifs principaux :
Rendre la gestion des Frameworks plus simple sur XCode
Faciliter la dcouverte et encourager la maintenabilit des frame-
works en fournissant un cosystme adapt.
CocoaPods permet donc tous les dveloppeurs de mettre en ligne,
et de distribuer facilement, lensemble des projets quils font. Pour
cela, CocoaPods a dfini un ensemble de spcifications, facilement
intgrables un projet sous XCode. Ces spcifications dfinissent un
certain nombre de rgles ainsi que le format dun fichier ncessaire
tout pod (1) : le podfile. Ce fichier contient des informations essen-
tielles sur la nature dun framework : nom, description, version,
auteur, etc., ainsi que la liste des frameworks ncessaires au bon
fonctionnement du pod.
On aime
I
On aime moins
La simplification dintgration des frameworks rien
Laspect contributif accessible tous
Lensemble des outils prsents dans cet article vous permettra
daborder un projet iOS sereinement. Le dveloppement mobile tant
en vogue, certains des frameworks prsents ici peuvent devenir
obsoltes, ou bien encore un framework plus simple, plus flexible ou
plus robuste dtrnera celui le plus utilis ce jour. Il est donc pri-
mordial deffectuer une veille rgulire sur les technologies mobiles
et sur les frameworks existants. Nhsitez donc pas consulter la
toile trs souvent : de nombreux outils apparaissent tous les jours et
de nouveaux frameworks sont dvelopps rgulirement.
(1) : Un pod represente un projet, un framework ou tout autre code source mis
en ligne sur cocoapods
# Vincent Saluzzo
Ingnieur dveloppement Logiciel
Expert en dveloppement iOS
DCIntrospect
Fig.4
30-45 20/02/13 09:59 Page 36
PROgrammez ! < 37 > MARS 2013
dossier dveloppeur
U
n IDE est souvent graphique (notamment avec des designers
dinterface) et interactif . Il est loin le temps o les dvelop-
peurs utilisaient un diteur de texte pour crire le code et un
compilateur pour le transformer en programme excutable. L'dition
de programmes dans un IDE, est souvent assiste (coloration syn-
taxique, compltion automatique, accs aux documentations, inden-
tati on automati que, correcti on d' erreurs, templ ates...). La
compilation passe d'une manire transparente pour le dveloppeur.
Un IDE contient galement un dbogueur, un interprte pour les lan-
gages interprts, souvent un gestionnaire de versions. Il est
noter qu'un IDE peut accepter des modules additionnels (plug-in)
pour tendre ses fonctionnalits initiales. Les plug-ins de tests uni-
taires, loguer des erreurs, la modlisation UML et la gnration
automatique de codes, sont parmi les exemples de plug-ins si l'IDE
n'est pas dot out-of-the-box de ces outils.
Il existe des IDE pour la majorit des langages de programmation. Le
domaine tant trs vaste, cet article se concentre sur le langage
Java et les trois IDE les plus utiliss dans deux domaines le Web
(Google App Engine pour Java, JSF2) et les mobiles sous Android :
Eclipse, IntelliJ IDEA, et NetBeans. Ils sont disponibles sur Linux,
OS X et Windows.
Configuration utilise
Systme Fedora 17 64 bits
SDK Android SDK "android-sdk_r21.0.1"
Google App Engine SDK for Java 1.7.4
Autres librairies Java SE 7u13 (JDK)
MyFaces Core 2.1.8
Versions des IDE Eclipse Juno SR1
IntelliJ IDEA 12
NetBeans IDE 7.3 rc1
JAVA
> Installation de JDK
1. Tlchargez le fichier archive sur le site d'Oracle
http://www.oracle.com/technetwork/java/index.html
2. Dcompressez
IDE Java: il y a du monde !
IDE ou EDI en franais, est un environnement de dveloppement intgr : un logiciel,
qui contient un ensemble d'outils pour dvelopper des logiciels dans diffrents langages
informatiques, comme Java, C++ ou Visual Basic. Un IDE permet aux dveloppeurs de
travailler plusieurs aspects de logiciels, sans quitter cet environnement.
Fig.1
Ajoutez des Plateformes Android
3. Ajoutez une variable JAVA_HOME et ajoutez son sous-dossier
"bin" au PATH dans le fichier .bachrc.
GOOGLE APP ENGINE POUR JAVA
Google App Engine est une plateforme Cloud pour des applications Web
dvelopps en Java, Python et Go. Pour l'utiliser inscrivez-vous sur la
plateforme Google. Il faut disposer d'un plug-in compatible et le SDK.
> Installation du SDK
Tlchargez sur https://developers.google.com/appengine/downloads
Dcompressez
ANDROID
Nous prenons Android comme exemple pour le dveloppement
Mobile. On doit avoir un plug-in et le SDK d'Android.
> Installation du SDK :
Tlchargez l'URL suivante http://developer.android.com/sdk/index.html
le fichier ou l'installateur correspondant votre OS.
Pour Linux dcompresser le fichier .tgz donne le dossier android-
sdk-linux
30-45 20/02/13 09:59 Page 37
PROgrammez ! < 38 > MARS 2013
dossier dveloppeur
Note : Le SDK d'Android est disponible uniquement pour Linux 32
bits. Il faut pour cette raison installer quelques bibliothques 32
bits sur des distributions Linux (64 bits)
Ajoutez des plateformes
Le SDK install (Android SDK Tools) a besoin des plateformes et de
"platform tools". Pour cela, excutez le fichier android-sdk-
linux/tools/android
Cochez le/les plateformes dsires et Android SDK Platform-tools.
Un clic sur le bouton "Install xxx packages".
Configuration des AVD
Excutez le fichier (avec l'action avd) android-sdk-linux/tools/android
avd pour crer un ou plusieurs priphriques virtuels [Fig.1].
ECLIPSE
Considr par un grand nombre de dveloppeurs comme l'IDE de
rfrence pour Java/Java EE. Compos d'un noyau autour duquel
viennent se greffer des plug-ins pour lui donner des fonctionnalits
supplmentaires (plusieurs langages et toutes sortes de technolo-
gies). Le SDK d'Eclipse contient Eclipse Java development tools
(JDT), offrant Eclipse son compilateur incrmental. Eclipse est un
programme FOSS diffus par Eclipse Foundation.
Eclipse est un IDE complet prenant en charge la gestion des projets
complexes. L'dition de fichiers sources est assiste par de nom-
breux outils puissants. L'excution en local, le debugging et le remo-
te debugging sont assurs, ainsi que le dploiement vers la majorit
des serveurs. Scrapbook constitue un avantage majeur et permet
de tester les codes la vole. Eclipse est distribu sous la forme de
bundles, chacun est compos d'un ensemble d'outils pour dvelop-
per en un langage donn ou pour des tches prcises, par exemple
Eclipse IDE for Java EE Developers.
> Installation :
Tlchargez l'adresse http://www.eclipse.org/downloads/ une version
pour votre OS
Dcompressez
Excutez le fichier eclipse dans le dossier de l'installation [Fig.2].
> Intgration avec Google App Engine
Google Plugin for Eclipse contient tous les outils pour dvelopper,
tester, et dployer une application vers la plateforme depuis l'IDE.
Installer Google Plugin for Eclipse
le menu Help > Install New Software... > un clic sur le bouton ADD >
donnez un nom et une URL
https://dl.google.com/eclipse/plugin/4.2 > OK > slectionnez parmi les com-
posants affichs > vrifiez et validez la licence > Redmarrez Eclipse.
Crer un projet GAEJ
Une flche ct de l'icne de Google dans Eclipse ouvre une liste
d'actions sur Google App Engine > New Web Application Project >
donnez un nom au projet et le package pour les classes > D-slec-
tionnez Use Google Web Toolkit > Finish pour crer le projet.
Pour excuter le projet en local
Un clic droit sur le projet > Run As > Web Application.
Pour dboguer
Un clic droit sur le projet > Debug As > Web Application.
Pour dployer
Un clic sur la flche ct de l'icne de Google dans Eclipse > Deploy
to App Engine [Fig.3].
> Intgration des frameworks Web
Les plug-ins d'Eclipse rendent les frameworks Web et autres dispo-
nibles sur cette plateforme. Le bundle Eclipse IDE for Java EE Deve-
lopers, dispose de tous les outils ncessaires pour la gestion des
projets Web, mais pour dvelopper et tester des projets JSF2 vous
avez besoin d'une implmentation JSF2 (ajoute comme fonctionnali-
t ou nouveau projet) et d'un serveur (Tomcat par exemple).
Implmentation JSF2
On va utiliser l'implmentation de MyFaces2 (Apache), pour crer
des projets JSF2
Le menu Window > Preferences > Java > Build Path > User Libraries
> New > donnez un nom la library > Add External JAR's > allez dans
le dossier de dcompression MyFaces2/lib > slectionnez tout sauf
myfaces-bundle.x.y.z.jar.
Les fichiers de configuration sont crs automatiquement. l'IDE se
charge de complter, et gnrer le code. On regrette cependant l'ab-
sence de la dtection et la correction automatique pour les fichiers
de facelets (*.jsf).
> Dveloppement pour Android
ADT (Android Development Tools) est un plug-in pour Eclipse. Il per-
met de crer des projets Android complexes. Dot d'un UI Builder
trs intuitif pour crer les composants graphiques. Le plug-in per-
met de tester et dboguer des applications Android. La fentre Out-
line est fort utile. Malheureusement les fonctions de dtection,
correction d'erreurs de l'diteur XML ne sont pas suffisantes.
Installer ADT
Le menu Help > Install New Software... > un clic sur le bouton ADD >
donnez un nom et une URL
https://dl-ssl.google.com/android/eclipse/ >OK > slectionnez Developer
Fig.2 Fig.3
Scrapbook Outils Google App Engine
30-45 20/02/13 09:59 Page 38
PROgrammez ! < 39 > MARS 2013
dossier dveloppeur
Tools > vrifiez et validez la licence > Redmarrez Eclipse. Normale-
ment au dmarrage un cran vous demande l'emplacement du SDK
d'Android.
Crer un projet Android
File > New > Other > Android > Android Application Project > rem-
plissez le nom, package et slectionnez le SDK utiliser > cochez
create activity > configurez le launcher > slectionnez le style d'activi-
ty > donnez un nom l'activity et au layout > Finish.
Tester l'application
Si ce n'est pas dj fait, commencez par configurer le AVD d'Android
(Android Virtual Device), par aller dans le menu Run > Run Configu-
rations. Ceci appelle le gestionnaire de AVD (dans le SDK d'Android)
Clic droit sur le projet > Run As > Android Application [Fig.4].
INTELLIJ IDEA 12
Il a (spcialement Ultimate Edition) tous les outils pour dvelopper
pour le Web, les entreprises et les mobiles. Il dispose des fonctions
trs avances pour l'dition de codes source. Des outils de produc-
tion pour les bases de donnes, UML, contrle de versions, de
dploiement vers le Cloud. Des frameworks supportant le dveloppe-
ment des entreprises et le Web. Enfin le UI Designer pour Android
est disponible aussi dans la Community Edition. L'IDE est dot d'un
systme de plug-ins.
On regrette que dans la Community Edition, il manque beaucoup de
fonctions intressantes pour dvelopper en Java, par exemple le
support de JSP, JSF et Servlets. La gestion des projets est nette-
ment plus difficile que sur Eclipse et NetBeans. Il n'est pas logique
d'ouvrir un projet pour le supprimer ou d'aller supprimer les dossiers
de projets !!! Deux versions sont disponibles Community Edition et
Ultimate Edition.
Community Edition Ultimate Edition
Licence Gratuite Open Source Payante
Langages Principalement Java SE, En plus de ceux de la Community Edition,
Groovy, XML, Android JEE, Python, PHP, Ruby, HTML, CSS,
Javascript, etc.
Frameworks Non. Quelques frameworks La plupart des frameworks des langages
sont installables comme plug-ins supports et notamment Spring,
Hibernate et JSF2
JUnit, TestNG Oui Oui
Serveurs Non. Tomcat, GlassFish, JBoss, WebLogic,
WebSphere, Geronimo, Resin, Jetty.
VCS Moins que L'Ultimate Complet
UI Designer
pour Android
Oui Oui
> Installation :
L'installation est facile, voici comment l'installer sur Linux
1. Tlchargez une des versions disponibles
http://www.jetbrains.com/idea/download/index.html
2. Dcompressez
3. Excutez "idea.sh" dan le dossier "bin"
> Intgration avec Google App Engine
IntellJ IDEA (Ultimate Edition) dispose de son propre plug-in install
pour dvelopper pour le Cloud, sur Google App Engine en Java.Il suf-
fit d'installer le SDK de Google (tlchargez et dcompressez),
l'URL suivante https://developers.google.com/appengine/downloads.
l'IDE permet de crer des projets, avoir de l'assistance pendant le
codage, tester et dboguer une application sur le serveur de dve-
loppement de Google et le dploiement via l'interface graphique.
Parmi les assistances de codage, un analyseur la vole puissant. Il
dtecte mme les violations de codage imposes par Google App
Engine. Un analyseur la demande permet d'avoir des analyses trs
dtailles. Malgr des assistants performants, au niveau de l'int-
gration ainsi que le codage, quelques ajustements ont t nces-
saires pour que tout fonctionne normalement.
Crer un projet GAEJ
Create New Project (ou File > New Project) > JavaEE Web Module >
Google App Engine > Slectionnez le dossier d'installation du SDK
Google App Engine et la persistance dsire > Finish.
Pour excuter le projet en local
Le menu Run > Edit Configurations (pour configurer le serveur). Puis
Run 'nom_serveur'
Pour dboguer
Le menu Run > Debug
Fig.4 Fig.6
Fig.5
Android UI Builder
Analyseur la vole
Dtection automatique d'erreurs dans une facelets
30-45 20/02/13 09:59 Page 39
PROgrammez ! < 40 > MARS 2013
dossier dveloppeur
Pour dployer
Tools > Upload App Engine Application [Fig.5].
> Intgration des frameworks Web
L'Ultimate Edition de l'IDE dispose d'assistants pour dvelopper sans
difficult en utilisant des frameworks tels que Struts 2, Spring ou
JSF2. Il est possible d'ajouter des fonctionnalits JSF2 un projet
Web existant ou de crer un nouveau projet Java EE, avec le support
JSF2. Il suffit d'indiquer au moment de la cration d'un projet, lim-
plantation JSF2 (dossier de dcompression MyFaces2/lib > slec-
tionnez tout sauf myfaces-bundle.x.y.z.jar) et le serveur utiliser. Les
fichiers de configuration sont crs automatiquement.
Au moment du codage, l'IDE se charge de complter, rectifier, et
gnrer le code [Fig.6].
> Dveloppement pour les mobiles
Les outils d'IntelliJ IDEA pour dvelopper des applications Android
sont trs performants, y compris les assistants de codage, la possi-
bilit de tester l'application sur un mulateur, le dploiement et un
designer graphique, trs intuitif pour les composants graphiques (UI
Designer). La fentre de Preview reflte en temps rel le change-
ment dans le code (mme sans sauvegarder).
Crer un projet Android
Create New Project > Application Module (Android) > Slectionnez le
dossier d'installation du SDK d'Android > slectionnez la plateforme
dsire et quelques options et le tour est jou.
Tester l'application
Si ce n'est pas dj fait, commencer par configurer le AVD d'Android
(Android Virtual Device ), par aller dans le menu Run > Edit Configu-
rations. Ceci appelle le AVD Manger [Fig.7 et 8].
NETBEANS
Est un programme FOSS. Il permet de dvelopper des applications
Desktop, Web et Mobile. La version 7.2 intgre les dernires tech-
nologies Web ; HTML5, JavaScript, et CSS. Ses nouveaux diteur et
dbogueur Javascript sont simplement magnifiques. NetBeans est
multi-langage Java, C/C++, PHP. Ses plug-ins permettent d'ajouter
normment de fonctionnalits. Il est noter que NetBeans est
suprieur aux Eclipse et IntelliJ IDEA au niveau de dtection et cor-
rection automatique pour les pages facelets, Javascript et CSS.
Eclipse est plus fort pour afficher la structure CSS. Plusieurs
bundles sont disponibles, optez pour "All" ou Java EE bundle.
Installer NetBeans. Tlchargez un seul fichier sur le site http://net-
beans.org/downloads/.Sur Linux, ouvrez un terminal. Tapez les com-
mandes suivies de ENTER :
1. rendez le fichier excutable
chmod u+x netbeans-x.y.z-ml-linux.sh
2. Lancez l'installation
./netbeans-x.y.z-ml-linux.sh
3. L'installation ajoute une icne sur le bureau, pour dmarrer Net-
Beans.
4. Pour supprimer NetBeans excutez uninstall.sh dans le dossier
de l'installation.
> Intgration avec Google App Engine
Un plug-in pour NetBeans est disponible sur
http://kenai.com/projects/nbappengine/pages/Home
Son problme majeur, un dcalage important avec les versions de
NetBeans. Il y a des plug-ins officiellement pour NetBeans 6.8 et
6.9, mais srement pas pour la version 7.2 et suprieure. Il est
Fig.8
Fig.7
Live demo Android (la fentre Preview)
UI Designer pour Android
Fig.10
Fig.9
Frameworks pour le Web
Possibilit d'utiliser MyFaces2 ou Mojarra 2
30-45 20/02/13 10:00 Page 40
PROgrammez ! < 41 > MARS 2013
dossier dveloppeur
IDE Pour Contre
Eclipse IDE de rfrence dans plusieurs domaines Les assistants pour le dveloppement Web
Soutenu par les tnors du march de l'informatique ne sont pas la hauteur, spcialement
FOSS, lger, interface native au moment du codage
Une communaut trs large
IntelliJ IDEA Multiples langages La Community Edition est limite,
Support de la plupart des frameworks spcialement au niveau Web et frameworks
Fonctions trs avances pour l'dition La gestion de projets est un vrai casse-tte.
NetBeans Editeur et dbugger JavaScript Le plug-in pour Google App Engine
Intgre les dernires technologies Web est obsolte
FOSS Peu d'assistants pour les mobiles
Pas de designer pour Android
Installation du plug-in (auto update center) :
Le menu Tools > Plugins > Settings onglet > le bouton Add > donnez
un nom lemplacement et entrez l'URL suivante : http://nbandroid.org/
release72/updates/updates.xml > un clic sur l'onglet Available Plugins >
tapez android dans la zone de recherche > cochez le nom du plug-in
dsir. > le bouton Install > validez la licence > redmarrez NetBeans
Le chemin vers le SDK d'Android
Le menu Tools > Options > Miscellaneous. Onglet Android > slec-
tionnez l'emplacement de l'Android SDK
Crer un projet Android
Le menu File > New Project > Android > Android
Dans la fentre suivante, donnez un nom, package et chemin au projet.
Nommez l'activity > Slectionnez la plateforme Android cible > Finish.
Gestion des AVD
Pour diter les plateformes le menu Tools > AVD Manger.
Tester l'application
Un clic sur l'icne play ou le menu Run > Run Main Project ou F6
# Kaesar Alnijres
Dveloppeur Java - Leader jug-Cergy
http://www.java-javafx.com
aussi possible de bricoler pour faire tourner Google App Engine SDK
sur NetBeans !!!
> Implmentation JSF2
Le Java EE bundle de NetBeans contient une implmentation JSF2
(Mojarra 2.0/2.1) et le serveur GlassFish 3. Donc rien ajouter,
mais on peut si on le souhaite utiliser l'implmentation JSF2 de
MyFaces2.
Dans tous les cas le descripteur du projet est cr et configur auto-
matiquement selon limplmentation JSF2 utilise.
Les assistants pour gnrer le code des beans, facelets sont excel-
lents. Les tags namespaces JSF, sont ajouts d'une manire intelli-
gente ds qu'on entre une balise.
On regrette ici que modifier la configuration ou supprimer un frame-
work dj ajout, ne soit pas une tche facile.
Ajouter le support JSF2 un projet Web application existant
Clic droit sur un projet > Properties > Frameworks > cliquez sur le
bouton Add > slectionnez un des frameworks > Java Server Faces >
OK > laissez le choix Server Library > un clic sur l'onglet Configuration
> remplacez "/faces/*" par "*.jsf" > laissez slectionner "facelets"
Note : On peut aussi crer un nouveau projet JSF2.
Pour utiliser MyFaces2 :
Au lieu de slectionner "Server Library" > slectionnez Create New
Li brary > un cl i c sur Browse pour sl ecti onner myf aces-
bundle.x.y.z.jar dans MyFaces2/lib > donnez un nom, comme par
exemple MyFaces2 > OK [Fig.9, 10 et 11]
Dveloppement Android
Des plug-in pour Android sont sur le site http://www.nbandroid.org. Il est
possible d'installer le plug-in en utilisant lauto update center ou via
un fichier .zip. Peu d'outils sont disponibles pour dvelopper des
applications Android, l'assistant d'dition n'a pas de correction auto-
matique. Pas de designer graphique pour les UI.
Fig.11
Dtection automatique d'erreur dans une facelet
CONCLUSION
Et maintenant quel IDE choisir ? Si vous dveloppez pour de mul-
tiples domaines (Desktop, Web, et mobile), Eclipse s'avre le
meilleur compromis. Il prsente un IDE complet, mais prsente en
revanche des faiblesses pour le dveloppement Web. Domaine o
s'imposent NetBeans et IntelliJ IDEA Ultimate. Optez pour IntelliJ
IDEA si vous tes une entreprise, vous aurez en plus le support
technique. NetBeans est dconseill pour le dveloppement avec
Google App Engine et Android. Eclipse est le meilleur choix pour
Google App Engine. Le plug-in est dvelopp sous la direction de
Google.
30-45 20/02/13 10:00 Page 41
PROgrammez ! < 42 > MARS 2013
dossier dveloppeur
Passage en revue de la bote outils
idale du dveloppeur Android
La qualit dune technologie ou dune plateforme nest pas un gage suffisant de
russite. En effet, le succs dune plateforme passe galement par la qualit des
outils mis disposition des dveloppeurs facilitant leur travail dappropriation. Le but
tant dans un systme comme Android de proposer une offre de contenu toujours
plus grande aux utilisateurs et dassoir ainsi la technologie. Du fait de louverture
dAndroid, le nombre doutils augmentant la productivit des dveloppements est
plthorique et il devient mme difficile de se constituer sa bote outils idale devant
un tel choix. Afin de faciliter le travail des dveloppeurs Android, cet article propose
un inventaire de la bote outils idale.
> Compilateur
Au niveau du compilateur, il ny a pas relle-
ment de choix faire puisque les sources
dapplications Android doivent obligatoire-
ment tre compiles avec le JDK officiel. La
version 6 de ce dernier est recommande
mais la dernire mouture est galement
supporte condition de positionner le
niveau de compliance Java 5 ou 6 lors de
la compilation. En revanche, le compilateur
libre GCJ (GNU Compiler for Java) nest pas
support et ne peut donc tre utilis.
> IDE
Le choix en matire denvironnement de
dveloppement est fourni sur Android. Solu-
tion officielle dveloppe par Google, les
outils ADT (Android Development Tools) sont
proposs sous la forme de plugins Eclipse.
En perptuelle amlioration, ils permettent
de grer un projet de sa cration son pac-
kaging sous forme dAPK en passant par le
dbuggage lors du test dapplication sur
mulateur ou terminal physique. Actuelle-
ment en version 21.0.1, ADT sutilise avec
un Eclipse 3.6.2 au minimum. En outre, il
propose au dveloppeur un grand nombre
doutils du SDK Android, packags sous
forme de vues Eclipse avec la perspective
DDMS (Dal vi k Debug Moni tor Servi ce)
regroupant plusieurs de ces vues.
On soulignera galement la possibilit de
grer des terminaux virtuels pour tester le
rendu dune application sur diffrents sup-
ports, la vue affichant les logs dun terminal,
les vues permettant dinspecter les threads
et les allocations mmoires ainsi quun explo-
rateur de fichiers dun terminal. Bnficiant
des dernires avances du SDK, la solution
Eclipse pousse par Google est la rfrence
en dpit de critiques sur les lenteurs de
lIDE. La principale lacune dADT concerne
lditeur de cration dIHM, loin dtre la
hauteur de ce que propose Apple pour liPho-
ne par exemple. En complment ADT, le
plugin Eclipse MotoDev est propos par
Motorola. Il facilite la gestion des bases des
donnes SQLite dun terminal et propose
des snippets de code acclrant lcriture de
codes rcurrents. Alternative numro 1
dEclipse et ADT, IntelliJ IDEA 12 propose
une version Community gratuite avec un plu-
gin Android complet. A limage dADT, ce plu-
gin propose un ensemble doutils pour grer
un projet avec un diteur graphique un peu
plus abouti. Nanmoins, les outils de monito-
ring proposs restent moins nombreux
quavec ADT. Enfin, un mot concernant Net-
Beans pour lequel un plugin indpendant est
propos. Ce dernier est plutt famlique, se
contentant du support des actions essen-
tielles ralises sur un projet (cration,
dbug, build et packaging).
> Emulateur
Le SDK fournit en standard un mulateur de
terminaux bas sur le logiciel libre QEMU. Il
donne la possibilit au dveloppeur de crer
des terminaux virtuels en spcifiant finement
leurs caractristiques matrielles (taille
dcran, rsolution, densit de pixels, pr-
sence dun GPS, ) et logicielles (version
d Androi d). Cependant, cet mul ateur
souffre de certains problmes de perfor-
mances empchant dans certains cas son
utilisation pour tester des tablettes 10
pouces par exemple. Pour adresser cette
problmatique, il est possible de tlcharger
directement une image ISO dAndroid et de
linstaller sur un logiciel de virtualisation tel
que VirtualBox afin dmuler un terminal de
manire plus puissante et ractive. En ce
sens, une solution comme AndroidVM sav-
re intressante car elle propose des images
VirtualBox prconfigures pour certaines
versions dAndroid.
> Composants
Du fait de son ouverture, la plateforme bn-
ficie dun nombre important de composants
prts lemploi. Sil ne fallait avoir quune
seule bibliothque de composants dans sa
bote outils, il sagirait de lAndroid Compati-
bility Library de Google. Celle-ci permet la
compatibilit dune application utilisant des
concepts apparus dans la version 4 du SDK
avec les versions antrieures de lOS. Le sup-
port pour les fragments et les loaders se
rvlant essentiel. Pour le reste, les compo-
sants peuvent tre trouvs via de multiples
sources sur internet que ce soit via GitHub ou
Google Code ou bien en allant sur des sites
les rfrenant comme http://www.theultima-
teandroidlibrary.com/ et http://www.androidviews
.net/. Le tableau (voir tableau A) prsente les
composants les plus populaires du moment
et permettant de gagner un temps prcieux
lors du dveloppement dapplications.
> Frameworks
Plus structurants que les composants, les
frameworks facilitent le travail du dvelop-
peur dans un domaine prcis. De par son
architecture, Android ncessite lcriture
dun grand nombre de lignes de code dinfra-
structure, par exemple, et ne permet pas de
raliser simplement des tches rcurrentes
30-45 20/02/13 10:00 Page 42
prvu cet effet sappuyant sur la rfrence
Java en la matire, JUnit. ADT permet de
crer directement au sein dEclipse un pro-
jet de test pour une application donne et le
SDK fournit ensuite des classes de tests
telles que AndroidTestCase et ActivityUnit-
TestCase facilitant lcriture des tests pour
Android. Ces derniers tant instrumentali-
ss par Android, ils sont de fait trs lents.
Pour des tests unitaires qui par nature doi-
vent sexcuter aussi rapidement que pos-
sible, il est donc prfrable dutiliser la
bibliothque Roboelectric qui permet de lan-
cer les tests sans avoir besoin de lancer
lapplication. Ce framework se charge de
mocker les appels aux classes contenues
dans le SDK Android. Lutilisation de Roboe-
lectric conjointe au classique Mockito du
monde Java permettant mme denvisager
la mise en place du TDD pour le dveloppe-
ment dapplications Android ! Enfin, pour
des tests dintgration avec la possibilit de
PROgrammez ! < 43 > MARS 2013
dossier dveloppeur
telles que linjection de dpendances ou la
gestion de bases de donnes SQLite via un
mapping de type objet / relationnel. Les fra-
meworks lists dans le tableau (voir tableau B)
adressent ces diffrentes problmatiques
augmentant grandement la productivit. La
plupart de ces frameworks peuvent tre mis
en uvre conjointement permettant de se
construire une stack complte, similaire
ce que peut connatre le dveloppeur Java
ct serveur. Ainsi, le couplage dAndroid
Annotations avec Dagger pour linjection de
dpendances et Otto pour la gestion dun
bus dvnements permet dobtenir une
application avec un code boilerplate quasi-
ment inexistant et un dcouplage de ses dif-
frentes parties.
> Tests
Phase essentielle du cycle de vie dune appli-
cation, le test nest pas oubli sur Android
avec, au sein du SDK, un framework entier
jouer des scnarios dutilisation pousss
niveau IHM, cela pourra tre ralis laide
de Robotium. Ce framework complte les
outils officiels fournis par le SDK et oblige
coder les scnarios directement au sein de
classes de tests. Lexcution pouvant ensui-
te se faire sur un mulateur ou un terminal
physique.
> Divers
Au rayon divers, on citera loutil danalyse de
code statique lint fourni avec le SDK, per-
mettant la manire dun Checkstyle dobte-
nir des warnings sur le code dapplications
Android, via la dfinition dun ensemble de
rgles et de vrifications effectuer. Se pr-
sentant sous la forme dun simple JAR, le
petit utilitaire Droid@Screen est incontour-
nable pour raliser simplement et gratuite-
ment des vi dos d uti l i sati on d une
application la mettant en valeur avant sa
publication sur le Google Play Store. Destin
lexploration de bases de donnes SQLite,
SQLite Browser est un complment intres-
sant aux outils dADT puisquaprs export de
la base dune application, il est possible de
visualiser les donnes contenues dans le
fichier obtenu. Enfin, un dernier mot sur la
suite doutils en ligne Android Asset Studio,
fournissant des outils de gnration gra-
phique pour les applications Android. Elle
permet la gnration des diffrents types
dicnes dune application en respectant les
formats cibles des diffrentes densits
dcran mais galement la gnration de
styles pour les barres daction, par exemple.
> Conclusion
Cet article aura mis en lumire la richesse
des outils mis la disposition du dveloppeur
Android pour le dveloppement dapplica-
tions. Loffre en outils gratuits est dense et
la qualit au rendez-vous. Le seul cueil pou-
vant tre le choix trop important qui ncessi-
te de fait du temps pour bien slectionner
les outils les plus adquats et prennes uti-
liser pour son application. Lensemble des
outils prsents dans cet article ne consti-
tue pas une liste exhaustive mais une bote
outils idale un instant donn des outils
augmentant la productivit des dveloppe-
ments Android. Compte tenu de la vitalit de
lcosystme Android, nul doute que cette
bote outils pourra tre complte et enri-
chie dans les mois qui viennent.
# Sylvain Saurel
Ingnieur dEtudes Java / JEE
sylvain.saurel@gmail.com
Framework Description
Android Annotations Augmente la productivit des dveloppements en gnrant le code boilerplate la compilation via lAPT.
Dagger Framework dinjection de dpendances rapide et moderne fonctionnant aussi bien en Java que
sur Android et sa JVM Dalvik spcifique au mobile.
GreenDroid Facilite le dveloppement dinterfaces en proposant un ensemble de classes utilitaires.
Green DAO ORM facilitant la manipulation de bases de donnes SQLite. Bas sur de la gnration de code ralise
sparment du processus de compilation.
Jackson Bibliothque de manipulation JSON lgre et ultra performante qui se trouve particulirement adapte
lunivers Android.
libGDX Moteur de jeu 2D / 3D lger, facile prendre en main et particulirement bien document.
OrmLite Framework ORM Java lger proposant un support spcifique pour les appels natifs la base de
donnes SQLite prsente sur les appareils Android.
Otto Bus dvnements permettant de dcoupler les diffrentes parties dune application Android. Fork du
bus dvnements de Guava, spcialement adapt pour les contraintes de lunivers mobile.
Polaris Framework facilitant lutilisation de Google Maps au sein dune application.
Retrofit Client REST bas sur des annotations comme le RestTemplate de Spring Android mais beaucoup plus
lger ( peine plus de 50 Ko).
RoboGuice Framework dinjection de dpendances bas sur le clbre Google Guice en version 3.0 et adapt
pour lunivers contraint dAndroid.
Composant Description
AChartEngine Permet de raliser un grand nombre de graphiques de diffrents types
(lignes, barres, rgions, camembert).
ActionBarSherlock Composant tendant la bibliothque de compatibilit Android facilitant lutilisation du design pattern
UI ActionBar travers toutes les versions dAndroid.
ACRA Composant permettant dobtenir un reporting prcis des plantages et bugs dune application
et sinterfaant avec diffrents backends (Google SpreadSheet, ).
Admob / AdWhirl Montisation dune application via le rseau publicitaire Admob ou en utilisant la mdiation via AdWhirl.
Flurry Solution aidant le dveloppeur obtenir des donnes statistiques prcises sur lutilisation
dune application.
Pull To Refresh Fournit un composant rutilisable de Pull to Refresh comparable ce qui se fait sur iOS. Utilisable
sur plusieurs types de vue : ListView, GridView, WebView, ViewPager, HorizontalScrollView,
SlidingMenu Mise en place dun menu glissant depuis un ct de lcran, limage de ce qui existe
sur lapplication Google+
ViewPagerIndicator Composant compltant le ViewPager Android standard en fournissant un indicateur de positions
limage de ce qui se fait sur lapplication Google Play Store.
ZXing Composant de gnration et de lecture de code-barres 1D et 2D.
Tableau A
Tableau B
30-45 20/02/13 10:00 Page 43
> Dbogage
Le dbogage ne doit pas tre oubli dans la
phase de votre dveloppement, mme si les
diteurs de code (IDE) proposent la colorisa-
tion syntaxique, cela ne suffit pas pour affi-
cher le contenu de vos pages correctement.
Avec votre IDE
Quel que soit l'IDE que vous utilisez, vous dis-
posez dans les extensions ou plugins dun
dbogueur li votre langage de dveloppe-
ment. Mais vous pouvez ltendre.
XDebug
Xdebug est une extension du langage PHP,
qui est assez mconnu du grand public ou
mal utilis. Il permet d'acclrer et de simpli-
fier efficacement les cycles de dbogage
d'une application. Vous pouvez l'intgrer
dans votre IDE travers les fichiers de confi-
guration. Ce projet est toujours en activit et
continue voluer, suivant les diffrentes
versions de PHP. Lorsque vous activez cette
extension, vous pouvez l'utiliser comme un
dbogueur classique que vous trouvez dans
n'importe quel logiciel, autrement dit, vous
C
es outils sont trs varis et il n'est
pas possible de tous les rfrencer.
Nous avons donc volontairement cibl
notre propos sur :
Manipulation des donnes
Dbogage
Contrle des standards
Les tests
Optimisation
> Manipuler les donnes
Quel que soit votre projet et le langage utili-
s, il est ncessaire de modliser vos don-
nes, bref de raliser une reprsentation
graphique de celles-ci, pour assurer une
meilleure qualit de votre projet (et des don-
nes).
SQL Power Architect
Power Architect est un outil de
modlisation de donnes, c'est
dire un ETL, sous licence GPL 3.
Il permet d'amliorer vos bases
de donnes en augmentant l'utilisation des
ressources. Ce logiciel est compatible avec
l'ensemble des bases de donnes du march :
MySQL, SQL Server, Oracle, PostgreSQL, etc.
Il va vous permettre d'excuter des tches
complexes en un minimum de temps. Par
ailleurs, Power Architect permet de capturer
directement la structure de votre base de
donnes et de la mettre jour en temps rel.
Bien sr, vous pouvez dessiner un modle de
donnes en drag and drop, qui sera utilisable
ultrieurement avec un mode hors connexion
sous la forme de clichs des structures de la
base de donnes. Par ailleurs, vous pouvez
vous connecter plusieurs bases de donnes
en simultan et exporter diffrents formats
de vues (XML, PDF, JPEG...)
MySQL Workbench
MySQL Workbench est un outil graphique
destin aux architectes de bases de don-
nes. Il est optimis pour les bases de don-
Les outils complmentaires et utiles
Dans un dveloppement, il n'y a pas que l'IDE qui soit important. Vous avez votre
disposition de nombreux outils et plugins qui peuvent s'associer votre projet pour
vous faciliter la vie et surtout vous aider le maintenir.
nes MySQL et Mari aDB (et tout fork
MySQL)... Son but principal est de vous
aider dans la modlisation de donnes et le
dveloppement de code SQL. Par ailleurs, il
propose des outils d'administration complets
pour la configuration des serveurs, la ges-
tion des utilisateurs
ArgoUML
ArgoUML est un outil de modlisation UML
(Unified Modeling Language), sous licence
BSD est open source. Son intrt principal
est de vous aider utiliser les phrases de
spcification et de conception, c'est--dire la
possibilit de dcrire des objets et leurs rela-
tions. Il est compatible avec lensemble des
diagrammes UML standards. Il supporte les
diagrammes de classe, les diagrammes
d'tat, les diagrammes Use Case , de
squence, etc. Par ailleurs, ArgoUML pro-
pose de nombreuses extensions permettant
de supporter de nombreux langages : Java,
C++, PHP, C#, SQL, etc.
Enfin, il permet d'exporter vos ralisations
de diagramme en XML, GIF, PNG, Post-
Script, EPS, PGML et SVG
PROgrammez ! < 44 > MARS 2013
dossier dveloppeur
30-45 20/02/13 10:00 Page 44
gateur. Vous pouvez l'associer un outil de
test unitaire li votre langage de dvelop-
pement comme ci-dessus.
> Optimisations
eAccelerator
Il s'agit d'un acclrateur PHP, qui permet
d'optimiser et de cacher le contenu dyna-
mique. Il amliore la performance gnrale
des scripts PHP en les mettant en cache.
Par ailleurs, il optimise aussi les scripts pour
acclrer leur excution
APC
Il s'agit d'une librairie PHP permettant des
conomies de traitements divers dans le
cur de PHP. Ainsi, il va augmenter la vitesse
gnrale de traitement d'une requte pour ce
langage. Il fait partie des outils indispensables
dans loptimisation car il est trs facile de le
mettre en place dans son application.
Minify
Minify est un outil PHP qui compresse vos
fichiers CSS et JS pour rduire le poids de
chacun d'eux. Il existe diffrents modes de
compression, depuis la suppression des
espaces et des commentaires, jusqu' la
compression des fichiers au format gZIP ou
ZIP. Pour ces options pousses, vous devez
avoir install l'extension ZIP en PHP pour
effectuer cette opration.
> Conclusion
Nous vous avons montr quelques points
importants que les dveloppeurs ne pensent
pas toujours implmenter, et qui sont trs
facile mettre en place dans vos dveloppe-
ments. Bien sr, il existe d'autres outils gn-
riques pour tous les langages pour effectuer
ces oprations de maintenance et d'aide
dans le dveloppement. A vous de jouer !
# Christophe Villeneuve
Consultant pour Neuros, auteur du livre PHP &
MySQL-MySQLi-PDO, Construisez votre application ,
aux ditions ENI. Rdacteur pour WebRIVER,
membre des Teams DrupalFR, AFUP, LeMug.fr,
Drupagora, PHPTV.
peut s'utiliser aussi bien en ligne de comman-
de ou par l'intermdiaire d'une interface web.
PhpLangEditor
PhpLangEditor est une extension pour Fire-
fox. Il va traduire votre place des fichiers
de langues et variables dans votre script.
Comme ceci, si vous grez un fichier de
langue par fichiers, vous gagnerez norm-
ment de temps au niveau de cette fonction-
nalit.
PHP Lookup
Lookup PHP est une barre de recherche qui
s'intgre Firefox. Il vous aide dans la
recherche rapide des rfrences syntaxe
PHP. Bien entendu, il existe ce mme type
d'extensions pour les autres navigateurs.
> Les tests
Si vous souhaitez effectuer des oprations
rptitives pour vrifier que votre site web
fonctionne toujours, comme la navigation
dans vos pages ou tester les diffrentes
fonctionnalits, etc., vous vous lasserez trs
rapidement d'effectuer les mmes opra-
tions rgulirement, c'est pour cela qu'il exis-
te de nombreux outils qui le feront votre
place. Et bien mieux !
PHPUnit et Atoum
Il s'agit de deux outils de la mme famille,
car ils vont effectuer des tests unitaires en
automatique pour PHP. Chacun d'eux va vous
aider tester la stabilit de votre application
web. Ainsi, au fil des semaines, vous pourrez
rpter ces tests volont sans besoin de
refaire ces oprations manuellement. Vous
trouvez la mme chose en Java avec JUnit,
par exemple.
Selenium
Selenium (une rfrence lheure actuelle)
est aussi un outil de tests, qui permet d'cri-
re des tests automatiss d'applications web
d'interface utilisateurs, c'est--dire, qu'il va
effectuer des tests l'intrieur de votre navi-
pouvez excuter du code en mode pas--pas,
placer des points d'arrts.
Bien sr, tout moment, vous avez la possi-
bilit de consulter la console qui propose de
nombreuses informations sur les valeurs de
vos variables.
Avec votre navigateur
L'autre moyen de dboguer vos applications
consiste corriger le contenu d'une page
travers votre navigateur. Pour cela, l'en-
semble du secteur propose diffrentes
extensions avec des rendus diffrents mais
des informations identiques.
> FirePHP
FirePHP est une extension de la console
FireBug pour le navigateur Mozilla. La com-
munication entre le langage et le navigateur,
passe par un simple appel d'une mthode du
langage PHP. Les informations que vous
obtenez dans la console, sont envoyes dans
les headers de rponse. Bien entendu, elles
ne casseront pas le rendu de vos pages.
Les autres
Ces deux extensions, qui ont t expliques
plus haut, sont disponibles sous un autre
nom associ votre langage de dveloppe-
ment. Ces deux mthodes de dbogage per-
mettent de maintenir les pages web.
> Contrle des standards
Le contrle des standards dans la program-
mation est un point crucial, car si vous
reprenez un ancien projet ou un projet exis-
tant auquel vous n'avez pas particip, il vous
faudra passer par une phase d'tudes pour
vous imprgner de celui-ci.
PHP CodeSniffer
La qualit d'un projet est importante car il
est trs facile de sloigner des spcifica-
tions d'origine si le projet dure trs long-
temps ou l orsqu i l est mal cod. PHP
CodeSniffer va vrifier le respect des conven-
tions de code mises en place autour de vos
sources (=rgles de programmation). Aprs
son lancement, il va dtecter pour vous les
violations d'un standard de code dfini. Le
rsultat que vous obtenez, permet d'identi-
fier les lignes et les pages qui ne respectent
pas la convention dfinie.
phpDocumentor
La documentation du code est aussi un autre
point important ne pas ngliger. En PHP, il
existe, entre autres, phpDocumentor qui
PROgrammez ! < 45 > MARS 2013
dossier dveloppeur
30-45 20/02/13 10:00 Page 45
V
ous rvez de dvelopper le prochain
WoW ou Battlefield ? Dveloppeur de
jeux vido, voil un job qui donne
envie. Si la France est un pays avec de
fortes comptences et des diteurs trs
actifs, il ne suffit pas dtre bon dveloppeur
pour russir. La liste des diteurs et des
indpendants franais est longue. Citons :
Ubisoft, Quantic Dream, Cyanide, Dont Nod,
Asobo, Ankama, Pastagames, Arkedo. Nou-
blions pas de citer le trs beau succs de
Magma Mobile, diteur de jeux mobiles, de
notre ami Nicolas Sorel (Codes-Sources
pour les connaisseurs). Lexplosion du mar-
ch mobile a boulevers le march du jeu
vido : prix en baisse, dmatrialisation du
support, et la crise conomique est aussi
passe par l. Le march actuel du jeu na
pas grand chose voir avec le march dil y
a 5 ans. La Wii puis la Kinect ont rvolution-
n linteraction entre le joueur et le jeu.
> Plus de 250 socits mais
souvent petites
Le syndicat SNJV, dans son livre blanc sur les
jeux vido en France en 2012, donne quelques
chiffres intressants :
lindustrie du jeu reprsente un chiffre daf-
faires de 3 milliards
premier bien culturel : 50 millions de pro-
duits tout confondu
Le jeu vido conjugue de nombreux mtiers : dveloppeur,
graphiste, animateurs 3D, testeurs, etc. Si les jeux mobiles
ncessitent seulement quelques jours ou quelques semaines,
dautres exigent de longs mois de conception.
Dossier ralis par Franois Tonic
48 % des foyers franais ont une console
les jeux sur smartphones explosent : 25
30 % des applications tlcharges
les plateformes mobiles sont des canaux de
distribution trs importants
les plateformes de distribution telles que
Steam ou Origin fdrent plus de 80 millions
dutilisateurs
Le SNJV recense plus de 250 entreprises sp-
cialises sur le jeu dont un tiers ont moins de 2
ans dexistence. Le chiffre daffaires varie nor-
mment. Lexport est un march vital pour ces
socits et diteurs spcialiss. La France
pse peine 5-7 % du march mondial. Ct
emploi, le march fait travailler directement
plus de 5 000 personnes (sans compter tous
les emplois indirects), dont 3 000 dans la pro-
duction. La moiti de ces entreprises compte
moins de 10 salaris. Le SNVJ estime quil y a
150 nouvelles offres demplois chaque mois.
Ce chiffre est une moyenne.
> Les tendances selon le SNJV
Une des difficults du march du jeu est de
sadapter aux volutions : dans le type de jeu,
le mode de consommation (distribution, termi-
naux). Le march avec les jeux mobiles a explo-
s et de nombreux diteurs pour smartphones
se sont crs. Le syndicat a dtermin diff-
rentes tendances :
transition technologique et conomique : jeux
PROgrammez ! < 46 > MARS 2013
i
carrire
en ligne, jeux sur mobiles, mais le march
crot toujours
la dmatrialisation des jeux sacclre,
mme si le support traditionnel continue
tre profitable, il est trs li aux nouvelles
consoles
paiement lacte comme futur modle de
rfrence. Le modle du free to play consti-
tue cet gard les prmices dun nouveau
modle de revenu universel pour lindustrie,
quel que soit le type de jeu et le mode de dis-
tribution.
Un financement plus diversifi et collaboratif :
un jeu cela cote cher !
Un renouveau des productions indpendantes :
cest une chance pour un dveloppeur ind-
pendant de pouvoir se faire remarquer ou
pour de petits studios dmerger.
Dautre part, le syndicat met aussi en avant le
succs de studios franais qui ont produit de
solides succs : Raymon Origins, From Dust,
Wargame European Escalation, My Brute,
Game of Throne, etc. Dans ce dossier, nous
allons aborder de nombreux thmes pour
mieux comprendre comment devenir un dve-
loppeur de jeu vido. Si ce mtier fait rver tu-
diants et dveloppeurs, il est trs exigeant.
Lexprience et la parfaite matrise technique et
technologique seront deux atouts cruciaux pour
y faire carrire. Les meilleurs iront ltranger
ou dans les studios les plus prestigieux.
A vous de jouer !
Devenir
dveloppeur
de jeux vido
Devenir
dveloppeur
de jeux vido
Assassins Greed 3
46-51 20/02/13 12:42 Page 46
PROgrammez ! < 47 > MARS 2013
i
carrire
Un secteur attrayant
mais trs concurrentiel et sous pression
Notre enqute auprs dditeurs et des recruteurs pose deux lments : les
dveloppeurs sont attirs par le secteur du jeu vido mais les salaires ne sont pas
plus levs quailleurs. Pis, il y a plus de demandes que doffres, ce qui a tendance
peser sur les salaires. Explications.
C
omme le rappelle Alexandre Pham
(prsident Lynx RH, cabinet de recru-
tement), le jeu vido est un segment
du march informatique et il connat une
assez forte croissance. Des diteurs et stu-
dios se crent rgulirement. Il y a un ct
glamour. Ce sont des passionns. Mais il y a
des contrastes entre les grosses machines
trs structures avec leur ambiance de tra-
vail et les petits studios , prcise Alexandre
Pham.
Attention ne pas avoir une fausse ide du
monde du jeu vido, il sagit dun march
trs concurrentiel, particulirement sur les
plateformes mobiles o la pression sur les
dveloppeurs est forte et plus lditeur sera
petit, plus sa prennit sera fragile (bien
entendu, ce nest pas une gnralit), car
son succs repose sur quelques jeux qui doi-
vent tre utiliss par des millions de joueurs.
Beaucoup de gens pensent que cest tout
rose ! Le dveloppeur de jeu ne passe pas
son temps jouer. Il y a beaucoup de travail
derrire , prvient Pierre Sulpice (GameDev
Lab, Epitech). Ltudiant qui rve dtre dve-
loppeur de jeu doit avoir conscience de cette
ralit.
> Salaire : dveloppeur du
monde
Un dveloppeur de jeux vido va gagner
lquivalent dun dveloppeur classique .
Sur la rgion parisienne, nous serons vers
30 000 / annuels, voire, mme plutt
30 32 k. En province, nous serons dans
la fourchette basse, voire, sous les 30 k
comme nous la prcis Frdrique Doumic
(PDG Ouat entertainment). Ensuite, la four-
chette est trs large, pour les profils seniors /
pointus nous serons entre 40 et 60 000 ,
prcise Alexandre Pham. Comme dans le
march du dveloppement classique, les
profils trs pointus (ex. : outils 3D, anima-
tion, frameworks systmes), les salaires
peuvent rapidement monter, surtout pour
les grands studios.
Ensuite, il y a la dlo-
calisation du dve-
loppement quil ne
faut pas ngl i ger.
C est un mti er
trs concurrentiel.
Nous essayons de
sous-traiter ltran-
ger (des dveloppe-
ments) o les cots
seront parfois 4 5
infrieurs aux cots
franais , recadre
Frdrique Doumic.
Cela sera vrai pour du core code sans valeur
ajoute, ou sur des technologies trs spci-
fiques ou sur les besoins dinternationalisa-
tion des jeux. L encore le problme vient du
march trs concurrentiel du jeu notam-
ment sur plateforme mobile et les budgets
serrs des petits diteurs.
Dautre part, lattrait du jeu vido pousse les
jeunes diplms envoyer plus facilement
un C.V. La demande est souvent plus impor-
tante que loffre relle, ne favorisant pas la
valorisation salariale.
> Quelles comptences ?
Quels mtiers ?
Le jeu vido fait intervenir de nombreux
talents et technologies (selon le type de jeu) :
ambiance sonore / musique, dveloppeur
natif, dveloppeur multiplateforme, anima-
teurs 2D / 3D, dveloppeur gameplay, chef
de projets, dveloppeur doutils / core code /
moteurs, graphistes et crateurs, intelligence
artificielle, R&D, veille technologique.
Des studios tels que Ouat Entertainment
recherchent pl utt des dvel oppeurs
passe-partout trs polyvalents, capables
de sadapter trs rapidement de nouveaux
contextes, une nouvelle technologie ou plate-
forme. Il y a un an, on faisait du jeu Flash,
aujourdhui on revient du C++ et C , com-
mente Frdrique Doumic. Il ny a pas un
profil type. Certains vont faire plus de R&D
avec moins de code, dautres feront de la
programmation qui tache , dautres plus
de la 3D , renchrit Pierre Sulpice.
Un dveloppeur gameplay sera souvent un
ingnieur (bac + 5). Mais cela va dpendre
du studio et du type de jeu : un jeu en ligne
exige une matrise des technologies web,
voire rseau, o mme un modle multi
joueur ; un jeu mobile exige souvent la matri-
se des langages et outils adapts chaque
plateforme (si le jeu est natif). Pour la 3D
(graphisme, modlisation, animation, textu-
re, etc.), le dveloppeur devra matriser les
outils, le C++ le plus souvent. Le but nest
pas de tout faire la main mais dutiliser des
librairies et des moteurs ddis (Unity,
Direct3D, OpenGL, etc.). Ce qui exige tout
de mme une sol i de experti se et une
constante veille technologique.
Lautre profil est le dveloppeur crant et
maintenant les outils de cration. Car sou-
vent, les studios utilisent leurs propres
outils, ce qui ncessite des dveloppements
trs spcifiques. #
Les 3 G
Game Art : orient graphisme, ambian-
ce graphique et sonore,
Game Design : partie logique du jeu,
Gameplay : tout ce qui se rapporte au
modle de jeu, linteraction jeu - joueur
46-51 20/02/13 12:42 Page 47
> Les principaux mtiers
du jeu vido
Les grosses productions de jeu ayant atteint
celles des productions de films, les gn-
riques de fin sont devenus comparables
ceux des films hollywoodiens. Dans ces
gnriques on peut voir une multitude de
profils diffrents comme un producteur, des
Game Designers*, des Sound Designers,
des artistes, des dveloppeurs, et bien
dautres. Ces profils englobent bien vide-
ment chacun plusieurs mtiers.
Le producteur de jeu supervise lensemble
de la production, le dlai, le budget, la com-
munication externe, etc. Les Game Desi-
gners ont un mtier trs jeune, leur rle
tait avant assur par le Lead programmeur
(responsable du dveloppement). Ils soccu-
pent de la conception du jeu dans sa globali-
t, de lide au rsultat final. Un Game
Designer peut aussi bien tre sur le game-
play*, le level design ou diriger lquipe cra-
ti ve. Les Sound Desi gners s occupent,
comme on peut le deviner, du son. De lac-
quisition aux musiques et bruitages finaux,
De nombreux mtiers
et des dveloppeurs au cur des jeux
Lunivers du jeu vido attire normment de monde, que ce soit les dveloppeurs, mais
galement les artistes, scnaristes, etc. Il a dpass, au niveau mondial, lindustrie du
cinma et de la musique. Mais en France, le secteur du jeu vido reste une niche,
puisquil concerne moins de 300 entreprises en France (environ 5000 emplois), malgr
le fait que la France soit le second pays producteur de jeux vido dEurope.
en passant par la phase de mixage, afin dob-
tenir le bruit dimpact de balle voulu (et
autres sons). Pour les artistes, cela va de
linfographiste 3D (cration dimages et
modles 3D) au directeur artistique, en pas-
sant par le Character Designer (modlisa-
PROgrammez ! < 48 > MARS 2013
i
carrire
tion de personnages) et lanimateur. Les
dveloppeurs, quant eux, peuvent tre
dcoups en trois profils que nous allons
dtailler.
> Les dveloppeurs
Il y a diffrents types de dveloppeurs dans
le monde du jeu vido. Vous pouvez assez
facilement le deviner en regardant les jeux
de ces dernires annes.
On peut sparer ces dveloppeurs en trois
grosses catgories : moteur, middleware et
gameplay.
Moteur
Le moteur de j eu est un ensembl e de
briques, qui une fois assembles permettent
de crer un monde virtuel plus ou moins ra-
liste. Il permet aux quipes de Game desi-
gner/dveloppeurs de se concentrer sur le
contenu et le droulement du jeu, et non sur
la technique de rendu 3D, ou la faon de
faire transiter les donnes via le rseau, etc.
Il y a bien sr plusieurs types de dvelop-
peurs moteur : 3D, physique, son, rseau,
etc. Les moteurs daujourdhui doivent tre
Fig.1
Fig.2
Unreal Development Kit
Unity 3D
46-51 20/02/13 12:42 Page 48
multiplateformes, ils doivent aussi bien tour-
ner sur PC, Xbox360, PS3, WiiU, PSVita ou
3DS. Pour cela, les dveloppeurs moteur
travaillent sur du code spcifique chaque
plateforme et utilisent le langage de pro-
grammation adquat chacune dentre elles
(C/C++ pour la plupart).
Middleware
Le middleware est un ensemble doutils, mis
disposition des Game Designers et dve-
loppeurs gameplay. Il permet la cration des
niveaux, et le dveloppement du gameplay.
Le dveloppeur middleware travaille donc
sur lamlioration de ce dernier, que ce soit
sur la partie diteur du monde pour les
game designers, ou sur la partie compr-
hension des rgles dveloppes par les
dveloppeurs gameplay. Les principaux lan-
Tu travailles actuellement Ubisoft
Montral, dans quelle quipe es-tu ?
Boris : je suis programmeur dans l'quipe
qui a produit Far Cry 3 et je travaille plus
prcisment dans la cellule Gameplay.
Quel est le rle de cette quipe ?
B.L'quipe gameplay est responsable de
toutes les interactions entre le joueur et le
jeu. Les contrles, dplacements du hros,
dgts des armes, les mouvements de cam-
ra... Je m'occupe en particulier du manie-
ment et des interactions avec les vhicules.
As-tu interagir avec dautres types de
profils ?
B. Bi en sr ! La producti on d' un j eu
implique beaucoup de corps de mtiers et
j'ai interagir avec beaucoup d'entre eux.
En premier, avec mon Game Designer qui
met des volonts par rapport aux vhi-
cules et qui va s'assurer qu'ils s'intgrent
bien dans le reste du jeu. Les testeurs
sont l pour valider ce que je produis,
dtecter les rgressions ou simplement
les problmes de design. J'interagis avec
d' autres programmeurs, spci al i ss
notamment en Intelligence Artificielle (les
ennemis qui utilisent les vhicules) et Phy-
sique (collisions, acclration...). Aussi
avec des artistes, pour les effets spciaux
et pour les vhicules eux-mmes. Et enfin,
avec des ingnieurs son qui vont donner
vie au jeu.
Pourrais-tu nous donner le droulement
dune journe type ?
B. Ma journe commence par un th, puis
je rattrape les mails reus durant la nuit
(nous interagissons avec des gens partout
dans le monde). Ensuite, je rcupre la der-
nire version du jeu et vrifie si des bugs
majeurs me concernant ont t trouvs par
nos testeurs. Ensuite, runion avec toute la
cellule gameplay histoire de voir o tout le
monde en est et ce qu'il y a faire durant la
journe. Gnralement, je reois des volon-
ts de la part des designers. Nous en discu-
tons et ds que nous arrivons une solution
qui nous convient, je passe au code. Une
fois mon code valid par un de mes col-
lgues, je soumets au reste de l'quipe !
Quelles sont les comptences primor-
diales pour travailler dans ton quipe ?
B. La volont constante de rvolutionner
l'industrie du jeu vido ! Sincrement, il
faut avant tout tre passionn de jeux.
Ensuite viennent : une bonne communica-
tion (anglais et franais), une ouverture
sur les autres domaines et savoir pro-
grammer, bien sr.
Sur quels jeux as-tu travaill ?
B. R.U.S.E, Child of Eden et Far Cry 3.
Pour moi, c'est un peu particulier puisque
j'ai aussi fait un certain nombre de courtes
missions sur d'autres jeux tels qu'Assas-
sin's Creed et Ghost Recon.
Quel est ton parcours, de ta formation
aujourdhui ?
B. J'ai travaill presque 3 ans dans l'quipe
ditoriale d'Ubisoft Paris avant de venir ici
Montral ou je travaille depuis presque 2 ans.
Quelle a t ta formation post-bac ?
B. J'ai t l'EPITA, une cole d'ingnieur
en informatique situe prs de Paris.
O te vois-tu dans 5 ans ?
B. Je n'en sais rien, j'aime beaucoup ce
que je fais pour le moment donc je vais
continuer. Mais je pense m'orienter plus
tard vers un rle cratif ou alors quelque
chose qui n'a vraiment rien voir.
Quels conseils donnerais-tu des tu-
diants ou jeunes diplms passionns de
jeux vido ?
B. Ce qui m'a probablement le plus aid
lorsque j'ai cherch mon premier stage
c'tait de m'tre constitu un portfolio
contenant 3 projets que j'avais faits durant
mes tudes et qui montrait ma motivation.
Sinon, toujours rester l'afft des nou-
veauts, lire et s'intresser au monde !
PROgrammez ! < 49 > MARS 2013
i
carrire
Interview de Boris Briss,
programmeur chez Ubisoft Montral
Dfinitions
Game Designer : Il ny a pas directe-
ment de traduction pour Game Desi-
gner en franais, on pourrait dire :
concepteur de jeu.
jouabilit : ressenti dun joueur lors
dune partie de jeu vido
Epita : Ecole Pour lInformatique et les
Technologies Avances (www.epita.fr)
Epitech : lEcole de lInnovation et de
lExpertise Informatique (www.epitech.eu)
ENJMIN : Ecole Nationale du Jeu et
des Mdias Interactifs Numriques
(www.enjmin.fr)
ISART Digital : lEcole du Jeu Vido
et du Film 3D (www.isartdigital.com)
Afin de mieux comprendre ce quest le mtier de
dveloppeur de jeux vido, je me suis rapproch de Boris
pour lui poser quelques questions.
gages de programmations utiliss pour les
middlewares sont le C++ et le C# [Fig.1 et 2].
Gameplay
Le gameplay est la perception du joueur lors-
quil est en train de jouer. Pour la program-
mation gameplay on parle gnralement de
3C : camera, control, character (camra,
contrle, personnage). La camra peut tre
diffrente suivant le type de jeu. Les trois
types de camras les plus utilises sont : la
1re personne, la 3e personne et la vue de
dessus. La camra la 1re et 3e personne
sont le plus souvent utilises pour des jeux
de tir ou daventure, quant la camra en
vue de dessus, elle est utilise pour les RTS
(Real-Time Strategy). Les contrles sont
bien videment les manettes, clavier, souris
et autres pads. Leur maniabilit doit tre
46-51 20/02/13 12:42 Page 49
i
carrire
adapte au jeu, mais aussi au niveau du
joueur. Le personnage, quant lui, a des
actions possibles ; la marche, la course, le
saut, le fait de pouvoir s accrocher au
rebord dune falaise, de tenir une hache
dans chaque main, etc.
Le gameplay doit tre le mme, peu importe
la plateforme, cest pour cela que le dvelop-
peur gameplay utilise un middleware (quil
soit interne la socit ou externe tel quUn-
real ou Unity). Son langage de dveloppe-
ment dpend donc du middleware choisi
(Unreal : C++ ; Unity : C#, Javascript ;
CryEngine : LUA).
> Comptences
Les comptences demandes en tant que
dveloppeur dans le jeu vido varient bien vi-
dement suivant le type de dveloppement.
Le dveloppeur moteur doit tre trs bon en
C et C++. Il doit savoir lire et comprendre une
documentation technique (en anglais).
Les optimisations spcifiques aux plate-
formes sont importantes pour quun moteur
de jeu soit puissant, il doit donc connatre les
spcificits des plateformes sur lesquelles il
travaille.
Le dveloppeur middleware doit quant lui
pouvoir sadapter, dialoguer, comprendre les
besoins. Il doit sadapter et comprendre le
moteur de jeu afin de pouvoir construire les
outils qui se reposent dessus.
Mais le dialogue et la comprhension des
besoins des game designers et des dvelop-
peurs gameplay sont trs importants pour
permettre de faire les outils les plus perti-
nents. Les dveloppeurs gameplay sont un
peu dans le mme cas que les dveloppeurs
middleware, ils doivent constamment chan-
ger avec l es Game Desi gners af i n de
rpondre leurs besoins, ainsi quavec les
testeurs, afin de prendre en compte leurs
retours.
> Les formations
Les formations pour devenir dveloppeur,
que ce soit moteur, middleware ou game-
play, sont vraiment varies. Attention tout de
mme, quelle que soit la formation choisie, il
est indispensable dtre polyvalent, cratif,
de savoir travailler en quipe et parler
anglais afin de russir dans ce milieu (la ma-
trise de lAnglais, surtout loral, peut tre
un facteur dchec lembauche, NDLR).
Gnralistes
Les coles de dveloppement gnralistes
(comme Epita* et Epitech*) permettent
dapprendre le dveloppement, et la plupart
conti ennent dans l eur cursus soi t une
option jeu vido, soit un/des projet(s) dit
libre(s) qui permettent aux tudiants de sy
essayer.
Mais attention, ce nest quune trs petite
partie des tudiants de ces coles qui
sorientent vers le jeu vido.
Ce type de formation est gnralement
accessible directement en post-bac mais il y
a galement la possibilit dintgrer ces
coles en 2e et 3e anne.
# Benjamin Baldacci
Directeur Pdagogique Game Pro-
gramming chez ISART Digital
www.isartdigital.com
Spcifiques
Les coles de jeux vido ont, elles, un cursus
compltement orient vers le jeu (comme
ENJMIN* et ISART Digital*). Elles ont gale-
ment un atout par rapport aux coles gn-
ralistes, qui est la mixit des profils. En effet
ces coles ne forment pas que des dvelop-
peurs, elles forment galement des artistes,
des Game Designer, des Sound Designer et
des producteurs. Il y a donc normment
dchanges entre les tudiants des diff-
rentes formations, mais galement des pro-
j ets communs qui l eur permettent de
travailler en quipe avec les profils quils ren-
contreront dans les studios. Suivant les
coles, lentre et le nombre dannes diff-
rent. Pour lENJMIN, la formation est acces-
sible partir du BAC+3, et a une dure de 2
ans. Pour ISART Digital, la formation est
accessible directement aprs le BAC et dure
4 ans. Il est galement possible dintgrer le
cursus en 2e et 3e anne. #
Linformation permanente

Lactu de Programmez.com : le fil dinfo quotidien

La newsletter hebdo :
la synthse des informations indispensables.
Abonnez-vous, cest gratuit !
www.programmez.com
46-51 20/02/13 12:42 Page 50
PROgrammez ! < 51 > MARS 2013
i
carrire
Un bon tudiant ou dveloppeur ne fait pas
forcment un bon dveloppeur de jeux vido !
Isart Digital est une cole prive denseignement suprieur, spcialise dans le jeu vido et les
films 3D. Elle a t cre en 2001 et dlivre un titre homologu de niveau II. Preuve de sa qualit,
en 8 ans, elle a rafl 50 prix. Elle a tiss un partenariat avec le NCC, cole de jeux vido japonaise.
Et depuis janvier 2013, un tablissement a t ouvert au Canada. Cyril Georgin, responsable des
relations entreprises et institutionnelles, nous parle du mtier, des cursus et de lemploi.
Comment se situe la grille salariale dans
ce mtier ?
Cyril : Daprs le rfrentiel mtier du SNJV
(Syndicat National du Jeu Vido), un pro-
grammeur spci al i s ( I A, outi l s, phy-
sique,), un programmeur Moteur et un
programmeur Gameplay volueront entre
27K et 45K, un Lead Programmeur entre
32K et 45K et un Directeur technique
entre 44K et 55K. Tous ces chiffres sont
des moyennes et dpendent de la taille du
studio et du projet de jeu vido.
Quel avenir ?
Cyril : Au regard des diffrentes tudes insti-
tutionnelles, le march du jeu vido bnficie
devant lui de plusieurs annes avec une trs
forte courbe de croissance, qui va profiter
lemploi des programmeurs jeux vido. A eux
de continuer se former tout au long de leur
carrire, tre en veille et alerte perma-
nentes pour suivre les volutions des techno-
logies et langages de programmation. #
Quel est aujourd'hui le march du jeu vido
pour un diplm, quelqu'un qui souhaite
devenir dveloppeur de jeux ?
Cyril : Depuis plusieurs annes, le march
franais peine trouver des programmeurs
embaucher ! Dans ce contexte trs parti-
culier de quasi plein emploi pour les pro-
grammeurs, ceux qui se spcialisent dans le
jeu vido sont trs recherchs. Quil code,
assemble, scurise, teste ou dbogue, le
programmeur devra toujours garder les-
prit que lutilisateur final est un joueur.
Dveloppeur de jeux vido, qu'est-ce que cela
signifie ? Cest quoi ? Quelles comptences,
quelles motivations cela demande-t-il ?
Cyril : Pendant de longs mois, les acteurs du
jeu vido se sont runis et penchs sur cette
question afin de dfinir trs prcisment les
mtiers du jeu vido. Le rfrentiel du SNJV
(Syndicat National du Jeu Vido, NDLR),
auquel lcole a particip, a list les diffrents
profils de dveloppeur de jeux vido . Il y a
en effet plusieurs mtiers derrire ces termes
: Lead Programmeur, Programmeur Moteur,
Programmeur Gameplay et les Programmeurs
spcialiss (IA, Outils, Physique, etc). Tous
ces mtiers peuvent mener, avec de lexprien-
ce et du talent, au poste de Directeur Tech-
nique. Des comptences sont communes aux
programmeurs. Ensuite, chacun viendra ajou-
ter son expertise correspondant sa spciali-
t. En plus de lapprentissage constant des
outils, langages et particularits des moteurs
de jeux vido, le programmeur devra tre
rigoureux, logique et ractif, et bien videm-
ment passionn de jeux vido.
La formation est importante mais en quoi
consiste-t-elle ? Faut-il avoir un bon "fee-
ling" technique et artistique la base ?
Cyril : La formation est essentielle pour
acqurir les diffrents langages et mthodes
de programmation, apprendre faire une
veille technologique et matriser la logique de
programmation oriente jeux vido, et bien
dautres choses encore. Programmer pour
le jeu vido implique galement dintgrer
une quipe de production de jeu, et de tra-
vailler avec des game designers, des game
artists, des sound designersIl faut compo-
ser avec ces profils diffrents et les sensibili-
ts ar ti sti ques, et comprendre l es
contraintes de chacun. Le travail en quipe
sexprimente. Cest pour cela que les tu-
diants en programmation jeu vido partici-
pent l a crati on d un j eu vi do en
collaboration avec les autres formations de
lcole en tant que programmeur (3e anne)
et lead programmeur (4e anne).
Comment se droule un cursus chez vous ?
Cyril : Le cursus de Game Programming
dure 4 ans. Les deux premires annes sont
temps plein et consacres la pure
programmation. Un atelier dun mois sand-
box est intgr la premire anne et per-
met de sessayer la programmation. La
spcialisation en programmation jeu vido
se fait en 3e et 4e anne (en alternance). La
spcialisation est accessible aux candidats
extrieurs sur concours.
Quels dbouchs en France et l'tranger ?
Cyril : Les dbouchs restent nombreux pour
les programmeurs jeux vido. Il y a un milliard
de joueurs dans le monde, dont 28 millions en
France, le march est dans une courbe de
croissance trs forte et ce pour encore plu-
sieurs annes. Certains observateurs consid-
rent que 50% des entreprises utiliseront la
Gamification dici 2015. Les comptences
du programmeur jeux vido permettent un
profil junior de choisir la France ou lun des
pays qui recherchent galement des bons pro-
grammeurs (USA, Canada, Japon, Chine, ).
Nous accompagnons dailleurs nos tudiants
sur lapprentissage des langues (Anglais, japo-
nais) afin de leur donner ce choix, de sexpa-
trier, une fois diplms.
Viens crer ton jeu 2013
Les 6 et 7 avril prochains se droule-
ront les finales du concours Viens
crer ton jeu organis par Epitech et
Game One. Les inscriptions sont closes
depuis fin fvrier. Ce dfi est rserv
tous les passionns de 16 20 ans !
Aucune notion de dveloppement nest
ncessaire : un logiciel spcialement
personnalis pour loccasion te sera
fourni. Aprs une sance de prsenta-
tion de loutil et du droulement du
week-end, tu auras le champ libre pour
laisser cours ton imagination.
Site : http://www.vienscreertonjeu.fr
Un joli dfi !
46-51 20/02/13 12:42 Page 51
PROgrammez ! < 52 > MARS 2013
i
je dbute avec...
Dmystifier le dveloppement
des plug-ins dEclipse
Implmenter lvaluation des expressions XPath
L
ide utilise dans cette classe est simple, une expression
XPath est value. Selon son rsultat le nom ou la valeur dun
nud XML est modifi. Cette modification sert marquer les
parties concernes dans le fichier XML.
Lexemple interactif est parfait pour examiner lvaluation XPath. Un
ensemble dexpressions est fourni, permettant la slection de
lune delles dafficher le rsultat dans le source, avec une petite
explication de lexpression.
> Crer un DOM et obtenir un objet XPath
public class XPathEval {
private XPath path;
private Document document;
//constructeur
public XPathEval(File file)
{
try {
//On commence par obtenir un objet DocumentBuilder object,
//en utilisant un objet DocumentBuilderFactory
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
//Une rfrence un objet Document dans le DOM
document=builder.parse(file);
//Obtenir un objet XPath
XPathFactory xpfactory = XPathFactory.newInstance();
path = xpfactory.newXPath();
} catch (Exception e)
{
e.printStackTrace();
}
}//~constructeur
Note : DOM est la reprsentation en mmoire de larborescence
dun document XML
XPath permet de localiser une partie(s) dans un document XML,
sans tre oblig de parcourir tout le document.
> valuer une expression XPath et trouver
le type du rsultat
//Lvaluation dune expression peut retourner NodeList, Boolean
ou un objet Double.
//Il y a aussi une mthode retournant aprs lvaluation dune
expression une chane de caractres
//comme reprsentant du rsultat de cette expression. Nous allons
commencer par utiliser cette mthode.
//Rechercher dans le rsultat de cette mthode (String), on peut
trouver un indice sur le type susceptible
//dtre retourn, par lexpression XPath et par consquent
utiliser une mthode dvaluation plus
//approprie
Object eval(String exp)
{
Object object=null;
if(exp==null || exp.trim().equals())
return null;
try {
//obtient le rsultat dune expression sous forme dune chane
de caractres
String result=path.evaluate(exp,document);
result=result.trim();
//Si lexpression est Boolean, la chane contiendra une valeur
true ou false
if(result.equals(true) || result.equals(false))
{
//nous savons maintenant que le rsultat est un Boolean
4
e
partie
Nous disposons dj dun plug-in dot de templates pour ldition XML en Java, des
cheat sheets, dont certains utilisent des images personnelles. Notre objectif dans cet
article est de dvelopper une classe personnelle pour valuer les expressions XPath,
passes par lutilisateur pour pouvoir les marquer sur le source XML. La classe
utilise dans le plug-in est nomme XPathEval. Cette classe va tre utilise par la
suite la fois pour lexemple interactif et pour laffichage dune fentre ddie au
visualiseur XPath V.XPath.
52-59 20/02/13 08:34 Page 52
PROgrammez ! < 53 > MARS 2013
i
je dbute avec...
//nous demandons le retour dun Boolean, comme rsultat
//avec XPathConstants.BOOLEAN
object=path.evaluate(exp,
document,XPathConstants.BOOLEAN);
//La chane doubleOrBooleanMsg est utilise pour laffichage,
du rsultat si Boolean ou Number
//la chane ici contient true ou false
this.doubleOrBooleanMsg=object.toString();
//lobjet retourn va tre analys plus tard
return object;
}
//arriv ici le rsultat nest pas Boolean. Second test, trouver
si un Number
try {
//on essaye dobtenir le rsultat comme un objet Double. Si lexception
//NumberFormatException est lance, ce nest pas un Double
Double.valueOf(result);
//pas dexception, donc XPathConstants.NUMBER (Double en Java)
object = path.evaluate(exp,
document,XPathConstants.NUMBER);
//ajouter la valeur du Double dans le message
this.doubleOrBooleanMsg=object.toString();
return object;
} catch (NumberFormatException en) {
//une exception est lance. Peut-tre le type est NodeList
}
//Arriv ici on peut supposer que le type est
//NodeList
object = path.evaluate(exp,
document,XPathConstants.NODESET);
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
return object;
}
> Doit-on modifier le DOM ?
Si la mthode dvaluation dexpression XPath, qui retourne une
chane String, retourne un rsultat de type Boolean, Double ou null,
on affiche simplement ce rsultat la fin de laffichage XML. Par
contre un autre type de rsultat implique la modification de larbre
DOM, pour marquer les parties concernes (Laffichage se fera
sous forme HTML dans le navigateur par dfaut dEclipse).
La mthode dvaluation String evalAll(String) est appele pour
effectuer lensemble des oprations ncessaires pour aboutir un
stream HTML.
//cette mthode appelle la mthode eval(String). Si le rsultat
est une NodeList
//on modifie le DOM, on transforme en HTML et on retourne une
chane de caractres en HTML
String evalAll(String exp)
{
Object object = eval(exp);
//object nest pas null, Boolean ou Double. La mthode eval
(String), retourne
//donc un objet NodeList.
//Appeler la mthode modifyDOMTree() pour modifier le DOM
if(object != null
&&!object.getClass().getSimpleName().equals(Boolean)
&& !object.getClass().getSimpleName().equals(Double))
modifyDOMTree((NodeList)object);
//retourne le DOM comme une chane de caractres formate en HTML
return transform2Html();
}
> Modifier le DOM
La mthode ModifyDOMTree(NodeList) Se charge de modifier le
DOM. Les nuds modifis seront affichs avec une couleur dif-
frente en utilisant des balises HTML.
//obtenir un objet NodeList aprs lvaluation de lexpression
XPath. Modifier les nuds trouvs //dans le DOM
private boolean modifyDOMTree(NodeList nodeList)
{
boolean modified=false;
if(nodeList ==null)
return false;
//boucler sur les nuds retourns
for(int i=0;i<nodeList.getLength();i++)
{
Node node=nodeList.item(i);
//pour les nuds lments et attributs on modifie le nom, pour
les textes et commentaires
//on modifie la valeur du nud
switch (node.getNodeType())
{
case Node.ELEMENT_NODE:
case Node.ATTRIBUTE_NODE:
52-59 20/02/13 08:34 Page 53
PROgrammez ! < 54 > MARS 2013
i
je dbute avec...
modified=modifyNodeName(node);
break;
case Node.TEXT_NODE:
case Node.COMMENT_NODE:
modified=modifyNodeValue(node);
break;
}//~switch
}//~for nodelist
return modified;
}
> Modifier le nom dun nud
Dans notre mthode ModifyNodeName(Node), on utilise la mthode
renameNode(Node n, String namespaceURI, String qualified
Name) de lobjet Document, en mettant une sorte de balise person-
nalise avant et aprs le nom du nud. Ces balises vont tre rem-
places par la suite par des balises ou tags de prsentation HTML
private boolean modifyNodeName(Node node)
{
Node newNode=this.document.renameNode(node, node.getNamespaceURI(),
b_span_+node.getNodeName()+_e_span_);
return true;
}
> Modifier la valeur dun nud
Les nuds de type texte ou commentaire nont pas de noms. Pour
cette raison, on change leur valeur. Comme pour les noms, cette
valeur va tre affiche avec une couleur diffrente dans HTML, en
entourant cette valeur par une balise personnalise. La mthode
ModifyNodeValue(Node) utilise la mthode setNodeValue(String
nodeValue) de lobjet nud Node.
private boolean modifyNodeValue(Node node)
{
node.setNodeValue(b_span_+node.getNodeValue()+_e_span_);
return true;
}
> Prparer laffichage HTML
Notre mthode String evalAll(String exp) retourne une chane de
caractres, formate en HTML. La mthode transform2Html() se
charge de formater tout, correctement, en HTML. Les nuds mod-
ifis sont affichs en couleur diffrente refltant le rsultat retourn
par lvaluation dune expression XPath.
private String transform2Html()
{
ByteArrayOutputStream memBuffer=null;
String sBuffer=null;
try
{
//construire un buffer dans la mmoire en utilisant
ByteArrayOutputStream
//ceci peut tre utilis pour crire/lire le DOM, comme dans
un fichier, il est utilis pour modifier
//des tags HTML
memBuffer=new ByteArrayOutputStream();
//construire un objet Transformer. Cet objet sert crire en XML
//vers le buffer
Transformer t = TransformerFactory.newInstance().newTransformer();
//la sortie doit tre en XML
t.setOutputProperty(OutputKeys.METHOD, xml);
//crire le DOM modifi en mmoire
t.transform(new DOMSource(this.document), new StreamResult
(memBuffer));
//obtenir le buffer en mmoire dans une chane de caractres
sBuffer=memBuffer.toString();
//remplacer les tags (personnaliss) ajouts au nom ou la
valeur dun nud
//les rsultats sont des tags <span> utiliss avec un style CSS
sBuffer=sBuffer.replaceAll(b_span_,[span]);
sBuffer=sBuffer.replaceAll(_e_span_,[/span]);
//aprs ltape prcdente un nud avec un nom modifi devient
//<[span]node_name[/span]>
//...
//</ [span] node_name[/span]>
//pour les tags ouvrants dun nud (premier cas mentionn juste
avant),
//dplacer < aprs [span] et [/span] aprs >. Le second cas
est valable pour
//la fin dune balise de fermeture
sBuffer=sBuffer.replaceAll(\\<\\[span\\],[span]<);
sBuffer=sBuffer.replaceAll(\\[\\/span\\]\\>,>[/span]);
//pour les tags fermants (louverture dun tag fermant), dplacer
</, aprs [/span]
sBuffer=sBuffer.replaceAll(\\<\\/\\[span\\],[span]</);
//remplacer les < et > par des caractre dchappement pour
laffichage en HTML
sBuffer=sBuffer.replaceAll(<, &lt;);
sBuffer=sBuffer.replaceAll(>, &gt;<br/>);
//remplacer [span] par <span>
sBuffer=sBuffer.replaceAll(\\[,<);
sBuffer=sBuffer.replaceAll(\\],>);
//si message concernant le type Boolean ou Double, ajouter le
52-59 20/02/13 08:34 Page 54
PROgrammez ! < 55 > MARS 2013
i
je dbute avec...
message ici
if(this.doubleOrBooleanMsg != null && !this.doubleOrBooleanMsg
.trim().equals())
{
sBuffer+=<br/><br/><span>Result:+this.doubleOrBooleanMsg+<
/span>;
}
//ajouter un en-tte et une fermeture pour lHTML (ces deux
sont dclars au niveau de la classe
//avec un style pour le tag <span>
sBuffer=this.beginHtml+sBuffer+this.endHtml;
}
catch(Exception e)
{
e.printStackTrace();
}
return sBuffer;
}
> Afficher le rsultat dune expression XPath
Nous avons dj vu, comment afficher des images dans les cheat
sheets. Ceci est aussi valable pour dautres types de ressources. On
utilise la classe personnelle dfinie dans notre plug-in Abstract
ItemExtensionElement1 et sa mthode createControl(Composite),
en ajoutant un attribut ditem dans une cheat sheet la place
dsire daffichage. Pour laffichage en HTML, on utilise le naviga-
teur fourni avec Eclipse.
Note :
La classe AbstractItemExtensionElement1 tend (extends) la
classe AbstractItemExtensionElement. Dans cette classe, nous
ajoutons des mthodes personnalises (override)
Note :
Nous allons rutiliser le mme attribut myAtt dfini prcdem-
ment dans le plug-in. Seule la valeur de lattribut change, ce qui
permet de personnaliser laffichage selon la valeur utilise. Par
exemple si la valeur passe la mthode, handleAttribute(String)
est browser, nous appelons la mthode XPathEval.
evalAll(String) et affichons le fichier XML en HTML, avec si
besoin des parties marques, dans le navigateur dEclipse. Si sa
valeur est copy, nous affichons un message de copyright, etc.
Voir le code complet sur le site www.programmez.com
# Kaesar Alnijres
Dveloppeur Java - Leader jug-cergy
http://www.java-javafx.com
52-59 20/02/13 08:34 Page 55
PROgrammez ! < 56 > MARS 2013
i
je dbute avec...
D
ans ce contexte, les services Cloud de type PaaS comme
Heroku prsentent un intrt vident pour dployer rapide-
ment des applications web dans le Cloud en bnficiant de
toute la puissance de ces infrastructures. Dans cet article nous
nous proposons, aprs une prsentation dHeroku, de voir comment
dployer une application Java EE dans le Cloud grce la platefor-
me. Proposant un grand nombre de composants additionnels, Hero-
ku permet ainsi un choix intressant de bases de donnes quelles
soient relationnelles (MySQL ou PostgreSQL) ou bien NoSQL avec
MongoDB et Redis par exemple. Les nombreux add-ons disponibles
couvrent la plupart des besoins classiques des applications dentre-
prise savoir lenvoi de mails, la gnration de documents PDF ou
Excel, les besoins en systmes de messages asynchrones avec Rab-
bitMQ, la gestion du cache ou bien encore le monitoring. Bien enten-
du, cette liste est loin dtre exhaustive et les possibilits offertes
sont nombreuses.
> Architecture
Reposant sur AWS (Amazon Web Services), linfrastructure dHero-
ku met profit plusieurs de ces services au sein de son architecture
parmi lesquels on peut citer EC2 pour lexcution du code et S3 pour
le stockage. Le but tant de mettre disposition de lutilisateur final
un environnement de dploiement et dexcution collant au plus prs
ses besoins. Rpondant au doux nom de Celadon Cedar, la stack
dexcution par dfaut dHeroku est base sur un Ubuntu en version
10.01 et met en pratique les 12 facteurs permettant de construire,
dployer et grer des applications web modernes (http://www.12fac-
tor.net/). Cette stack constitue un environnement dexcution flexible,
rsistant sur la dure, polyglotte car ntant bas sur aucun langage
de programmation en particulier et offrant tous les outils nces-
saires son introspection.
Au sein de larchitecture dHeroku [Fig.1], le point dentre du dvelop-
peur se situe au niveau des API de contrle. Ainsi, le dveloppeur va
grer la configuration de son projet via GIT et un dpt distant situ
sur la plateforme, tout en utilisant un ensemble doutils spcifique-
ment dvelopps pour loccasion : le Heroku Toolbelt. Constitu dun
outil en ligne de commande, il permet de crer et de gnrer des
applications sur Heroku et propose en sus, loutil Foreman pour ex-
cuter et dbugguer une application localement.
Une fois une application prcdemment cre sur Heroku pousse
vers le dpt Git distant, la plateforme se charge instantanment de
la compiler en un slug qui est une copie compresse et pr-packa-
ge de lapplication. Il sert optimiser sa distribution travers le
Dployer une application Java EE
dans le Cloud avec Heroku
Thmatique ne cessant de faire les gros titres depuis de nombreux mois dj, le
Cloud est omniprsent dans nos vies quelle que soit sa forme dutilisation. Concept
connu depuis longtemps, le Cloud a rellement merg au cur des annes 2000
sous limpulsion de gants du Web comme Google ou Amazon. Malgr quelques
rticences initiales, les entreprises nauront dautre solution terme que de sy
intresser sous peine de rater le train en marche.
Dyno Manifold dont nous dtaillerons le travail un peu plus loin. Un
slug constitue ainsi une unit matrielle logique adressant son
propre systme de fichiers transitoire et possdant une capacit en
RAM exclusive ainsi que dautres paramtres qui lui sont propres.
Durant la compilation en slug, la plateforme analyse le code dploy
afin den dduire le type dapplication faire tourner et de dtermi-
ner le Buildpack ncessaire son bon fonctionnement. La platefor-
me nayant pas de support pour un langage de programmation
spcifique par dfaut, cest en sappuyant sur les Buildpacks quelle
peut offrir un support pour un langage en particulier. Elle est de fait
bel et bien polyglotte. Il est bon de noter sur ce point que la platefor-
me est facilement extensible puisquil est possible de crer son
propre Buildpack qui nest au fond quun ensemble de scripts.
> Plateforme centre processus
Larchitecture Heroku tant centre sur les processus et non sur
des instances virtuelles ou des serveurs, une application peut dfinir
les processus ncessaires son excution. Cest durant la compila-
tion en slug que la plateforme dtecte les processus dfinis pour une
application et son bon fonctionnement, en se basant sur le contenu
du fichier Procfile dun projet. Si cest par dfaut, ce fichier nest pas
ncessaire puisque Heroku cre un processus de type web pour une
application, il est recommand de le dfinir pour une plus grande
flexibilit et un meilleur contrle. En ce qui concerne les processus,
la plateforme adopte le modle Unix qui est une abstraction puissan-
te pour excuter des programmes ct serveur. Appliqu au monde
du web, cela nous donne une solution unique facilitant la division des
tches et la scalabilit horizontale. Concrtement, un type de pro-
cessus est un prototype de processus facilitant son instanciation. Le
parallle avec le monde objet se fait trs facilement en considrant
Fig.1
Architecture gnrale d'Heroku
52-59 20/02/13 08:34 Page 56
PROgrammez ! < 57 > MARS 2013
i
je dbute avec...
la dfinition dune classe et lobjet reprsentant son instanciation.
Typiquement, un ou plusieurs processus de type web seront utiliss
au sein dune application. Il sagit en fait dinstances de serveurs web
permettant lexcution de requtes routes vers lapplication. En
sus, des processus de type worker pourront tre adjoints afin de
traiter en parallle les calculs tiers. Enfin, dautres processus sys-
tmes sont accessibles avec notamment la possibilit de scheduler
des traitements un instant donn.
> Dynos
Afin de faire tourner ces diffrents processus, des units dexcution
appeles dynos sont utilises. Un dyno constitue un conteneur pleine-
ment isol et rsistant dans le temps, charg dexcuter une com-
mande unique spcifie par l utilisateur. La scalabilit de la
plateforme se situe au niveau de ces dynos puisquil est possible de
spcifier le nombre de dynos allous pour un processus donn dune
application nimporte quel moment. Si la scalabilit horizontale dun
slug est pratiquement infinie pour chacun de ses dynos, il est bon de
garder lesprit que pour des applications web une stratgie trop
agressive peut ne pas savrer payante. En effet, dans ce type dappli-
cations les performances peuvent tre vite limites par les accs
base de donnes. Attention donc bien grer la scalabilit dune
application de manire cohrente. Tout au long de son travail, le dyno
va produire des logs dtaills en sappuyant sur le composant Logplex
de la plateforme, ce qui permet lutilisateur de savoir tout
moment ce qui est en train de se produire.
> Dyno Manifold
La gestion des dynos est ralise par le Dyno Manifold qui constitue
un environnement dexcution scalable et tolrant aux erreurs pour
les dynos dune application. A partir dune requte HTTP, il permet de
slectionner le ou les dynos utiliser pour y rpondre convenable-
ment. Les diffrents dynos affects un mme processus tant ex-
cuts dans des environnements physiques distincts, la plateforme
offre bien une tolrance aux erreurs de haut niveau. Le Dyno Mani-
fold affranchit lutilisateur du travail de gestion des processus dune
application dans le temps, en prenant sa charge le dmarrage et
larrt des dynos lorsque cela est ncessaire. Par exemple, lors-
quun de ces derniers connat une consommation mmoire suprieu-
re ce qui lui est permis. Lorsquun dyno dpasse son quota de
512Mb de mmoire, des messages derreur spcifiques sont pro-
duits au sein des logs et le dyno incrimin est instantanment arrt
et remplac grce au travail de gestion du Dyno Manifold. Il en va de
mme lors du crash dun dyno, ce qui permet lutilisateur de la pla-
teforme de saffranchir dune part de travail non ngligeable.
> Routage HTTP
En termes de gestion des requtes HTTP, Heroku load-balance auto-
matiquement les requtes reues en ajoutant cela le routage
depuis le hostname dune application vers ses dynos de type web. Le
composant de routage se base sur un algorithme alatoire pour le
dispatching des requtes vers les processus web. Il est bon de
signaler quavec un langage comme Java fournissant un support
multithread, il est bien entendu possible de grer des connexions
multiples au sein dun seul et unique processus.
Lenvironnement dune application [Fig.2] peut sembler complexe
premire vue avec la ncessit de se familiariser avec la terminolo-
gie Heroku en se frayant un chemin au travers des slugs, dynos ou
autres procfiles. Nanmoins, le processus de dploiement reste
simple et la matrise des diffrents concepts exposs jusqu pr-
sent nest pas obligatoire pour dbuter sur Heroku. Il est cependant
toujours intressant de mieux comprendre ce quil se passe sur une
plateforme, ce qui savrera utile au fur et mesure lors de cas duti-
lisation plus pousss.
> Prix
Une fois un compte utilisateur cr, Heroku propose gratuitement
lexcution dune application avec un seul dyno faisant tourner un
processus de type web et la mise disposition dune base de don-
nes de 5Mb. Aprs les premiers tests de la plateforme, les besoins
augmentent et avec eux la ncessit de passer aux formules
payantes de la plateforme. Le modle conomique de Heroku repose
sur un adressage fin du temps dutilisation des dynos utiliss par un
slug. Ainsi, lallocation de dynos supplmentaires, de type web ou
worker, sera facture 0.05 $ de lheure mais permettra en contre-
partie damliorer les performances dune application, que ce soit en
nombre de requtes HTTP traitables ou en termes de puissance de
calcul. A contrario, certains processus systmes sont monitors
directement la seconde prs pour la facturation ! Heroku est donc
un PaaS automatis uniquement en excution puisquil est la char-
ge de lutilisateur de grer au mieux les besoins en scalabilit hori-
zontale dune application. Cette gestion ayant dailleurs un impact
direct sur la facturation dune application par Heroku. Il est bon de
noter que diverses possibilits existent pour automatiser cette ges-
tion du scaling, que ce soit via des services tiers ou via loffre grands
comptes de la plateforme. Enfin, lextension de la mmoire alloue
la base de donnes dune application aura galement un cot.
> En pratique
Pour les besoins de larticle, nous considrons une application
Java EE 6 utilisant les principales technologies dfinies par la spcifi-
cation. Base sur JSF 2, lapplication utilise ainsi galement JPA 2
pour la persistance et CDI pour linjection de dpendances. Pour
fonctionner, elle ncessite de fait la prsence dune base de don-
nes, ce qui permettra de tester la connexion une base de don-
nes PostgreSQL sur Heroku. Une fois la cration dun compte
gratuit ralise sur la plateforme, il faut tlcharger la suite Heroku
Toolbelt ladresse suivante : https://toolbelt.heroku.com/ . Une fois
celle-ci installe, votre poste pourra accder Git et Foreman, le
client ligne de commande Heroku permettant de travailler et
dchanger avec la plateforme. Dans un terminal, la premire tape
consiste sidentifier sur la plateforme laide de la commande
heroku login en fournissant son e-mail ainsi que son mot de passe
dinscription. Si vous ne possdez pas de cl publique SSH, la ligne
Fig.2
Environnement d'une application sur Heroku
52-59 20/02/13 08:34 Page 57
PROgrammez ! < 58 > MARS 2013
i
je dbute avec...
de commande Heroku vous proposera den crer une. Celle-ci tant
notamment ncessaire pour grer votre projet avec Git.
> Initialisation du dpt Git
Une fois plac dans le dossier de lapplication web dployer sur
Heroku, nous allons pouvoir initialiser le projet sous Git. Pour ce
faire, nous prcisons Git que le rpertoire target est ignorer et
nous ralisons le premier commit de la sorte :
echo target > .gitignore
git init
git add .
git commit -m "Init"
> Configuration de la base de donnes
Par dfaut, Heroku provisionne pour certaines applications une base
de donnes PostgreSQL propose en tant que add-on sur la platefor-
me. Afin de vrifier la prsence de cette base, il est possible de sai-
sir la commande heroku info au sein dun terminal. Au cas o la base
ne serait pas dj prsente, la ligne de commande suivante est
excuter pour ajouter le add-on PostgreSQL :
heroku addons:add heroku-postgresql
Dune taille de 5Mb, cette base suffit durant la phase de dveloppe-
ment pour diffrents tests mais pour une application en production,
il est ncessaire de passer des offres suprieures et payantes
dHeroku. Les informations de configuration de la connexion la
base de donnes sont rendues disponibles au travers de la variable
denvironnement DATABASE_URL.
Si la valeur de la variable peut tre obtenue suite un appel la com-
mande heroku config, il nest pas recommand dutiliser cette valeur
au sein dun fichier statique puisquelle peut changer tout moment
en fonction de lenvironnement.
De fait, il est ncessaire de rcuprer sa valeur lexcution au sein
du code dune application. La chane de caractres retourne par
DATABASE_URL est formate de la sorte :
[database type]://[username]:[password]@[host]:[port]/[database name]
Pour une application Java EE utilisant JPA 2 comme celle que nous
allons dployer sur le Cloud, il est donc ncessaire de modifier la
configuration daccs la base au dmarrage de lapplication. Pour
ce faire, il est possible demployer le code suivant :
Map addedOrOverridenProperties = new HashMap();
URI dbUri = new URI(System.getenv("DATABASE_URL");
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' +
dbUri.getPort() + dbUri.getPath();
// Surcharge des proprits
addedOrOverridenProperties.put("hibernate.connection.url", dbUrl);
addedOrOverridenProperties.put("hibernate.connection.username",
username);
addedOrOverridenProperties.put("hibernate.connection.password",
password);
// Cration avec surcharge des proprits
EntityManagerFactory factory = Persistence.createEntityManager
Factory("pu", addedOrOverridenProperties);
> Ajout du Jetty Runner
Jetty Runner va nous permettre dexcuter lapplication web Java EE
comme une application Java standard sans avoir la dployer au
sein dun conteneur. Il sagit en fait dun simple jar, nomm jetty-run-
ner.jar, quil va falloir copier au moment du packaging du projet au
sein du dossier target de lapplication et qui sera utilis pour excu-
ter le war du projet.
Ce dernier tant bas sur Maven, il suffit de mettre profit le plugin
maven-dependency-plugin en ajoutant le code suivant dans la partie
plugins du fichier pom.xml :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-runner</artifactId>
<version>8.1.8.v20121106</version>
<destFileName>jetty-runner.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
> Procfile
Comme expliqu prcdemment, Heroku met gratuitement dispo-
sition un dyno avec un processus de type web que nous employons
pour notre application Java EE. Cette configuration seffectue au sein
dun fichier Procfile positionn la racine du projet. En son sein, il
faut prciser que nous lanons le dyno web pour le Jetty Runner
avec en entre le WAR gnr pour lapplication. Cette opration est
dtaille de la sorte :
web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar -
-port $PORT target/*.war
Le processus tant de type web, les requtes HTTP reues en
entre seront transmises au Jetty Runner et par ce biais notre
application.
> Test local
Avant de dployer lapplication sur la plateforme Heroku, nous la tes-
tons en local pour vrifier son bon fonctionnement et dbugguer
dventuels problmes. Avant toute chose, nous packageons lappli-
cation grce Maven via mvn package. Ensuite, le test peut tre
ralis de 2 manires diffrentes. La premire solution consiste
simplement excuter au sein dun terminal la ligne de commande
suivante :
52-59 20/02/13 08:34 Page 58
PROgrammez ! < 59 > MARS 2013
i
je dbute avec...
java -jar target/dependency/jetty-runner.jar target/*.war
Lautre solution se base sur loutil Foreman. Avec la commande fore-
man start, lutilitaire sappuie sur le fichier Procfile la racine pour
lancer dventuels processus de type web ou worker. Il est bon de
noter que par dfaut, Foreman utilise le port 5000.
> Dploiement Heroku
Les dernires modifications du projet pousses vers notre dpt
local Git, nous pouvons crer lapplication sur Heroku avec heroku
create. Il en rsulte la cration dune application Heroku base sur la
stack Cedar ainsi que du dpt Git distant correspondant dont lURL
daccs est affiche lcran [Fig.3].
Le dploiement du code se fait ensuite simplement en poussant les
modifications du projet vers le dpt distant Git sur Heroku :
git push heroku master
Du ct de la plateforme, larrive de ce code lance le processus de
dploiement [Fig.4]. Ainsi, lapplication est package en slug avant de
dtecter le type de Buildpack utiliser pour son packaging. Dans
notre cas, il sagit bien entendu du Buildpack Java. Heroku lance
donc un mvn package de lapplication. Les diffrents dynos en cours
dexcution sur Heroku sont stopps par le Dyno Manifold de mme
que le routing HTTP est mis en pause. Le nouveau slug est alors
dploy, et cest alors que le Dyno Manifold va dmarrer les dynos
dsormais ncessaires lexcution de la nouvelle version package
de lapplication. Le routing HTTP peut alors de nouveau reprendre.
Si le dploiement est ralis avec succs par la plateforme, le termi-
nal affiche lURL laquelle lapplication est accessible et quelques
informations la concernant telles que la taille de son slug ou bien ses
processus associs. La [Fig.5] prsente une copie dcran de lappli-
cation Java EE dploye sur le Cloud avec Heroku.
> Scaling Horizontal
Lapplication dploye, il est dsormais possible daccder aux pro-
cessus quelle utilise via la commande heroku ps. Cette mme com-
mande permet de jouer avec son scaling en lui ajoutant des dynos
la vole. Ainsi, nous pouvons dfinir que lapplication utilisera 3 dynos
web comme suit : heroku ps:scale web=3. Il en va bien entendu de
mme pour les autres types de processus proposs par Heroku,
que ce soit ceux de type worker ou les processus systme. Enfin, les
logs de la plateforme sont accessibles via la commande heroku logs
pour laquelle il est possible de filtrer les logs uniquement par un type
de processus. Pour le processus de type web, cela donnerait donc :
heroku logs --ps web.
> Outillage
Au cours de larticle, nous avons principalement travaill avec la
ligne de commande pour grer notre projet et interagir avec la plate-
forme Heroku. Ce mode de travail ais peut ne pas convenir cer-
tains qui prfreront grer les changes avec la plateforme
directement au sein de leur IDE. En ce sens, Heroku met disposi-
tion un plugin pour Eclipse permettant de saffranchir compltement
de la ligne de commande condition davoir au pralable install le
plugin EGit. Le plugin Heroku permet de crer un projet Eclipse pour
Heroku partir de templates mais galement dimporter des projets
Heroku existants directement depuis la plateforme. En outre, les
changements dun projet peuvent directement tre appliqus sur le
dpt Git distant. Une vue affichant les diffrentes informations de
ses projets Heroku est galement disponible. Enfin, le monitoring
des applications Heroku est rendu possible directement dans lIDE.
La liste de fonctionnalits prsente ici est loin dtre exhaustive et la
mise en place de ce plugin savre tre une relle plus-value dans
loptique dacclrer les dveloppements pour Heroku.
> Conclusion
Plateforme conue pour dvelopper et dployer des applications rapide-
ment et simplement dans le Cloud, Heroku apporte quelque chose de
rellement nouveau dans le paysage des applications en gnral et du
monde Java en particulier. Son approche rsolument agile permet de
mettre en uvre le dploiement dapplications continu dans le Cloud
grce une architecture exploitant la puissance de Git. En outre, le pro-
cessus de dveloppement traditionnel est mis aux oubliettes avec Hero-
ku qui se base sur 3 actions essentielles : dvelopper, dployer et grer
une application. En bref, il sagit dun PaaS automatis en excution
facilitant grandement la vie des dveloppeurs et dont laspect polyglotte
au niveau des langages de programmation est un avantage indniable.
Le modle conomique propos permettant de grer finement la scala-
bilit horizontale dune application est intressant et les nombreux add-
ons dj disponibles pour la plateforme sont autant datouts solides qui
font de Heroku une plateforme des plus prometteuses dans la perspec-
tive de dployer des applications dans le Cloud.
# Sylvain Saurel Ingnieur dEtudes Java / JEE
sylvain.saurel@gmail.com
Fig.3
Fig.4
Fig.5
Cration de l'application Heroku
Application Java EE sur Heroku
Processus de dploiement
52-59 20/02/13 08:34 Page 59
> YASL ? Bof...
YASL (Yet Another Scripting Language) ? Bof, encore un langage de
script me direz-vous, qui vient allonger la longue liste des tnors du
domaine : Perl, PHP, Python, Ruby, Lisp, etc. Certes, on est souvent
sceptique voire paresseux lide dexplorer un nouveau langage
lorsque celui quon utilise nous suffit, bon an mal an. Toutefois, Lua
se place sur une niche peu courante au sein des langages de
scripts : il est extrmement minimaliste dans sa conception, puis-
sant, rapide et largement interfaable. Minimaliste, car la taille de
linterprteur une fois compil est denviron 200 Ko et que toute lar-
chitecture interne est base sur des piles et des tables. Tiens,
aurais-je attir votre attention ? Si jajoute que lexcution dun script
Lua est seulement 20 fois plus lente que le C/C++ compil, l o
Perl et PHP sont 100 fois plus lents, peut-tre souhaitez-vous lire la
suite ? Enfin, si je vous affirme que beaucoup de non-dveloppeurs
peuvent lutiliser rellement rapidement et quil est trs li au C, per-
mettant ainsi de raliser des interfaages avec des librairies exis-
tantes de manire trs simple, sentez-vous une lgre vibration
dintrt ? Si cest le cas, sachez que vous ntes pas le seul : Lua
est ainsi utilis au sein de nombreux outils et logiciels. 40 % dAdobe
Photoshop Lightroom sont crits en Lua, VLC en a fait son langage
de script interne, ainsi que Wireshark, pour ne nommer que des
logiciels connus.
Lexmark lutilise au sein de ses drivers dimprimante, et le chip den-
codage Mobilygen MG3500, prsent dans de nombreux cam-
scopes, se pilote entirement grce une API en Lua. Ah, joubliais
naturellement le jeu en ligne World of Warcraft, dont on peut para-
mtrer linterface grce des scripts Lua. La suite de larticle vous
donnera, je lespre, lenvie de lintgrer dans vos projets.
> Un langage portable, rapide, compact,
facile intgrer
Depuis le dbut de son existence, les auteurs de Lua se sont effor-
cs ce que le langage soit :
Portable. Lua est crit en C en respectant scrupuleusement le
standard ANSI C89. Il suffit davoir un compilateur C sur une plate-
forme donne pour pouvoir y utiliser Lua.
Rapide. Linterprteur standard est nettement plus rapide que des
langages analogues tels que Ruby ou Python. Si la vitesse est
importante, on peut mme se tourner vers LuaJIT, encore bien
plus rapide.
Compact. La version actuelle Lua 5.2.1 complte occupe environ
200 Ko de code excutable, y compris la librairie standard.
Facile intgrer. Lua est conu pour tre intgr dans une applica-
tion (par exemple un jeu) ou dans un micrologiciel. LAPI C est
simple et complte.
Puissant. Malgr sa petite taille, Lua reste trs puissant. Les
tables, les userdata et les mtatables associes sont particulire-
Lua, vous avez dit Lua?
Lua ? Vous ne connaissez pas ? Pourtant, il fait partie des 20 langages rfrencs par
lindex TIOBE (1). Nous allons le dcouvrir dans cet article !
ment versatiles. Une mtatable est un mcanisme particulier qui
permet de redfinir des oprateurs sur un objet.
Libre. Non seulement le code source est disponible gratuitement,
mais sa licence MIT autorise expressment son intgration dans
tout type de projet y compris commercial.
Lua est modulaire dans son architecture. Son cur contient linter-
prteur et normalement le compilateur. Mais il na aucune fonction
prdfinie ! Pour que Lua puisse servir quelque chose, il est nces-
saire de charger des modules dans linterprteur. Le chargement de
chaque module est optionnel et facilement modifiable. Lcriture dun
sandbox de scurit est ds lors assez facile en Lua, bien que non
triviale. La distribution standard Lua 5.2 comporte dix modules :
base (contenant des fonctions dusage gnral), bit32, coroutine,
debug, io, math, os, package, string et table. On les trouve prchar-
gs dans la plupart des utilisations de Lua. Gnralement, dautres
modules sont ncessaires dans un projet, qui peuvent provenir de la
communaut Lua (comme LuaSocket ou LuaFileSystem), ou tre
propres lapplication ou au jeu vido.
> Dj 20 ans...
Lua ftera cette anne ses 20 ans ! Il a t cr en 1993 lUniver-
sit Catholique Pontificale de Rio de Janeiro pour rpondre initiale-
ment aux besoins de la compagnie ptrolire brsilienne Petrobras.
cette poque-l, deux quipes de dveloppement du dpartement
dinformatique travaillaient indpendamment sur lcriture de deux
petits langages de scripts DEL (Data Entry Language) et SOL (Simple
Object Language). Les deux quipes se sont runies et ont dcid de
dvelopper un langage commun, fusion de DEL et de SOL, nomm
naturellement Lua. En effet, SOL signifiant Soleil en portugais, son
successeur se devait dtre la Lune, Lua en portugais ! Notez que
pour cette raison Lua se prononce loua, et scrit avec seulement la
premire lettre en majuscule ; ce nest pas un acronyme.
Lua a un modle de dveloppement original : bien quil soit open
source depuis 1994 (et la licence est MIT depuis la version 5.0),
cest toujours la mme quipe de trois personnes qui dcide des
PROgrammez ! < 60 > MARS 2013
i
je dbute avec ...
(1) Au 18e rang en dcembre 2012
[http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html]
(2) Lua 5.2 Reference Manual, disponible sur le site officiel de Lua
(http://www.lua.org).
Extension Lua sous Eclipse
60-63 20/02/13 08:35 Page 60
Lua connat au total huit types de valeurs :
nil : cest le type de la valeur nil qui reprsente labsence de donnes.
boolean : une valeur boolenne qui peut tre true ou false. Lors dun
test conditionnel, seuls false et nil sont considrs comme faux,
toute autre valeur, y compris 0, tant vraie.
number : un nombre, qui peut tre entier ou virgule flottante, et
qui est toujours reprsent par un double en interne.
string : reprsente une chane de caractres non modifiable. Lua
internalise les chanes pour viter davoir plusieurs copies identiques
en mmoire. Une chane peut contenir nimporte quelle suite doc-
tets entre 0 et 255 ; on peut donc lutiliser pour stocker par
exemple le contenu dun fichier binaire.
function : le type des fonctions. Cest une valeur de premire classe
qui peut tre manipule comme les autres. De plus, Lua supporte
les closures.
table : cest le type le plus versatile. Il sagit dune collection compo-
se de cls et de valeurs associes, lesquelles peuvent tre de tout
type sauf nil. Cest en Lua la seule forme de structure de donnes.
Elle permet notamment de reprsenter des tableaux, des diction-
naires, des tables de hachage, des listes, des modules. Elle est
aussi utilise en interne pour stocker les variables globales, et les
mtatables sont elles aussi de simples tables Lua.
userdata : vu de Lua, il sagit dune valeur opaque reprsentant une
zone mmoire. Mais via lAPI en C, un programmeur peut enregis-
trer nimporte quelle donne dans un userdata, le plus souvent un
simple pointeur. Comme une mtatable peut tre associe chaque
userdata, ce type est souvent utilis pour exporter vers Lua linterfa-
ce dun objet C++.
thread : cest le type des coroutines. Une coroutine est similaire un
thread dun systme dexploitation, mais est collaborative et non pr-
emptive. Le support des coroutines en Lua nutilise aucune fonction
du systme dexploitation et est donc 100 % portable.
Comme la plupart des langages interprts, lexcution dun script
Lua se fait en deux phases distinctes. Lua va dabord compiler le
code source en bytecode, cest--dire en instructions binaires pour
sa machine virtuelle, puis interprter les instructions dans la machi-
ne virtuelle. Il est possible de charger dans Lua du code prcompil,
ce qui est surtout utile pour les projets embarqus dans des micro-
contrleurs. Cela permet de diminuer le temps de dmarrage du
script, ou alors de se passer du compilateur de Lua, conomisant
ainsi environ 40 Ko de code.
> Quelques exemples
Les commentaires commencent par deux tirets comme dans SQL :
Ceci est un commentaire sur une ligne
[[ Et ceci est un commentaire dit long
pouvant tenir sur plusieurs lignes ]]
> est une convention reprsentant une sortie lcran
Le fameux Hello World est fort simple en Lua :
print(Hello World!) > Hello World!
Comme Lua est un langage dynamiquement typ, une variable na
pas de type a priori et son contenu peut changer de type. Les
variables sont globales par dfaut.
value = Une chane variable globale
print(value) > Une chane
fonctionnalits du langage : Roberto Ierusalimschy, Luiz Henrique de
Figueiredo et Waldemar Celes. Elle crit la version de rfrence de
Lua en pur C et publie en mme temps un manuel de rfrence (2),
qui est la fois une documentation et une spcification du langage.
Les versions de Lua sortent un rythme lent compar dautres
logiciels libres. La version actuelle, 5.2, date de 2011 alors que Lua
5.1 est sorti en 2006 et Lua 5.0 en 2003. Il sagit de sorties
majeures, stables, mais qui ne sont pas entirement compatibles
avec les versions prcdentes.
> Quelle utilisation de Lua ?
Initialement destin des ingnieurs non-informaticiens, Lua a t
conu pour tre trs intuitif et simple apprendre. Vous pouvez sou-
haiter utiliser Lua parce que vous travaillez sur une application qui lin-
tgre dj (cest par exemple le cas de nombreux intervenants dans
le jeu vido) ou parce que vous voulez tirer parti de ses nombreux
avantages et lintgrer dans une application. titre dexemple, la
socit InPixal lutilise comme moteur de traitement dimages : des
algorithmes lmentaires crits en C/C++ et compils sous forme
de librairies sont ensuite chans et configurs via des scripts Lua,
offrant ainsi une grand souplesse aux algorithmiciens pour valider
rapidement des solutions de traitement dimages, tout en se librant
des problmes informatiques traditionnels (allocation et libration
mmoire, criture de structures, etc.). Mieux : avec limplmentation
LuaJIT, il est mme possible de valider un algorithme travaillant au
niveau pixel en Lua tout en obtenant des performances tout fait
honorables (similaires au C compil sans optimisations).
Autre cas : le dveloppement de jeux vido, qui est un secteur par
nature trs exigeant car il ncessite toujours plus de performances
malgr la contrainte de la multiplicit des mtiers utiliss pour une
production de jeu. Lua sest naturellement impos dans un grand
nombre de studios pour sa lgret et sa facilit dapprentissage.
Par exemple, il sera utilis pour dfinir une base de rgles dune intel-
ligence artificielle qui dcrit les actions possibles des personnages
dans un contexte prcis. Les scripts Lua permettent dassocier les
contextes aux actions raliser. Il est ainsi facile de multiplier la vari-
t des comportements des personnages dans le jeu.
function BarbarianBehavior()
if IsAttacked() then
MeleeAttack()
else
Walk()
end
end
function MagusBehavior()
if IsAttacked() then
FireBall()
else
ProtectionShield()
end
end
> Petit aperu du langage
Entrons maintenant dans le cur du langage. Lua est un langage
dynamiquement typ, ce qui signifie quune variable na pas de type
ddi. Cest la valeur contenue dans la variable qui possde un type.
PROgrammez ! < 61 > MARS 2013
i
je dbute avec ...
60-63 20/02/13 08:35 Page 61
value = 42 raffectation avec un type diffrent
print(value) > 42
Les variables locales sont dclares avec le mot cl local et leur por-
te stend jusqu la fin du bloc o elles sont dclares. Lexemple
suivant ralise lquivalent de la commande Unix cat :
while true do
local line = io.read() lit une ligne du fichier
if line == nil then break end EOF termine la boucle
print(line) chaque ligne du fichier est affiche
end
line nest plus visible ici
Cet exemple peut tre simplifi en utilisant une boucle for gnrique
et litrateur io.lines :
for line in io.lines() do
print(line)
end
line nest plus visible ici
La fameuse fonction factorielle peut tre crite ainsi en utilisant la
rcursion :
function factorial(n)
if n <= 1 then return 1 end condition darrt
return n * factorial(n-1) rcursion
end
print(factorial(4)) > 24
Ou alors ainsi, de manire itrative avec une boucle for numrique :
function factorialIter(n)
local prod = 1
for i=2,n do i va de 2 n par pas de 1
prod = prod * i
end
return prod
end
Une table se construit avec des accolades, en fournissant optionnel-
lement des valeurs pour linitialisation. Lexemple suivant utilise un
tableau tab contenant cinq nombres et une fonction printTable pour
lafficher.
On trie ensuite la table dabord dans lordre numrique croissant
(comportement par dfaut de table.sort), puis dans lordre croissant
de la partie fractionnelle des nombres (cest--dire leur valeur
modulo 1).
Pour cela, on fournit une fonction anonyme comme argument
table.sort. Notez que la fonction printTable est une closure car elle
fait rfrence une variable locale dclare lextrieur de celle-ci.
Le support des closures et des fonctions anonymes fait que Lua peut
tre utilis pour de la programmation fonctionnelle.
local tab = {3.7, 5.2, 1.8, 0.5, 2.0}
function printTable()
tab est une variable locale extrieure!
for i=1,#tab do #tab est la longueur de tab (5)
print(tab[i])
end
end
printTable() > 3.7 5.2 1.8 0.5 2
table.sort(tab)
printTable() > 0.5 1.8 2 3.7 5.2
table.sort(tab, function(a, b) return a%1 < b%1 end)
printTable() > 2 5.2 0.5 3.7 1.8
Les tables peuvent accepter nimporte quel type comme cl et
valeur. Il y a nanmoins des raccourcis syntaxiques quand les cls
sont des chanes de caractres assimilables un identifiant.
Loprateur . permet davoir une syntaxe pratique pour des struc-
tures ou des objets. On peut aussi crire et appeler des mthodes
dun objet, soit des fonctions qui reoivent automatiquement une
rfrence nomme self sur lobjet courant. Il faut pour cela utiliser
loprateur : au lieu de . :
s = { prenom=Roberto, nom=Ierusalimschy, oeuvre=Lua }
s.annee = 1993 quivalent s[annee] = 1993
function s:print() criture dune mthode de la table s
print(self.nom, self[prenom], self.annee, self.oeuvre)
end
s:print() > Ierusalimschy Roberto 1993 Lua
Le dernier exemple montre lutilisation dune mtatable. Normale-
ment, laddition de deux tableaux provoque une erreur lexcution
car le comportement nest pas dfini. Mais en plaant une fonction
nomme __add dans une table particulire associe une autre
table, on peut notamment effectuer une addition de deux vecteurs.
local meta = { mtatable simple pour un vecteur
__add = function(a,b) redfinition de laddition
local res = {}
for i=1,#a do
res[i] = a[i] + b[i]
end
return res
end }
function printVector(v) fonction affichant un vecteur
print(table.concat(v, , ))
end
local v1 = setmetatable({4, 2, 1}, meta)
local v2 = {3, 8, 0}
printVector(v1) > 4, 2, 1
printVector(v2) > 3, 8, 0
local v3 = v1 + v2 appelle __add de la mtatable de v1
printVector(v3) > 7, 10, 1
> Un cas concret...
SciTE est un diteur de texte (orient code source) intgrant Lua, qui
permet de scripter des comportements (transformation de texte),
dcrire des lexers (coloration syntaxique) ou de grer des petits dia-
logues. On peut dvelopper toute une librairie de fonctions qui peu-
vent tre appeles par menu ou par une combinaison de touches.
On peut ainsi crire des fonctions pour corriger le formatage dune
slection, modifier des valeurs dun path SVG, transformer une ligne
PROgrammez ! < 62 > MARS 2013
i
je dbute avec ...
60-63 20/02/13 08:35 Page 62
de code de faon plus sophistique quavec des expressions rgu-
lires. Par exemple, si vous naimez pas les parenthses colles aux
mots cls (les faisant ressembler des appels de fonction), voici une
fonction qui rectifie cela au sein du document ouvert (pour Java ou
des langages similaires) :
function FixKeywords()
local lineNb = editor.LineCount
local line, sn, substNb
Permet dannuler toutes les modifications dun coup
editor:BeginUndoAction()
Parcourt les lignes du document dans lordre inverse,
en sautant la dernire ligne (vide).
for i = lineNb - 2, 0, -1 do
line = editor:GetLine(i)
if line ~= nil then Si la ligne nest pas nil
limine (remplace avec rien), laide
dune expression rgulire (ER), les sparateurs
de ligne et espaces de fin de ligne.
line = string.gsub(line, [\r\n ]*$, )
Si la ligne commence avec un mot cl ncessitant
une parenthse ouvrante, met un espace entre eux.
ER : espaces en dbut de ligne, des lettres,
suivies immdiatement par une parenthse ouvrante.
Noter lusage du % comme chappement dans les ER.
Une fonction Lua peut retourner plusieurs valeurs,
ici la seconde valeur est le nombre de
substitutions effectues.
line, substNb = string.gsub(line, ^( +)(%l+)%(,
Ici, gsub prend en second paramtre, non pas
une chane, mais une fonction anonyme prenant
comme paramtres les captures de lER.
function (s, kw) Indentation et mot cl
Si le mot cl est un de ceux attendus...
if kw == if or kw == for or kw == while
or kw == switch or kw == catch then
... retourne lindentation, le mot cl,
et la parenthse avec lespace requis.
return s .. kw .. (
else
Sinon on restitue la chane passe sans
changement (appel de fonction / mthode).
return s .. kw .. (
end
end)
Si on a eu au moins une substitution
if substNb > 0 then
Remplacer la ligne courante avec sa version
transforme (avec une fonction maison).
ReplaceLine(i, line, false)
end
end
end
Fin de lagrgation dactions pour le undo.
editor:EndUndoAction()
end
Ce nest quun petit aperu des possibilits de script de Lua. En
matire de transformations de texte, une librairie comme LPeg (cri-
te par lun des crateurs de Lua) permet une analyse syntaxique
beaucoup plus fine et complexe.
> Un langage, des implmentations
Lua est conu de telle sorte que rien nempche den crire une
implmentation parallle en se basant sur le manuel de rfrence. Il
en existe ainsi de nombreuses variantes qui sexcutent notamment
dans des machines virtuelles Java, .NET ainsi quen JavaScript. Si
lon y ajoute des bindings de Lua vers dautres langages, Lua peut
vraiment tourner nimporte o.
La plus utilise est sans doute LuaJIT (http://luajit.org), crite par Mike
Pall. Cette version de Lua possde un interprteur crit en assem-
bleur et surtout un compilateur la vole dune efficacit redoutable.
LuaJIT 2.0 supporte les processeurs x86, x64, ARM, PowerPC et
MIPS. LuaJIT est tellement rapide quil sapproche des perfor-
mances du C et peut tre utilis pour faire du traitement de signal ou
dimage ! Il est notamment utilis dans GSL Shell, un logiciel de calcul
comparable MATLAB.
En outre, il existe des frameworks ddis des utilisations plus sp-
cifiques. On peut citer notamment eLua (http://www.eluaproject.net/),
qui offre une solution de dveloppement embarqu en Lua sur des
platesformes partir de lARM Cortex M3 !
Ou encore Lve (aussi souvent appel Love2D), qui offre une solution
complte pour crer des jeux en 2D entirement crits en Lua, la
librairie C sous-jacente fournissant linterface portable de bas niveau
avec le systme. Dans le domaine du jeu toujours, on citera gale-
ment LuaPlayer, permettant de coder des jeux pour PSP (homebrew)
directement en Lua ou MicroLua, son quivalent pour la DS. De
nombreux moteurs de jeu, quils soient gratuits (Moai) ou payants
(Corona) incluent Lua pour scripter des niveaux ou de lintelligence
artificielle, voire pour crire les jeux eux-mmes, de faon portable
(les deux moteurs cits visent aussi les tlphones portables, iOS et
Android).
> Pour aller plus loin
Depuis 20 ans, une communaut sest spontanment dveloppe
(notamment autour de la liste de diffusion lua-l, en anglais), avec
pour point dentre le site principal http://www.lua.org. partir de l,
vous retrouverez le manuel officiel, ainsi quun wiki et une liste dou-
vrages. Outre le fameux PIL (Programming In Lua de Roberto Ieru-
salimschy), qui en est sa troisime dition, il est aussi fait mention
des autres ouvrages disponibles, dont le rcent Le guide de Lua et
ses applications crit par vos serviteurs.
Le Guide de Lua
et ses applications
aux ditions D-BookeR (http://www.d-booker.fr).
# Cyril Doillon
Ingnieur en informatique spcialis en images,
interaction et ralit virtuelle
cyril.doillon@gmail.com
# Sylvain Fabre
Ingnieur logiciel et matriel, co-fondateur dInPixal
(http://www.inpixal.com )
# Philippe Lhoste
Ingnieur logiciel orient application web/desktop
# Patrick Rapin
Dveloppeur logiciel chez Xample Srl
PROgrammez ! < 63 > MARS 2013
i
je dbute avec ...
60-63 20/02/13 08:35 Page 63
D
epuis TFS 2010, la Build est orchestre par Workflow
Foundation, qui a remplac MSBuild. MSBuild est toujours
utilis, mais seulement l o il est le meilleur : la compilation
des solutions. Le processus de Build lui-mme est spar entre plu-
sieurs acteurs : les contrleurs et les agents. Les premiers servent
distribuer la compilation sur les deuximes. Agents et contrleurs
peuvent tre installs sur des machines diffrentes, ce qui rend
cette architecture trs puissante et trs flexible.
Un Workflow est compos de deux parties : une petite partie qui
sexcute sur le contrleur et une autre sur lagent. Cest gnrale-
ment cette partie qui fait lobjet de modifications. Une Build pouvant
tre lance pour plusieurs raisons (une la fois), le processus se
doit de grer tous les cas. Il faut tenir compte de cela lors de la per-
sonnalisation des scripts. Voici les diffrentes raisons quune Build
a de se lancer. Ce sont les diffrentes valeurs que peut prendre
lnumration BuildReason [Fig.1].
Des activits supplmentaires sont dj disponibles sur Codeplex
(http://tfsbuildextensions.codeplex.com) mais nous allons voir quil nest
pas difficile den crer.
> Processus de Build
Les Workflow de Build se trouvent dans le dossier
BuildProcessTemplates la racine de chaque TeamProject. Si
vous navez jamais ajout dactivits venant de dll externe vous pou-
vez louvrir directement. Comme je le disais plus tt, cest un
Workflow. Veillez toutefois faire attention douvrir le Workflow avec
la version de Visual Studio qui concide avec celle de TFS.
Le Workflow de Build par dfaut (partie agent) est spar en plu-
sieurs parties. Les thmes suivants se dgagent :
Initialisation
Compilation
Tests
Publication des symboles
Il est possible de modifier le Workflow en ajoutant de nouvelles acti-
vits avec la ToolBox comme pour un Workflow standard. Lajout de
Cration dactivits pour TeamBuild
La Build de Team Foundation Server sappuie sur une technologie qui peut paratre
complexe mais qui est trs puissante. Voyons comment sen servir pour tendre les
capacits de TeamBuild.
nouveaux paramtres se fait galement via longlet Arguments
du Workflow. Si on souhaite diter ce paramtre depuis les pro-
prits de notre Build, il nous suffit de les ajouter dans les meta-
data . Cette structure de donne permet didentifier quels sont les
paramtres de la dfinition de Build et ceux qui peuvent tre confi-
gurs chaque lancement (les deux comportements sont possibles
simultanment). Il ny pas daide la saisie de nom, donc il faut bien
faire attention bien crire le nom de largument [Fig.2].
> Ajout dactivits
Lajout dactivits pour TeamBuild est aussi simple que dajouter des
activits pour un Workflow classique lexception prs, que nous
navons pas de support de projet .NET pour ajouter de nouvelles
rfrences. Nous verrons plus bas comment rsoudre ce problme.
Toute activit nest pas utilisable dans TeamBuild. Une activit doit
contenir lattribut Microsoft.TeamFoundation.Build.Client.Build
ActivityAttribute. Cet attribut permet TeamBuild de savoir si lacti-
vit peut tre charge ct contrleur ou ct agent.
Comment rfrencer une nouvelle DLL dactivit dans TeamBuild ?
Cest trs simple, cela se joue du ct du contrleur car le code li
ces tches personnalises peut tre excut ce niveau-l [Fig.3].
Il suffit dindiquer un rpertoire, gnralement un rpertoire nomm
CustomBuildActivities ou quivalent dans le dossier
BuildProcessTemplates . Nous y stockerons les DLL de nos acti-
vits, par exemple celles de http://tfsbuildextensions.codeplex.com.
Crons maintenant un projet ActivityEditor de type Workflow Library
(Framework 4.5) dans un sous-dossier Editor de
BuildProcessTemplates.
Une fois le projet cr, il suffit de supprimer le ou les Workflows
crs par dfaut et ajouter via un lien celui de TeamBuild.
Nous pouvons maintenant ajouter les rfrences aux asssemblies
de nos activits.
Dernire tape : ajouter les rfrences aux asssemblies de TFS
(elles sont dans le GAC) et toutes celles que demande le Workflow.
Maintenant le Workflow souvre et il suffit dajouter des activits.
PROgrammez ! < 64 > MARS 2013
i
cas dusage
Fig.1 Fig.2 Fig.3
64-67 20/02/13 08:37 Page 64
Attention un dtail : si vous ajoutez des variables dans des
squences, je vous conseille de bien nommer les squences pour
retrouver facilement la porte de vos variables.
Ct ajout de paramtrage, cest trs simple via longlet
Arguments . Ceci est juste une procdure rapide pour diter
votre Workflow. Une procdure plus complte est disponible ici :
http://tfsbuild extensions.codeplex.com/wikipage?title=How%20to%20integra-
te%20the%20extensions%20into%20a%20build%20template&referringTitle=D
ocumentation
> Ecriture dactivits simples
Sans rentrer dans les dtails de Workflow Foundation, une activit
base de code est une classe qui hrite de CodeActivity . Ce genre
dactivit doit tre limit des actions trs courtes.
Voici une activit simple qui fait une addition et dtaillons l ensuite :
[BuildActivity(HostEnvironmentOption.All)]
public sealed class AddActivity : CodeActivity
{
[RequiredArgument]
public InArgument<int> Value1 { get; set; }
[RequiredArgument]
public InArgument<int> Value2 { get; set; }
[RequiredArgument]
public OutArgument<int> Result { get; set; }
protected override void Execute(CodeActivityContext context)
{
var value1 = context.GetValue(Value1);
var value2 = context.GetValue(Value2);
context.SetValue(Result,value1+ value2);
}
}
> Ecriture dactivits asynchrones
Les activits asynchrones sont essentielles si vous avez des traite-
ments longs. Car, contrairement aux activits synchrones, lagent
de Build a la possibilit dannuler une activit asynchrone. Cela arri-
ve par exemple si un utilisateur dcide darrter une Build. Dans ce
cas, si lactivit est synchrone, lagent part en timeout et une inter-
vention sur la console dadministration de TFS est ncessaire: pas
trs user friendly!
Lcriture dactivits asynchrones ncessite 3 mthodes :
BeginExecute : cration de la tche asynchrone
EndExecute : rcupration des donnes aprs lexcution de la tche
Cancel : nettoyage optionnel du contexte
vous donc de grer le cas de lannulation en envoyant le bon signal
si ncessaire. Gnralement lcriture dactivits asynchrones sap-
puie sur des API, elles-mmes asynchrones, qui grent dj lannu-
lation. Voici un exemple dactivit qui tlcharge un fichier :
[BuildActivity(HostEnvironmentOption.All)]
public sealed class AsyncDownloadFile : AsyncCodeActivity
{
PROgrammez ! < 65 > MARS 2013
i
cas dusage
[RequiredArgument]
public InArgument<string> URL { get; set; }
[RequiredArgument]
public InArgument<string> FilePath { get; set; }
protected override IAsyncResult BeginExecute(AsyncCode
ActivityContext context, AsyncCallback callback, object state)
{
string url = context.GetValue(URL);
var request = HttpWebRequest.Create(url) as HttpWeb
Request;
context.UserState = request;
var result = request.BeginGetResponse(callback, state);
return result;
}
protected override void EndExecute(AsyncCodeActivityContext
context, IAsyncResult result)
{
var request = context.UserState as HttpWebRequest;
if (request != null)
{
var response = request.EndGetResponse(result) as HttpWeb
Response;
var lenght = response.ContentLength;
if (lenght > 0)
{
var filePath = context.GetValue(FilePath);
var filestream = File.OpenWrite(filePath);
using (filestream)
{
var responseStream = response.GetResponseStream();
responseStream.CopyTo(filestream);
responseStream.Flush();
responseStream.Close();
}
}
}
}
}
> Ecriture dactivits composites
Une grande rgle dcriture de Workflow et donc en particulier de
TeamBuild est la rutilisabilit. Mme si linterface a lair simple, la
technologie sous-jacente est complexe et lon peut vite passer ct
derreurs qui peuvent ne pas tre trouves durant le dveloppement.
Je vais prendre exemple sur lactivit InvokeProcess. Dun coup dil
rapide, lactivit pourrait ne contenir quun Process.Start().
Partons sur cette hypothse et attachons nous raliser lactivit
suivante qui consiste excuter NAnt (http://nant.sourceforge.net).
Nous avons plusieurs alternatives :
crire une tche synchrone : ce nest pas une bonne ide, car le
64-67 20/02/13 08:37 Page 65
processus peut prendre plusieurs minutes.
crire une tche asynchrone : au moment de lannulation il suffira
de tuer le processus de Nant : partons l-dessus.
Si NAnt est en train dexcuter un autre processus et que nous
annulons la Build, le processus de NAnt est dtruit mais pas le pro-
cessus qui a t lanc. La Build est certes arrte, mais en fait elle
continue dans notre dos! Process.Start() nest donc pas la solu-
tion. La solution est dutiliser lactivit InvokeProcess. Plus que de
lancer un processus, la tche cre un Job dans lequel elle y met le
processus quelle lance et les sous-processus qui pourraient appa-
ratre ensuite. Lors de lannulation, lactivit na plus qu dtruire le
job et les processus associs (ce qui se fait en une seule mthode
de lAPI des jobs).
InvokeProcess tant une activit, nous nallons pas pouvoir lutiliser
comme une simple classe, il va falloir dcrire en code le Workflow,
au lieu de lcrire en XAML. Cela peut paratre difficile, mais en fait
avec de lhabitude, cela devient trs facile lire et lon se rend comp-
te surtout que cest la manire la plus efficace dcrire une activit.
La plupart des activits de TeamBuild sont crites de cette mani-
re. Plus prcisment : lactivit composite contient parfois de toutes
petites CodeActivity qui sont utilises dans son Workflow.
Contrairement aux activits de code, nous allons implmenter une
autre mthode. Cette mthode CreateBody va renvoyer le
Workflow sous-jacent.
Voyons le code de cette activit qui se trouve sur Codeplex :
http://tfsbuildextensions.codeplex.com :
[BuildActivity(HostEnvironmentOption.All)]
[ActivityTracking(ActivityTrackingOption.ActivityOnly)]
public class InvokeNAnt : BaseActivity
{
[Category(Parameters)]
[RequiredArgument]
public InArgument<ExecutionParameters> Parameters { get; set; }
[Category(Configuration)]
[DefaultValue(false)]
public InArgument<bool> Verbose { get; set; }
[Category(Configuration)]
[DefaultValue(false)]
public InArgument<bool> IgnoreExitCode { get; set; }
[Category(Configuration)]
[RequiredArgument]
public InArgument<string> NAntDirectory { get; set; }
[Category(Configuration)]
public InArgument<string> WorkingDirectory { get; set; }
[Category(Result)]
public InArgument<string> LogFilePath { get; set; }
protected override System.Activities.Activity CreateInternal
Body()
{
var commandLine = new Variable<string>();
var nantPath = new Variable<string>();
var parameters = new Variable<ExecutionParameters>();
var exitCode = new Variable<int>();
var configError = new Variable<bool>();
var result = new Sequence
{
Variables = { commandLine, parameters, nantPath, exitCode,
configError }
};
result.Append(new List<Activity>
{
new Assign<bool>
{
To = configError,
Value = new InArgument<bool>(context => false)
},
new Assign<ExecutionParameters>
{
To = parameters,
Value = new InArgument<ExecutionParameters>(context
=> context.GetValue(this.Parameters))
},
new If(context => parameters.Get(context) == null)
{
Then = new Sequence().Append(new List<Activity>
{
new Assign<bool>
{
To = configError,
Value = new InArgument<bool>(context => true)
},
new WriteBuildError
{
Message = parameters argument is null
}
}),
Else = new Sequence().Append(new List<Activity>
{
new If(context => !parameters.Get(context).BuildFile
PathExists)
{
Then = new Sequence().Append(new List<Activity>
{
new Assign<bool>
{
To = configError,
Value = new InArgument<bool>(context => true)
},
new WriteBuildError
{
Message = Build file does not exist
}
})
}
})
},
new Assign<string>
{
To = nantPath,
Value = new InArgument<string>(context => Path.Combine
PROgrammez ! < 66 > MARS 2013
i
cas dusage
64-67 20/02/13 08:37 Page 66
(ProcessNantPath(context.GetValue(this.NAntDirectory)), Nant.exe))
},
new If(context => !File.Exists(nantPath.Get(context)))
{
Then = new Sequence().Append(new List<Activity>
{
new Assign<bool>
{
To = configError,
Value = new InArgument<bool>(context => true)
},
new WriteBuildError
{
Message = new InArgument<string>(context => string.
Format(Nant not found: {0}, nantPath.Get(context))),
}
})
},
new Assign<string>
{
To = commandLine,
Value = new InArgument<string>(context =>
context
.GetValue(this.Parameters)
.CreateCommandLine(context.GetValue(this.LogFile
Path)))
},
new If(context => !configError.Get(context))
{
Then = new Sequence().Append(new List<Activity>
{
new WriteBuildMessage
{
Message = new InArgument<string>(context =>
string.Format(Command line: {0}, commandLine.Get(context))),
Importance = new InArgument<BuildMessageImportance>
(context => BuildMessageImportance.Normal)
},
new InvokeProcess
{
Arguments = commandLine,
FileName = nantPath,
Result = exitCode,
WorkingDirectory = this.WorkingDirectory,
},
new If(context => !this.IgnoreExitCode.Get(context)
&& exitCode.Get(context) != 0)
{
Then = new Sequence().Append(new List<Activity>
{
new WriteBuildError
{
Message = new InArgument<string>(context =>
string.Format(Nant execution failed with exitcode {0}, exit
Code.Get(context))),
},
new Throw
{
Exception = new InArgument<Exception>(context
=> new NAntException())
}
})
}
}),
Else = new Throw
{
Exception = new InArgument<Exception>(context =>
new NAntException())
}
}
});
return result;
}
/// <summary>
/// Replaces %env% placeholders by environment variable values
/// </summary>
/// <param name=input>string containing placeholders
to replace</param>
/// <returns>the input script with placeholder removed
</returns>
private static string ProcessNantPath(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return string.Empty;
}
return Environment.ExpandEnvironmentVariables(input);
}
}
Lattribut ActivityTracking permet TeamBuild de savoir sil doit affi-
cher les dtails du Workflow gnr par lactivit ou non.
Gnralement cest non, car nous voulons voir lactivit comme une
tche atomique du point de vue du log. Pour envoyer des messages
sur la sortie de Build, il suffit dutiliser les activits de base de
TeamBuild comme WriteBuildMessage et WriteBuildError.
> Conclusion
Ecrire des activits pour TeamBuild nest pas en soi difficile. Ce qui
est difficile est de bien comprendre la logique de TeamBuild et en
particulier de WorkFlow Foundation pour savoir o injecter les acti-
vits et de bien les coder pour avoir les comportements voulus
mme en cas dexception.
Chaque type dactivit a son utilisation, il suffit de bien choisir ds le
dpart. Se dire que lon va faire une CodeActivity dans un premier
temps et ensuite passer en asynchrone est une mauvaise ide :
vous allez devoir tout refaire. Le compromis est dans lactivit com-
posite : criture de toutes petites activits synchrones utilises dans
un Workflow qui lui est, par nature asynchrone, ce qui vous vite de
grer tous ces problmes lis lasynchronisme et lannulation.
# Michel Perfetti
Manager - MVP Visual Studio ALM chez Cellenza
Cellenza - Software Development Done Right
Blog : http://www.buildmeimfamous.net
Twitter : @miiitch
PROgrammez ! < 67 > MARS 2013
i
cas dusage
64-67 20/02/13 08:37 Page 67
Une API web est un ensembl e de
ressources accessibles sur le Web via des
URI et exposant des oprations sous
forme de mthodes HTTP standards,
ainsi quun ensemble de reprsentations
dfinissant la structure des messages
changs. Elle permet notamment de travailler sur les donnes, indpendamment de
leur format, comme JSON, XML ou YAML, grce la ngociation de contenu HTTP. Les
API web sont intimement lies aux concepts de REST, le style darchitecture du Web.
A
PISpark est une plateforme Cloud (PaaS) permettant de
crer, dhberger et de grer rapidement et simplement des
API web en mettant disposition un environnement de dve-
loppement intgr en ligne (IDE Web) ainsi quun service dhberge-
ment. Elle permet de dfinir des API web en se basant sur les
concepts de REST. Son IHM guide le dveloppeur afin dexposer des
ressources et des traitements derrire une URI. La puissance de
loutil rside dans le fait quaucune ligne de code nest ncessaire
puisque les interactions entre les API web et leur backend peuvent
tre configures visuellement.
APISpark est actuellement disponible en version bta ladresse
http://apispark.com. La [Fig.1] fournit une vue gnrale dAPISpark.
Les apports dAPISpark sont tout dabord son aptitude mettre en
oeuvre simplement et rapidement des API web pour des personnes
nayant pas le temps ou les connaissances en programmation suffi-
santes pour obtenir le mme rsultat deux-mmes en sappuyant
sur des briques open source. APISpark permet ainsi de dvelopper
une nouvelle gnration de sites web dits cross-canaux, accessibles
de faon homogne par tout type de machine (navigateur web, appli-
cation native, programme informatique ou encore objet connect).
APISpark sappuie sur le concept de cellule, suivant la mtaphore de
la ruche. Une cellule est un module logiciel de base pouvant interagir
avec dautres cellules importes. Trois types de cellules principaux
sont proposs comme lillustre la [Fig.2].
Le type de cellule Custom API correspond une API web mtier
accessible une fois dploye via le protocole HTTP et exposant des
Dvelopper facilement vos API web
avec APISpark
donnes. Elle peut pour cela sappuyer sur les deux autres types de
cellules: lEntity Store pour les donnes structures (quivalent
dune base de donnes) et le File Store pour les fichiers statiques
(documents textuels, image, vidos et autres feuilles de style).
Maintenant que nous avons introduit APISpark ainsi que les possibili-
ts quoffre loutil, abordons un exemple concret : limplmentation
puis lutilisation dune API web de gestion de contacts.
API WEB DE GESTION DES CONTACTS
Tout au long de cet article, nous allons illustrer comment dvelopper
une API web afin de grer une base de contacts. Cette API offrira la
possibilit de lister, crer, modifier et supprimer les contacts. Les
API web dans APISpark suivent la structuration dcrite dans la [Fig.3].
Tout dabord, le contrat public correspond aux ressources mises
disposition par lAPI aux utilisateurs. Pour notre API, nous allons dfi-
nir plusieurs ressources pour grer nos contacts ainsi que leurs l-
ments applicatifs associs (fichiers HTML, CSS, etc.) :
Ressource de gestion des contacts, avec le chemin /contacts/.
Elle permet de lister les contacts avec sa mthode GET et den
ajouter avec sa mthode POST.
Ressource de gestion dun contact particulier, avec le chemin /
contacts/{contactid}. {contactid} est une variable et correspond
lidentifiant du contact. Elle permet de rcuprer un contact en
particulier avec sa mthode GET et de le modifier ou supprimer
avec respectivement ses mthodes PUT et DELETE.
Ressource de gestion des fichiers du rpertoire HTML avec le che-
PROgrammez ! < 68 > MARS 2013
i
pratique
Fig.1
Fig.2 Fig.3 Fig.4
68-71 20/02/13 08:37 Page 68
min /html/{file}. Elle permet de retourner avec sa mthode GET le
contenu du fichier, den ajouter un ou de le modifier avec sa mtho-
de PUT, de le supprimer avec sa mthode DELETE.
Ressource de gestion des fichiers du rpertoire CSS avec le che-
min /css/{file}. Elle permet de retourner avec sa mthode GET le
contenu du fichier, den ajouter un ou de le modifier avec sa mtho-
de PUT, de le supprimer avec sa mthode DELETE.
Les deux premires ressources sappuient sur deux reprsentations
de contacts, lune pour un seul lment appel Contact et lautre
pour les listes de contacts. La premire contient les proprits dun
contact, telles que son identifiant, ses nom et prnom ainsi que son
ge. La seconde appele ContactList correspond une liste de
contacts base sur la reprsentation prcdente. Ces deux repr-
sentations sont utilises aussi bien en entre quen sortie au niveau
des mthodes des ressources.
Dautres reprsentations sont galement utilises pour les rper-
toires et fichiers.
Dans APISpark, une API ne met pas en oeuvre elle-mme tous les
traitements mais en dlgue la plupart dautres types de cellules.
Dans notre cas, il sagit des data stores, un pour les donnes struc-
tures (base de donne) et un pour les fichiers statiques.
Commenons par la base de donnes.
CRATION DE LA BASE DE DONNES
Une API web permet souvent dexposer et de modifier des informa-
tions structures, stockes dans une base de donnes de type rela-
tionnel ou NoSQL. Cest galement le cas pour notre API web de
gestion de contacts. Dans APISpark, le type de cellule apportant
cette fonctionnalit est appel lEntity Store. Il offre un entrept de
donnes structures ddi.
Une foi s notre enti ty store cr (nomm
Contacts DB), il suffit de lui dfinir une entit
Contact regroupant les diffrentes informa-
tions utilisables pour un contact. Une entit est
quivalente une table dans une base relation-
nelle. Pour rester simple, nous dfinirons uni-
quement un identifiant, un prnom, un nom
ainsi quun ge. La [Fig.4]. illustre cette dfinition
dans loutil.
Au niveau des proprits de lentit, il est pos-
sible de dfinir sil sagit dune cl primaire, les
cardinalits ainsi que le type, comme le montre
la [Fig.5].
Le dernier aspect dune entit considrer
PROgrammez ! < 69 > MARS 2013
i
pratique
consiste dans les oprations utilisables. Bien quil soit possible de les
dfinir manuellement, des mthodes par dfaut sont ajoutes auto-
matiquement lors de la cration de lentit. Ces mthodes permet-
tent de grer lentit afin de raliser notamment des oprations
CRUD (Create Retrieve Update Delete) sur les donnes. La [Fig.6]
dcrit le dtail dune de ces oprations.
Une fois ces diffrents lments dfinis, il suffit de dployer cet Enti-
ty Store afin de le rendre oprationnel et utilisable par notre API web
de gestion des contacts. Cela se ralise simplement en cliquant sur
le bouton Deploy. Il est noter quun Entity Store nest utilisable
quau sein de la plateforme APISpark. Pour rendre accessible ses
donnes de manire distante, il convient de passer par lintermdiai-
re dune API web (voire de plusieurs!).
Avant de nous attaquer notre API web proprement parler, nous
allons crer un autre type dentrept de donnes, le File Store, afin
dy stocker quelques fichiers statiques.
CRATION DE LENTREPT DE FICHIERS
Une API web peut galement exposer des fichiers statiques. Dans
le cas de notre API web de gestion de contacts, il peut sagir de
fichiers HTML, JavaScript et CSS afin dafficher les donnes via un
appel AJAX. Dans APISpark, le type de cellule prenant en charge cet
aspect est appel File Store. Il sagit dun entrept de fichiers orga-
nis en rpertoires, un peu comme les buckets S3 dAmazon Web
Services.
Une fois, notre file store cr (nomm Contacts Files), nous allons
lui ajouter deux rpertoires HTML et CSS, respectivement pour
stocker les pages web/AJAX et les feuilles de style. La [Fig.7] illustre
cette dfinition dans loutil.
A linstar des entits pour les Entity Stores, des mthodes sont
Fig.5
Fig.6
Fig.7
Fig.8
68-71 20/02/13 08:37 Page 69
automatiquement ajoutes aux rpertoires afin de grer leur conte-
nu. Il sagit dans ce cas doprations de listage du contenu et de lec-
ture, modification et suppression dlments. La [Fig.8] dcrit le dtail
dune de ces oprations.
Une fois les diffrents rpertoires dfinis, il suffit de dployer ce File
Store afin de le rendre oprationnel et utilisable par notre API web
de gestion des contacts. Cela se ralise simplement en cliquant sur
le bouton Deploy. Comme pour lEntity Store, il convient de lutiliser
par lintermdiaire dune API web (ou de plusieurs) pour rendre
accessibles ses donnes.
Lorsque le store est dploy, il est possible dafficher directement la
liste des fichiers contenus et den tlcharger dautres depuis la
console graphique dAPISpark. Nous allons ainsi ajouter quelques
fichiers statiques afin dafficher nos contacts dans une page HTML
via une requte AJAX avec jQuery. Le fichier suivant illustre le conte-
nu de la page HTML. Il est galement possible denrichir laspect de
la page en ajoutant une feuille de style.
Nous allons maintenant utiliser longlet Browser dtaillant les rper-
toires de notre store. Il permet de lister les fichiers prsents et
ventuellement den ajouter dautres via des tlchargements. La
[Fig.9] dcrit comment tlcharger notre fichier contacts.html prc-
dent. Maintenant que nous avons dfini le backend compos de deux
Data Stores, nous pouvons nous attaquer son exposition via lAPI
web proprement parler.
CRATION DE LAPI WEB
La mise en oeuvre de notre API web de gestion des contacts est
relativement simple avec APISpark. En effet, nous allons pouvoir tirer
PROgrammez ! < 70 > MARS 2013
i
pratique
Fig.10
Fig.11
Fig.12
Fig.9
parti de son aptitude crer automatiquement des ressources au
sein dune API web pour exposer des cellules dpendantes. Bien que
cela puisse apparatre abstrait ce niveau, nous allons nous effor-
cer de dtailler lutilisation de ces fonctionnalits tout au long de
cette section.
Aprs avoir cr notre API web nomme Contacts API, nous allons
importer en tant que dpendances les deux Data Stores prcdem-
ment crs via longlet Settings. Il est noter que vous pouvez rat-
tacher les cellules pour lesquelles vous tes dfini(e) en tant que
membre et qui apparaissent donc dans votre tableau de bord. La
[Fig.10] montre limportation de ces deux stores dans lAPI.
Ltape suivante consiste alors en la gnration des ressources au
sein de lAPI afin de rendre accessible respectivement la gestion des
donnes des contacts ainsi que des fichiers statiques. Pour ce faire,
il suffit de se rendre dans longlet Resources des proprits des
dpendances et dajouter les ressources correspondantes grce au
bouton Add resources.
Les diffrentes ressources ajoutes ainsi que les reprsentations
associes saffichent alors dans la liste de longlet, ainsi que lillustre
la [Fig.11] relative aux proprits de lEntity Store.
Une fois cette opration galement ralise pour le File Store, les dif-
frentes ressources et reprsentations suivantes ont t obtenues
dans lAPI web.
Toutes ces ressources et reprsentations sont correctement confi-
gures pour utiliser les stores prcdemment imports. Il est
noter que nous avons supprim les ressources inutiles /html/ et
/css/ servant lister les fichiers des rpertoires.
Comme vous pouvez le voir [Fig.12], les diffrentes ressources et
reprsentations ont t ajoutes dans les sections Resources et
68-71 20/02/13 08:37 Page 70
(http://code.google.com/p/rest-client/) offrant une interface graphique
pour excuter des appels HTTP. La [Fig.14] illustre lappel de lAPI de
contacts avec cet outil. Il est galement possible dutiliser les fichiers
HTML, JavaScript et CSS stocks prcdemment dans le File Store.
Il suffit pour cela dutiliser lURL http://contactsapi.apispark.net/v1/html/contacts.html.
Il est noter quAPISpark fournit galement des kits client pour diff-
rents cas dutilisation de lAPI tels quavec Java (JVM ou Android),
JavaScript (AJAX ou Node.js) ou Objective-C (iOS).
Enfin, le service dhbergement collecte automatiquement des sta-
tistiques daccs vos API et propose des rapports visuels comme
lillustre la [Fig.15].
CONCLUSION
APISpark est une plateforme cloud (PaaS) mettant disposition un
IDE web productif afin de crer des API web et les backends asso-
cis, ainsi quun service dhbergement intgr afin de les mettre
disposition sur Internet. Dans cet article, nous avons montr com-
ment dvelopper une API web de gestion de contacts avec APISpark,
exposant des donnes structures et des fichiers statiques.
Nous avons vu comment crer une API web partir dun modle de
donnes en laissant loutil crer les ressources et reprsentations
correspondantes. Loutil reste nanmoins ouvert pour des besoins
plus avancs ou spcifiques en proposant une configuration fine au
niveau des ressources (URI, reprsentations et implmentation).
Nous avons galement vu que le dploiement de lAPI se ralise en
un seul clic sur un bouton Deploy. Vous navez plus vous soucier
des problmatiques de disponibilit et de scalabilit.
Nous navons pu vous dcrire dans cet article que quelques fonction-
nalits de la plateforme. Cette dernire met galement disposition
un catalogue dAPI pour la dcouverte et la promotion en leur ajou-
tant un niveau social. Il est possible de suivre les API ainsi que les
relations entre elles. Loutil supporte galement les templates afin de
crer des API instantanment ou encore les contrats dAPI faciles
partager entre plusieurs implmentations.
# Thierry Templier (ttemplier@restlet.com)
Architecte R&D, Restlet SAS
Dveloppeur, Restlet Framework
Co-auteur des ouvrages Restlet in Action (Manning), Spring par la pratique et
JavaScript pour le Web 2.0 (Eyrolles).
# Jrme Louvel (jlouvel@restlet.com)
Directeur Technique, Restlet SAS
Crateur et Leader Technique, Restlet Framework
Co-auteur de louvrage Restlet in Action (Manning) et
contributeur louvrage RESTful Web Services (OReilly)
Representations. Regardons un peu plus en dtail les ressources
avec lURI /contacts. Deux mthodes sont prsentes :
La premire, la mthode GET, retourne la liste des contacts en se
basant sur les reprsentations Contact et ContactList.
La seconde, la mthode POST, permet dajouter un contact en se
basant sur la reprsentation Contact.
Comme vous pouvez le voir, les mthodes exposent un traitement via
HTTP et configurent ce qui est accept en entre et retourn en
rponse. Une ou plusieurs actions sont galement configurables afin
de dfinir quels traitements sont raliss lors de lappel. Dans le cas
de la mthode GET, laction correspond un appel de lentity store et
plus particulirement de la mthode SELECT de lentit Contact afin
de rcuprer la liste des contacts. Cette liste sera formate dans la
reprsentation ContactList pour tre retourne.
Les reprsentations dfinissent une structure de donnes chan-
ges mais ne sont pas lies un format particulier. En effet, APIS-
park supporte la ngociation de contenu afin dutiliser JSON, XML ou
autres en fonction des besoins. Cet aspect se configure au niveau de
lAPI et des reprsentations en se basant sur les concepts dexten-
sion et de variantes.
Il nous reste juste dployer lAPI web afin quelle devienne acces-
sible depuis internet travers le domaine apispark.net. Ladresse
complte daccs lAPI se base sur le nom de domaine spcifi lors
de sa cration. Si les mthodes des ressources sont scurises, il
convient dutiliser lidentifiant et le mot de passe accessibles dans les
proprits du point daccs de lAPI (endpoint), comme lillustre la
[Fig.13]. Nous avons dsormais fini la mise en place de notre API web
de gestion des contacts et allons maintenant dcrire la manire dy
accder et de lutiliser par diffrents moyens.
UTILISATION DE LAPI CT CLIENT
Lutilisation une API web nimpose en aucun cas APISpark ni mme
un langage de programmation particulier. Cela peut mme se faire
depuis un navigateur. Nanmoins pour tester votre API, nous vous
recommandons l uti l i sati on d outi l s tel s que RESTCl i ent
PROgrammez ! < 71 > MARS 2013
i
pratique
Fig.13
Fig.14 Fig.15
68-71 20/02/13 08:37 Page 71
U
tiliser le pattern MVVM, cest avant tout sparer les couches
de son application de faon les rendre faiblement couples.
Pour les vues, cela se caractrise notamment par labsence
(ou, en tout cas, la diminution) du code behind.
View. Les vues correspondent aux pages et crans de vos applica-
tions et contiennent la dfinition structure de vos diffrents crans,
cest--dire le XAML. La vue correspond ce que lutilisateur verra
en lanant votre application.
Model. Les modles correspondent aux classes reprsentant vos
donnes du ct client. Le modle peut se charger notamment de la
validation des donnes.
ViewModel. Comme son nom lindique, le ViewModel se situe entre
la vue et le modle. Le ViewModel regroupe les donnes consom-
mes par la vue et contient la logique de manipulation du modle.
Gnralement, on cre un ViewModel par vue.
RAPPEL SUR LE DATABINDING
Avant dentrer dans le vif du sujet, voici un rapide rappel sur le bin-
ding en XAML. Il est indispensable de bien comprendre cette notion
pour utiliser le pattern MVVM dans nimporte quelle application. Si
vous navez aucune notion de binding, je vous invite consulter un
tutoriel avant de continuer cet article.
Le binding est dfini dans le XAML et permet de lier dynamiquement
la valeur dun lment (le texte dun bouton par exemple) celle
dune proprit (une string qui contiendra le texte du bouton). Un bin-
ding peut tre unidirectionnel ou bidirectionnel.
Dans le second cas, cela signifie quune modification de la valeur de
llment bind modifie la proprit source, et quune modification de
la valeur de la proprit source modifie la valeur de llment sur
lequel le binding est effectu. Pour quun binding soit effectif, il est
ncessaire que llment bind sache o trouver la proprit source.
Cette proprit est soit rcupre dans la source du binding, si celle-
ci est spcifie, soit dans le DataContext de llment bind ou de
ses anctres. Chaque composant hritant de FrameworkElement
contient une proprit nomme DataContext. Une fois dfini sur un
lment, le DataContext se rpand dans lensemble de son visual
tree. Ainsi, si un DataContext est dfini pour une Grid, tous les l-
ments situs dans cette Grid utiliseront par dfaut ce DataContext.
En MVVM, on dfinit gnralement le DataContext de chaque objet
Page en lui associant son ViewModel correspondant. Ainsi, tous les
binding effectus dans la vue ont comme source un ViewModel. Avec
MVVM, le binding reprsente le systme de communication entre
une vue et un ViewModel. Cela signifie que les ViewModel dfinissent
un ensemble de proprits sur lesquels les vues vont se binder.
CRATION DUN MODLE
Pour notre application de films, il nous faut avant tout un modle per-
mettant de reprsenter des films. Pour faire simple, nous allons par-
tir du principe quun film est reprsent par un ID, un titre et une
image. Le modle sera ici un simple POCO.
Dvelopper une application avec MVVM
Vous souhaitez appliquer le pattern MVVM vos applications Windows 8 ou tout
simplement en apprendre plus ce fameux pattern darchitecture ? Voici un guide
pratique pour dvelopper vos applications Windows Store avec MVVM.
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public string Image { get; set; }
}
Pour la suite de larticle, nous admettrons quun repository nomm
MovieRepository nous permet de rcuprer une liste de films. Un
lien disponible la fin de larticle vous permettra de rcuprer les
sources de lapplication.
CRATION DUN PREMIER VIEWMODEL
Le premier ViewModel que nous allons crer sera celui que lon
associera par la suite la page principale de lapplication. Celle-ci
permettra de lister les diffrents films. Le ViewModel doit donc
notamment contenir une liste de films.
public class MainPageViewModel
{
public MainPageViewModel()
{
this.Movies = MovieRepository.GetMovies();
}
private ObservableCollection<Movie> _movies;
public ObservableCollection<Movie> Movies
{
get { return _movies; }
set
{
if (_movies != value)
{
_movies = value;
}
}
}
}
Lors de sa construction, le ViewModel rcupre les films depuis le
repository et les affecte la proprite Movies.
CRATION DUNE PREMIRE VUE
Cette premire vue permet de prsenter une liste de films. Cette
liste sera affiche dans une GridView. La proprit Movies du View-
Model sera binde sur la proprit ItemsSource de la GridView.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=Auto/>
<ColumnDefinition Width=*/>
</Grid.ColumnDefinitions>
PROgrammez ! < 72 > MARS 2013
i
pratique
72-76 20/02/13 08:39 Page 72
<Button x:Name=backButton Click=GoBack IsEnabled={Binding
Frame.CanGoBack, ElementName=pageRoot} Style={StaticResource
BackButtonStyle}/>
<TextBlock x:Name=pageTitle Grid.Column=1 Text={Static
Resource AppName} Style={StaticResource PageHeaderTextStyle}/>
</Grid>
<GridView ItemsSource={Binding Movies}
Padding=120,0,0,0
Grid.Row=1>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation=Horizontal>
<Image Source={Binding Image} Width=120 Height=
150 Stretch=UniformToFill />
<TextBlock Text={Binding Title}
Style={StaticResource SubheaderTextStyle}
TextWrapping=Wrap
Margin=15,5
Width=250/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
Nous avons donc les trois lments du pattern MVVM : la vue, le
modle et le ViewModel. Toutefois, pour linstant, si vous excutiez
lapplication, vous constateriez que la vue naffiche rien. En effet, le
ViewModel MainPageViewModel na pas t dfini en tant que Data-
Context de la vue. Cela pourrait se faire simplement depuis le code
behind, comme le montre lexemple ci-dessous :
this.DataContext = new MainPageViewModel();
Cependant, nous nallons pas procder de la sorte. Jexpliquerai cela
en dtail dans la section ViewModelLocator qui suit.
ET SI MES PROPRITS CHANGENT,
JE FAIS QUOI ?
Lorsque les valeurs des proprits dun ViewModel changent, il est
ncessaire den avertir la vue. Cela se fait grce linterface INotify-
PropertyChanged. Cette interface dfinit un vnement nomm Pro-
pertyChanged. Cet vnement prend notamment en paramtre un
objet de type PropertyChangedEventArgs permettant de reprsen-
ter une proprit ayant t modifie. Concrtement, ds quune pro-
prit du ViewModel est modifie, il est ncessaire de lever
lvnement PropertyChanged afin den notifier la vue. Cette dernire
se mettra alors jour.Puisque tous les ViewModel ont besoin de ce
systme, nous allons crer une classe nomme ViewModelBase,
dont hriteront tous les ViewModel.
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string
propertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property
Name));
}
}
}
Dornavant, il suffira dappeler la mthode RaisePropertyChanged
dans le setter de chaque proprit du ViewModel. Chaque proprit
ou presque. Pour les collections cela est lgrement diffrent.
Celles-ci ne doivent pas implmenter INotifyPropertyChanged, mais
INotifyCollectionChanged. La classe ObservableCollection<T>, utili-
se ci-dessus pour dfinir la liste de films, implmente dj cette
interface. Ainsi, ds quun lment est ajout ou supprim de cette
liste, la vue est automatiquement mise jour.
Gardez toujours lesprit que la vue doit tre notifie pour que les
donnes quelle prsente soient jour.
VIEWMODELLOCATOR
Le ViewModelLocator, comme son nom lindique, va permettre de
localiser les ViewModel. Ce dernier est notamment utilis pour viter
le couplage fort vue/ViewModel, comme le montrait linitialisation du
DataContext dans le code behind ci-dessus. Le ViewModelLocator va
mettre disposition des vues diffrents ViewModel sans que chacun
ait pour autant une rfrence vers son ViewModel. Le ViewModelLo-
cator a pour charge de construire les ViewModel qui seront affects
en tant que DataContext des vues. On distingue principalement deux
faons de crer un ViewModelLocator. La premire consiste crer
une classe contenant une proprit pour chaque ViewModel. Chaque
vue peut ensuite binder son DataContext son ViewModel en utilisant
le nom de cette proprit. Voici un exemple de ViewModelLocator :
public class ViewModelLocator
{
private static ViewModelBase _mainPageViewModel;
public static ViewModelBase MainPageViewModel
{
get
{
if (_mainPageViewModel == null)
{
_mainPageViewModel = new MainPageViewModel();
}
return _mainPageViewModel;
}
}
public static ViewModelBase AddMoviePageViewModel
{
get
{
return new AddMoviePageViewModel();
}
}
}
Remarquez que le premier ViewModel est unique, tandis que le
second (que nous utiliserons plus tard) est instanci chaque appel.
PROgrammez ! < 73 > MARS 2013
i
pratique
72-76 20/02/13 08:39 Page 73
Le binding se fait ensuite de la faon suivante :
<common:LayoutAwarePage
x:Name=pageRoot
x:Class=MvvmW8.View.MainPage
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
xmlns:local=using:MvvmW8.Mvvm
DataContext={Binding MainPageViewModel, Source={StaticResource
VMLocator}}
mc:Ignorable=d>
<Page.Resources>
<local:ViewModelLocator x:Key=VMLocator />
</Page.Resources>
Cette premire solution permet galement de dfinir facilement un
ViewModel utiliser au runtime et un autre durant la conception de
l appl i cati on. En f oncti on de l a val eur de l a propri t
DesignMode.DesignModeEnabled, il est simple de crer un ViewMo-
del contenant des donnes statiques utiliser pendant la cration de
lapplication, et donc affichable directement sur le designer Visual
Studio / Blend. La deuxime solution pour crer un ViewModelLoca-
tor est dutiliser une attached property. Dans ce cas, le nom du
ViewModel sera rcupr dynamiquement en fonction du nom de la
vue laquelle il est associ. Il est ainsi ncessaire de dfinir une
convention de nommage pour les ViewModel. Dans lexemple sui-
vant, le nom de chaque ViewModel correspond au nom de chaque
vue auquel est prfix ViewModel .
public class ViewModelLocator
{
public static bool GetUseDefaultViewModel(DependencyObject obj)
{
return (bool)obj.GetValue(UseDefaultViewModelProperty);
}
public static void SetUseDefaultViewModel(DependencyObject obj,
bool value)
{
obj.SetValue(UseDefaultViewModelProperty, value);
}
public static readonly DependencyProperty UseDefaultViewModel
Property =
DependencyProperty.RegisterAttached(UseDefaultViewModel,
typeof(bool), typeof(ViewModelLocator), new PropertyMetadata
(null, UseDefaultViewModelChanged));
private static void UseDefaultViewModelChanged(DependencyObject
d, DependencyPropertyChangedEventArgs e)
{
string viewName = d.GetType().Name;
string viewModelName = String.Concat(viewName, ViewModel);
Type viewModelType = Type.GetType(MvvmW8.ViewModel. + viewModel
Name);
object newViewModel = Activator.CreateInstance(viewModelType);
FrameworkElement view = (FrameworkElement)d;
view.DataContext = newViewModel;
}
}
Il faut ensuite utiliser cette attached property de la faon suivante :
<common:LayoutAwarePage
x:Name=pageRoot
x:Class=MvvmW8.View.MainPage
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
xmlns:local=using:MvvmW8.Mvvm
local:ViewModelLocator.UseDefaultViewModel=True
mc:Ignorable=d>
COMMANDES
MVVM apporte son propre mcanisme dinteraction avec les
contrles grce aux commandes. Dsormais, lorsquil faudra
rpondre au clic dun utilisateur sur un bouton, ce nest pas un v-
nement qui sera lev, mais une commande qui sera excute. Cette
commande soccupera alors dexcuter un certain bout de code en
rponse laction de lutilisateur. Il nexiste pas nativement de classe
permettant de reprsenter une commande ; il est ncessaire den
crer une. Pour tre utilise en tant que commande, cette classe
doit obligatoirement implmenter linterface ICommand. Celle-ci dfi-
nit une mthode nomme Execute ; cette mthode est appele
lorsque la commande est excute. ICommand contient galement
une proprit nomme CanExecute et un vnement CanExecute-
Changed. La proprit permet de savoir si la commande peut tre
excute, tandis que lvnement dclenche une notification indiquant
le changement dtat de CanExecute. Voici une implmentation sim-
plifie dune classe reprsentant une commande.
public class RelayCommand : ICommand
{
private Action _action;
public RelayCommand(Action action)
{
_action = handler;
}
public bool CanExecute(object parameter)
{
throw new NotImplementedException();
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (_action!= null)
_action ();
}
}
Le constructeur de cette classe prend en paramtre une action qui
sera excute lors de lexcution mme de la commande. Cela per-
PROgrammez ! < 74 > MARS 2013
i
pratique
72-76 20/02/13 08:39 Page 74
met davoir une classe gnrique et non une commande par
action raliser. Nous allons maintenant crer une commande dans
MainPageViewModel afin de naviguer vers une nouvelle page depuis
MainPage lors du clic sur un bouton. Celle-ci se dfinit comme une
simple proprit :
public MainPageViewModel()
{
this.Movies = MovieRepository.GetMovies();
_addMovieCommand = new RelayCommand(AddMovie);
}
private ICommand _addMovieCommand;
public ICommand AddMovieCommand
{
get
{
return _addMovieCommand;
}
}
private void AddMovie()
{
//
}
Il reste maintenant utiliser cette commande depuis la vue. Exemple
avec un bouton prsent dans une AppBar.
<Page.BottomAppBar>
<AppBar>
<StackPanel Orientation=Horizontal HorizontalAlignment=Right>
<Button Command={Binding AddMovieCommand} Style={Static
Resource AddAppBarButtonStyle} />
</StackPanel>
</AppBar>
</Page.BottomAppBar>
En cliquant sur ce bouton, la mthode Execute de la classe Relay-
Command sera appele, ce qui provoquera lappel de la mthode pri-
ve AddMovie.
NAVIGATION ENTRE LES PAGES
En MVVM se pose toujours le problme de la navigation entre les dif-
frentes pages de lapplication et le passage des paramtres entre
celles-ci. Pour rappel, avec Windows 8, la navigation se fait grce
aux frames. Lobjet frame possde notamment une mthode Naviga-
te prenant en paramtre le type de la page vers laquelle on souhaite
naviguer. Toujours dans le but de dcoupler au maximum les diff-
rentes parties de lapplication, nous allons crer un helper, nomm
NavigationService, qui mettra disposition des ViewModel diff-
rentes mthodes pour naviguer. Ce helper ne sera finalement ni plus
ni moins quun wrapper pour la classe Frame.
En voici une version simplifie :
public class NavigationService
{
private static Frame _currentFrame;
static NavigationService()
{
CreateOrGetCurrentFrame();
}
public static void Navigate(string pageName)
{
Type pageType = Type.GetType(MvvmW8.View. + pageName);
_currentFrame.Navigate(pageType);
}
public static void Navigate(string pageName, object parameter)
{
Type pageType = Type.GetType(MvvmW8.View. + pageName);
_currentFrame.Navigate(pageType, parameter);
}
private static void CreateOrGetCurrentFrame()
{
if (_currentFrame == null)
{
if (Window.Current.Content != null && Window.Current.Content
is Frame)
{
_currentFrame = Window.Current.Content as Frame;
}
else
{
_currentFrame = new Frame();
Window.Current.Content = _currentFrame;
Window.Current.Activate();
}
}
}
}
Lutilisation est la suivante :
private void AddMovie()
{
NavigationService.Navigate(AddMoviePage);
}
Notez que les mthodes de navigation ne prennent pas directement
un type en paramtre, mais une chane de caractres. Une fois enco-
re, cela nous permettra de ne pas coupler nos VM avec nos vues.
RCUPRER LES PARAMTRES
Admettons maintenant que nous souhaitions afficher les dtails dun
film en cliquant dessus. Pour cela, nous allons rediriger lutilisateur
vers une nouvelle page en passant en paramtre le film slectionn.
Avant dimplmenter cela, il est important de se rappeler que les
applications Windows Store possdent gnralement un bouton
back (situ en haut gauche des pages) permettant de remonter
lhistorique de navigation de lutilisateur. Lorsque lutilisateur clique
sur le bouton back, les paramtres passs chaque page sont
resoumis et donc accessibles dans les mthodes OnNavigatedTo et
LoadState (cette dernire mthode peut tre surcharge si votre
page hrite de LayoutAwarePage). Il sagit l de la seule solution
PROgrammez ! < 75 > MARS 2013
i
pratique
72-76 20/02/13 08:39 Page 75
pour rcuprer ces paramtres. Nous allons donc tre oblig dcri-
re un peu de code behind afin de rcuprer le paramtre. Une fois
ce dernier rcupr, il est ncessaire de renvoyer la donne en
question vers le ViewModel correspondant la vue en cours daffi-
chage. Pour simplifier cela, nous allons crer une mthode virtuelle
nomme LoadData dans ViewModelBase. Cette mthode prendra
un paramtre de type object et sera publique.
public virtual void LoadData(object parameter)
{
}
Admettons maintenant que lors de la slection dun film, la mthode
suivante soit excute :
private void GoToMovieDetail()
{
NavigationService.Navigate(MovieDetailPage, this.SelectedMovie);
}
Pour rcuprer le film slectionn en arrivant sur MovieDetailPage,
nous pourrions utiliser le code suivant :
protected override void LoadState(Object navigationParameter,
Dictionary<String, Object> pageState)
{
ViewModelBase vm = this.DataContext as ViewModelBase;
vm.LoadData(navigationParameter);
}
Dans MovieDetailPageViewModel, le code suivant est prsent :
public override void LoadData(object parameter)
{
if (parameter is Movie)
{
//
}
}
En faisant cela, la vue et son ViewModel restent faiblement coupls.
Ici, lidal est de crer une classe permettant de grer cela automa-
tiquement pour toutes les vues.
BEHAVIORS
Dans une partie prcdente, nous avons tudi la notion de com-
mande. Cela fonctionne parfaitement avec les boutons, mais com-
ment faire pour ragir un autre vnement sans utiliser le code
behind des vues ? Il faut passer par des behaviors.
Un behavior est une classe permettant dajouter des fonctionnalits
un contrle existant. Lun des plus utiliss en MVVM est le behavior
EventToCommand permettant dexcuter une commande quand un
certain vnement est lev. En WPF, un behavior Blend est prsent
pour raliser ceci. Malheureusement, il nexiste aucun behavior
Blend pour Winrt, il est donc ncessaire de les recoder. Pour nous
simplifier le travail, un dveloppeur a mis disposition sur NuGet un
package nomm winrtbehaviors permettant dutiliser des behaviors
dans les applis WinRT. Autant dire que ce package est rapidement
indispensable pour tous ceux qui veulent crer une application Win-
dows 8 MVVM. Sur Internet se trouve galement un behavior Event-
ToCommand pour WinRT (effectuez une recherche A WinRt
behavior to mimic EventToCommand ). Celui-ci utilise les Reactive
Extensions pour fonctionner. Il permet dimiter le comportement du
behavior Blend du mme nom. Une fois les diffrents packages ajou-
ts votre projet, ce behavior sutilise de la faon suivante.
<common:LayoutAwarePage
x:Name=pageRoot
x:Class=MvvmW8.View.MainPage
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:winrtb=using:WinRtBehaviors
xmlns:behaviors=using:MvvmW8.Behaviors
DataContext={Binding MainPageViewModel, Source={StaticResource
VMLocator}}
mc:Ignorable=d>
<GridView ItemsSource={Binding Movies}>
<winrtb:Interaction.Behaviors>
<behaviors:EventToCommandBehavior Command=GoToMovieDetail
Command Event=SelectionChanged />
</winrtb:Interaction.Behaviors>
</GridView>
Dans cet exemple, ds quun film est slectionn, la commande
GoToMovieDetailCommand est excute.
MESSENGERS
Dernire notion fondamentale de MVVM, les messengers. Ces der-
niers permettent dtablir un canal de communication entre diff-
rents ViewModel (mais pas que) tout en gardant ces derniers
dcoupls. Le principe est simple : le destinataire du message sen-
registre afin de recevoir un type de message donn et lexpditeur
envoie des messages dun certain type. Les objets changs peu-
vent tre simples (string, entier), comme complexes.
Imaginons que, dans notre application, nous ajoutions une page pour
crer un film. Une fois ce film cr, nous voulons notifier MainPage-
ViewModel afin que ce film soit ajout la collection Movies.
Dans AddMoviePageViewModel :
private void AddMovie()
{
Movie newMovie = new Movie();
Messenger.Instance.Notify<Movie>(newMovie, newMovie);
}
Dans MainPageViewModel :
Messenger.Instance.Register<Movie>(newMovie, (m) => this.Movies.
Insert(0, m));
Ici, MainPageViewModel senregistre pour recevoir des donnes de
type Movie avec la cl newMovie et AddMoviePageViewModel
notifie ce dernier.
CONCLUSION
MVVM nest pas simple apprhender. Toutefois, ce pattern darchi-
tecture apporte un rel plus une fois quil est matris, notamment
en termes de maintenabilit, testabilit et volutivit de votre code.
Pour conclure, je vous invite vous rendre sur mon blog, dont
ladresse est disponible ci-dessous, afin de rcuprer les sources de
lapplication mayant servi dexemple tout au long de cet article.
# Loc Rebours
Consultant .NET, Avanade - Microsoft MVP C#
www.blog.loicrebours.fr
PROgrammez ! < 76 > MARS 2013
i
pratique
72-76 20/02/13 08:39 Page 76
Dcouvrir l'outil de construction de projets ANT
ANT est un outil de construction de projets qui, s'il est au dpart ddi aux projets
Java, excelle pour tous types de projets et se fait remarquer par sa portabilit.
Dcouvrons ensemble les principes de son maniement.
A
NT est apparu au cours de l'an 2000. Il tait alors intgr au
serveur de Servlets Tomcat et servait uniquement la
construction de ce dernier. Trs vite, les participants de
nombreux projets Open Source Java ont pris conscience du potentiel
de ANT. S'appuyant sur XML, extensible au moyen de classes Java,
ANT prserve en outre des dsagrments rencontrs avec d'autres
outils de construction, notamment au niveau de la portabilit. Les
IDE Java modernes sont entirement bass sur ANT, c'est le cas de
NetBeans, ou l'intgrent, c'est le cas d'Eclipse. Si ANT est trs utili-
s dans l'univers de Java, il est intressant de le considrer comme
une solution valable pour tous types de projets, et mme pour des
projets trs complexes ou trs spcifiques, en raison de la facilit
avec laquelle il est extensible.
1INSTALLATION DE ANT
ANT en version binaire peut tre tlcharg http://ant.apache.org/ et
vient sous la forme d'une simple archive zip. L'installation de ANT
consiste simplement dcompresser cette archive. Vous obtenez
alors une arborescence de rpertoires dans laquelle le rpertoire
bin contient les scripts de lancement de ANT. Il convient donc de
faire pointer ce rpertoire par la variable d'environnement PATH de
votre systme. En plus de PATH, vous devez dfinir deux autres
variables d'environnement, soit finalement:
Variables
d'environnement Pointe sur Exemple
PATH Les scripts du rpertoire bin C:\apache-ant-1.8.4\bin
ANT_HOME La localisation de ANT C:\apache-ant-1.8.4\
sur votre systme
JAVA_HOME La localisation de la JVM C:\jdk1.6.0_10
sur votre systme
Pour vrifier votre installation, vous pouvez faire depuis une console :
ant -version
Pour construire un projet avec ANT il suffit de taper ant dans la
console. L'outil cherchera alors lire dans le rpertoire courant le
fichier build.xml contenant les dclarations pour la construction du
projet. Si l'on souhaite utiliser un fichier XML d'un autre nom, on
emploiera les commutateurs -f ou -file ou -buildfile.
2
ANATOMIE D'UN FICHIER DE
CONSTRUCTION
Un fichier de construction ANT est un document XML. A la racine du
projet se trouve fort logiquement une balise 'project'. Cette balise
racine dfinit, via ses attributs, un nom de projet, une cible (target)
par dfaut, un rpertoire de travail de base et une description. Les
descriptions, que ce soit pour le projet ou d'autres balises, sont des
commentaires facultatifs. ces commentaires peuvent tre imprims
sur la console par ant -projecthelp.
La construction d'un projet se fait par accomplissement d'une suite
d'tapes lmentaires appeles targets. Des cibles de construction
autrement dit. L'ordre des tapes est dfini par des dpendances
entre cibles au moyen de l'attribut 'depends'. A l'intrieur des cibles
sont effectues, par ordre d'apparition, des tches que l'on peut voir
comme des appels de fonctions successifs. Les paramtres pour la
tche sont l encore dfinis grce aux attributs de balises. Une cible
peut concerner la compilation de sources, bien videmment, mais
n'est pas limite cela en raison de la richesse des tches de ANT.
Une tche est une classe Java instancie et excute par la JVM
sur ordre de ANT. Il y a des tches pour tout faire: compiler, mettre
des messages, crer un rpertoire, l'effacer, etc. Si la tche dont
vous avez besoin n'existe pas, vous pouvez crire vous mme une
classe Java pour la crer. Nous verrons plus loin comment proc-
der. Ce concept de tches, outre l'extensibilit, apporte la portabili-
t. Ainsi si les commandes mkdir existent sous UNIX, Linux,
Wi ndows, l eurs syntaxes et arguments di ffrent. La tche
Java/ANT mkdir gomme cela. Pour en terminer avec l'anatomie
d'un fichier de construction, signalons les proprits (property) qui
sont ANT ce que sont les variables globales aux langages de pro-
grammation.
3HELLO WORLD !
Faisons nous la main en sacrifiant la tradition et demandons ANT
de nous dire coucou puisqu'il sait faire autre chose que compiler du
code Java. Voici le fichier coucou.xml que l'on peut qualifier de Projet
ANT minimal. Vous trouverez ce fichier ainsi que tous les autres de
cet article sur notre site www.programmez.com.
<?xml version="1.0" encoding="ISO-8859-15" ?>
<project name="Coucou ant" default="coucou" basedir=".">
<description>Programme ANT de type Hello World</description>
<target name="coucou" description="Dire coucou">
<echo message="Programmez! avec ANT" />
</target>
</project>
La tche echo incluse dans la cible "coucou" sera automatiquement ex-
cute, car notre cible coucou est automatiquement construite en tant
que cible par dfaut. Lancez la construction du projet comme ceci :
ant -f coucou.xml
Le projet se construit, avec pour seule action d'mettre un message
sur votre console.
4UN PROJET SIMPLE
Construisons maintenant un vrai projet avec cibles multiples et
dpendances entre elles. Notre projet est constitu de deux fichiers
Java dont le code, sans intrt, n'est pas donn ici. Nous dfinis-
PROgrammez ! < 77 > MARS 2013
i
webmaster
77-80 20/02/13 08:43 Page 77
PROgrammez ! < 78 > MARS 2013
i
webmaster
sons trois cibles de construction trs classiques: compilation, net-
toyage et reconstruction. Voici le fichier build.xml
<?xml version="1.0" encoding="ISO-8859-15"?>
<project name="Dmonstration ANT N 1" default="compile" basedir=".">
<description>
Un fichier build.xml de base
</description>
<target name="compile" description="Compiler tous les sources Java.">
<mkdir dir="classes" />
<javac srcdir="src" destdir="classes" />
</target>
<target name="clean" description="Effacer toutes les classes">
<delete dir="classes" />
</target>
<target name="rebuild" depends="clean,compile"
description="Effacer et recompiler" />
</project>
Analysons ce code. Par dfaut, la compilation des sources Java est
effectue. La cible 'compile' s'acquitte de cela. Nous considrons
que les sources rsident dans le rpertoire 'src' et les classes
seront dposes dans le rpertoire 'classes'. Ces deux rpertoires
tant relatifs aux rpertoires dfinis par 'basedir' dans le projet. Le
rpertoire courant dans notre cas. Notons la prsence, avant la
tche javac, de la tche mkdir, car le rpertoire 'classes' n'est pas
cr par la tche javac. Nous devons donc nous assurer de son exis-
tence. La cible clean efface tout le rpertoire 'classes' et enfin la
cible de reconstruction (rebuild) est dclare comme dpendant des
cibles clean et compile, dans cet ordre. Ainsi :
ant -f build.xml rebuild
par construction de cette cible rebuild, provoque d'un seul coup le
nettoyage du projet puis sa recompilation complte.
5UN PROJET PLUS COMPLET
Un projet plus complet va comporter au moins une cible pour lancer
un test, en plus de la construction du projet [Fig.1]. Et aussi une cible
pour construire une distribution de l'application. Enfin il est pratique
de dfinir des variables au dbut du fichier, afin qu'une modification
de celles-ci se rpercute sur tout le projet :
<?xml version="1.0" encoding="ISO-8859-15"?>
<project name="Dmonstration ANT N 2" default="compile" basedir=".">
<description>
Un fichier build.xml plus volu
</description>
<property name="classes.dir" location="classes" />
<property name="programmeur.name" value="Fred" />
<target name="compile" description="Compiler tous les sources Java.">
<mkdir dir="${classes.dir}" />
<javac srcdir="src" destdir="${classes.dir}" />
</target>
<target name="clean"
description="Effacer tous les fichiers .class">
<delete dir="${classes.dir}" />
</target>
<target name="rebuild" depends="clean,compile"
description="Effacer et recompiler" />
<target name="run" depends="compile" description="Excuter le
programme">
<echo message="Lancement de l'application"/>
<java classname="programmez.fred.antdemo.MainClass"
fork="true"
spawn="true">
<classpath location="classes"/>
<arg value="Programmez!"/>
</java>
</target>
<target name="makedist"
depends="compile"
description="Construire une distribution dans un Jar">
<mkdir dir="dist" />
<jar destfile="dist/antdemo.jar">
<fileset dir="classes"/>
<manifest>
<attribute name="Created-By" value="${programmeur.name}"/>
<attribute name="Main-Class"
value="programmez.fred.antdemo.MainClass"/>
</manifest>
</jar>
</target>
Une cible permet de lancer notre application ds que sa construction est termine.
Fig.1
77-80 20/02/13 08:43 Page 78
</project>
Pour les cibles de test et de cration d'une distribution, nous utili-
sons des tches ANT. Il n'y a aucune difficult, nous renvoyons si
besoin le lecteur la documentation de ces tches. Bien remarquer
comment les "variables" sont dfinies de moyen de balises XML 'pro-
perty' et comment les valeurs ainsi dfinies sont utilises dans les
cibles clean et compile.
6CRER DES TCHES
Voyons maintenant comment tendre ANT avec de nouvelles tches.
A priori n'importe quelle classe Java peut devenir une tche ANT, ce
qui ouvre un champ de possibilits infinies. Voici une classe confor-
me la vieille tradition du HelloWorld :
package programmez.fred.antdemo;
public class CoucouTask {
public void execute() {
System.out.println("Coucou la tche");
}
}
Nous voyons que notre classe comporte une mthode baptise
conventionnellement 'execute'. ANT recherche toujours l'existence
de cette mthode via le mcanisme de rflexion de Java.
Paralllement nous crivons un fichier build.xml (fichier complet sur
notre site) pour compiler tous les sources Java des exemples et les
archiver dans un jar. Pour tester notre nouvelle tche, il suffit d'ajou-
ter une cible au fichier de construction. ANT n'tant pas devin, nous
l'informons que notre classe est une tche ANT au moyen d'une bali-
se taskdef. Voici ce que cela donne :
<target name="coucoutest"
description="Test de CoucouTask"
depends="anttaskjar">
<taskdef name="coucou"
classname="programmez.fred.antdemo.CoucouTask"
classpath="${dist.dir}/anttask.jar" />
<coucou/>
</target>
Notre nouvelle tche, pertinemment baptise coucou est excute
immdiatement aprs sa dfinition. Cette dernire comporte le nom
qualifi de la classe et un classpath indiquant o la trouver, c'est--
dire dans notre archive Jar.
7UNE TCHE PLUS VOLUE
La question qui se pose maintenant est de savoir comment procder
pour que notre tche affiche non plus un message prdfini mais
plutt un message dfini dans un attribut de balise du fichier
build.xml. Ou, formul autrement, comment lui passer des donnes
et des paramtres ? Nous voudrions aussi que notre tche coopre
mi eux avec ANT. La l i brai ri e de ANT f ourni t l a cl asse
org.apache.tools.ant.Task pour cela et c'est d'elle que driveront
dsormais nos nouvelles tches. La tche que nous crons mainte-
nant est semblable la tche intgre 'echo'. La tche reoit un
message dfini soit dans un attribut de sa balise, soit dans le conte-
nu de sa balise. Le message est imprim sur la sortie standard via la
mthode log de la classe parent Task. Passer par log est plus dans
la philosophie ANT que System.out.println En outre, un boolen peut
tre dfini dans un attribut de la balise afin de dfinir le comporte-
ment de la tche dans le cas o le message n'est pas dfini. Soit on
met un message d'information, soit on lve une exception, ce qui
aura pour effet d'interrompre la construction du projet. Voici notre
nouvelle classe :
package programmez.fred.antdemo;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
public class MyAntTask extends Task {
public void setMessage(String message) {
this.message = message;
}
public void addText(String message) {
this.message = message;
}
public void setFailOnError(boolean failOnError) {
this.failOnError = failOnError;
}
public void execute() {
if(message != null) {
String projet = getProject().getProperty("ant.project.name");
log(projet + " : " + message);
}
else {
if(failOnError)
throw new BuildException(
"Exception leve: pas de message dfini");
else
log("Pas de message dfini");
}
}
private String message;
private boolean failOnError;
}
Et nous pouvons tester notre tche comme ceci depuis le fichier
build.xml :
<target name="myanttasktest" description="Test de MyAntTask"
depends="anttaskjar">
<taskdef name="myanttask"
classname="programmez.fred.antdemo.MyAntTask"
classpath="${dist.dir}/anttask.jar" />
<echo message="Excution de la tche myanttask" />
<myanttask/>
<myanttask message="Ne vous tuez pas la tche" />
PROgrammez ! < 79 > MARS 2013
i
webmaster
77-80 20/02/13 08:43 Page 79
PROgrammez ! < 80 > MARS 2013
i
webmaster
<myanttask> Ceci est un message contenu </myanttask>
<myanttask failonerror="yes" />
</target>
Les valeurs d'attributs et les contenus de balises sont passs la
tche via le mcanisme de rflexion de la classe. Lorsqu'il dcouvre
un attribut de balise, ANT recherche un accesseur lui correspon-
dant dans la classe de la tche. Pour que cela fonctionne, une
convention de nommage doit tre respecte. L'accesseur doit com-
mencer par set, suivi du nom de l'attribut de balise commenant par
une majuscule. Ainsi pour un attribut 'message' l'accesseur sera
'setMessage'. Il n'est pas obligatoire que le membre de la classe qui
sera initialis dans l'accesseur rponde une convention de nomma-
ge, bien que cela soit une pratique rpandue. Si l'accesseur n'existe
pas, une exception est leve qui arrte le processus. Si l'accesseur
est trouv, il est invoqu et il reoit en argument la valeur de l'attri-
but de balise. La valeur n'est pas brute mais transforme selon le
contexte. Une chane sera passe telle quelle. Un attribut yes|no
sera converti en un boolen true|false, une proprit sera rempla-
ce par sa valeur, etc.
Lorsque la balise elle-mme contient quelque chose, le mcanisme
est sensiblement diffrent. Dans ce cas ANT recherche une mtho-
de de nom addText dans la classe. Si cette mthode n'existe pas,
une exception est leve. Contrairement ce qui se passe avec un
attribut de balise, un texte contenu dans une balise n'est pas analys
et encore moins transform. Un "yes" ne devient pas un boolen
true mais reste la chane yes et une proprit telle que ${dist.dir}
devient la chane "${dist.dir}".
8
TRAVAILLER AVEC DES BALISES
IMBRIQUES
XML permet de travailler avec des balises organises de faon hi-
rarchiques. ANT le permet galement. ANT procde alors avec un
mcanisme semblable celui que nous avons vu pour les attributs.
Supposons que nous voulions que notre balise gre des balises
imbriques dcrivant des membres de l'quipe de Programmez!.
<target name="anttaskprogrammeztest"
description="Test de AntTaskProgrammez"
depends="anttaskjar">
<taskdef name="anttaskprogrammez"
classname="programmez.fred.antdemo.AntTaskProgrammez"
classpath="${dist.dir}/anttask.jar" />
<echo message="Excution de la tche anttaskprogrammez" />
<anttaskprogrammez failOnError="false">
<membre nom="Jean" />
<membre nom="Franois" />
<membre nom="Fred" />
</anttaskprogrammez>
</target>
Dans cet exemple, les balises imbriques ont pour nom 'membre'.
Nous crivons une classe Membre qui encapsule cette notion de
membre de l'quipe. La classe doit rpondre aux rgles que nous
avons dcrites pour les attributs de balise. Elle comportera donc des
accesseurs correspondant aux attributs que peut supporter la
balises 'membre'. Les nombres de balises imbriques tant a priori
inconnus, les instances de membres seront ranges dans un conte-
neur tel que List ou Vector. Enfin notre classe devra tre instancie.
Cela sera fait par une mthode qui tient lieu de fabrique d'objets. La
mthode sera prfixe par create et se nommera donc create-
Membre pour notre exemple. La mthode pourra encore tre pr-
fixe par add ou addConfigured. Les nuances entre les trois
possibilits sont expliques dans la documentation de ANT.
package programmez.fred.antdemo;
import org.apache.tools.ant.Task;
import java.util.*;
public class AntTaskProgrammez extends Task {
public void setMessage(String message) {
this.message = message;
}
public void setFailOnError(boolean failOnError) {
this.failOnError = failOnError;
}
public void execute() {
if(message != null)
log(message);
for (Iterator it=membres.iterator(); it.hasNext(); ) {
Membre membre = (Membre)it.next();
log(membre.getNom());
}
}
public Membre createMembre() {
Membre membre = new Membre();
membres.add(membre);
return membre;
}
public class Membre {
String nom;
public void setNom(String nom){this.nom = nom;}
public String getNom(){return nom;}
}
private String message;
private boolean failOnError;
private Vector membres = new Vector();
}
9CYCLE DE VIE D'UNE TCHE
Enfin sur notre site, le lecteur trouvera une classe, AntTaskLifeCycle
qui est une classe de tche qui vous permettra de visualiser un peu
mieux comment vit une tche lorsqu'elle est invoque lors d'un pro-
cessus de construction. Notamment, une mthode init, si elle existe,
est invoque avant toute autre mthode, au dmarrage de la tche.
# Frdric Mazu - fmazue@programmez.com
77-80 20/02/13 08:44 Page 80
Android Developer Tool sur Linux 64 :
bugs et installation
Linstallation des outils pour dvelopper des applications Android, posait beaucoup de
problmes. Maintenant on peut tlcharger l'ensemble des outils ncessaires pour le
dveloppement Android (y compris Eclipse) sur le site officiel. Merci l'quipe d'Android !
C
eci ne va pas malheureusement sans
quelques soucis sur des plateformes
Linux 64-bits et notamment Fedora. La
raison en est l'existence de programmes 32
bits dans l'archive destine aux plateformes 64
(un bug!!!). Les tests ont t effectus sur
Fedora 17.
Note : Toutes les instructions de ligne de
commandes, concernant "adb" sont rela-
ti ves au dossi er adt- bundl e- l i nux-
x86_64/sdk/ platform-tools. Le dossier
adt-bundle-linux-x86_64 est la racine de
l'installation de ADT obtenu en d_com-
pressant son archive.
L'INSTALLATION DE ADT
Connectez-vous l'URL suivante :
http://developer.android.com/sdk/index.html
Tlchargez l'archive pour Linux 64 bits
Dcompressez
Lancez Eclipse dans le dossier obtenu "adt-
bundle-linux-x86_64" [Fig.1].
Normalement ceci devrait terminer l'installa-
tion. Mais non !
> Trouvez l'erreur
Quand on lance Eclipse, une erreur est affi-
che pour nous indiquer que le programme
"adb" est introuvable !!!. [Fig.2].
> Listez les fichiers
Dans un terminal tapez :
cd adt-bundle-linux-x86_64/sdk/platform-
tools
Le fichier "adb" existe, ses attributs sont
corrects [Fig.3].
PROgrammez ! < 81 > MARS 2013
i
bugtrack
Fig.1
Fig.2
Fig.3
Tlcharger ADT
adb est introuvable
adb existe
Fig.4
adb est un excutable 32 bits
81-82 20/02/13 08:44 Page 81
> Le fichier "adb"
est un excutable 32 bits
Lancez l'utilitaire "file" dans le terminal pour
trouver la nature du fichier. Surprise "adb"
est un fichier excutable 32 bits [Fig.4].
Quand on essaye d'excuter "adb" manuelle-
ment, il affiche un message d'erreur concer-
nant le fichier "/lib/ld-linux.so.2", car le
chargeur pour les applications 32 bits est
absent. Il est noter que lancer la comman-
de "ldd adb", ne sert rien dans ce cas et
affiche : programme non-excutable. Pour
trouver le programme installer pour rendre
"adb" excutable et permettre au systme
d'avoir ld-linux.so.2, il suffit de taper dans un
terminal yum provides ld-linux.so.2 [Fig.5].
> Installez glibc
Tapez su - c "yum i nstal l gl i bc- 2.15-
58.fc17.i686" dans un terminal, entrez le
mot de passe root et validez [Fig.6].
> Trouvez les autres
bibliothques manquantes
Tapez ldd adb, puis ENTER dans un terminal
[Fig.7]. Tous les fichiers indiqus comme non
trouvs (not found), en excutant "ldd adb",
doivent tre installs, de la mme manire
que pour l'installation de glibc mentionne
plus haut, en utilisant yum provides nomFi-
chier, puis yum install. Ajoutez l'installation
un autre fichier "libz.so.1", ncessaire pour
"aapt" [Fig.8, 9 et 10].
Bonne programmation !
# Kaesar Alnijres
Dveloppeur Java - Leader jug-Cergy
http://www.java-javafx.com
PROgrammez ! < 82 > MARS 2013
i
bugtrack
Une bibliothque manque pour "adb"
Fig.6
Fig.7
Fig.8
Fig.9
Fig.10
Installer glibc
ldd adb
Exemple d'installation de fichier
ADT en action
Excution
normale
Fig.5
81-82 20/02/13 08:45 Page 82
OUI, je mabonne (crire en lettres capitales)
Envoyer par la poste : Solutions Logiciels, service Diffusion, GLIE - 17 chemin des Boulangers 78926 Yvelines cedex 9 - ou par fax : 01 55 56 70 20
1 an : 50 au lieu de 60, prix au numro (Tarif France mtropolitaine) - Autres destinations : CEE et Suisse : 60 - Algrie, Maroc, Tunisie : 65 , Canada : 80 - Dom : 75 Tom : 100
10 numros par an.
M. Mme Mlle Socit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Titre : . . . . . . . . . . . . . . . Fonction : Directeur informatique Responsable informatique Chef de projet Admin Autre . . . . . . . . . . . . . . . . . . . . . . . . . .
NOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prnom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
N . . . . . . . . . . . . . rue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Complment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Code postal : LLLLLI Ville . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Adresse mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Je joins mon rglement par chque lordre de SOLUTIONS LOGICIELS Je souhaite rgler rception de facture
Vous avez besoin dinfo
sur des sujets
dadministration,
de scurit, de progiciel,
de projets ?
Accdez directement
linformation cible.

E
d
i
t
e
u
r

:
K
-
N
o
w

s
a
r
l

a
u

c
a
p

d
e

8
0
0
0

s
i

g
e

s
o
c
i
a
l

:
2
1

r
u
e

d
e

F

c
a
m
p
,
7
5
0
1
2

P
a
r
i
s
Actu trie par secteur
Cas clients
Avis dExperts
www.solutions-logiciels.com
Actus Evnements Newsletter Vidos
Les outils des Dcideurs Informatiques
02/83/84-161 20/02/13 13:17 Page 3
02/83/84-161 20/02/13 08:29 Page 4

Vous aimerez peut-être aussi