0% ont trouvé ce document utile (0 vote)
18 vues76 pages

Gérer un projet Open Source efficacement

Transféré par

laurent capoeira
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
18 vues76 pages

Gérer un projet Open Source efficacement

Transféré par

laurent capoeira
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PROGRAMMEZ

Un code
pour les gouverner tous !

10-13-10 © mstay (tornade)


100% mobile avec :
Xamarin, Nokia X, Windows Phone 8.1, Firefox OS

Java Déjeunez
L’essentiel de
Devoxx France 2014 intelligent !
Osez le
DITES-LE Brown
Bag Lunch
AVEC DES API
Deezer, Skype,
Lync, Yammer L’informatique
quantique
Créer L’ultime frontière ?
et gérer
un projet
Open
Source
08-06-13 © whanwhanai (usine)

Mensuel n°175 - Juin 2014


E

Coding4Fun 3’:HIKONB=^UZ^Z]:?a@b@r@p@a";
Printed in EU - Imprimé en UE - BELGIQUE 6,45 €
Raspberry Pi : plus fort que jamais SUISSE 12 FS - LUXEMBOURG 6,45 € DOM Surf 6,90 €
Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
003-175_175 19/05/14 20:46 Page3

27 59
Créer et gérer un projet

a
Les API Deezer
open source
78
Les API Yammer

75 18
Comment faire ? Lync et Skype : Devoxx France 2014
Il y a certains mois où je me demande comment
la folie des API
faire rentrer 100 pages dans 84 pages ! On peut 4
réduire la taille des caractères et fournir la fonction
zoom… Il faut faire des choix, décaler des articles Les chiffres du mois
d’un mois (toutes mes excuses aux auteurs).
Simple et rapide.
Mais rapidement, on tombe dans le dur. C’est à ce 33 Mobile : 1 code
moment-là que je passe des heures à regarder le
sommaire, les articles qui ne rentrent pas. Je pour les
retourne dans tous les sens le problème. Parfois,
c'est pour aérer mes neurones que je regarde un gouverner
épisode de Game of Thrones ou de Battlestar tous
Galactica. Et l’on se remet au travail…
Comme vous le constaterez, plusieurs rubriques
habituelles ne sont pas présentes ou très peu 67 14 57
(hacking, développeur du mois, matériel). Nous
avons voulu privilégier l’actualité chaude : un Coding4fun Agenda Refactoring
grand retour sur Devoxx France 2014 et sur le
dernier rebondissement dans le procès Google –
Oracle. Sur ce dernier point, il est encore difficile
80 71 16
de dire si les API vont être des victimes du dernier Time Machine Les API
jugement… Les lambdas vont-elles
Autre très gros dossier du mois, le développement
mobile est à l’honneur (eh oui encore !). Nous 63 de Java 8 devenir
avons voulu privilégier l’actualité de ces dernières illégales ?
semaines : Windows Phone 8.1, Nokia X (vous Optimiser les
savez le téléphone Nokia — maintenant Microsoft
— fonctionnant sous Android), les dernières perfs [Link]
versions de Firefox OS et un gros focus sur le 9
développement multi-plateformes à partir d’un
code unique, avec en ligne de mire les outils
Xamarin qui agitent beaucoup la communauté L’informatique
depuis le mois d’avril ! 65 quantique
Autre dossier, créer et gérer un projet open La métaprogrammation
source. Car au-delà de l’intérêt d’un projet open
source, il ne faut jamais oublier sa maintenance,
son développement, sa disponibilité. Comme vous 55 82
le verrez, ce n’est pas toujours simple, surtout
quand on commence à chercher une licence BBL : le déjeuner nouvelle génération CommitStrip
ouverte.
Dans ce numéro, il sera beaucoup question d’API.

Cahier MariaDB Coding à la plage :


Deezer, Skype, Yammer, vous n’aurez que

AàZ
de
À LIRE
vacances Raspberry Pi, Gadgeteer,
l’embarra du choix ! Sans oublier, la nouvelle
DANS LE
JavaScript, Google Maps, Nokia X,
tendance déjeuner : les BBL. Fini le déjeuner bête
et stupide : mangez et formez-vous ! PROCHAIN
NUMÉRO 100 % iOS, Windows Phone, Xamarin
Bon code ! n° 176 en kiosque
Attention : numéro exceptionnel de 100 pages
# François Tonic
le 28 juin 2014 Drupal
Directeur de la publication & rédacteur en chef
ftonic@[Link]
Juin 2014 > Programmez! 3
004_005_175 19/05/14 21:17 Page4

8,5 %
le chiffre du système KitKat…
Vers un
visa développeur
en France ?
Gmail
bientôt une nouvelle interface ?

Miroir, miroir, quel est le langage le plus utilisé ?


L’index TIOBE donne chaque mois les langages les plus utilisés par les développeurs. Il s’agit d’un
indicateur basé sur les recherches web. Des % à manipuler avec précaution.

Pas de changement pour le trio de tête : C, Java, Objective-C. Tous les langages, ou presque,
subissent des baisses. Le marché est très segmenté. F# fait un bond de 25 places pour se stabili-
ser à 13e place.

Le marché
chinois des
smartphones
L’immense marché
chinois est un enjeu
pour les constructeurs
de smartphones. Les
acteurs locaux pèsent
lourd : 50 % au 1er
trimestre 2014.
Samsung demeure 1er
avec 18 %. Apple est
4e (10 %) avec
Coolpad.

Les salaires 2014


Le cabinet Robert Half a dévoilé son étude sur les salaires dans le monde informatique. Le marché
évolue beaucoup. Le cabinet estime une croissance de 5 % (postes à pourvoir). Parmi les postes
clés à surveiller en 2014 : le lead développeur / chef de projet technique.
Le cabinet estime que les tendances sur les salaires sont plutôt à la stabilisation (idem pour les
primes), des hausses sont toutefois possibles pour environ 20 % des entreprises.
poste expérience salaire brut annuel
architecte logiciel 5-15 ans 60 – 85 000 €
ingénieur développement 2 – 7 ans 40 – 55 000 €
7-15 ans 55 – 65 000 €
ingénieur développement mobile 2 – 10 ans 40 – 55 000 €
DBA 0-3 ans 30 – 35 000 €
Expert BI 5-10 ans 50 – 80 000 €
chef de projet qualité logiciel / test manager 3 – 15 ans 48 – 70 000 €
intégrateur web / html 0-3 ans 25 – 35 000 €
2-5 ans 35 – 45 000 €
+ 5 ans 45 – 50 000 €
designer web 2-5 ans 35 – 45 000 €
Les salaires des développeurs (niveau ingénieur) sont des fourchettes relativement hautes. Pour un
développeur débutant, pas de surprises, nous serons toujours vers 30 – 33 000 € (île de France).
4 Programmez! < Juin 2014
004_005_175 19/05/14 21:17 Page5

PANIQUE
À BORD ? MATÉRIAUX :
La cotation de 37 entreprises un nouveau composite
du Cloud baisse (OK, — 30 %) et résistant jusqu’à 1 200° !
on commence déjà à paniquer, C’est la trouvaille du français
et à parler d’une bulle Cloud. Respirez ! Herakles avec le Prophete.

Marché
smartphone : et les
gagnants sont ?
WEBKIT
Un nouveau moteur JavaScript devrait
s’installer dans les prochains mois
Le cabinet d’analyse Canalys a sorti son dans le projet WebKit. FTJIT s’appuie
étude sur le marché mondial des sur LLVM pour le compilateur JIT.
smartphones pour le 1er trimestre 2014.
Mozilla et Google explorent aussi la
piste LLVM.

24 juin
disponibilité de Windows Phone 8.1

XBOX ONE – CHER :


oui, mais dans sa version sans
Kinect…
© Canalys 2014

Basic a 50 ans !

Premier constat, les modèles ayant un


écran inférieur à 5 pouces continuent de
dominer le marché : 66 %. Les modèles
entre 5 et 5,4 pouces suivent à 22 %. Les
énormes modèles (6 pouces et +) sont Eh oui, le langage basic a 50 ans. Il
anecdotiques : 2 %. Après, certains fut créé en mai 1964 grâce aux
marchés peuvent être plus dynamiques travaux de Kemeny et Kurtz. Le but
sur les grandes tailles. était de créer un langage pour
pouvoir utiliser un ordinateur et
Côté système, c’est sans appel : faciliter l’accès aux étudiants. Toute
l’idéologie du BASIC tient dans son
Windows
Phone : 3 % Android : 81 % nom : Beginner’s All-purpose
Symbolic Instruction Code ! Le
Basic est devenu une référence
dans les années 1980 avec
iOS : 16 % Microsoft. Il était une fondation du
Z80, du CPC 464, des premiers
Mac ! Souvenez-vous du GW Basic
Si Windows Phone est dynamique sur (que de souvenirs) ou encore du
certains marchés, au niveau mondial, le GFA Basic (encore plus de
chemin à parcourir est encore énorme. souvenirs) ! Le basic avait aussi des
Microsoft paie ici ses médiocres ventes détracteurs pour dire : c’est un
sur plusieurs marchés clés tels que les langage qui contribue à écrire de
États-Unis et le Japon. mauvais programmes ! Les lieux de
Côté constructeur, Samsung est toujours sa naissance, à l’université
le 1er vendeur avec 31 %, Apple se tient Dartmouth (USA), ont célébré
sans problème sur la 2e marche du l’événement
podium avec 16 %. ([Link]

Juin 2014 > Programmez! 5


006_007_175 19/05/14 21:20 Page6

Hackathon Fhacktory :
l’application BlenderBQ gagne
a

24 heures ! Pas une heure de plus. 24 heures pour concevoir et développer une application. C’est le
défi du hackaton Fhacktory qui s’est déroulé en mars dernier. Découverte du gagnant : BBQ.
BlenderBQ : interface vocale
et gestuelle pour Blender
Notre application est divisée en deux parties :
un serveur qui récupère et traite les com-
mandes utilisateurs, et un client qui se charge
de les traiter dans Blender.

Le serveur
Dans un premier temps, le serveur va démarrer
l'écoute d'événements du LeapMotion, ainsi
que la pipeline de reconnaissance vocale (dont
les fonctionnements sont détaillés plus loin).
Celui-ci tourne sur Python 2.7, car l'API Leap-
Motion n'était pas compatible avec les versions
suivantes de Python (3.3 par exemple). L'archi-
tecture client-serveur est tout ce qu'il y a de est activé et un affichage se met en place pour La grammaire gestuelle
plus standard : le serveur va envoyer des com- changer les objets (« mesh ») de Blender. Notez Au cours du temps, le Leap Motion envoie régu-
mandes en fonction des entrées LeapMotion / que le système de coordonnées de Blender et lièrement des "frames", qui contiennent tout ce
reconnaissance vocale, via une simple celui du LeapMotion sont très différents, ce qui qu'il détecte. Ces frames comprennent le
connexion socket. Nous avons tout d'abord uti- induit une conversion obligatoire des valeurs de nombre de mains détectées et leur position en
lisé des socket UNIX par souci de performance coordonnées. D'abord à cause de l'échelle, mais 3 dimensions, ainsi que le nombre de doigts
des sockets TCP, mais il s'avère que la différen- aussi à cause de l'orientation des axes et de la dif- visibles pour chaque main, ainsi que leur posi-
ce n'est plus très notable. férence entre coordonnées absolues et relatives. tion. La fréquence d'envoi des frames est éle-
vée : environ 20 frames sont envoyées par
Le client Commande vocale seconde. Cependant, cette fréquence peut
Le scripting de Blender est également fait en La chaîne de traitement varier selon les ressources disponibles, l'activi-
Python, mais contrairement au serveur, celui-ci La commande vocale est basée sur l'utilisation té générale, et d'autres facteurs. À chaque
utilise une version modifiée de Python 3, adaptée de PocketSphinx (CMUSphinx), intégré via une réception d'une de ces frames, notre serveur
à son usage. C'est pourquoi nous avons utilisé pipeline GStreamer, et disponible à travers une analyse le mouvement des mains de l'utilisa-
des sockets relativement bas-niveau, plutôt que librairie Python. Nous avons passé beaucoup teur. Ceci est réalisé principalement par mémo-
des systèmes de communication RPC ou avec un de temps à comprendre le fonctionnement de risation des informations clé à chaque étape,
Manager, qui utilise Pickle, donc incompatible la pipeline, et où nous nous placions dans la afin d'en analyser l'évolution au cours du temps.
entre versions de Python. En ce qui concerne le chaîne d'information vocale. Finalement, nous En 24 heures, nous avons implémenté quatre
contrôle de Blender, beaucoup d'obstacles ont dû avons défini un corpus de mots simples corres- gestes :
être surmontés. Blender bloque dès le lancement pondant à des commandes, et avons construit ◗ Le geste ‘grab’ permet d'attraper l'objet, de
d'un script, et ce jusqu'à ce que celui-ci se termi- le dictionnaire et le modèle acoustique à partir le déplacer dans l'espace et éventuellement
ne. Cependant, nous devions absolument mainte- de l'outil lmtool de CMUSphinx. de le faire pivoter selon chaque axe.
nir l'écoute sur le serveur d'entrées. Nous avons ◗ De manière complémentaire, le geste ‘scale’
donc utilisé le concept d'opérateurs modaux mis Commandes implémentées permet d'agrandir ou rétrécir l'objet en
à disposition par Blender. Ces opérateurs fonc- Le dictionnaire est constitué de mots courts et mimant un étirement avec les deux mains.
tionnent en effectuant certains callbacks particu- très différents les uns des autres afin de rendre ◗ Un balayement de la main (geste ‘swipe’) per-
liers au fur et à mesure de l'utilisation de leur reconnaissance plus fiable. Un premier met, à la manière d'un potier, de mettre en
l'opérateur. Ceux-ci bloquent le fonctionnement groupe de commandes (‘above’, ‘right’, ‘came- rotation un objet.
de Blender, et donc nécessitaient un parallélisme ra’, etc) permet de contrôler la vue, tandis que ◗ Enfin, le geste ‘touch’ permet, en pointant le
pour récupérer les commandes du serveur. Mal- le second groupe (‘object’, ‘pottery’, ‘paint’) sert doigt dans la direction souhaitée, de sculpter
heureusement, Blender n'est pas thread-safe, ce à passer d'un mode à un autre. Il est facile l'objet de manière très intuitive.
qui nous a obligé à effectuer uniquement des opé- d'ajouter des commandes supplémentaires
rations non-bloquantes lors de la récupération puisqu'il suffit de les insérer dans le dictionnaire
des commandes, ainsi que la gestion des paquets puis de les faire correspondre à l'appel corres- Merlin Nimier-David,
expirés ou redondants. pondant dans l'API Blender. Jean-Marie Commets, Pierre Turpin,
Ainsi, à chaque réception de commande, un ordre Arthur Gustave Monod, Alin Dicu (Fhacktory)

6 Programmez! < Juin 2014


008_013_175 19/05/14 21:23 Page8

L’informatique quantique :
l’ultime frontière ?
Un ordinateur, tout comme une
casserole, est un système
physique. Les physiciens diront
que vous préparez ce système
dans un état initial lorsque,
dans une poêle, vous mettez de
l’huile, cassez un oeuf, et la
placez sur le feu. Il convient
ensuite d’attendre quelques
minutes que l’évolution
physique s’opère, avant
d’observer le système dans un
état final intéressant: celui
d’oeuf frit. Évidemment, tout ici
est dicté par les lois de la
physique; et même si le four à
Montage du bloc processeur de D-Wave Systems
micro-ondes n’est pas la
meilleure façon de cuire un Le principe de superposition fourchette=0.5). Ce point est entre la fourchette et
oeuf, cette invention montre En physique classique (Newtonnienne, celle qu’on le couteau: il correspond à l’état d’un seul et
apprend au lycée, celle que l’on observe aux unique couvert qui serait, curieusement, moitié
que d’autres principes échelles de la vie de tous les jours), les états des fourchette, moitié couteau.
physiques sont utilisables pour objets sont mutuellement exclusifs. Exemple: un D’une façon générale, si, en physique classique,
parvenir à ses fins. couvert peut-être une fourchette, ou un couteau. un système pouvait être dans un état A ou dans
Mais ça ne peut pas être à la fois une fourchette un état B, alors en physique quantique cet objet
L’ordinateur comme et un couteau. peut aussi se trouver dans un état superposé
un système physique a.A+b.B, c’est-à-dire à la fois dans l’état A, avec
Ces banalités nous poussent à nous interroger. Armés de ces même couverts, partons à l’assaut une amplitude a, et dans l’état B, avec une
D’une part, nous savons qu’un ordinateur est un de l’un des phénomènes les plus étranges de la amplitude b. C’est le principe de superposition.
système physique qui, préparé dans un état initial physique. Posez votre fourchette et votre couteau Bien que fort simple à expliquer (je viens de le
(lorsque vous exécutez un programme f sur une de façon à ce qu’ils se touchent à l’extrémité du faire en quatre lignes), le principe de
entrée x), permet, après une courte évolution manche et soient orthogonaux (figure 1). En superposition est terriblement difficile à accepter.
physique, d’observer un état final intéressant (le physique quantique, l’espace des états possibles L’esprit humain a besoin de se rattacher à ce qu’il
résultat du calcul, f(x), qui apparaît à l’écran). Mais est toute la table, c’est à dire tout le plan décrit connaît, à son expérience de tous les jours. Votre
d’autre part, nous savons que les lois de la par l’abscisse “être un couteau” et l’ordonnée premier réflexe sera donc de songer à ces
physique sont parfois contre-intuitives, à la limite “être une fourchette”. Par exemple, prenons le amplitudes comme à des probabilités. Autrement
du magique: notamment celles de la physique point de coordonnées (couteau=0.5, dit, vous aurez tendance à penser qu’un couvert
quantique, découverte au début du 20ème siècle. qui serait dans l’état superposé
Dès lors, n’est-il pas naturel de s’interroger: un [Link]+[Link] est un couvert qui a une
système quantique ne permettrait-il pas Fig.1 probabilité a d’être un couteau, et une probabilité
d’effectuer un calcul plus rapidement? Pourrions- b d’être une fourchette. Or ce n’est pas tout-à-fait
nous utiliser une partie de la “bizarrerie” de la le cas, pour deux raisons.
physique quantique afin d’inventer des Le première de ces raisons, c’est que les
ordinateurs plus efficaces, ou plus sûrs? amplitudes a et b ont le droit d’être des nombres
L’ordinateur quantique est-il le four à micro-ondes négatifs. Autrement dit l’espace des états
de l’informatique? possibles est vraiment toute la table et non pas
Pour explorer ces questions, tentons de juste le quart de plan pointé par le bout de la
comprendre en quoi la physique classique et la fourchette et du couteau. Ce n’est clairement pas
physique quantique sont fondamentalement le cas pour les probabilités: a-t-on déjà vu un
différentes. météorologue vous annoncer une “chance” -0.8

8 Programmez! < Juin 2014


008_013_175 19/05/14 21:26 Page10

Fig.2
qu’il va faire beau demain? Or, précisément, pour
comprendre la vraie nature de ces amplitudes
quantiques, il faut faire l’effort de s’imaginer un
monde où une telle annonce serait monnaie
courante. Dans un tel monde, imaginons qu’un
ivrogne titube entre un point A et un point B en
utilisant la règle suivante (figure 2). S’il est en A,
alors il se déplace en B avec “chance” 0.5, et
reste en A avec chance 0.5. S’il est en B, par
contre, alors il se déplace en A avec chance 0.5,
et reste en B avec chance -0.5. sceptique et rationnelle; cela fait 100 ans que la est à tempérer, cependant. L’algorithmique
Question: A supposer qu’il part de A, où se trouve physique quantique existe, 100 ans que l’on quantique, hélas, n’est pas une discipline facile.
l’ivrogne au bout de deux étapes? Pour y observe dans les laboratoires des particules se Car certes, on peut préparer l’état initial
répondre, examinons les chances pour qu’il soit comporter de manière étrange, à la manière de a1.y1+a2.y2+...+[Link]à moindre coût. On peut
en B. Il y a pour cela deux scénarios possibles: 1/ l’ivrogne quantique, 100 ans que l’on cherche une même effectuer en temps constant une évolution
avec chance 0.5*0.5 il est resté en A puis allé en meilleure explication des phénomènes observés, quantique sur cette superposition, qui à chaque yi
B. 2/ avec chance 0.5*-0.5 il est allé en B puis est et finalement 100 ans que le principe de concatènera 1 si yi est le plus petit facteur de x, et
resté en B. Au total, ses chances d’être en B au superposition s’impose comme étant l’explication 0 sinon. De cette façon, on obtient un pas de
bout de deux étapes sont de 0.5*0.5-0.5*0.5, soit la plus simple, la plus claire, et en définitive la plus temps a1.y10+a2.y20+...+aj.yj1+...+aN.yN0. La
zéro. Autrement dit, l’ivrogne se trouve forcément réaliste. Pour l’heure il nous faut donc admettre solution yj=f(x) est donc présente dans la
en A. Moralité, là où les probabilités qu’à l’échelle des particules, le principe de superposition, à portée de main. Seulement voilà,
s’additionnent toujours, car elles sont forcément superposition s’applique. comment l’observer?
positives, les amplitudes quantiques, elles, parfois
se soustraient, car elles peuvent être négatives. Le software quantique Car enfin, a-t-on jamais observé qu’un couvert en
Lorsqu’elles se soustraient, les physiciens parlent Le principe de superposition est certes choquant, superposition pouvait être un couteau et une
de phénomène d’interférence destructive. Ils mais pour l’informatique, c’est une aubaine, car il fourchette en même temps? A-t-ton jamais
aiment aussi à parler, pour décrire ce phénomène, nous offre un parallélisme gratuit et inespéré. observé un ivrogne être en position A et en
de dualité onde-corpuscule, car les ondes, Prenons l’exemple d’un informaticien qui position B, en superposition? Non. En fait le
comme des vagues, peuvent parfois additionner souhaiterait, étant donné un nombre x, calculer principe de superposition n’est pas observable
leur forces, mais aussi les soustraire: c’est le cas son plus petit facteur premier f(x). Autrement dit, directement. Il est simplement la meilleure
quand le haut d’une vague rencontre le creux l’ordinateur en tant que système physique doit explication de ce qu’il se produit lors des étapes
d’une vague, laissant le niveau d’eau inchangé. emmener l’état initial 15 vers l’état final 3, ou intermédiaires, d’évolution physique, avant
encore 77 vers 11, etc. Un algorithme naïf l’observation finale. Pour clarifier ce point,
La deuxième de ces raisons, qui est liée à la consisterait à tenter de diviser x par 2, puis par 3, retournons à notre ivrogne quantique. Le principe
première, c’est que l’état a.A+b.B est un état etc. jusqu’à lui trouver un diviseur. Cet algorithme de superposition est la meilleure explication
précis, entièrement déterminé, et non pas une est très lent: son temps de calcul moyen est disponible du fait que, parti de A, si on l’observe
distribution de probabilités. Autrement dit, le proportionnel à x, et donc exponentiel en la taille après deux étapes de temps, l’ivrogne se trouvera
processus que suit notre ivrogne quantique n’est (le nombre de chiffres) de x. forcément en position A.
en fait pas une marche aléatoire. A l’heure actuelle, on ne connaît pas d’algorithme Si, maintenant, nous modifions notre protocole
D’ailleurs, cela avait été le cas, si à chaque étape efficace pour résoudre ce problème, c’est-à-dire expérimental et tentons d’observer l’ivrogne
l’ivrogne lançait une pièce de monnaie au ciel dont le temps de calcul serait polynomial en la après une seule étape de temps, lorsqu’il est
pour savoir si se déplacer ou non, alors au bout taille de x. Les méthodes connues à ce jour encore dans l’état 0.5.A+0.5.B… nous ne
de deux étapes, nous l’aurions trouvé en A avec reposent toutes, in fine, sur la force brute: je pourrons guère observer la superposition elle-
probabilité 0.5, ou en B avec probabilité 0.5, ce propose une solution y1, elle ne marche pas, j’en même, nous constateront simplement avec
qui n’est pas le cas ici. Par conséquent, l’état au propose une autre y2… et ainsi de suite jusqu’à probabilité 0.5 que l’ivrogne est en A, ou avec
bout d’une étape, 0.5.A+0.5.B n’est pas trouver la bonne, yj égal f(x). Or ici le principe de probabilité 0.5 qu’il est en B.
interprétable comme une distribution de superposition nous donne un nouvel outil Autrement dit, à l’heure de l’observation, les
probabilités. Il doit être compris comme: algorithmique: il nous offre la possibilité de amplitudes quantiques redeviennent de simples
“l’ivrogne se trouve en A avec amplitude 0.5 et préparer, très rapidement, une variable dont l’état probabilités, la distinction entre amplitudes
simultanément en B avec amplitude 0.5”. est la superposition de toutes les solutions positives et amplitudes négatives est perdue à
possibles: a1.y1+a2.y2+...+[Link]. Cet état ne tout jamais, l’état du système est modifié
Encore une fois, le principe de superposition est prend pas plus de place en mémoire que n’en irrémédiablement. La physique quantique fournit,
terriblement difficile à accepter. Votre deuxième prenait max(y1,...,yN): c’est une unique variable. d’ailleurs, de très bons générateurs de nombres
réflexe sera donc de penser qu’il y a quelque L’ordinateur quantique a donc le pouvoir aléatoires, par le biais de l’observation de
chose de faux dans la physique quantique; et d’explorer toutes les solutions possibles d’un systèmes superposés.
qu’on a jamais pu observer un tel ivrogne, ou problème… en même temps!
encore qu’il doit exister une meilleure explication Cette bonne nouvelle pour les salons de Poker en
que celle-ci. Ce scepticisme est la réaction saine Voilà qui est digne de faire bondir d’enthousiasme ligne, en est une mauvaise pour l’algorithmique
d’une personne rationnelle. Seulement voilà, les toute personne un tant soit peu sensibilisée aux quantique. Car si nous tentons d’observer l’état
physiciens sont des personnes de nature difficultés de l’algorithmique. Cet enthousiasme a1.y10+a2.y20+...+aj.yj1+...+aN.yN0, nous

10 Programmez! < Juin 2014


008_013_175 19/05/14 21:26 Page12

n’obtiendrons yj1 qu’avec probabilité aj. Et qui n’est pas le cas). En fait, c’est Q lui- davantage de qubits. Mais, puisque nous savons
comme nous n’avions pas de raison de favoriser même qui est inefficace, au même titre que tout déjà fabriquer une douzaine de qubits, pourquoi
yj à l’heure de la préparation initiale, cette autre simulateur de physique quantique basé sur ne pas en fabriquer une autre douzaine?
probabilité sera exponentiellement faible. de la physique classique, d’ailleurs.
En effet, en physique classique le principe de Si, au marché, vous achetez une barquette de
Tout l’art de l’algorithmique quantique, donc, se superposition n’a pas cours: de même qu’un douze oeufs, vous passerez relativement
résume à trouver des moyens de faire interférer unique couvert ne peut pas être couteau et inaperçu. Si, par contre, vous lui achetez dix
destructivement les mauvaises solutions yi pour i fourchette à la fois, une unique variable ne peut douzaines d’oeufs, alors il y a fort à parier qu’elle,
différent de j. De même que l’ivrogne quantique, pas être y1, y2, ... yN à la fois. Pour simuler ou bien le maraîcher débonnaire du stand d’en
au bout de deux étapes, ne se trouve jamais en classiquement la superposition quantique de face, commenteront vos exploits. Cette
position B, le programmeur quantique doit toutes les solutions possibles, il ne suffit pas observation amusée, ne brisera pas vos oeufs
s’arranger pour que, au bout d’un certain nombre d’une variable, il en faut N. pour autant: pour peu que vous restiez concentré,
d’étapes, le système ne se trouve jamais dans ils arriveront à bon port.
l’état yi pour i différent de j. C’est possible pour le Penchons-nous sur cette question de l’inefficacité
problème de la factorisation. L’algorithme de des ordinateurs classiques lorsqu’il s’agit de A l’inverse, en physique quantique, l’observation,
factorisation quantique, découvert par Shor en simuler un système quantique, pour tenter comme nous l’avons vu, modifie irréversiblement
1994, permet de factoriser x en un temps d’évaluer l’ampleur des dégâts. Un bit, comme le système. Sous son influence les amplitudes
polynomial en la taille de x. chacun le sait, est un système physique quantiques redeviennent de simples probabilités.
C’est une application extraordinaire: toute la (classique) ayant deux états possibles: “0” ou “1”. L’observation “classicise” le système. C’est pour
cryptographie à clé publique moderne repose sur De même un registre de n bits est un système cela, d’ailleurs, que la physique quantique est
la supposée difficulté du problème de la physique ayant N=2n états possibles : généralement associée aux petites échelles
factorisation. Autrement dit, l’une des “0..00”, “0..01”, …, “1..11”. Un qubit, ou quantum (particules, atomes).
conséquences de l’avènement de l’ordinateur bit, est un système physique quantique pour états En effet, tant que le système est petit (Ex. une
quantique sera de briser les protocoles de possibles tous les : a0.“0”+a1.“1”. Et un registre douzaine de qubits), ses chances de passer
sécurité , , etc. de n qubits est un système physique quantique inaperçu (c’est-à-dire de ne pas interagir avec un
ayant pour états possibles tous les : photon de passage, ou autre), sont fortes, et il se
D’une façon plus générale, tout problème qui se a0..00.“0..00”+a0..1.“0..01”+...+a1..1.“1..11”. Il en comporte alors quantiquement.
résout par force brute en n coups classiquement, résulte que, si l’on peut donner une description Réciproquement dès qu’un système est grand
peut-être résolu par un algorithme quantique en classique complète d’un état de n qubits, il nous (Ex. dix douzaines de qubits), ses chances de
racine carrée de n coups, via l’utilisation d’un faut donner les 2n nombres passer inaperçu s’amoindrissent drastiquement:
autre algorithme quantique découvert par Grover a0..00, a0..01, …, a1..11. Par conséquent, la simple le système est “observé” par l’environnement
en 1996. Encore une fois, il s’agit là d’une autre description classique d’un système quantique de avec lequel il interagit, et il se comporte alors
application extraordinaire, qui permet une taille n prend déjà une taille exponentielle en n. classiquement.
accélération de la résolution d’une quantité D’une façon générale, la difficulté à simuler un
énorme de problèmes. système quantique de taille n d’un ordinateur Pour parvenir à réaliser un ordinateur quantique
On connaît en définitive très peu d’algorithmes classique est exponentielle en n. D’ailleurs, l’une de grande taille, la physique expérimentale est
quantiques. Mais à eux seuls, ces deux-là des prochaines grandes applications de donc confrontée à de multiples défis. Il lui faut
justifient déjà pleinement la course actuelle à la l’ordinateur quantique sera de nous permettre de parvenir à: 1/ isoler un grand nombre de qubits
fabrication des ordinateurs quantiques. simuler efficacement la physique quantique. du reste du monde, en les ayant préparés dans
Après tout, quoi de plus efficace, pour simuler un un état initial, 2/ sans les observer, pouvoir
Toutefois, si vous souhaitez vous essayer à système quantique, qu’un autre système gouverner leur dynamique, afin de leur appliquer
programmer un ordinateur quantique, des quantique? Initialement, c’est précisément cette un algorithme quantique, 3/ les observer au
langages et des simulateurs dédiés existent: application qui avait poussé Feynman, prix Nobel moment souhaité. Chacun de ces critères est
téléchargez par exemple Q : de physique, à proposer le concept d’ordinateur difficile, mais réalisable, le problème étant
[Link] quantique en 1982. d’obtenir un système physique les réunissant.

La simulation quantique Le Hardware quantique Transporter des centaines d’oeufs que chaque
Attendez une minute. Puisqu’un logiciel comme A l’heure actuelle, les physiciens parviennent à regard pourrait briser, et parvenir à les faire frire
Q permet de simuler un ordinateur construire de “petits” ordinateurs quantiques, dans un four micro-onde en temps polynomial,
quantique, sur un ordinateur classique, pourquoi constitués d’une douzaine de qubits. Ces c’est aussi ça, les frontières de l’informatique !
chercher à en construire un véritablement? Ne ordinateurs permettent de valider la théorie: en
pourrait-on pas programmer l’algorithme de Shor factorisant 15 aujourd’hui, nous nous assurons
sous Q , l’exécuter sur un ordinateur de que l’algorithme de Shor fonctionne bel et bien, et Pablo Arrighi
bureau, et espérer ainsi casser la cryptographie à nous permettra de craquer les codes Maître de Conférences en Informatique à
clé publique moderne? cryptographiques, demain. l’Université de Grenoble-Alpes. Spécialiste de
Oui et non. Oui, car le simulateur effectuerait en Cependant, ces petits ordinateurs quantiques l’Informatique quantique. Ses travaux de
effet des factorisations. Non, car il le ferait de expérimentaux restent pour le moment recherche, qui portent sur les limites physiques du
façon inefficace (après tout, le contraire parfaitement simulables classiquement. Pour faire calcul, et prônent une approche informaticienne
reviendrait à dire que nous connaissons un la différence il faudra que les ordinateurs de la physique théorique, sont reconnus
algorithme classique de factorisation efficace, ce quantiques “deviennent grands”: qu’ils aient internationalement.

12 Programmez! < Juin 2014


008_013_175 19/05/14 21:26 Page13
014_015_175 19/05/14 21:28 Page14

Challenge hacking Europe – Afrique : HNC Xamarin Turns 3 ! Vive la pizza party !
c

L’association ACISSI a lancé son 6e challenge Hacknowledge Vous voulez en savoir plus sur Xamarin ? Savoir comment développer
Contest 2014-2015. Ce challenge de sécurité informatique se dérou- sur iOS et Android avec C# ? L’événement Xamarin Turns revient le 24
lera sur deux années. La première étape a eu lieu fin avril dernier en juin à partir de 19 h 30 ! Pour en savoir plus : [Link]
Belgique, d’autres suivront. Chaque « rencontre » se déroule sur 12 XAMARIN-Cross-platform-Mobile-Meetup/
heures et met à défi plusieurs équipes. Plusieurs challenges sont
proposés, sur différents thèmes. En tout, + 60 épreuves sont déjà Salesforce1 World Tour Paris : 26 juin
prévues (forensic, matériel, réseau, systèmes industriels, etc.). Salesforce organise son événement de l’année : Salesforce1 World Tour.
Pour en savoir plus : [Link] Le grand patron ouvrira l’événement. De nombreux ateliers, des
sessions techniques, de démos autour des outils et solutions
Salesforce, notamment pour les développeurs, se dérouleront toute la
juin journée !
CMSDay : une journée dédiée aux CMS
juillet
Forum Terratec :
tout pour le HPC
Le monde du HPC a son événement :
le forum Terratec se déroulant à
l’école Polytechnique près de Paris
Pour cette édition 2014 se tenant le 17 juin, 32 conférences sont au les 1er et 2 juillet. Plus de 1000
programme du 1er événement européen dédié aux CMS open source et participants, des partenaires et
aux stratégies digitales. sponsors de prestige (Bull, HP, Intel,
20 CMS, 4 coorganisateurs (Smile, Cybercité, Meanings et SmartFocus) CEA, Dell, AMD…), de nombreuses sessions techniques seront
et des grandes entreprises utilisatrices interviendront sur les grandes proposés toute la journée.
tendances de la gestion de contenus grâce à : Site : [Link]
◗ Des tables rondes « Solutions », où débattront les CMS sur des
sujets comme : l’omnicanal, le Time To Market, le secteur public, les bientôt
business models open source, la personnalisation, l’interaction et la
production de contenu. DroidCon 2014 : initialement prévue en juin, la conférence
◗ Des tables rondes et ateliers « Stratégies digitales », animés par DroidCon Paris se tiendra en automne prochain. Informations à venir !
les co-organisateurs avec des témoignages d’utilisateurs (Air France,
Bouygues, Carrefour, XL Airways,...) : design, référencement, Green Code Lab Challenge 2014 : l’événement de
multisites, rich média, réservation en ligne… l’éco-informatique aura lieu du 26 au 28 novembre. Comment faire un
◗ Des ateliers, où les CMS présenteront leurs solutions sous différents code et un logiciel écoresponsable ? Toutes les réponses au Green
angles : cloud, big data, portail, expérience utilisateurs… Code Lab ! site : [Link]

EclipseCon France 2014 conférences des JUG


Les 18 et 19 juin, la conférence
Eclipse France se déroulera à Toulouse Jug : soirée JUG sur Java EE avec Antonio Goncalves, dans
Toulouse. L’appel aux contributions les locaux de l’Epitech [Link]
s’est déroulé en avril et l’agenda sera Jug Lyon : high scalable backend avec Thrift, MongoDB et non blocking
dévoilé courant mai. Plusieurs IO – 17 juin. Site : [Link]
sessions sont déjà prévues : Riviera JUG – soirée Java 8 – 18 juin Site : [Link]
CoffeeScript, Mathus, débug et Paris JUG : soirée cloud computing le 10 juin !
tracing tool. EclipseCon France est la
conférence officielle de la fondation.
Site : [Link] Casual Game Cup 2014
Grand concours ouvert à tous les développeurs. En participant à la
PHP Tour Lyon 2014 Casual Games Cup, vous avez 5 mois (de mai à septembre 2014)
Cette année, l’AFUP arrête la caravane du PHP Tour à Lyon les 23 et 24 pour créer votre jeu web, Facebook ou mobile et le poster sur
juin prochains. Sur 2 jours, vous pourrez rencontrer les acteurs de [Link]. Ce concours vise à encourager la créa-
communautés PHP en France et quelques invités surprises. De tion de jeux casual et la découverte de nouveaux talents. Prêt(e) à
nombreuses sessions techniques seront proposées. Le programme sera relever le défi ? Alors venez montrer votre savoir-faire et votre créati-
disponible très bientôt. Site : vité et tentez de remporter des dotations attractives !
[Link] Pour en savoir plus : [Link]

Une conférence, un événement pour développeur ?


Envoyez-nous votre agenda : redaction@[Link]

14 Programmez! < Juin 2014


016_017_175 19/05/14 21:30 Page16

Les API de la discorde :


a

Oracle gagne en appel contre Google !


Souvenez-vous, Oracle avait attaqué Google sur la présence de quelques lignes de code dans le
cœur d’Android. Oracle avait finalement perdu. Mais en appel, Oracle a obtenu une précieuse
victoire. Le dernier jugement renverse totalement la première décision…
Le premier jugement n’avait pas tranché le Comme l’écrivait Ars Technica, le fait de d’auteur. Il pense aussi que Oracle et Google
fond du débat. L’appel l’a fait. Le fait le plus pouvoir copyrighter des méthodes d’accès, le pourront s’entendre si l’appel se confirme.
notable à retenir est que la cour d’appel code d’API limitera la créativité et donnera Cette affaire n’est pas comparable à celle
fédérale américaine reconnaît à Oracle que les surtout trop de contrôle aux détenteurs de ces opposant Apple et Samsung qui ne concerne
interfaces de programmation Java (= les API) droits d’auteur, même sur des services et pas le code proprement dit.
sont soumises à la loi de protection du droit applications déjà disponibles et installés. On
d’auteur (loi valable aux Etats-Unis). Deux faits imagine les risques de procès et de royalties Florian rappelle, avec raison, que la syntaxe et
sont à considérer immédiatement : les API demandés… Avec raison, Ars Technica évoque le langage Java ne sont pas concernés. Ils sont
sont-elles en danger ? Oracle peut continuer la le livre. Celui-ci est protégé par le droit d’auteur libres d’usage. Le conflit porte uniquement sur
procédure judiciaire et demander quelques mais le livre peut être lu où on veut et par les API et non le langage.
milliards à Google ! L’affaire sera sans doute n’importe quelle personne. Cela ne viendrait à
débattue prochainement au tribunal de San personne d’interdire ou de limiter la lecture à Suites et conséquences
Francisco sur l’usage « fair use » (ou non) des des endroits précis ou d’autoriser uniquement Comme dit plus haut, un nouveau procès aura
API par Google. Pour Google, les API ne sont telle personne. certainement lieu (2015 ?). Google peut


pas concernées par le copyright potentiellement demander à la cour suprême

Soumettre les API au droit d’auteur


américain. Il faut préserver l’accès libre américaine de se prononcer sur cette affaire.
car ce sont des éléments vitaux pour les Mais un accord peut aussi être trouvé entre
développeurs. remet en cause l’intérêt même de l’API : Google et Oracle.

faciliter l’intégration, l’interopérabilité


L'API est-elle un livre ? Quelle conséquence pour les API en général ?
Reconnaître la soumission des API au entre applications C’est sans doute la véritable conséquence de
droit d’auteur poserait alors un problème cette décision, si elle est confirmée. Car,
pour l’innovation, l’interopérabilité… D’autres reconnaître le droit d’auteur sur l’API pose la
se positionnent pour la reconnaissance du droit L’autre enjeu est de savoir si Google a utilisé le question de leur utilisation, des conditions
d’auteur. Mais les juges estiment que code Java selon la pratique du fair use d’accès. Avec l’explosion des API et de leur
l’organisation, la structure, le code des API ont (autorisée aux Etats-Unis selon des pratiques usage, cette décision peut potentiellement
droit à la protection par le droit d’auteur, d’où précises) ou si Google a outrepassé la pratique freiner l’extension de l’API, sans oublier les
la nouvelle décision et la reconnaissance du en toute connaissance. Ensuite, où s’arrête le possibles procès.
droit d’auteur pour les API et la violation de ce fair use et l’infraction ?
droit dans 37 packages Java… La plainte Pas de panique pour le moment, notamment en
d’Oracle concerne 3 % du code des API Florian Mueller (FOSS Patents), spécialiste des Europe, où la législation sur le droit d’auteur
d’Android ! Oracle a découvert que Google brevets et des problèmes légaux dans les dans les technologies n’est pas identique.
avait utilisé 9 lignes de code copiées de Java. technologies, est revenu sur l’affaire Google – Cependant, il faudra suivre de près cette
Sans surprise, Google s’est dit déçu et Oracle. Il n’est pas surpris et dit qu’il ne faut affaire.
préoccupé par les conséquences que cette pas être surpris par cette nouvelle décision.
décision pourrait avoir sur l’innovation, le travail Pour Florian, les développeurs et utilisateurs ne Nous reviendrons très prochainement sur cette
des développeurs, avec de possibles domages doivent pas s’inquiéter. Le jugement rappelle affaire.
pour l’industrie. Le logiciel est déjà soumis aux les pratiques de la loi. Le fait nouveau est que
droits d’auteurs et à diverses protections. les API peuvent être soumisses au droit François Tonic
PROGRAMMEZ

PDF
e e e
e
10-13-10 © mstay (tornade)

:
e avecPhone
100% 8.1, Firefox OS
Xamarin, Nokia X, Windows
e e Abonnement
Å ç e eÇ
É Ñ
É Ö Ü
DITES-LE
AVEC DES API e
e
e
e e
e
e
e
(usine)
08-06-13 © whanwhanai

Mensuel n°175 - Juin 2014


E

30 € par an soit 2,73 € le numéro


UE - BELGIQUE 6,45 €
6,45 € DOM Surf 6,90 €
Printed in EU - Imprimé en
Coding4Fun SUISSE 12 FS - LUXEMBOURG
940 XPF - MAROC 50 DH
Ä Canada 8,95 $ CAN - TOM
è ê ù † ≠

[Link]
018_026_175 19/05/14 21:57 Page18

Devoxx 2014 : du Java,


de la technologie et du code
d

Les 16, 17 et 18 avril derniers


a eu lieu à l’hôtel Marriott la
3e édition de Devoxx France,
organisée par le Paris JUG !
Devoxx, c'est bien sûr le
rendez-vous incontournable
de tous les passionnés de
développement et de
technologie, javaneros, et
geeks dans l'âme... On y
retrouve bien sûr de
nombreux experts en la
matière, java champions et
autres stars. C'est également
l'occasion de revoir ses
(anciens) collègues et
confrères, au détour d'un
couloir et de faire une pause
D.R.

dans son quotidien de


développeur ; sortir le nez du
réfléchir à ce que devient notre métier, celui de de sa keynote :
code et prendre un peu de développeur, à notre condition bien sûr, à la Les exemples d'initiatives françaises inno-
recul sur notre métier, sur passion qui nous anime, mais aussi au secteur vantes (ou à l'origine d'un de nos compatriotes)
l'ère numérique qui s'ouvre à du numérique qui nous fait vivre et qui paie ne manquent pas (netvibes, deezer, daily
notre steak quotidien... motion, pour n'en citer que quelques-unes)
nous et entre-apercevoir le • Les Ecoles/Universités françaises consti-
futur qui nous attend... La révolution numérique tuent un vivier de talents pour les entreprises
Soyez heureux ! Notre génération est et sera étrangères, qui s'arrachent les étudiants.
Du très lourd ! témoin du passage à une nouvelle ère : l'ère Nous disposons des meilleurs talents dans le
Au programme de Devoxx cette année, des numérique. Il s'agit bien là d'un tournant dans domaine du numérique et pourtant, la France
conférences bien sûr, des university, labs, quic- notre histoire, au même titre que l'ont été les donne l’impression de surfer avec beaucoup de
kies, du live coding... Les grands sujets du révolutions agricoles et la révolution industrielle difficultés sur la vague du numérique, et peine à
moment ont été couverts, notamment avec le en leur temps. Pour Gilles Babinet, "la révolu- en tirer de réels bénéficies pour notre écono-
Chinese Democracy du monde java, le Duke tion numérique aura [d'ailleurs] plus d’impact mie.
Nukem Forever de chez Oracle : je veux bien que la première révolution industrielle" ! C'est le constat dont nous a fait part Tariq Krim,
sûr parler de la sortie très attendue de la ver- L'informatique et l’avènement d'Internet sont en vice-président écosystème et innovation du
sion 8 de Java SE ! train de changer radicalement nos modes de Conseil national du numérique (CNN) lors de
Mais également, pas mal de Devops (avec de vies : les services en ligne, les objets connec- son intervention : la France est un pays vision-
l'outillage : Docker, Chef & Puppet...), du Big tés, les réseaux sociaux, les mobiles ont boule- naire qui, tout au long de son histoire, a su faire
data toujours (Hadoop encore une fois à l'hon- versé nos habitudes, offrant de nouvelles preuve d'inventivité et d'innovation. Pour
neur), un peu de NoSQL avec Cassandra, et perspectives pour notre société. Mais comment autant, l'excellence technique n'y est pas suffi-
également de nombreuses conférences cette allons-nous appréhender cette révolution ? samment reconnue et valorisée.
année sur le sujet des objets connectés Espérons que le message de Tariq, qui a remis
(Google glass, S.A.R.A.H., NAO et autres L'industrie du numérique en mars au gouvernement un rapport compre-
drones volants). Mais j'aimerais revenir sur une en France nant 6 grandes mesures pour valoriser le talent
autre facette de l’événement : mettons de côté L'industrie du numérique est un point fort pour des développeurs français, ne restera pas lettre
la technique, les frameworks et les robots, pour la France ; c'est le constat dont nous pouvons morte et sera mis en œuvre le plus rapidement
prendre un peu de hauteur sur nous-même et nous vanter et qu'a fait Guy Mamou-Mani lors et fidèlement possible.

18 Programmez! < Juin 2014


018_026_175 19/05/14 21:57 Page19

d
D.R.

D.R.
La formation 3.0 sont totalement absents des programmes, catif traditionnel, de nouvelles initiatives de for-
Paradoxe à la française : les entreprises man- seuls quelques lycéens de terminal S suivant mations ont vu le jour, tentant de combler les
quent cruellement de personnel qualifié dans le l'enseignement de spécialité "Informatique et lacunes du système. Pour n'en citer que deux :
secteur informatique, et parallèlement à cela, Sciences du Numérique" (ISN) pourront l’abor- l'Ecole 42 (enseignement gratuit et ouvert à
on compte près de 40000 "informaticiens" qui der. "tous") représentée par Kwam Yamgnane, ainsi
ne trouvent pas d'emploi ! Comment dans ces conditions se découvrir que [Link], la "Fabrique de codeurs entre-
Quel est le problème ? Selon Guy Mamou-Mani, et développer un intérêt pour les métiers preneurs à Montreuil", présenté par Henri Four-
il s'agit d'une inadéquation entre les compé- du numérique ? net et Frédéric Bardeau (une formation orientée
tences des postulants et les besoins des entre- Heureusement, parallèlement au système édu- pratique sur une durée de 6 mois, également
prises. La formation continue des ouverte à tous).
salariés serait en cause, et les Quoi que puissent en penser
torts partagés. D'une part, la gran- leurs détracteurs, ces initiatives
de majorité des entreprises ont le mérite d’exister ; leurs
gèrent assez mal l'évolution de objectifs sont louables et bien
leurs développeurs au sein de fondés dans le contexte actuel.
l'entreprise. D'autre part, en tant Celles-ci proposent un modèle
que développeurs, nous ne pou- alternatif venant tant bien que
vons rester "à jour" sans un mini- mal soutenir un marché de l'em-
mum d'auto-formation, tout au ploi sous-alimenté.
long de notre carrière. Sans cet
effort partagé de développement L’apprentissage par
des compétences, un dévelop- la musique
peur devient très vite "obsolète" et Une autre initiative mérite elle
perd de sa valeur pour l’entreprise aussi d’être saluée : celle de
et plus globalement, sur le mar- Geert Bevin, pour son interven-
ché de l'emploi. tion intitulée "Programmer avec
Comme l'ont souligné Dominique Emotion". Accompagné de son
Van Deth et Danny Gorris durant instrument à la fois intriguant et
leur keynote "900 000 emplois IT à futuriste (une Eigenharp !), il
pourvoir d'ici 2015 en Europe. nous a expliqué dans quelle
Comment susciter les vocations", mesure la créativité qui est en
le volume de diplômés en France nous, a toute sa place dans le
reste en dessous des besoins des développement logiciel et dans
entreprises. l'utilisation qu'on en fait.
Le système éducatif actuel n'est « Salut l'harpiste ! » et merci pour
D.R.

clairement pas favorable à la cet harmonieux mélange d’émo-


découverte de vocation dans le tion, de technologie et de
développement logiciel chez les réflexions sur nos métiers.


jeunes et ces vocations ne peu- La meilleure façon
vent être que tardives. de prévoir l’avenir, c’est de l’inventer Bruno Doolaeghe
Les enseignements en la matière (Alan Kay) Ingénieur-Concepteur chez Soat

Juin 2014 > Programmez! 19


018_026_175 19/05/14 21:57 Page20

Docker : virtualisation, DevOps,


Cloud et micro-services
d

Avant d’introduire Docker ([Link]), je voudrais commencer par citer Hadi Hariri de la société
JetBrains. Pendant sa présentation au sujet de REST et des API s’appuyant sur HTTP, lors de
Devoxx France 2014, il a parlé des effets de mode dans l’univers des développeurs.
Alors qu’il soulignait que REST était un terme
relativement récent, il rappelait que le protocole
HTTP tel que nous l’utilisons pour REST a été
décrit dans des RFC qui datent de quinze ans.
Pour nous taquiner en conclusion de sa présen-
tation, il nous a dit à peu près ceci : «Vous
aimez les buzzwords, aujourd’hui vous avez
RESTful à la bouche, l’an prochain vous parle-
rez de micro-services, mais n’oubliez pas que
ça reste tout simplement du HTTP. »
Docker est intéressant sur ce point, car c’est
précisément un projet à la croisée des mondes
et des modes. Il reflète bien le contenu de ce
Devoxx France mouture 2014, et la meilleure
définition que l’on puisse lui donner, c’est qu’il
s’agit d’un outil de virtualisation DevOps qui
nous vient du Cloud, et qui facilite grandement
la mise en place de micro-services
standardisés.
Devant autant de buzzwords, quelques explica-
tions ne seront pas de trop pour se remettre chi-connu Amazon AWS, pour aborder plus en Problème n°1 :
dans le contexte. profondeur l’achat d’une ferme de conteneurs gérer les ressources
Java EE ou d’une base de données, et C’est un véritable problème et pas des
Les gros mots du moment ainsi de suite. moindres. Car les ressources, ce sont des
DevOps coûts qui peuvent très vite s’envoler dès lors
Le DevOps concerne aussi bien les dévelop- Micro-services que l’on commence à déployer des architec-
peurs que les opérationnels. Ce courant très à Prenez HTTP, appliquez les bonnes pratiques tures complexes avec de la redondance et de la
la mode en ce moment, bâtit un véritable pont REST, vous êtes sûrs de n’avoir rien oublié ? Le répartition de charge. Il faut y ajouter un impéra-
entre les équipes de réalisation et les équipes SOA revient à la charge avec son nouveau nom tif de sécurité qui empêche d’avoir une
d’exploitation. de code : les micro-services. Plutôt que d’avoir approche approximative du partage des res-
Dans le cadre de Devoxx France 2014, beau- un tutti frutti d’URLs pointant vers une API sources.
coup de conférences ont été données sur le REST monolithique, la notion de micro-service L’une des façons de faire consiste à appliquer
thème du DevOps, notamment au sujet des veut que chaque fonctionnalité soit hébergée la virtualisation, la gestion par quota et le cloi-
tests de performance et au sujet de Docker. de manière indépendante. Une fonctionnalité, sonnement. Ces techniques ne sont pas nou-
Mais le DevOps ne s’arrête pas aux aspects une URL, une API, un livrable : un micro-servi- velles. On les retrouve à bas niveau dans la
techniques, il concerne également tout ce qui a ce. gestion de ressources réseau (la QoS, le
trait aux méthodes de travail, en particulier sur NAT…), des ressources disque (chroot), etc.
les concepts de livraison continue, et de pipe- Trois problèmes, Et si plus récemment les machines sont deve-
lines de déploiement que l’on retrouve réguliè- une solution : Docker nues suffisamment puissantes pour qu’on
rement dans les méthodes agiles. Changeons de rôle maintenant, et au lieu de applique ces principes à l’échelle de l’OS entier,
penser comme un développeur, mettons-nous avec plusieurs machines virtuelles par machine
Cloud à la place d’un exploitant, dont le rôle est de physique, cette méthode s’avère souvent
Le sujet chaud de 2013 était de retour cette fournir tout ce qu’il faut pour héberger nos inadaptée et trop coûteuse.
année. Dans la révolution as a Service, il applications, aussi bien en environnement d’in- En effet, d’un côté toutes les ressources
semble que la partie infrastructure (IaaS) ait été tégration que de qualification ou de production. consommées par l’OS sont démultipliées par le
bien digérée puisque les orateurs ont surtout Trois problèmes se posent principalement à nombre de machines virtuelles, de l’autre, si
insisté cette année sur le modèle des plate- nous, et ce sont justement les trois problèmes l’on met deux serveurs sur la même machine
formes (PaaS). Lors des conférences, on s’est que Docker cherche à résoudre en s’appuyant virtuelle, on perd une partie du cloisonnement.
donc éloigné de l’infrastructure, de la location sur des technologies ou des pratiques exis- Docker change ce paradigme en appliquant la
de temps de calcul, de RAM et d’I/O, avec l’ar- tantes. virtualisation plus finement. Au lieu de virtuali-

20 Programmez! < Juin 2014


018_026_175 19/05/14 21:57 Page21

me de recettes réutilisables, il faut bien


réaliser une toute première recette.
Là encore Docker fournit une solution
qui permet de gagner du temps. Il s’agit

d
d’un magasin de recettes mis à disposi-
tion par la communauté, à l’image des
systèmes de paquets que l’on connaît
déjà sous Linux ou BSD. Il devient donc
possible de standardiser les conteneurs
les plus utilisés.
Disposant d’ores et déjà de très nom-
breux outils Libres ou Open Source, on
peut s’attendre rapidement à ce que le
Docker Index ([Link] four-
nisse un grand nombre de recettes très
utiles, et les bénéfices du fonctionne-
ment communautaire sont immédiats :
◗ une meilleure propagation de l’infor-
mation,
Exemple de mise en oeuvre de conteneurs Docker ◗ une entraide en cas de problème,
◗ une participation d’acteurs impor-
ser l’OS, ce sont des groupes de processus qui Puppet, le système de Dockerfiles (les recettes) tants qui promeuvent déjà les outils Libres ou
sont exécutés de manière isolée du reste du peut s’appuyer sur n’importe quel mécanisme Open Source.
système. Cette fonctionnalité d’isolation est sous-jacent, par exemple de simples lignes de
fournie directement par le système, comme commande en Bash ou du Python. Dans le dotCloud mais pas
c’est le cas sous Linux. Cloud, cela signifie qu’un fournisseur n’est plus seulement…
Quand le système ne fournit pas directement obligé d’imposer un langage à son client ou de La startup qui est derrière Docker, dotCloud,
cette fonctionnalité, Docker peut alors s’instal- multiplier les langages supportés sous forme de fondée par Solomon Hykes, est bien sûr le pre-
ler sur un OS virtuel qui la propose : typique- plugins ou de variantes de machines virtuelles. mier hébergeur utilisateur de Docker. Son suc-
ment un Linux virtualisé, sur un serveur L’autre avantage non négligeable de Docker, cès ne fait plus aucun doute lorsque l’on sait
Windows. Au pire le surcoût reste limité à un est que tout est beaucoup plus rapide à que ses propres concurrents l’utilisent, et la
OS virtuel, et au mieux il est inexistant. déployer. Il n’est plus nécessaire de préparer preuve en est : l’une des présentations de Doc-
une recette de fabrication d’une machine vir- ker faite à Devoxx France 2014 a été co-animée
Problème n°2 : tuelle. L’OS est déployé une bonne fois pour par Nicolas De Loof de CloudBees, et Ludovic
déployer rapidement toute et il est possible d’y implémenter autant Champenois de Google.
à l’identique de conteneurs Docker que souhaités. Or créer Après un an d’existence à peine et à deux
Le second problème auquel Docker s’attaque un nouveau conteneur est un processus bien doigts de passer en version 1, l’outil semble
est celui de la qualité et de la complexité de plus léger que l’installation d’une image d’OS d’ores et déjà s’être fait une place dans le
fabrication d’un environnement d’exécution. complète. Cloud. De là à dire qu’il va devenir incontour-
Partant des bonnes pratiques existantes, Doc- nable aussi bien pour les équipes de dévelop-
ker propose un système de recettes, à l’image Problème n°3 : pement que pour les équipes d’exploitation
de ce que font Puppet ou encore Chef et une créer des capsules dans nos missions, il est encore trop tôt pour le
gestion de l’historique des changements, à standardisées dire. En revanche il n’est jamais trop tôt pour
l’image de Git. Il faut cependant noter que Doc- Une fois que l’on a résolu les deux premiers commencer à s’y intéresser…
ker fait tout ceci de manière agnostique en problèmes, reste encore à permettre à tout un
matière de langage. Là où il faut connaître un chacun de ne pas réinventer la roue, à savoir : Noël Bardelot
peu de Ruby pour écrire des recettes Chef ou le conteneur applicatif, car malgré le mécanis- Ingénieur Concepteur chez Soat

Toute l'actualité des technologies et du


développement sur [Link]

Juin 2014 > Programmez! 21


018_026_175 19/05/14 21:57 Page22

SARAH : connecter et interagir


avec l’Internet des Objets au quotidien
d

Jean-Philippe Encausse est venu nous présenter une conférence sur les objets connectés, intitulée
« S.A.R.A.H », nom emprunté à la série de Science-Fiction Eureka dans laquelle une "maison
intelligente" est mise en scène. Fig.A suite des autres, de choisir les actions à appli-
L’objectif du projet S.A.R.A.H., dont Jean-Phi- quer en fonction de la situation ou du contexte
lippe est à l’initiative, est de reproduire un envi- (si vous êtes chez vous ou si vous y êtes
ronnement similaire à cette maison connectée. absent, par exemple). Enfin, on trouve une fonc-
Pour entrer dans le vif du sujet, Jean-Philippe tionnalité d’apprentissage des usages de
nous en fait une petite démonstration en direct : S.A.R.A.H. permettant à l’application de mémo-
il n’utilise ni télécommande ni clavier pour pas- riser les actions qui lui sont régulièrement
ser à sa slide suivante, mais fait un simple geste demandées, pour être capable de vous les pro-
de la droite vers la gauche en face d’un Kinect poser d’elle-même en fonction du contexte.
connecté. A cet instant-là, la slide suivante
apparaît ponctuée d’un “SUIVANT” prononcé Une communauté d’ampleur
par S.A.R.A.H. pour un large éventail d’usages
Les plugins disponibles sont développés par la
L’Internet d’aujourd’hui communauté, qui compte environ 2000 per-
Lors de son introduction, Jean-Philippe met en sonnes actuellement. Ce chiffre s’explique faci-
avant les trois grands piliers du web, qui, selon variées, cela va de la recherche météo en pas- lement par le nombre d’usages possibles, avec
lui, forment une base solide : HTML5, CSS3 et sant par le contrôle sonore d’un ordinateur ou entre autres :
Javascript. D’après les données présentes sur encore le fonctionnement autonome d’un aspi- ◗ assistant personnel (agenda, téléphone,
github, Javascript serait actuellement le langa- rateur ! On peut cependant distinguer 4 confort, multimédia)
ge le plus utilisé. Vient ensuite la présentation grandes familles de plugins : ◗ écologie et domotique pour économiser de
des 3 révolutions actuelles : ◗ les plugins http, service rest, etc... l'énergie
◗ La miniaturisation (raspberry Pi, …), ◗ les usages périodiques (cron,...) ◗ santé et accessibilité (coach sportif, allumage
◗ L’internet mobile, ◗ l’interrogation d’objets virtuels en faisant du de lampes à la détection de certains sons
◗ Et le crowdfunding. scraping (via [Link]) [comme la sonnette du portail] pour des per-
Ces révolutions amènent un certain nombre de ◗ les usages un peu plus "custom" : TV, Zoé, sonnes malentendantes par exemple, etc…)
problématiques, à commencer par le responsi- Powerpoint sur lequel on va par exemple ◗ jeux et réalité augmentée
ve design. L’interface utilisateur ne peut fatale- simuler des appuis touches, dans la mesure ◗ urbanisme : véhicules intelligents, panneaux
ment pas être la même sur un téléphone, un où il n’y a évidemment pas d’API pour le intelligents
ordinateur, une table surface ou encore un contrôler. ◗ agence et commerce pour la simplification de
écran de réfrigérateur. Le responsive design Jean-Philippe lance alors une vidéo nous pré- l'expérience utilisateur (gestion de stock, etc)
doit donc être appliqué pour offrir la meilleure sentant l’étendue des fonctionnalités de ◗ etc.
expérience utilisateur possible, quel que soit le S.A.R.A.H. et de l’utilisation que l’on peut en Jean-Philippe conclut son intervention avec des
support ou l’objet connecté. Se pose égale- faire. Pour résumer, un client C# dans SARAH démonstrations assez futuristes sur le potentiel
ment la question de l’accès au monde physique permet de créer les différents usages comme le de S.A.R.A.H. : reconnaissance faciale, vocale,
via les caméras, nfc, etc., et avec une simple matching d'une commande à une requête http, gestuelle, du cinémagraphe et même un début
connexion Internet, on sait bien que ce n’est la détection des commandes vocales, des mou- d’hologramme ! Cette conférence a donc été
pas toujours évident. Enfin, Jean-Philippe fait le vements et des QR codes. La reconnaissance l’occasion de faire un état des lieux sur la domo-
constat suivant : si les nouveaux objets connec- vocale est faite via xml. Voici par exemple à tique et ses usages d’aujourd'hui. Le seul petit
tés comportent leurs fonctionnalités, et parfois quoi cela ressemble avec l’API Speech de bémol que l’on pourrait émettre, porterait sur
une API, ils ne savent pas toujours communi- Microsoft, dont vous trouverez plus de détails l'environnement “full Microsoft” utilisé pour
quer entre eux. Et c’est de ce constat- là qu’est sur l’article suivant : S.A.R.A.H. : Windows, Kinect (API en C#), etc…
né le projet S.A.R.A.H. [Link] Ce choix d'architecture est lié au fait que la
04/s-a-r-a-h-un-grammaire-enrichie/ Kinect est actuellement le meilleur dispositif en
S.A.R.A.H. La reconnaissance gestuelle est faite de la termes de rapport qualité/prix, pour effectuer de
L’approche de S.A.R.A.H. est plutôt simple : même façon, tandis que la reconnaissance la détection audio et vidéo. Reste que S.A.R.A.H
elle repose sur un serveur [Link] qui va per- faciale se fait avec OpenCV. s’avère un projet très prometteur qui, on l'espè-
mettre de construire une couche d’abstraction L’application S.A.R.A.H. présente un portail re, continuera de se développer pour un jour ou
à tous les objets connectés que l’on souhaite d’applications de la forme suivante : Fig.A. l’autre peut-être, entrer dans notre maison…
utiliser. Plusieurs plugins (~150) existent aujour- Ce portail permet de télécharger et configurer
d’hui pour interagir avec ces différents objets les différents plugins que l’on souhaite utiliser. Maxime Schneider-Dufeutrelle
ou effectuer des actions particulières. Ces plu- Un moteur de règles donne également la possi- Florent Lagrede
gins concernent un tas de fonctionnalités bilité de déclencher des actions les unes à la Ingénieurs d'études chez Soat.

22 Programmez! < Juin 2014


023_175 19/05/14 21:37 Page23

Complétez votre collection


n°168 n°169 n°170 n°171 n°172 n°173 n°174

Prix unitaire : 6 ! (Frais postaux inclus) France métropolitaine uniquement.

nouveau

Tout Programmez! 29,90 €*


sur une clé USB
Tous les numéros de Programmez! depuis le n°100.

Clé USB 2 Go. Livrée


dans sa boite. Testé sur
Linux, OS X, Windows.
Les magazines sont au
format PDF.
* tarif pour l'Europe uniquement. Pour les autres pays, voir la boutique en ligne

vous pouvez aussi commander directement sur notre site internet : [Link]

■ 168 : ■ La Clé USB avec les numéros de


■ 169 : Programmez depuis le n°100
Commande à envoyer à :
■ 170 : 29,90 € (Tarif pour Europe uniquement) Programmez!
■ 171 :
7, avenue Roger Chambonnet
■ 172 :
91220 Brétigny sur Orge

■ 173 :
■ 174 : exemplaires x 6 € € ■ 29,90 € soit au TOTAL €
PROG 175

soit +
TOTAL
Prix unitaire : 6 ! (Frais postaux inclus),
. France métropolitaine uniquement.

■ M. ■ Mme ■ Mlle Entreprise : Fonction :

Prénom : Nom :
Valable jusqu’au 30 juin 2014

Adresse :
Quantités limitées

Code postal : Ville :

Tél : (Attention, e-mail indispensable)


E-mail :

Règlement par chèque à l’ordre de Programmez !


018_026_175 19/05/14 21:38 Page24

50 nouvelles Au revoir Maven... et place à Gradle !!


choses que l’on peut
faire avec Java 8...
Le titre se veut volontairement provocateur tout Groovy.
comme la conférence à Devoxx France de L’autre point fort de Gradle est la notion de
d

Cédric Champeau : «Gradle ne fait pas que build incrémental qui permet de gagner du
... autres que les lambdas et les streams ! C’était le remplacer Maven». temps dans la construction des livrables grâce
sujet de la présentation de José Paumard en ce Je vous propose un retour sur cette conférence à la définition de points d’entrée et de sortie per-
dernier jour de Devoxx France. En 50 minutes, pour voir les différences entre ces deux solu- mettant à Gradle de savoir que le build est ou
José Paumard nous a listé 50 évolutions apportées tions et les apports de Gradle non UP-TO-DATE.
par Java 8 par rapport à Java 7. Morceaux choisis. Maven : un structurateur de build. L’initialisation d’un projet par la commande
Nouvelle API «Date», très fortement inspirée de « $ & » génère un wrapper dédié au
JodaTime (plus précisément, il s’agit d’une réécri- Apache Maven est aujourd’hui utilisé par la projet contenant toutes les informations de ver-
ture complète du framework par son créateur, afin majorité des développeurs pour automatiser la sions y compris celle de Gradle, ce qui fait que
de pallier certains défauts d’origine), avec ses construction (build) et le déploiement (deploy) le build du projet est portable sur n’importe quel
concepts jusqu’alors inexistants dans l’API Java : des applications. Le concept de «Convention environnement.
◗ Un Instant, représentant un point précis sur la over configuration» impose de respecter un Un fichier de build Gradle ([Link]) pour un
ligne de temps, certain nombre de règles : projet Java tient en une ligne :
◗ La durée entre 2 instants : Duration, ◗ Nommage et structure des répertoires projet, apply plugin:’java’
◗ L’espace entre 2 dates : Period, ◗ Définition du ou des pom (fichiers xml décri- Il suffit ensuite de lancer $ ' pour
◗ La gestion des fuseaux horaires, vant les règles de construction du projet : construire le projet.
Une interface déclarant des opérations facilitant nom, version, dépendances, plugins...). Gradle permet aussi de la souplesse dans la
l’arithmétique entre ces différents objets, Maven se veut être un véritable structurateur de définition des repositories (adresse d’un reposi-
Et enfin bien sûr, le lien avec l’ancienne version de build laissant peu de place aux spécificités. tory officiel, adresse d’un proxy, adresse d’un
l’API. Pour builder avec Maven, il faut donc respecter serveur partagé et toute autre ressource au
De nouvelles fonctionnalités sur les String, qui les conventions, minimiser les configurations sens large) pour faciliter la récupération des
n’étaient autrefois possibles qu’à la main ou via autant que possible et se plugger au cycle de librairies ou autres.
des librairies externes (StringUtils d’Apache ou vie à travers les différents goals (compile, test, Les temps d’exécution des builds sont proches
Guava de Google par exemple) sont incluses dans package, install deploy...). En cas de spécifici- et équivalents à ceux de Maven si «—daemon»
la nouvelle version : tés, la solution est bien souvent d’écrire un plu- est ajouté en option dans les commandes Grad-
◗ Streamer sur les lettres de la chaîne pour y appor- gin Maven spécialisé ou d’en chercher un le.
ter des modifications grâce aux lambdas expres- pouvant répondre au besoin. Pour terminer, quelques mots sur le futur de
sions, Gradle. Actuellement en version 1.11, le cycle de
◗ Concaténation facilitée (StringJoiner). Et Gradle dans tout ça ? release aboutit en moyenne à une nouvelle ver-
De même dans la catégorie I/O, pouvoir facilement En mélangeant et en reprenant les meilleurs sion toutes les 6 semaines. Une version 2 est
streamer les lignes d’un fichier, les fichiers d’un concepts d’Ant, Maven, Ivy et Groovy, Gradle d’ores et déjà prévue avec la prise en compte
répertoire, récursivement ou non, ... apporte de la flexibilité et de la souplesse pour du parallélisme pour optimiser les builds dans
Concernant les Collections, l’API s’est considéra- répondre aux problématiques de build. des environnements distribués.
blement enrichie avec de nouvelles méthodes Contrairement à Maven, Gradle permet : De toute évidence, Gradle est une solution à
d’itération ( ! $ ) et de modification ◗ De générer plusieurs artéfacts pour un envisager dans la construction de projet embar-
($ " , $ ," ' & % & , ...) ; ainsi que même build, quant des architectures / technologies diffé-
de nouveaux Comparator permettant de trier spé- ◗ De dé-corréler le build et le déploiement. rentes entre front (Angular, Dart...) et back
cifiquement les ' , chaîner les Comparator, ... Gradle repose sur le concept de tâches (tasks) (Java, .NET...).
Un point intéressant concerne la classe Concur- qu’il est possible de créer dynamiquement
rentHashMap, qui a été complètement réécrite par notamment grâce à la puissance du langage Céline Gilet – Netapsys
rapport à la version de Java 7 : elle est maintenant

Au secours,
thread-safe sans lock, et supporte un plus grand
nombre d’éléments (l’index est passé de & en m’intéressait pour m’aider à éventuellement resi-
!
mon code AngularJS
). tuer «nos pratiques». Pour faire court, je partage la
Le dernier point que j’évoquerais ici parmi tous même vision que Thierry, sauf sur un point mineur

est pourri !
ceux cités, la nouvelle classe ComputableFuture que je détaillerai en fin d’article.
qui permet de faciliter la programmation asyn-
chrone. Bonnes pratiques
Cette présentation a permis de mettre en évidence Durant cette édition de Devoxx, je tenais particuliè- Sans plus attendre, voici quelques points clé de la
les nouveautés de l’API qui ont été masquées par rement à assister au talk de Thierry Chatel Au réussite d’une grosse (ou petite) application Angu-
l’arrivée des lambdas, et qui vont grandement faci- secours, mon code AngularJS est pourri ! Derriè- larJS:
liter la vie des développeurs. Pour voir si le code re ce nom un peu barbare, Thierry nous y présen- ◗ Pas d’optimisation prématurée (écrire du code
que vous écriviez n’est pas maintenant devenu tait les bonnes et mauvaises pratiques. pour gagner 3ms, cela rendrait le code moins
«inutile», un seul chemin : la Javadoc ! lisible pour un gain...),
Je pratique AngularJS à plein temps depuis plus ◗ Effectuer le «binding» sur une fonction et non sur
Benoît Cotinat – Netapsys d’un an, et son retour sur les bonnes pratiques le résultat (ne pas hésiter à rejouer plusieurs fois

24 Programmez! < Juin 2014


018_026_175 19/05/14 21:38 Page25

un traitement, cela allège le code et ce n’est sou-


vent pas coûteux en ressources),
Les Object surtout lorsque le nom de la variable n’est

Calisthenics
composé que d’une seule lettre,
Ne pas hésiter à manipuler ◗ Pas de collection de premier ordre ( !
& ! , % & ...) mais des classes de collec-

d
le JSON pour reconstruire un
vrai modele objet : J’ai assisté à la présentation rapide de Guillau- tion.
◗ Si on a besoin de beaucoup de méthodes d’un me Duquesnay. Le sujet est la programmation Exemple :
service dans un écran (ne pas hésiter à mettre ce des Object Calisthenics qui définit une manière % % # ' & $ & % )
service sur le scope), d’écrire du code. % & $ & $ & %
Voici une liste non exhaustive des contraintes *
Une arborescence fichier définissant cette méthode : ◗ Utiliser au maximum 2 attributs de
fonctionnelle et non technique : ◗ Ne pas utiliser de : son utilisation pour- classe/d’instance. Au delà, la classe a de
◗ Définir les routes dans les différents modules, à la rait être révélatrice d’une méthode ayant plu- bonnes chances de faire plusieurs choses dis-
place d’un gros fichier de routes (cela facilite la sieurs intentions, tinctes => il faut la découper en plusieurs
lisibilité, et participe à isoler au maximum les ◗ Pas plus d’un niveau d’indentation : cela amé- classes,
modules), liore la lisibilité du code, ainsi que sa testabilité ◗ Ne pas utiliser de getter : cela évite de briser
et sa maintenabilité, l’encapsulation des données par leur exposi-
◗ Le contrôleur ne sert qu’à initialiser le scope et ◗ Encapsuler chaque type primitif ( & , ! tion en dehors de la classe.
faire le passe-plat vers les services (cela est vrai ...) dans une classe dédiée : cela définit claire- Le bilan dressé par Guillaume est que ces
pour presque tous les langages), ment le sens de la donnée et permet une pro- contraintes donnent plus de sémantique aux
grammation plus orientée objet (en Java, un classes et mènent à une programmation fonc-
◗ Ne pas hésiter à mettre plusieurs contrôleurs sur type primitif n’est pas un objet). tionnelle, expressive et réactive. Cela lui a per-
un écran (un contrôleur sur un ng-repeat permet Exemple : mis de redécouvrir les design patterns,
d’effectuer un traitement sur chaque item de la % % ! $ ! ' ' $ % ) notamment le pattern Command. Pour conclu-
liste (par exemple pour un $watch), & ( ' $ re, il conseille de tester cette méthode en appli-
* quant strictement les règles pendant au moins
Pas de métier dans les contrôleurs, ◗ Un seul point par ligne : cela facilite la lecture 20 heures, afin de pouvoir vraiment en com-
ni dans les templates : du code, prendre les avantages et les inconvénients.
◗ Ceci est du code «métier» : ng-class=»{‘foo’: bar ◗ Pas d’abréviation : cela donne du sens à la
>= 100}» variable et diminue les ambiguïtés survenant Fabien Duminy - Netapsys
◗ Ceci n’en est pas :D : ng-class=»{‘foo’:
[Link]()}»

Stocker des promises au lieu


du résultat (cela évite les
Retour sur le BOF avec les JDuchess
traitements conditionnels pour Quand la journée des conférences se termine à Devoxx France, c’est que les BOFs ne sont plus très loin !
savoir si la donnée est présente. Les BOFs (Birds Of a Feather) sont des sessions informelles qui donnent l’occasion de rencontrer et
Le code sera exécuté d’échanger avec des groupes d’utilisateurs sur les technologies Java, Scala, Groovy et autres.
quand la promise sera résolue). J’ai choisi de vous faire un retour sur le BOF relatif au Duchess France qui est un JUG (Java User Group)
100% féminin.

Conclusion Trois temps forts ont rythmé cette session :


◗ Faire au plus simple ◗ Le premier a permis de rappeler l’ensemble des actions réalisées au cours de l’année passée (confé-
◗ Partir du html rences, hackathons...) et les JDuchess sont désormais présentes dans 8 villes en France dont notam-
◗ Profiter un maximum de la «souplesse» du ment Paris, Nantes, Lyon ou Tours,
JavaScript ◗ Le second a permis de donner la place à 5 témoignages de femmes ayant des carrières à forte visibili-
◗ Coder en «Objet» té dans le monde de l’IT (Amira Lakhal, Mathilde Lemée, Agnès Crepet, Laure Nemée et Kathryn Roton-
do). Que ce soit en freelance, salariée d’une SSII, commiteur open-source ou créatrice d’entreprise,
Petite divergence d’avis chacune a partagé son expérience et ses difficultés en toute transparence (barrières, investissement
Thierry nous préconise «1 fichier = 1 module» pour dans des projets parallèles, gestion vie professionnelle / vie privée),
éviter d’avoir à gérer l’ordre de chargement des ◗ Le troisième a permis d’échanger sur ce qui pourrait inciter et encourager les femmes à s’investir dans
fichiers, et je suis d’accord avec lui pour faciliter le des métiers techniques et notamment celui de développeur.
chargement. Sur ce dernier point, il ressort un manque de communication auprès des jeunes, principalement dans les
Je suis plus pour utiliser des conventions de nom- collèges et les lycées. Ce sera donc le challenge pour cette nouvelle année : parler et expliquer ce qu’est
mage (ex: [Link]), ce qui me permet le quotidien d’un développeur.
ensuite de charger les modules en premier avec Retrouvez toute l’actualité et les interviews réalisées par les JDuchess sur leur site à l’adresse suivante :
les tâches Grunt ou Gulp. [Link]

Medy BELMOKHTAR – Netapsys Céline Gilet - Netapsys

Juin 2014 > Programmez! 25


018_026_175 19/05/14 21:38 Page26

[Link] : La partie ‘V’ du MVC repensée


n’est pas possible de les modifier La méthode render & % ' & % & ' $ % &
% + ! ' $ . & $
J’ai assisté au B.O.F du
sauf si l’on a implémenté un handler Elle contient la logique d’affichage
' & % & ' $ (! $ '
d

ParisJS, ma grande modifiant ces propriétés via la pro- de la vue, l’imbrication des compo-
première dans cette priété state. sants sous forme d’arbre à l’intérieur ! au même endroit me
communauté et au Le type des props peut être spécifié du DOM. On peut y déclarer du semble un peu … propice à l’écritu-
Devoxx France. Le sujet ainsi que la présence ou non du HTML, des composants ou un mix re de code spaghetti.
paramètre lors de la création du des deux. Il serait néanmoins intéressant de
concernait [Link], il composant. Cette méthode est appelée quasi- l’intégrer dans une vraie application
était présenté par Khalib ment à chaque changement d’état MVC pour un retour plus complet.
Jebbari. La philosophie DOM Virtuel du composant. Dans ce billet j’ai voulu, comme lors
du Framework a piqué [Link] utilise un DOM virtuel pour de la session du BOF, partager sa
les mises à jour du DOM. Ce méca- Exemple de philosophie qui reste intéressante,
ma curiosité au vif. Je nisme lui permet d’être très rapide. composant « mixte» et son utilisation sur des cas
l’ai testé sur des cas En effet, il maintient une copie du Ce composant mixe la création d’un basiques de construction de vues
basiques et vous DOM initial et un autre portant les composant qui contient des compo- pour les applications web.
propose une brève modifications. Dès qu’il détecte un sants et du HTML.
changement sur un nœud, il recons- Exemple de composant : Des bonnes
présentation. truit entièrement l’arbre. Cette opé- {Lien externe pour tester le code} pratiques ?
ration optimise la régénération du [Link] Sur le site officiel du projet, les
[Link] : est une DOM et rend l’affichage du rendu {Pour intégrer le code directement développeurs du Framework préco-
librairie JS dédiée visuel plus rapide. dans le billet} nisent entre autres de :
aux interfaces gra- <iframe width=»100%» ◗ Découper l’ergonomie en compo-
phiques. JSX height=»300» sants les plus petits possibles pour
[Link] (Git Hub : Librairie optionnelle qui permet src=»[Link] faciliter les tests unitaires,
[Link] ) juste de représenter le contenu du mbedded/» allowfullscreen=»allow- ◗ Connaître le workflow minimal de
est un Framework dédié à la créa- composant sous forme d’arbre dans fullscreen» l’application,
tion d’interface utilisateurs des appli- le DOM virtuel. frameborder=»0»></iframe> ◗ Identifier les composants sujets à
cations web; il a été mis à la En l’absence de ce dernier, on doit des modifications,
disposition de la communauté cou- gérer la logique d’affichage des Note : La fonction render retourne à chaque ◗ Implémenter les fonctions de
fois l’ensemble de nos composants
rant 2013. Propulsé par Facebook et composants en Javascript. React sous forme d’arbre qui peuvent mises à jour sur ces composants.
Instagram, il se range dans la caté- Le code ci-dessous montre la diffé- ou non être affichés. Dans le cas où
gorie V voire C du ‘MVC’ rence entre les deux syntaxes. l’on utilise JSX ne pouvant renvoyer La présentation sur [Link] de Kha-
qu’un seul nœud, il convient, quand
[Link] nous amène à remettre en //Création d’un composant hello cela est nécessaire, de regrouper le lib Jebbari est disponible sur son
cause l’interaction entre les views et world HTML des composants sous un node github :
les templates pour la construction ◗ Avec JXS : principal. [Link]
paris-js/blob/master/[Link]
Dans le cas de JSX, le commentaire
des vues. En fait, le principe de cou- {Lien externe pour tester le code} au début du JS est obligatoire.
plage du View-Model et des tem- [Link]
plates Handlebar par exemple {Pour intégrer le code directement Qui l’utilise ?
n’existe plus. Il n’y en a que pour dans le billet} -> Facebook/Instagram
les composants! <iframe width=»100%» Conclusion -> Khan Academy
height=»300» Un Framework orienté vue propulsé
Quelques notions src=»[Link] par Facebook, on se doute qu’il a et Source
clés : mbedded/» allowfullscreen=»allow- aura ses adeptes. Présentation du Framework :
Les composants fullscreen» frameborder=»0»> La prise en main est rapide et le dos- [Link]
(component) </iframe> sier d’installation fournit des tml
Notion centrale du Framework, les exemples exhaustifs incluant les cas [Link]
composants (component) sont des ◗ Avec le framework [Link] d’utilisations avec requireJS. -to-the-react-framework—net-35660
blocks HTML réutilisables et modu- {Lien externe pour tester le code} Cependant, j’ai trouvé que React [Link]
lables. [Link] permet au développeur que je suis [Link]
Ce sont les briques de HTML et {Pour intégrer le code directement de mettre beaucoup de logique [Link]
leurs événements associés que dans le billet} dans la vue. Etant habituée à sépa- in-pure-javascript-facebook-library/
l’on veut pouvoir rajouter au DOM. <iframe width=»100%» rer la View-model et ses templates,
height=»300» pouvoir mixer l’ergonomie de l’ap- Performance du DOM Virtuel :
Les propriétés : src=»[Link] plication $ , & ! % [Link]
props et state mbedded/» allowfullscreen=»allow- ! " ! % & % & " '
Les props sont des paramètres pas- fullscreen» & ! ' et la logique de Michelle Avomo
sés au composant. Une fois créés, il frameborder=»0»></iframe> fonctionnement % & ! , (- Netapsys

26 Programmez! < Juin 2014


027_032_175 19/05/14 21:41 Page27

Réussir son projet Open Source :


les bonnes pratiques
Il est désormais loin le temps où simple de faire les bons choix dans la masse des conditions favorables !
solutions disponibles. Voici donc quelques points L’utilisation de l’anglais est donc particulièrement
lancer un projet Open Source de repère pour répondre aux interrogations les requise. Pour la documentation et le site Web qui
relevait uniquement de plus courantes : hébergera le projet bien entendu, mais pas seule-
l’engagement philosophique ◗ Quand faut-il publier son projet ? ment : penser aussi aux commentaires et au code
◗ Quels sont les ingrédients pour attirer des contri- lui-même. Cela semble évident, mais le franglais
pour un partage des buteurs ? est à proscrire absolument !
connaissances ouvert et libre. ◗ Quid des licences ? Comment peuvent-elles Quel développeur anglophone aura envie de
Bien entendu, cette motivation m’aider à atteindre mes objectifs ? contribuer à un code source qui ressemble à celui
◗ Comment publier mon projet ? Quels outils ci-dessous ?
reste bien présente au sein des mettre à disposition des développeurs ?
communautés et des ◗ Comment faire vivre la communauté qui va se 9
associations de soutien au créer autour de mon projet ? ' ,1 1 *# , ' % ,#
*# 2 ' ,' 1 ' *' 6 1 ' -,
$ -/ ' ,1 ' ' , ' % ,# '
Logiciel Libre. Mais créer un Quand publier ?
projet Open Source est Plutôt que de répondre directement à cette ques- 7
dorénavant une décision tion, rappelons deux règles simples mais toujours ' $ + /' *# *- *# '
vérifiées en pratique : 1 *# ' '
◗ Règle n°1 : quand une idée est originale, elle 9
mûrement réfléchie en accord
avec des motivations l’est dès le début du projet. Inutile de fignoler la
personnelles et économiques Nième interface d’administration avant de Penser aux contributeurs
publier : les utilisateurs vont s’emparer du projet Un projet Open Source, c’est d’abord une com-
aux multiples reflets. très vite si ce dernier répond à un vrai besoin, munauté de contributeurs qui le fait vivre. Sans
même s’il est incomplet. elle, il sera comme une coquille vide. Dans ce
Dès lors, plus question de lancer un simple mes- ◗ Règle n°2 : la qualité est primordiale. Un projet paragraphe, nous ne nous intéressons pas à la
sage du style « Hello everybody (…), I’m doing a incomplet mais avec une base très bien structu- manière de faire vivre cette communauté, mais
Free OS… » et d’espérer qu’une communauté rée et codée mobilisera rapidement une com- aux quelques règles de bon sens qui permettront
s’empare de votre code pour en faire le noyau le munauté de développeurs prêts à prendre en à cette dernière d’exister.
plus utilisé au monde. Vous devez maîtriser la charge les fonctionnalités manquantes. Dans le Si la publication en anglais est une première règle
réussite de votre projet ! cas contraire, la sanction sera immédiate. sine qua non, il faut aussi penser à la lisibilité de
Autant être fixé rapidement et pouvoir corriger le votre publication. Comprenez : la qualité structu-
Réussir son projet ? tir sur une quantité de code limitée, sinon vous relle du code et les commentaires.
Mais au fait : réussir son projet, ça signifie quoi risquez d’être découragé devant l’ampleur de la Respecter les règles de codage aura un double
exactement? C’est bien évidemment la question tâche et vos efforts auront été inutiles. impact :
qu’il faut se poser avant toutes les autres. ◗ Favoriser la compréhension de votre projet par
Tout au long de votre projet, vous allez devoir Notre conseil : concentrez-vous sur la qualité et validez votre autrui, et ainsi faciliter les contributions. Un code
projet le plus vite possible.
prendre des décisions structurantes sur de nom- mal construit impose un effort supplémentaire
breux sujets : hébergement collaboratif, outils, Même si les deux règles précédentes visent plu- qui peut éloigner les développeurs les plus moti-
licence, communication, documentation…et pour tôt des nouveaux projets, elles restent applicables vés.
cela, vous devez être très clair avec vos objectifs : au cas des logiciels propriétaires qui sont ◗ Améliorer la qualité perçue de votre projet, et
◗ Concrétiser une idée originale et la partager « libérés » par leurs éditeurs. En particulier, rendre donc susciter l’intérêt.
avec les autres pour l’enrichir ? Open Source une application en perte de vitesse Les règles de codage relèvent des bonnes pra-
◗ Etre reconnu par les gourous du domaine ? en espérant que les contributions lui permettront tiques propres à chaque langage. Il est donc diffi-
Devenir vous-même une référence ? de retrouver une seconde jeunesse est voué à cile de les expliciter ici. Pour les projets écrits en
◗ Démontrer votre savoir-faire pour alimenter une l’échec. langage C, le GNU coding standard est toutefois
activité freelance (ou décrocher un job de rêve Par contre, publier en Open Source un logiciel une bonne référence. On peut aussi s’appuyer sur
au bout du monde) ? reconnu pour sa qualité et en plein succès – en les règles édictées par quelques organisations de
◗ Partager le socle logiciel du produit phare de adaptant naturellement le modèle économique – référence. Par exemple, s’inspirer des règles de
votre startup pour en favoriser sa diffusion ? peut avoir un effet de levier réel. codage de Google en C++ ou de DRUPAL en
◗ Mutualiser vos efforts de R&D avec des parte- PHP est un bon point de départ.
naires pour réduire vos coûts ? Nul n’est prophète en son Voici quelques règles qu’il est utile de bien res-
◗ Vous libérer de la maintenance des millions de pays… pecter dans tous les cas :
lignes de code de votre framework pour vous Il y a de fortes chances pour que les premières ◗ Adopter une convention de nommage claire et
concentrer sur les plugins lucratifs ? contributions à votre projet viennent de l’autre consistante
Vous allez vite constater qu’il n’est pas toujours bout du monde…à condition d’avoir créé les ◗ Eviter les raccourcis d’écriture et ne pas hésiter

Juin 2014 > Programmez! 27


027_032_175 19/05/14 21:41 Page28

à réécrire une commande sur plusieurs lignes si de la documentation ! Un très bel exemple de Notre conseil sera double :
besoin documentation générée automatiquement (avec ◗ Publier tôt avec une documentation utilisateur
qdoc, un outil Qt équivalent à Doxygen). complète, car nécessitant un moindre effort.
◗ Par exemple écrivez : Voici un exemple de commentaire intégré dans du ◗ Indiquer clairement que l’on recherche des
code pour être exploité ensuite par Doxygen : volontaires pour aider à rédiger la documenta-
' $ +5 .-' ,1 # / tion, plutôt que de la négliger purement et sim-
7 plement.
+5 .-' ,1 # / + **-! 0' 6 # -$ +5 01 /2 !1 & ' 0 !-+.2 1 # 0 1 & # ""' 1 ' -, -$ 1 4 - Les packages d’installation vont favoriser le test
8 ' ,1 # % # / 3 *2 # 0 de votre projet. Même un développeur chevronné
. / + ' 0 1 & # $ ' /01 ' ,1 # % # / l’utilisera lorsqu’il découvrira votre projet et vou-
Plutôt que : . / + ' 0 1 & # 0# !-," ' ,1 # % # / dra se faire son idée en quelques minutes. Après,
/# 1 2 /, 1 & # ! *!2 * 1 # " 3 *2 # bien entendu, s’il est convaincu, il téléchargera les
' $ +5 .-' ,1 # / +5 .-' ,1 # / + **-! 0' 6 # sources et recompilera l’ensemble dans son envi-
-$ +5 01 /2 !1 ' ,1 +5 ""' 1 ' -, ' ,1 ' ,1 ronnement. Soigner le packaging est donc impor-
tant pour développer la communauté des utilisa-
◗ Soigner l’indentation du code Notre conseil : commentez votre code source en Doxygen teurs.
dès la première ligne de code.
Enfin : prendre soin de fournir des programmes
Notre conseil : a minima, portez une attention particulière aux Last but not least : penser à porter une attention d’exemple dans le cas des bibliothèques logi-
particulière aux outils de production.
warning de votre compilateur.
Par exemple avec GCC, activez un maximum de warnings et cielles. Le fameux ‘Hello World’ est bien sûr incon-
traitez les comme des erreurs : gcc -Wall -Werror Ils sont trop souvent négligés en début de projet, tournable, mais il ne faut pas oublier que les pro-
lorsque quelques lignes dans un Makefile suffi- grammes d’exemple seront le premier contact
N’hésitez pas à utiliser des outils permettant de sent pour compiler le code source. Souvenez- d’un utilisateur avec votre projet. Ils doivent donc
tester la qualité de votre code. Même si ces der- vous que vous devez anticiper le succès de être didactiques mais démonstratifs, donner envie
niers ne sont pas infaillibles, publier les résultats votre projet et faciliter la vie aux contributeurs. d’aller plus loin.
obtenus sera un gage de sérieux. Optez plutôt pour un outil spécialisé comme Vous l’aurez compris : créer un projet Open
Complément : Si votre projet vise le secteur CMake (adopté par KDE, MySQL, OpenCV, etc.). Source, c’est aussi du marketing !
industriel, il est sans doute judicieux de prévoir de Deux avantages majeurs à utiliser CMake :
respecter des normes plus rigoureuses, comme ◗ Une prise en charge facilitée de la complexité Choisir sa licence
par exemple la norme MISRA (C et C++). La croissante de votre projet Le choix de la licence apparaît comme une ques-
norme MISRA, créée en 1998 par la ◗ L’outil de production est multi-plateformes, per- tion très technique, souvent un peu obscure. Il est
MotorIndustry Software Reliability Association a mettant aux contributeurs de travailler dans leur vrai que pas moins de 70 licences libres sont
pour vocation de définir un ensemble de règles environnement sans adaptation spécifique. recensées !
permettant d’améliorer la robustesse des logi- Signalons aussi l’outil historique du projet GNU : Pourtant, les premiers (et principaux) critères de
ciels. les autotools, qui sont encore largement utilisés sélection n’ont rien de technique. Ils relèvent sur-
Un exemple pour mieux comprendre la philoso- mais plus complexes à mettre en œuvre. tout de choix de principe effectués au lancement
phie de cette norme : pour être conforme MISRA du projet :
C, il est obligatoire de prévoir un branchement Penser (aussi) aux ◗ Le projet est-il associé à un objectif
default dans un bloc switch ou un else dans un utilisateurs ! économique ?
bloc if. Pour un projet Open Source, il n’est pas toujours ◗ Faut-il se prémunir contre toute récupération ou
Des outils existent pour valider la conformité d’un évident de distinguer les contributeurs des utilisa- appropriation industrielle du projet ?
code source à la norme MISRA : par exemple les teurs. Autrement dit : pas de contributeurs sans ◗ Souhaite-t-on se rapprocher d’une fondation
outils d’analyse statique de Coverity ou LDRA utilisateurs. existante et bénéficier de sa notoriété ?
Testbed de Liverpool Data Research Associates. Il ne faut donc pas négliger ce qui va rendre un ◗ La motivation profonde est-elle de partager un
Ces derniers sont toutefois propriétaires et assez projet attrayant : des visuels pour donner envie savoir-faire ou une connaissance scientifique ?
onéreux, donc peu accessibles aux particuliers. d’essayer votre application, une documentation Il existe en effet deux grands types de licences :
Mais si votre projet intéresse vraiment un indus- claire et complète, des packages d’installation et, les licences copyleft et les licences non-copyleft.
triel, ce dernier pourra sans doute vous aider à pour les bibliothèques logicielles, des exemples. Dans un premier temps, bien comprendre la dis-
tester la conformité de votre code… Un autre élé- En ce qui concerne les visuels, est-il vraiment utile tinction entre les deux modèles est nécessaire et
ment de qualité du code concerne naturellement de rappeler l’importance des incontournables – presque – suffisant pour faire le bon choix….
la documentation de ce dernier, sur laquelle il faut screenshots pour une application ? Mais ce n’est Les licences copyleft relèvent de la démarche ini-
porter une attention toute particulière. pas toujours très applicable. Il existe aujourd’hui tiale du mouvement Free Software lancé par
Adopter Doxygen est une bonne habitude plus un media frappant : les vidéos. Dans ce cas, la Richard Stallman. L’accent est mis sur la liberté et
que recommandable. Son utilisation permet de moindre démonstration dans une fenêtre console la préservation de cette liberté. Liberté de télé-
générer automatiquement la documentation de devient vivante et aura un impact redoublé. charger, d’utiliser, d’étudier, de diffuser à une
votre projet à partir de commentaires structurés Il ne faut pas se voiler la face : les développeurs double condition :
avec des tags de référence : le gain de temps est rechignent souvent à rédiger la documentation uti- ◗ Une fois la technologie en votre possession,
remarquable et la lisibilité de votre projet garantie. lisateur sous prétexte qu’il s’agit de temps perdu vous ne pouvez pas vous l’approprier (elle garde
Pour s’en convaincre Il suffit de demander à un sur la production de code. Pourtant, c’est un élé- sa licence originale)
développeur d’IHM pourquoi il privilégie la librairie ment important pour attirer des utilisateurs néo- ◗ Toute évolution introduite dans cette technolo-
Qt plutôt que GTK…réponse immédiate : la qualité phytes et favoriser le bouche à oreille. gie est-elle même soumise à la même licence.

28 Programmez! < Juin 2014


027_032_175 19/05/14 21:41 Page29

Le deuxième point explique que l’on parle alors sur svn, cette suprématie s’explique sans aucun ◗ Du système de fork/pull_request qui favorise les
de licence contaminante. doute par sa capacité à gérer un très grand contributions,
L’exemple de licence copyleft la plus répandue nombre de développeurs sur un même projet, ◗ Et enfin d’un véritable réseau social dédié.
est la licence GNU GPL (GNU General Public lorsque svn trouvera ses limites avec une dizaine Bien entendu, il est tout à fait possible d’héberger
Licence). C’est par exemple la licence du noyau de contributeurs… soi-même son projet sur un site Web dédié. Nous
Linux. Les conséquences sont immédiates : tout Son mode de fonctionnement est particulièrement le déconseillons toutefois. Tout d’abord parce que
développement destiné à être intégré dans le ker- adapté aux projets collaboratifs. En effet, chaque cela va donner une image ‘suspecte’ de votre
nel Linux sera sous licence GPL (effet contami- contributeur : démarche…le partage est-il vraiment votre
nant). C’est le cas – en théorie – de tous les dri- ◗ télécharge une copie locale de l’ensemble du objectif ? Les contributeurs n’apprécient pas tou-
vers. En théorie car certains industriels n’hésitent repository jours un tel comportement. Ensuite parce que
pas à diffuser des drivers qui ne sont pas sous ◗ travaille à partir de son repository local votre projet doit monopoliser votre énergie : quel
licence GPL… ◗ peut facilement créer des branches pour tester intérêt de la dépenser dans la mise en place et la
de nouvelles idées, sans mettre en danger le maintenance d’outils alors que tout est à votre
Quand choisir une licence copyleft ? reste du projet disposition sur une forge communautaire ? Il est
Première réponse simple : vous n’aurez peut-être ◗ dispose d’une gamme d’outils complète pour enfin évident qu’une telle démarche réduira forte-
pas le choix ! Si vous choisissez de vous appuyer communiquer ses évolutions aux autres partici- ment la visibilité du projet, et sera donc un handi-
sur des composants logiciels sous licence copy- pants cap pour créer une communauté active.
left, ou de développer une fonctionnalité complé- Ce mode de fonctionnement rend le gestionnaire
mentaire à un logiciel sous licence copyleft (projet de version Git beaucoup plus rapide et tolérant Une communauté s’est
dérivé), l’effet contaminant s’applique. aux erreurs du développeur (impossible d’annuler créée…il faut la faire vivre !
Un autre critère clé est le suivant : vous souhaitez un commit malheureux avec svn…). Enfin…votre projet est solide techniquement, bien
vous protéger contre toute appropriation de votre Svn est basé de son côté sur un modèle clas- lancé, protégé par une licence adaptée et héber-
technologie par un concurrent (économique ou sique de serveur centralisé sur lequel chacun gé dans une forge communautaire visible. Une
universitaire). contribue après avoir effectué un checkout. petite communauté s’est créée et produit déjà les
Il n’en reste pas moins qu’une licence copyleft Chaque commit est alors appliqué directement premières évolutions. Rassurez-vous : tout ne fait
pourra être considérée comme trop restrictive si sur le repository centralisé, à condition de dispo- que commencer !
on souhaite favoriser une diffusion large de notre ser des droits pour cela. Pour contribuer, il faut Il s’agit en effet maintenant de faire vivre cette
technologie. La notion de contamination freinera donc déjà avoir été accepté par la communauté. communauté. C’est à dire de :
un industriel qui souhaite s’appuyer sur des tech- La sélection est très sévère car vous l’aurez com- ◗ Définir une gouvernance claire : ne pas oublier
nologies libres pour développer un produit, tout pris : chacun de vos commits peut déstabiliser la qu’un projet Open Source doit maîtriser en per-
en protégeant un savoir-faire spécifique. branche principale du projet. manence sa qualité. Définir clairement qui peut
Il existe donc des licences non-copyleft beaucoup accepter des contributions et les intégrer dans
plus permissives. Les plus connues sont les Héberger et diffuser son projet le tronc principa,
licences BSD, MIT et Apache. Il est tout à fait pos- Voilà : vous avez suivi tous nos conseils et vous ◗ Donner de la visibilité sur la roadmap : un projet
sible d’utiliser une technologie libre sous licence êtes prêts à faire connaître votre œuvre au plus retiendra des contributeurs s’ils ont le sentiment
non-copyleft dans des produits propriétaires. grand nombre. Mais au fait, comment diffuser effi- que vous savez exactement où vous voulez aller,
Signalons enfin deux points remarquables : cacement un projet Open Source et le faire ◗ Communiquer en externe : participer à des
◗ Si le kernel Linux est sous licence GPL, il y a connaître ? conférences, publier des articles, avoir un site
une petite phrase qui précise que les environne- Réponse : en l’hébergeant sur une forge, car vous Web à jour avec des news récentes, répondre
ments fonctionnant au-dessus de ce kernel ne disposerez alors d’une palette d’outils bien utiles aux demandes sur les forums,
sont pas tenus d’être sous licence GPL. C’est et deviendrez visible. Si un développeur cherche ◗ Communiquer en interne : être disponible,
ce qui permet à quiconque de faire fonctionner un projet Open Source sur lequel contribuer, nul mettre en place des outils de communication,
une application propriétaire dans un OS GNU doute en effet qu’il commencera par chercher sur ◗ Créer des liens avec les intégrateurs : ces der-
Linux. les forges les plus utilisées. niers sont au contact direct des projets, ils pour-
◗ La licence LGPL est un bon compromis souvent Impossible de ne pas connaître Sourceforge, ront promouvoir votre technologie si elle répond
adopté pour les bibliothèques logicielles. Tout forge historique sur laquelle vous avez nécessai- à un besoin exprimé par leurs clients.
en protégeant la bibliothèque elle-même par une rement téléchargé un logiciel au moins une fois.
licence copyleft, elle permet de linker cette der- De la même manière que Git est devenu le ges- Conclusion
nière à tout type de projet, libre ou non. tionnaire de version privilégié, github est aujour- Arrivé à ce point, que pourrait-il manquer d’impor-
d’hui la forge qui regroupe à lui seul environ 55% tant pour être complet ? Sans aucun doute un
Le gestionnaire de versions des projets Open Source. Quelques chiffres pour enthousiasme à toute épreuve et une bonne dose
A minima, votre projet doit être géré par un logi- se sentir moins seul : en 2013, github représentait d’énergie. Ce sont les deux ingrédients absolu-
ciel de gestion de versions. 3 millions d’utilisateurs, 4,6 millions de projets et ment nécessaires pour s’engager dans l’aventure
Git, initialement développé pour le kernel Linux environ 2,5 millions de commits annuels. de l’Open Source. Pour tous les autres sujets plus
(par Linus Torvalds lui-même), s’impose alors net- En hébergeant votre projet sur github, vous dispo- techniques, nous espérons que les éléments pré-
tement comme le gestionnaire de configuration serez : sentés dans cet article constitueront des repères
des projets libres. Il a supplanté Svn (Subversion), ◗ D’une page de description du projet automa- solides. Enjoy !
autre outil régulièrement rencontré dans le monde tique à l’aide du [Link],
Open Source. ◗ D’un système de suivi des bugs, Olivier Vine
Sans entrer dans le détail des avantages de git ◗ D’un wiki pour l’échange d’informations, Directeur d’OpenWide Ingénierie

Juin 2014 > Programmez! 29


027_032_175 19/05/14 21:41 Page30

Créer son projet en open source,


un modèle de développement d’avenir
Pourquoi faire le choix de développer son projet selon les règles de l’open source ?
Le fait de contribuer à l’enrichissement collectif du est primordial afin de maintenir la cohérence du licences non copyleft, on peut trouver des licences
monde de l’informatique n’est pas l’unique projet et l’harmonie des contributions. connues comme la licence MIT, ou encore BSD.
motivation d’un projet open source. Là où le Leur particularité est que chaque personne
logiciel libre met en avant une certaine éthique du Différents moyens recevant le logiciel a tous les droits sur le logiciel
développement, l’open source privilégie un au service du projet mais qu’elle a aussi l’obligation de mettre le nom
procédé plus pragmatique, basé sur le libre accès Quels outils pour vous accompagner dans le des auteurs avec la notice de copyright. Ainsi du
au code. Cela va au delà de l’aspect développement du projet ? Afin de mettre en code sous ce type de licence peut tout à fait être
enthousiasmant que peut avoir le fait de participer commun les travaux et ressources au sein de la utilisé dans un logiciel propriétaire. Il est primordial
à un projet basé sur le partage, la coopération et communauté, il est nécessaire de disposer d’une de bien choisir sa licence, pour définir quels droits
l’enrichissement collectif; la mise à disposition du plateforme d’hébergement et de partage pour le aura le public sur le code, en fonction de la portée
code source de son projet, afin qu’il puisse être projet : la forge. De nombreuses solutions existent et de l’utilisation, notamment commerciale, que
librement accessible, modifiable et redistribuable en la matière, au nombre desquelles le classique l’on veut lui donner.
offre de nombreux avantages. En effet, c’est [Link], GitHub, Google Code et bien
avant tout la garantie d’une plus grande qualité et d’autres. Cette forge représente l’outil Un modèle
d’une meilleure sécurité du code, celui-ci étant fondamental du travail en open source ; elle économique viable ?
analysé et testé par tous les contributeurs. Ceci permet aux contributeurs d’accéder au code La satisfaction de participer à une œuvre collective
permet également une détection et une correction source du projet, et d’y soumettre le fruit de leurs qui aboutit à la création d’une solution performante
plus rapide et efficace des bugs; les travaux, leurs réflexions ou rapports de bugs. Ces peut être une récompense en soi. Cependant, on
communautés permettant une grande réactivité. plateformes présentent également le grand peut légitimement se poser la question de la
Par ailleurs l’apport d’une communauté avantage d’être un vivier naturel de contributeurs rémunération dans le cas d’un projet pour lequel le
nombreuse et active dynamise le projet et stimule potentiels, et offrent au projet une visibilité auprès code est libre d’accès et de redistribution. En
son évolution constante. Celle-ci peut en de nombreux développeurs susceptibles d’y d’autres termes, le modèle open source est-il viable
permanence proposer des améliorations, participer. Il peut être également utile de disposer économiquement ? La réponse à cette question
développer des extensions… En bref, la mise en d’un site internet afin de communiquer autour du réside essentiellement dans les activités de service.
commun des ressources des contributeurs projet, de son avancement, et de lui offrir une plus En effet la mise en place d’un logiciel open source
permet une capacité de travail accrue et un recul grande visibilité; de manière plus globale, il s'agit auprès d’une entreprise par exemple, entraîne un
plus grand sur le projet. de le promouvoir auprès de sites spécialisés, besoin en termes d’intégration et de support. On
blogs ou forums. Par ailleurs, une documentation peut citer l’exemple de Red Hat, qui base son
Le point fort de l’open source : fournie et de qualité est une aide à la activité sur le service autour de distributions et
la communauté compréhension et à la clarté de votre projet, et logiciels open source. L’équipe de développement
Dans un projet open source, le code est visible donc à sa diffusion. est naturellement la plus à même de remplir cette
afin qu’il puisse être commenté, testé, amélioré mission. Par ailleurs certains projets possèdent
par tous. Pour qu’un tel projet prenne tout son Une question épineuse, plusieurs licences: une destinée à une diffusion large
sens, il est donc logiquement essentiel qu’il celle de la licence et gratuite, une autre pour la commercialisation du
dispose d’une communauté de contributeurs. Il L’une des questions les plus importantes et produit sous des versions alternatives, notamment
sera d’autant plus pérenne et fiable si cette complexes qui se pose au développeur qui veut auprès des entreprises. D’autre part, les dons des
communauté est importante en nombre et en initier un projet open source est celle du choix de contributeurs peuvent représenter une part non
implication. Elle peut être le meilleur gage de la licence. La licence est ce qui définit les traits négligeable de l’effort financier soutenant le projet,
qualité de votre projet. La division du travail d’utilisation et d’accessibilité au projet open- ainsi que le sponsoring de grands groupes qui
permet évidemment une progression plus rapide source. Il existe deux grandes catégories parmi n’hésitent pas à investir dans ce type de projets, à
et dynamique, et la confrontation de points de vue les licences libres qui sont les licences libres dites l’instar de Sun, Google ou IBM. L’open source est
différents enrichit la réflexion à tous les stades du copyleft et non copyleft. Le copyleft, par une méthode de développement qui offre de
développement du projet. Par ailleurs, la opposition au copyright, indique que quiconque nombreux avantages, et qui a de plus en plus la
communauté est un élément essentiel du bouche redistribue le logiciel avec ou sans modifications faveur des développeurs, mais aussi des entreprises
à oreille, qui représente souvent le meilleur moyen doit aussi transmettre la liberté de copier et de qui n’hésitent plus à recourir à ce type de produit.
de faire connaître son projet et de le promouvoir. modifier ce logiciel. Autrement dit, toute S’il soulève encore des interrogations en termes de
Aussi il est essentiel d’assurer une redistribution ou réutilisation du code hérite des licence et de modèle économique, il apparaît
communication de qualité auprès et au sein de contraintes de la licence initiale. Parmi les comme une solution d’avenir, et son utilisation ainsi
celle-ci, la tenir régulièrement à jour des licences copyleft, la GPL (General Public License) que son intégration dans le paysage informatique
évolutions, ambitions (roadmap) et éventuelles est la plus utilisée. Elle donne la liberté sur un sont amenées à croître encore.
difficultés du projet. Réciproquement il faut être à logiciel de l’exécuter, de l’étudier, de redistribuer,
l’écoute des contributions qui sont l’atout majeur de le copier et de faire bénéficier à la Faouzi Chaachoua et Ibrahim Fofana,
de l’open source. Ce travail de liaison permanent communauté des versions modifiées. Parmi les développeurs web à l’ETNA

30 Programmez! < Juin 2014


027_032_175 19/05/14 21:41 Page31

Le projet open source MVVM Light Toolkit


Le MVVM Light Toolkit est un
projet open source très utilisé
dans le monde .NET
(XAML/C#). Il rencontre une
grande popularité due en
grande partie à sa simplicité
d’utilisation et le fait qu’il n’essaie pas de résoudre tous les problèmes
mais qu’il se concentre seulement sur certains d’entre eux.
Cet article n’est pas une présentation de MVVM En plus du site public sur CodePlex, j’utilise un liser la licence WTFPL ([Link] mais
Light en soi, mais plutôt une discussion sur la repo prive hébergé par BitBucket. C’est en fait ai quand même opté pour une licence moins
création et sur certains choix faits dans le cadre le repository sur lequel je travaille à de nouvelles controversée…
de ce projet. fonctions pour les versions futures de MVVM En gros, la licence MIT reflète ce qui est pour
Light. Quand je publie une version, je merge le moi l’essence de l’open source : partager son
La genèse repo de BitBucket et le repo de CodePlex. Cela savoir et son travail en encourageant les autres
MVVM Light n’a pas été créé au début comme peut paraître compliqué, mais étant un perfec- à utiliser et modifier le code suivant leurs
un projet open source, mais plutôt comme une tionniste, j’apprécie la possibilité de travailler à besoins spécifiques. La licence MIT demande
librairie pour construire des exemples pour mon de nouvelles fonctions de manière un peu « l’attribution, ce qui me parait être la moindre des
blog ([Link] En effet je souhai- cachée » jusqu’à ce que je me sente prêt à choses. Cela dit, n’ayant pas de moyens juri-
tais avoir une fondation sur laquelle je puisse ouvrir le code au public. diques, même cette clause est impossible à
construire des exemples progressivement plus Les deux repositories (CodePlex et BitBucket) vérifier, et donc je n’attache pas une importance
complexes. Apres avoir montré le code à plu- sont gratuits et j’utilise TortoiseHg pour l’accès, monumentale à ce fait.
sieurs amis de la communauté Windows Pre- qui est un excellent programme également gra-
sentation Foundation (une plateforme pour tuit. Les fruits du travail
construire des applications desktop pour Win- Bien que je ne gagne pas d’argent de manière
dows en 2009), ils ont tous été intéressés à voir Les outils directe avec MVVM Light, j’ai grandement profi-
une version de production. J’ai donc remis l’ou- Pour développer MVVM Light, j’utilise Visual té du travail effectué. Tout d’abord, en termes
vrage sur le métier avec l’aide de quelques-uns Studio pour lequel j’ai la chance d’avoir une de réputation dans la communauté et d’expé-
d’entre eux, et ai publié la version 2 quelques licence gratuite, étant un « Most Valuable Pro- rience, les 5 dernières années ont été fantas-
semaines plus tard. C’était donc un effort col- fessional » Microsoft. Cela dit, la plupart des tiques. J’ai eu la chance d’être invité à de
lectif depuis le début. fonctions de Visual Studio que j’utilise pour nombreuses conférences internationales, de
Peu de temps après, j’ai publié une version pour MVVM Light sont disponibles dans Visual Stu- contribuer à des publications telles que MSDN
Silverlight, qui a été très bien reçue par la com- dio Express, qui est disponible gratuitement Magazine, et je publie en Mai 2014 un cours
munauté. De même, quand Windows Phone a pour tout développeur. Donc a priori il est parfai- chez Pluralsight dédié à MVVM Light. Ces
été créé par Microsoft, MVVM Light a très vite tement possible de développer une plateforme quelques activités sont en partie rémunérées.
été disponible, et plus tard pour les applications open source pour l’écosystème Microsoft sans J’ai aussi un bouton « donations » sur le site
Windows 8 « Store ». Aujourd’hui, MVVM Light frais. [Link], mais il faut bien reconnaitre que
supporte toutes les plateformes qui utilisent presque personne n’utilise cette option.
XAML/C# (y compris XBOX) et je prépare une La licence Cela dit, il va de soi que le plus grand plaisir est
version pour Android et iOS via Xamarin. C’est J’ai décidé de distribuer MVVM Light sous la de partager le savoir, d’étendre ce savoir en
donc vraiment une librairie « cross-platform ». licence MIT. Il s’agit d’une des licences les plus communiquant avec la communauté, et de ren-
permissives qui soit. Je n’ai jamais été un fan contrer des utilisateurs heureux dans le monde
Pourquoi CodePlex ? des licences restrictives populaires et compli- entier.
Le site CodePlex est un lieu habituel et bien quées telles que GPL. Pour moi, ce type de J’espère que cet aperçu des coulisses de
connu pour abriter des projets de la communau- licence contribue à expliquer pourquoi nous MVVM Light vous aura éclairé sur les motiva-
té Microsoft, et donc c’était un choix logique n’avons pas plus de projets open source, et tions de ce projet et vous encouragera d’une
pour MVVM Light. En 2009, GitHub en était à pourquoi beaucoup préfèrent éviter d’utiliser part à visiter sa page, et peut être à l’utiliser
son enfance et donc encore peu utilisé. De plus ces librairies dans leurs applications. Le simple dans un projet, mais surtout à contribuer aussi à
CodePlex offre la possibilité d’utiliser Mercurial fait que la licence GPL prenne plusieurs pages un ou plusieurs projets open
pour le source control, ce qui me convient montre bien qu’elle est tout simplement inutili- source dans votre langage
mieux (Mercurial offre aussi le source control sable par des programmeurs comme vous et préféré.
déconnecté, mais a l’avantage d’être plus facile moi qui n’avons pas des armées d’avocats pour
à utiliser que Git, surtout quand il n’y a que peu nous défendre. En fait, j’ai même considéré
de développeurs travaillant sur un projet). presque de manière sérieuse la possibilité d’uti- Laurent Bugnion

Juin 2014 > Programmez! 31


027_032_175 19/05/14 21:41 Page32

Rendre son projet open source


avec Github
Souvent le passage à l'acte de rendre Fig.A communauté autour de ce projet. Pour
son projet open source se heurte à cela plusieurs choses peuvent faciliter
une difficulté : comment faire l’adhésion des utilisateurs et des
réellement. Pour cela plusieurs développeurs à notre projet :
solutions existent dont fait partie ◗ La prise en compte des retours et des
l'utilisation d'un gestionnaire de besoins utilisateurs, avec la mise en place
source centralisé comme GitHub. d’un « release early, release often », qui,
L'intérêt majeur de ce genre de en résumé veut dire qu’il vaut mieux
solution est qu'elle permet publier tôt et souvent pour que les
d'héberger gratuitement l'intégralité utilisateurs voient que le projet évolue,
du code source de son projet, mais mais aussi puissent vous faire rapidement
aussi d'utiliser un ensemble d'autres Illustration 1 : Création d’un repository sur GitHub des retours, et orienter les décisions à
outils disponibles comme les pages Fig.B prendre pour que le projet continue à être
de wiki, pratiques pour la utilisé. La liste des Issues de GitHub doit
documentation du projet, ou les donc être revue régulièrement, et des
systèmes de gestion de tickets qui réponses doivent être apportées à
permettent de gérer les remontées chaque demande, même si c’est pour dire
de bug. GitHub étant un système que cela n’est pas possible pour l’instant,
basé sur la gestion versionnée de Illustration 2 : Ajout du fichier du projet mais que cela pourra être fait plus tard,
source Git, il faudra commencer par ou que vous soyez prêt à accepter un
installer Git sur le poste des développeurs. des tickets pour les débutants, les patch ajoutant cette fonctionnalité.
Pour cela GitHub fournit un mode d’installation conventions de codage, etc. ◗ La rédaction de la documentation est à deux
pour les 3 systèmes d’exploitation : Une fois ces trois fichiers mis en place, il reste niveaux : pour les utilisateurs, car quoi de plus
[Link] à créer le dépôt sur Github et à l’utiliser pour frustrant qu’un logiciel qui pourrait répondre à
Une fois Git installé, il est nécessaire de se stocker le code du projet. Une fois identifié sur un besoin, mais qu’on ne sait pas utiliser et qui
créer un compte sur GitHub en se rendant à Github, voici à quoi ressemble la page de n’est pas documenté ? En effet, la
l’adresse : [Link] Sur GitHub, création d’un repository (espace de stockage documentation à destination des développeurs
chaque personne peut avoir un rôle différent : pour un projet) : Fig.A. permettra également d’attirer des contributeurs
◗ Owner : propriétaire du projet, c’est lui qui Une fois le repository créé, nous pouvons faire pour votre projet. Pour cela le wiki de GitHub
initialise le projet et qui attribue les rôles à un git clone en local : est un outil formidable, et n’hésitez pas à

% ' 1 !*-,# & 1 1 .0 % ' 1 & 2 !-+ 3 ,# 00


d’autres membres de l’équipe, demander à vos utilisateurs s’ils peuvent
◗ Mainteners and collaborateurs : personnes
)-3 *0)5 /-% / ++# 6 ' 1 2 % ' 1 & -+# /-
contribuer (ne serait-ce que pour corriger les

% / ++# 6 ' 1 2
maintenant le projet, et qui le gèrent, fautes d’orthographe des pages), cela permet
◗ Contributors : développeurs qui proposent du code, qu’ils soient mis en valeur et en fera des
◗ Community members : utilisateurs actifs du La copie effectuée en local, les fichiers du community members actifs.
projet comme ceux qui vous remontent projet sont ajoutés dans le répertoire ◗ Les présentations du projet lors de
régulièrement des bugs ou qui écrivent la nouvellement cloné, puis les fichiers de notre conférences, la publication de fiche dans des
documentation projet sont ajoutés au repository de GitHub : annuaires logiciels ou d’articles de blog, par

% ' 1 ""
exemple. Celles-ci peuvent être faites par le

% ' 1 !-++' 1 + (-2 1 "# 0 $ ' !& ' # /0 "2 ./-(# 1


Le code et les propriétaire ou un des mainteneurs du projet,

% ' 1 .2 0& -/' % ' , + 01 # /


fichiers nécessaires mais aussi plus simplement par ses utilisateurs,
Une fois ces rôles identifiés au sein de l’équipe, quoi de mieux qu’une communication
le propriétaire peut donc commencer à publier Et nous voyons bien apparaître nos fichiers sur d’utilisateur déjà convaincus à d'autres
sur GitHub. Toutefois, 3 fichiers sont très utiles le répertoire distant de GitHub : Fig.B. potentiels utilisateurs ? Le projet est maintenant
pour rendre votre projet open source : Maintenant que le code est en ligne, il reste prêt à se développer, bon courage à tous et
◗ [Link] : explique l’objectif et les plusieurs choses à faire : documenter le projet, n’oubliez pas comme le dit si bien Framasoft : «
fonctionnalités de votre projet, peut aussi et surtout le faire connaître et le maintenir. La route est longue, mais la voie est libre ! ».
servir de document du projet, c’est par là que
l’on conseille aux utilisateurs de commencer Communiquer sur son projet : Vanessa Kovalsky David,
lorsqu’ils téléchargent un projet un enjeu important dans Lead développeuse Drupal /PHP chez Webnet
◗ Licence : fichier qui précise la licence l’open source [Link]
d’utilisation du projet Une fois le code mis en ligne avec la licence, Membre actif de DrupalFr, et de la promotion
◗ Contributing : fichier expliquant la manière de l’objectif principal va être de faire connaître son du logiciel libre avec l’ALDIL
contribuer au projet par exemple : où projet pour attirer des utilisateurs et des Lead dev sur le projet Esecouristes :
commencer, les tags à utiliser dans la liste développeurs, et pouvoir créer une [Link]

32 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:58 Page33

b
Un code pour les
gouverner tous !
Aujourd’hui, il existe clairement 3 plates-
formes : Android, iOS, Windows Phone.

10-13-10 © mstay (tornade)


D’autres tentent l’aventure, telle que Firefox
OS. Dans ce dossier, nous allons vous faire
découvrir à partir de ce numéro le Nokia X
qui a beaucoup agité la communauté des
développeurs Windows Phone, nous
explorerons les dernières évolutions de
Firefox OS, sans oublier les nouveautés de
Windows Phone 8.1. Le développeur est un
des enjeux des constructeurs et éditeurs : il
faut alimenter les App Store.

Dans ce dossier, nous nous focaliserons sur le


développement multi-plateformes, c’est-à-dire sur
les différentes plates-formes mobiles, à partir d’un
code source unique. Nous avons opté pour les
outils Xamarin qui permettent de générer du code
pour les différents systèmes mobiles, à partir d’un
code C# unique. L’avantage est
d’être proche du code natif
spécifique à chaque plate-
forme. Bien entendu, vous
n’allez pas générer 100 % du
code Objective-C ou Android,
mais vous irez bien plus vite
dans vos développements.

Bon code.
08-06-13 © whanwhanai (usine)

La rédaction.

Juin 2014 > Programmez! 33


033_054v2_175 19/05/14 23:59 Page34

Natif vs HTML 5, un marché élargi :


le casse-tête du développeur Web
b

Aujourd’hui, le marché mobile est très éclaté,


mais au niveau mondial, la domination d’Android
et de iOS est sans partage. Windows Phone est
clairement la 3e plateforme mobile avec une
forte poussée dans plusieurs pays. Se posent
alors pour le développeur plusieurs questions :
comment supporter les 3 principaux systèmes,
choisir entre code natif et HTML 5, smartphone
et/ou tablette ?
Les rapports de l’éditeur Appcelerator, avec le lièrement, on voit
cabinet IDC, fournissent des éléments intéres- apparaître de nou-
sants à ne pas négliger. velles tendances, de nouvelles technologies, cherchent souvent des développeurs multi-pla-
certaines disparaîtront en quelques mois, teformes.
Faut-il réellement opposer d’autres resteront. Ainsi, si nous connaissons Bien plus que le développeur orienté desktop,
code natif et code non le dernier rapport Appcelerator /IDC, les pré- le développeur mobile exige cette polyvalence
natif ? dictions (d’après les remontées des dévelop- par nature, ou doit être capable d’être opéra-
Ce débat n’est pas nouveau. Même si le code peurs interrogés) pour 2014 : tionnel sur une nouvelle plateforme en
non natif (typiquement HTML 5 + JavaScript + ◗ iOS dans la voiture : ça tombe bien, Apple a quelques jours. Il y a 2 ans, il pouvait se per-
CSS) a fait des progrès sur les performances et sorti une édition spécifique, mettre d’être iOS ou Android ou les deux. La
l’accès aux API natives, et donc aux différents ◗ Google Glass, maturité de Windows Phone impose une 3e
composants matériels d’un terminal mobile, il ◗ Windows Phone : même si 50,2 % estiment plate-forme.
reste encore en retrait sur ces deux points, car que ce n’est pas une priorité.
tout n’est pas accessible. Le W3C met en Mais finalement, l’intérêt technologique va Cette approche multi-systèmes vous permettra
avant l’Open Web Platform avec un ensemble aussi dépendre de vos apps et si elles doivent aussi d’être agile et de vous adapter à toutes
dédié aux mobiles. Et cela impose aussi des utiliser des fonctions matérielles très récentes. les situations. Par contre, cela impose aussi
tests de compatibilité pour les développeurs, On abeaucoup parlé de NFC, de technologies une grande variété de matériels pour les tests
notamment à chaque itération système et vocales, mais sont-ce des fonctions utilisées et plusieurs postes de développement.
matérielle. dans la vraie vie ?
HTML 5 n’est pas supporté de manière homo- Côté salaire, une étude d’Urban Linker
gène par les navigateurs mobiles, ce qui pose- Par contre que cela ne vous empêche pas indique :
ra aux développeurs une grande rigueur dans d’être curieux et d’expertiser les nouveautés ◗ débutant (— 1 an expérience) :
le développement (sur les fonctions à utiliser) de toutes les plates-formes. 35-38 000 !
et dans les tests. Pour en savoir plus : Une tendance qui s’affirme : l’utilisation d’un ◗ jusqu’à 2 ans d’expérience :
[Link] back-end Cloud pour les applications mobiles. 38 – 42 000 !
Cependant, les wrappers se multiplient pour De plus en plus de services Cloud (stockage, ◗ au-delà : de 42 à 60 000 !selon la compéten-
permettre un accès de plus en plus large aux sécurité, vidéo, authentification) proposent des ce et l’expérience
API natives. Et le modèle hybride HTML 5 – fonctions spécifiques aux mobiles.
natif peut être une solution intéressante à Nous estimons que le salaire de départ est sur-
condition d’avoir un accès suffisant aux API, ce Un développeur mobile coté ce qui ne reflète pas forcément la réalité
qui est parfois loin d’être le cas, notamment sur doit être capable de coder du terrain où vous serez plus proche de la
Android. partout ! rémunération standard du développeur
La portabilité du code est souvent mise en Soyons clairs : un développeur mobile qui se 28-33 000 !. Il n’y a pas forcément de surcote à
avant, mais encore une fois si vous cherchez la limite à une plateforme devrait se remettre en cause de la spécialisation mobile sauf à avoir
performance et l’accès complet aux API, le question immédiatement. un profil pointu et expert.
développement natif reste incontournable. Sauf à être un dieu du code et avoir une parfai-
te maîtrise de sa plateforme, le développeur Lien à lire :
Considérer les évolutions mobile a vocation à passer d’Android, à iOS ou HTML 5 vs Native Code : [Link]
et des tendances, mais à Windows Phone sur le même projet et dans [Link]/downloads/can-html5-compete-nati-
se méfier des prédictions la même journée. ve/
Les smartphones et tablettes évoluent réguliè- Il ne doit surtout pas être monosystème, mais
rement ainsi que les systèmes mobiles. Régu- très ouvert. Les éditeurs de jeux par exemple François Tonic

34 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page35

Windows Phone 8.1 : what’s new ?

b
Lors de la Build 2014, Microsoft a dévoilé en grande pompe la nouvelle version de Windows
Phone 8.1, très attendue par ses utilisateurs. Les nouveautés sont nombreuses et touchent la
quasi-totalité des fonctions du téléphone. Il serait trop long de tout détailler en un seul article, nous
allons donc vous montrer, selon nous, les plus significatives : le centre de notifications, l’assistant
personnel Cortana, IE11 … Et nous finirons par un aperçu des nouveautés côté développement.
Principales nouveautés mode navigation privée. Pour finir, on peut épingler son site sur l’écran
Avec cette nouvelle mouture, Microsoft a avant tout écouté ses utilisa- d’accueil avec une tuile dynamique ([Link]
teurs et a rajouté des fonctionnalités issues de ses concurrents comme le Je soulignerai également le nouveau mode de saisie du clavier baptisé
« centre de notifications » (Fig.1) qui permet d’accéder à différents « word flow » qui permet d’écrire des messages en glissant le doigt sur le
réglages comme le wifi, le bluetooth ou encore le mode avion et bien évi- clavier. Après un peu d’apprentissage, on accélère sensiblement le
demment aux notifications mails, sms, facebook. Le plus intéressant est temps de saisie d’un message ou d’un mail.
que ce centre de notifications est complétement paramétrable par l’utili- Côté Entreprise, le support du VPN arrive enfin, et permet de se connec-
sateur conformément à la stratégie de Windows Phone. ter aux serveurs de son entreprise de manière sécurisée.
Côté look & feel, on notera la possibilité d’afficher trois colonnes sur
l’écran Start (Fig.2), même à partir d’un Nokia Lumia 920, téléphone utili- Cortana : l’assistant personnel
sé pour tester WP8.1. Cette option était auparavant réservée aux télé- La nouveauté qui a fait le plus parler d’elle est Cortana ! Cet assistant per-
phones à grand écran comme le Nokia Lumia 1320. Les tuiles sont à sonnel (Fig.3) vient concurrencer Siri d’Apple et Google Now. Son nom
présent transparentes et l’utilisateur peut définir une image en fond est issu de l’intelligence artificielle du jeu Halo.
d’écran à partir de ses photos. Cortana est capable d’effectuer des recherches sur l’intégralité de votre
Internet Explorer a également droit à son lot de nouveautés avec la possi- smartphone mais également d’agir, comme par exemple de créer une
bilité de lire les vidéos directement sur la page web sans passer par le nouvelle tâche. Cortana utilise en tâche de fond Bing pour vous fournir du
mode plein écran. contenu adapté à votre demande mais surtout Cortana va apprendre en
Le mode Lecture apporte du confort à l’utilisateur, principalement pour fonction de vos habitudes ! Les premiers tests sont plutôt concluants,
les sites non optimisés, accompagné du swype pour revenir à la page même si vous devez avoir pour l’instant un bon accent anglais, elle (Joe
précédente en déplaçant le doigt vers la droite. On peut désormais télé- Belfiore utiliser « her » pour parler de Cortana) ne sera disponible en fran-
charger un fichier, mémoriser ses mots de passe, ouvrir une page en çais qu’en 2015.

Fig.1 Fig.2 Fig.3

Juin 2014 > Programmez! 35


033_054v2_175 19/05/14 23:59 Page36

Le point le plus différenciant de ses concurrents est la possibilité de Gérer l’activation de la voix. Dès que Cortana a reconnu votre application
connecter vos propres applications à Cortana pour enrichir ses réponses dans les propos de l’utilisateur accompagnée d’une commande préala-
b

grâce à la mise à disposition d’API pour les développeurs. blement enregistrée, les paramètres sont passés à une page de votre
Dès maintenant Microsoft a mis en ligne un exemple d’applications utili- application indiquant la commande vocale reconnue et l’ensemble du
sant Cortana, il s’agit de « MSDN Voice Search for Windows Phone 8.1 », texte.
téléchargeable à l’adresse : [Link]
FHEJ ;9J ;: EL;HH?:; LE?: )D(7 L?=7 J ;:.E -OIJ ;C 1?D:EMI (7 L?=7 J ?ED
Comment fonctionnent les API Cortana ? (7 L?=7 J ?ED L;DJ H=I ;
D’un point de vue « high level », pour intégrer les API Cortana à son appli- Q
cation, le développeur doit définir trois éléments (Fig.4) : 87 I; )D(7 L?=7 J ;:.E ;
Définir les commandes vocales « voice commands » que l’application doit ?< ; (7 L?=7 J ?ED'E:; -OIJ ;C 1?D:EMI (7 L?=7 J ?ED (7 L?=7 J ?ED
supporter dans un fichier XML. Ces commandes doivent inclure des pat- 'E:; (;M
terns de phrases comme « Skype, Call [contact_name] ». Ces com- Q
mandes contiennent des informations complémentaires notamment IJ H?D= H;9E.;NJ DKBB 1>7 J :?: J >; KI;H I7 O ; = '- (
comment l’application doit être lancée, et ce que l’utilisateur doit voir U!?D: 1?D:EMI *>ED; 0E?9; ECC7 D:IV
pendant le chargement de ladite application. (7 L?=7 J ?ED EDJ ;NJ +K;HO-J H?D= .HO";J 07 BK; UH;9EV EKJ H;9E
.;NJ
NCB L;HI?ED V V ;D9E:?D= VKJ < V IJ H?D= LE?9; ECC7 D:(7 C; DKBB 1>?9> 9ECC7 D: M7 I H;9E=D?P;:
0E?9; ECC7 D:I NCBDI V>J J F I9>;C7 I C?9HEIE<J 9EC LE?9;9ECC7 D:I V ?D J >; 0 2'& <?B; ; = U!?D:.;NJ V
ECC7 D:-;J NCB B7 D= V;D KIV (7 C; V;D=B?I> ECC7 D:IV (7 L?=7 J ?ED EDJ ;NJ +K;HO-J H?D= .HO";J 07 BK; ULE?9; ECC7 D:
(7 C;V EKJ LE?9; ECC7 D:(7 C;
ECC7 D:*H;<?N '- ( ECC7 D:*H;<?N IJ H?D= I;7 H9>.;HCI DKBB 1>7 J :?: J >; KI;H I7 O <EH
N7 CFB; #EM :E $ 7 :: 0E?9; ECC7 D:I J E CO 7 FFB?97 J ?ED N7 CFB; D7 C;: F>H7 I; J EF?9 EH B?IJ UIBEJ IV ; = U1?D:EMI *>ED; 0E?9;
ECC7 D:IV
ECC7 D: (7 C; V!?D:.;NJ V (7 L?=7 J ?ED EDJ ;NJ +K;HO-J H?D= .HO";J 07 BK; U:?9J 7 J ;:-;7 H9>
N7 CFB; !?D: $ DIJ 7 BB 0E?9; ECC7 D: -;J I N7 CFB; .;HCIV EKJ I;7 H9>.;HCI
& ?IJ ;D!EH -;7 H9> & ?IJ ;D!EH IM?J 9> LE?9; ECC7 D:(7 C; 1>7 J 9ECC7 D: B7 KD9>;: J >; 7 FF
& ?IJ ;D!EH -;7 H9> <EH Q:?9J 7 J ;:-;7 H9>.;HCIS & ?IJ ;D!EH Q
& ?IJ ;D!EH !?D: & ?IJ ;D!EH 97 I; U!?D:.;NJ V
& ?IJ ;D!EH !?D: Q:?9J 7 J ;:-;7 H9>.;HCIS & ?IJ ;D!EH #7 D:B;!?D:.;NJ I;7 H9>.;HCI
!;;:87 9A -;7 H9> ED '- ( !;;:87 9A 8H;7 A
(7 L?=7 J ; .7 H=;J V'7 ?D*7 =; N7 CBV 97 I; UDBF ECC7 D:V
ECC7 D: #7 D:B;(BF ECC7 D: H;9E.;NJ
W 8H;7 A
S
Enregistrer le fichier XML contenant les commandes vocales lors du S
démarrage de l’application. Ces commandes peuvent bien sûr être mises S
à jour ensuite, mais vous devez « installer » les commandes au premier
démarrage de l’application. Dans le prochain numéro de programmez!, nous vous montrerons en
détail ces API.
FH?L7 J ; 7 IOD9 LE?: ,;=?IJ ;H0E?9; ECC7 D:I Cortana devrait arriver également sur les autres plateformes de Micro-
Q soft, à savoir Windows 8 et Xbox.
-#)/& * ,!),' /( , .,3 . #
/H? KH?0E?9; ECC7 D:I D;M /H? UCI 7 FFN L9: NCBV /H?% ?D: Application universelle
7 M7 ?J 0E?9; ECC7 D:-;HL?9; $ DIJ 7 BB ECC7 D:-;J I!HEC!?B; IOD9 et Windows Runtime
KH?0E?9; ECC7 D:I L’un des changements majeurs de cette nouvelle version de Windows
S Phone est le support des applications universelles. Avec cette nouveauté,
il devient possible de faire tourner son application sur Windows via une
Windows App et bientôt sur Xbox
One. Et l’impact sur la partie dévelop-
pement est important puisque ce
changement se base sur le support
d’un nouveau Framework : le Win-
dows Runtime.
Sachant que les applications tournant
sur la version 8.0 de l’OS mobile utili-
sent une version adaptée de Silver-
light, la question qui vient
immédiatement à l’esprit concerne la
Fig.4 migration vers cette nouvelle platefor-

36 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page37

me. Microsoft n’abandonne pas pour autant Silverlight et permet une ment consultable dans le centre de notification. On peut également lui
transition en douceur en proposant une version 8.1 de ce Framework. Il donner une date de péremption. Lorsque cette date sera dépassée, elle

b
est donc très facile de mettre à jour une application existante. De plus Sil- disparaitra du centre de notification.
verlight 8.1 supporte quelques fonctionnalités (copier/coller, personnali-
sation du fond d’écran de l’écran de verrouillage, alarmes et rappels, etc.) J E7 IJ -KFFH;II*EFKF J HK;
qui ne sont pas encore présentes dans le Windows Runtime. J E7 IJ NF?H7 J ?ED.?C; 7 J ;.?C;)<<I;J /J 9(EM ::-;9ED:I
Lors de la mise à jour ou création de votre application il faudra donc faire
un choix : opter soit pour Silverlight 8.1, soit pour Windows Runtime, cha- Password Vault
cun ayant ses avantages et ses inconvénients. Une autre nouveauté disponible est la possibilité de stocker de façon
En ce qui concerne Silverlight, l’utilisation de ce Framework permet d’ex- sécurisée les différents noms d’utilisateur et mots de passe utilisés par
ploiter toutes les capacités de l’OS et facilite la mise à jour d’une applica- l’application. En effet plutôt que de stocker ces informations dans les
tion existante. paramètres, vous pouvez utiliser la classe PasswordVault comme le
De son coté, Windows Runtime permet de créer des applications univer- montre l’exemple ci-dessous :
selles facilement. Il convient donc d’étudier attentivement ces deux
options afin de prendre la bonne décision. *7 IIMEH:07 KBJ L7 KBJ D;M *7 IIMEH:07 KBJ
*7 IIMEH: H;:;DJ ?7 B 9H;:;DJ ?7 B D;M *7 IIMEH: H;:;DJ ?7 B
Nouveauté sur le développement H;IEKH9; /I;H .;NJ *7 IIMEH: *7 IIMEH:
d’application L7 KBJ :: 9H;:;DJ ?7 B
Nous allons maintenant étudier quelques concepts existants dont l’implé-
mentation change avec l’utilisation de Windows Runtime. L’ensemble Les données sont alors stockées de façon permanente et cryptée. On
des exemples qui vont suivre sont issus d’une application disponible à peut par la suite les récupérer pour les utiliser. Il faudra néanmoins bien
l’adresse suivante : veiller à gérer les exceptions lors de la récupération, car si aucun mot de
[Link] passe n’est trouvé, la méthode « Retrieve » lèvera une exception pour le
notifier.
Les notifications Toasts
La première étape avant de pouvoir utiliser les notifications et de modifier J HO
le [Link] du projet en sélectionnant oui dans la rubrique Q
« Toast capable » : $ ,;7 :)DBO& ?IJ *7 IIMEH: H;:;DJ ?7 B 9H;:;DJ ?7 B L7 KBJ !?D:
BB O,;IEKH9; H;IEKH9;

<EH;7 9> *7 IIMEH: H;:;DJ ?7 B F9 ?D 9H;:;DJ ?7 B


Q
,;J *7 IIMEH: .;NJ L7 KBJ ,;J H?;L; H;IEKH9; F9 /I;H(7 C;
*7 IIMEH:
Voici ci-dessous le code qui permet de générer une notification. Comme S
on peut le constater, la création d’un toast se base sur l’utilisation d’une S
structure XML qui sert à décrire ses différentes propriétés. Pour changer 97 J 9> N9;FJ ?ED
le texte par exemple, il suffit de modifier le contenu XML pour y insérer Q
son message : ,;J *7 IIMEH: .;NJ U K9KD CEJ :; F7 II; J HEKLT V
S
2CB E9KC;DJ NCB .E7 IJ (EJ ?<?97 J ?ED'7 D7 =;H ";J .;CFB7 J ; EDJ ;DJ
.E7 IJ .;CFB7 J ;.OF; .E7 IJ $ C7 =; D:.;NJ Geofencing, Tiles & Badges
L’application de démonstration comporte également d’autres nouveau-
2CB(E:;& ?IJ J ;NJ I NCB ";J B;C;DJ I O.7 =(7 C; UJ ;NJ V tés qui ne sont pas décrites dans cet article. Je vous laisse donc les
J ;NJ I4 5 FF;D: >?B: NCB H;7 J ;.;NJ (E:; U ;I9H?FJ ?EDV découvrir en parcourant le code disponible sur Git Hub.

L7 H J E7 IJ D;M .E7 IJ (EJ ?<?97 J ?ED NCB Next…


Pour conclure, Windows Phone 8.1 enrichit dans le bon sens l’OS mobile
.E7 IJ (EJ ?<?97 J ?ED'7 D7 =;H H;7 J ;.E7 IJ (EJ ?<?;H ->EM J E7 IJ de Microsoft qui essaie de rattraper son retard commercial sur ses
concurrents. En tout cas, les développeurs peuvent d’ores et déjà s’en
Il y a quelques nouveautés liées à la présence du centre de notification. donner à cœur joie et, grâce à la version preview, commencer à dévelop-
La première est la gestion de l’historique. Il est désormais possible de per les applications « nouvelles générations ».
gérer ce dernier en effaçant toutes les notifications en attente :
Michel Hubert
.E7 IJ (EJ ?<?97 J ?ED#?IJ EHO >?IJ EHO .E7 IJ (EJ ?<?97 J ?ED'7 D7 =;H Manager | MVP Azure chez Cellenza
#?IJ EHO Cellenza - Software Development Done Right
>?IJ EHO B;7 H
Pierre-Henri Gache
Il est également possible d’envoyer une notification sans afficher de pop- Consultant Senior chez Cellenza
up, grâce à la propriété SuppressPopup. La notification sera alors unique- Cellenza - Software Development Done Right

Juin 2014 > Programmez! 37


033_054v2_175 19/05/14 23:59 Page38

Porter une application


Android existante sous Nokia X
b

Dévoilée en ce début d’année, vices Google présents sur les smartphones Fig.1
la plateforme Nokia X est la Android. On retrouve ainsi Nokia In-App Pay-
ment pour la gestion des achats in-app, l’API
première tentative de Nokia HERE Maps permettant d’utiliser la solution de
dans l’univers Android. cartographie HERE Maps, et Nokia Notifica-
Destinée à se positionner sur tions qui autorise l’envoi de notifications Push
au sein des applications Nokia X. Les dévelop-
l’entrée de gamme, la peurs Android habitués à l’OS de Google auront
plateforme Nokia X se base sur tout de suite fait le rapprochement avec les ser-
le projet Open Source Android vices de Google suivants : Google In-App
Billing, Google Maps et Google Cloud Messa-
(AOSP) que Nokia a customisé ging (GCM). Architecture Nokia X
pour l’adapter à ses fins. Le
résultat est une plateforme qui Compatibilité tion existante. Cet outil est accessible ici :
Du fait de son architecture, la plateforme Nokia [Link] . Cepen-
propose une compatibilité forte X est compatible avec près de 75% des appli- dant, il convient de rester prudent car cet outil
avec les applications Android cations Android existantes. Pour ces dernières, semble se baser principalement sur le contenu
existantes afin de limiter les aucune modification ne sera à effectuer et elles du manifest Android et des permissions décla-
pourront être publiées en l’état sur le store rées pour vérifier si une application utilise des
efforts de portage des Nokia X. Les principales sources d’incompatibi- services Google. Ainsi, une application propo-
développeurs Android et de lité étant liées aux applications reposant sur sant un Live Wallpaper passe ce test mais ne
favoriser l’essor de son store des services propriétaires de Google tels que pourra pas être compatible étant donné que le
Google In-App Billing, Google Maps et GCM. smartphone Nokia X ne supporte pas cette
d’applications Nokia X. Dans Pour celles-ci, il est nécessaire de modifier leur fonctionnalité.
cet article, nous nous code en remplaçant les APIs Google par les En considérant une implémentation du jeu
proposons de détailler les APIs Nokia équivalentes. Il est bon de souligner phare du moment 2048 disponible sur le
toutefois que ces applications pourraient être Google Play Store
différentes étapes à suivre pour publiées sur le Nokia Store mais bien évidem- ([Link]
porter une application Android ment ne seraient pas pleinement fonctionnelles saurel.puzzle2048) et recourant aux achats in-
existante sous Nokia X. ce qui serait très pénalisant pour l’utilisateur et app via la solution de Google, l’analyse de la
la réputation du développeur. compatibilité avec Nokia X rend le résultat pré-
L’annonce de Nokia X aura pu paraître assez Le processus d’analyse de la compatibilité senté à la figure 2.
surprenante de prime abord. En effet, le rachat d’une application Android existante sur la plate-
récent de Nokia par Microsoft semblait lier le forme Nokia X est facilité par la mise à disposi- L’utilitaire remarque la déclaration de la permis-
destin de Nokia uniquement à l’OS Windows tion par Nokia d’un utilitaire en ligne analysant sion [Link] et propose
Phone. Néanmoins, le projet Nokia X était en un APK de manière statique, permettant d’obte- donc d’utiliser Nokia In-App Payment à la place.
route depuis de longs mois et son positionne- nir un aperçu de la compatibilité d’une applica- Dans tous les cas, il est préférable de tester

Fig.2
ment a du sens puisqu’il vise avant tout un mar-
ché d’entrée de gamme là où la gamme Lumia
se positionne sur le milieu et le haut de gamme.

Architecture Nokia X
Le résultat du travail de Nokia est une platefor-
me Android adaptée à l’univers du géant Finlan-
dais. Nokia X se base sur la version 16 de
l’AOSP, ce qui implique que la plateforme sup-
porte la version 4.1.2 d’Android (figure 1).
Le projet Open Source Android correspond à la
version Android utilisée massivement par les
smartphones Android et développée par
Google notamment à cela près qu’elle ne com-
porte aucun des services propriétaires de
Google. Sur cette base, Nokia a ajouté ses ser- Analyse
vices propriétaires qui sont le pendant des ser- de la compatibilité

38 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page39

ensuite son application de manière dynamique priori. La phase de remplacement des services Nokia. L’application va alors être validée a priori
soit sur un terminal Nokia X physique soit via le Google par les services Nokia X équivalents et rentrée en phase de QA où des équipes

b
service de Remote Device Access (RDA) propo- peut donc être évitée ici. Une fois le lien au dédiées vont effectuer un certain nombre de
sé gratuitement par Nokia sur son site : store de Google retiré, pour la présentation tests. Ce point est très important puisqu’il per-
[Link] d’une popup d’évaluation de l’application rediri- met, à l’instar de ce que propose Samsung sur
access . geant vers le Play Store, on peut générer l’APK son store, d’avoir une vraie phase de qualifica-
Enfin, le développeur Android découvrira avec de Live Weather à destination de la plateforme tion gratuite et renvoyant un rapport de test pré-
plaisir que les APIs spécifiques proposées par Nokia X. La troisième étape consiste ensuite à cis sur les problèmes éventuellement
Nokia se calent très précisément sur les APIs tester l’application en condition réelle sur Nokia X rencontrés. Idéal pour corriger d’éventuels pro-
exposées par les services de Google ce que ce soit via le service RDA de Nokia ou sur blèmes grossiers avant que les utilisateurs ne
qui doit réduire le travail de portage spécifique un périphérique physique. Réalisés sur un les découvrent.
à un maximum de 8 heures selon le géant smartphone Nokia X, les tests valident le fonc- Ceci constituant un avantage des stores Nokia
Finlandais. tionnement de Live Weather (figure 3). et Samsung pour Android, en comparaison du
Play Store de Google qui se contente d’éven-
Portage pratique Publication tuelles revues a posteriori.
Les fondements techniques et les spécificités L’application validée sous Nokia X, il reste enfin L’application peut alors être téléchargée direc-
de la plateforme Nokia X passés en revue, nous à la publier sur le store de Nokia dédié aux tement depuis le Nokia Store (figure 4).
rentrons dans le vif du sujet en portant une appareils Nokia X. Pour ce faire, il est nécessai-
application Android existante vers la plateforme re de créer un compte développeur gratuit à Conclusion
Nokia X. Disponible ici : l’adresse suivante : Cet article aura mis en exergue la qualité du tra-
[Link] [Link] . Le compte vail réalisé par les équipes de Nokia pour créer
[Link], l’application Live Weather pro- créé, on démarre l’ajout de Live Weather en une plateforme basée sur Android intégrant ses
pose la météo du jour ainsi que les prévisions allant dans l’onglet Publish et en cliquant sur la services propriétaires, tout en simplifiant au
météos des jours prochains. zone «Publish app». Comme cela se fait habi- maximum le travail de portage des applications
Elle ne recourt à aucun service spécifique de tuellement, le développeur doit alors saisir un Android existantes.
Google et rentre de fait dans la catégorie des certain nombre d’informations concernant son En effet, l’enjeu se situe bel et bien là pour
75% d’applications existantes compatibles application telles que son titre, sa description, Nokia et sa plateforme Nokia X puisque l’on
sans modifications. son mode de distribution (gratuit ou payant), sa connaît l’importance d’avoir un store applicatif
Néanmoins, nous suivons le processus clas- catégorie ou encore des screenshots permet- bien fourni à proposer à ses utilisateurs pour
sique de portage en commençant par analyser tant aux utilisateurs d’en avoir une vision rapide qu’une gamme d’appareils puisse s’imposer.
la compatibilité via l’utilitaire de Nokia. et précise. Notre exemple, correspondant au cas le plus
Ce dernier confirme notre sentiment premier Une fois ce travail effectué, nous pouvons lan- répandu, aura montré qu’il est possible de por-
puisqu’il ne révèle aucune incompatibilité à cer le processus de soumission sur le store ter une application Android existante en tout
juste 1 heure sur Nokia X si celle-ci n’utilise
Fig.3 Fig.4 aucun service Google propriétaire. Pour
les 25% d’applications restantes qui utili-
sent notamment des services Google spé-
cifiques, il conviendra d’effectuer un travail
de portage facilité par la correspondance
volontaire des APIs Nokia équivalentes. Là
encore, les équipes de Nokia ont fait preu-
ve de pragmatisme en mettant à disposi-
tion du développeur des APIs se calquant
sur celles de Google pour faciliter au maxi-
mum le portage et la prise en main. Devant
la facilité de portage des applications exis-
tantes vers Nokia X et le succès que sem-
blent connaître les smartphones de la
gamme depuis son lancement, la platefor-
me représente désormais une opportunité
de plus pour des développeurs Android
toujours en recherche de stores alternatifs
pour se démarquer et ne plus dépendre
uniquement du Google Play Store.
Le mois prochain, nous irons plus loin sur
Nokia X.

Sylvain SAUREL
Ingénieur d’Etudes Java / Java EE
Live Weather sous Nokia X Live Weather sur le Nokia Store [Link]@[Link]

Juin 2014 > Programmez! 39


033_054v2_175 19/05/14 23:59 Page40

XAMARIN, l’extension multiplateforme


de .Net
b

1 partie ere

XAMARIN est une technologie qui a le vent en poupe ! Sur un marché ultra dynamique tel que
celui du mobile, disposer d’une solution multi-plateformes performante est devenu
incontournable. Ce tour d’horizon synthétique à 360 degrés, avec un focus particulier sur
l’implémentation des UI représentant le premier challenge pour le développeur, vous permettra
d’en mesurer tout le potentiel.
A la question « Qu’est-ce que XAMARIN » ? J’ai souvent tendance à apporter
trois réponses : la première fait référence à la genèse de XAMARIN issue du
fruit de plusieurs années de développement au travers du projet Mono qui
permettait de créer des applications DotNet sous Unix. Ce projet a été étendu
par son fondateur Miguel de Icaza aux environnements OSX, iOS et Android.
Nous parlons donc d’une solution éprouvée par une communauté existante
ayant plusieurs années d’expériences dans le portage de .Net sur d’autres
environnements que Windows.
La seconde réponse consiste à positionner XAMARIN dans l’écosystème
Microsoft. XAMARIN est une extension à l’écosystème Microsoft .Net que
nous connaissons tous et qui comprend le Framework .Net, Visual Studio et
Team Foundation Server. Vous pouvez vous passer de Visual Studio et Team
Fig.1
Foundation en utilisant le studio de développement de XAMARIN mais vous
perdez toute la puissance qu’apportent ses produits dans la productivité de
vos applications. Par extension, j’entends aussi surtout souligner que virtuelle .Net. Android étant développé en Java, ce dernier propose sa propre
XAMARIN ne couvre pas le développement Windows Phone et Windows machine virtuelle. En conséquence de quoi, la machine virtuelle de XAMARIN
Modern UI car ces derniers sont bels et bien gérés par Visual Studio. est exécutée sous la machine virtuelle d’Android. Quid des performances ?
La troisième réponse permet de définir en trois points clés ce qu’est Force est de constater que le fil d’exécution du code .Net est plus rapide que
techniquement XAMARIN : un SDK fournissant une API qui couvre en C# ou le fil d’exécution du code Java. L’overload s’opère dans l’intersection des
F# quasiment 100% de l’API iOS et Android ; un compilateur qui permet de deux machines virtuelles, lorsque la machine virtuelle XAMARIN/.Net
traduire votre code .Net vers les cibles iOS et Android et un outil proposant dialogue avec la machine virtuelle Java. Plus votre fil d’exécution est long,
des extensions à Visual Studio pour vous permettre de designer, debugger, plus vos performances seront meilleures en XAMARIN vs NATIF ANDROID
tester et compiler vos applications mobiles…. Fig.1. Fig.2.
Globalement, l’intégralité de votre développement peut se dérouler sous Au regard des deux modes de Fig.2
Visual Studio et Team Foundation. Vous allez toutefois avoir besoin d’un compilation, chacune des plateformes
poste sous OS X pour compiler vos applications iOS. Sur le Web, de mobiles induit par conséquence un
nombreuses offres de Cloud pour MAC sont à votre disposition périmètre de contraintes différent.
([Link] ou [Link] Avec ces offres, vous Pour bien comprendre les diverses
pourriez connecter l’agent de build MAC de votre ALM Team Foundation contraintes et les anticiper dans vos
Server. Au passage, l’ALM dans le cadre du développement mobile est un implémentations, une documentation
sujet sérieux que je vous proposerai d’aborder dans un prochain billet. complète est disponible :
Android :
Les wrapper d’API mobile [Link]
et les compilateurs iOS : [Link]
Quand on parle de WRAPPER aux API iOS et Android, la première question
qui vient à l’esprit, c’est naturellement la capacité de XAMARIN à actualiser Implémentation et réutilisation du code
son API dès la sortie des nouvelles versions d’OS. C’est très rapide. L’équipe Après toutes ces précisions nous pouvons commencer à entrer dans le vif du
des « binder » est organisée et elle profite des versions alpha/beta des sujet pour parler d’implémentation. Pour ce faire il faut disposer d’une licence
nouveaux OS pour actualiser les SDK. Concernant les compilateurs, le sujet XAMARIN. La licence est attribuée par développeur et par cible (iOS /
est beaucoup plus attrayant techniquement parlant. Il y a en effet deux Android). Pour couvrir les plateformes mobiles vous devrez disposer de deux
fonctionnements différents pour les compilateurs iOS et Android. Pour iOS, le licences. Vos applications sont « runtime free », sans licences
compilateur traduit le code .Net en code binaire ARM en faisant abstraction supplémentaires et sans limite sur le nombre d’applications.
de l’utilisation et des atouts que pourraient apporter une machine virtuelle. Pour débuter, nous vous conseillons d’utiliser les exemples proposés par
L’usage d’une machine virtuelle est strictement interdit par APPLE. Toutefois, XAMARIN nommés « Pre-Build ». Il s’agit d’exemples de code que vous
dans cette configuration, XAMARIN apporte des outils dans son Framework pouvez directement télécharger sur GitHub à l’adresse suivante :
pour gérer des fonctions telles que le « garbage collector ». [Link]
Pour Android, le compilateur traduit le code .Net en code IL. Vous comprenez Pour cet article, nous utiliserons l’exemple FieldService pour illustrer la
dès lors que sous Android le code XAMARIN est exécuté dans une machine structuration d’un projet mobile. L’intérêt de cette solution c’est qu’elle

40 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page41

comprend une Apps iOS, Android et WinRT. Pour continuer à avancer dans la compréhension du développement
Il y a plusieurs manières de construire son code mobile. Comme expliqué multiplateforme mobile nous devons répondre à trois points essentiels :

b
plus haut, XAMARIN est une extension. Il est fort possible que vous ayez déjà ◗ Les patterns du développement mobile,
développé des applications Windows Modern UI ou Windows Phone. Il est ◗ Outillage pour créer des UI / IHM,
donc intéressant dans cette situation d’isoler des parties de cette ◗ Patterns UI de développement sur les plateformes cibles (iOS, Android).
implémentation dans une librairie (une PCL) pour rendre cette partie du code
réutilisable pour les autres projets mobiles. Voici comment est constitué un Les patterns mobiles
projet multiplateformes mobile : Fig.3. Le développement en C# d’application mobile XAMARIN, du fait que le
Sous Visual Studio voici le rendu de FieldService issu du pré-build XAMARIN : Framework couvre 100% de l’API mobile ciblée, signifie également que vous
Fig.4. Dans un premier temps, nous devez maitriser les patterns d’implémentations iOS et Android. Si vous
pouvons constater trois projets disposez déjà d’une expérience mobile iOS et/ou Android, c’est un excellent
mobiles (figure 4) : iOS, Android et avantage. Il ne suffit pas de disposer d’une expérience C# mais

Fig.4
Windows Phone. Il s’agit de projets véritablement de comprendre et de maîtriser les plateformes mobiles. Les
contenant toute la logique UI des enjeux sont véritablement nombreux et l’usage d’une seule filière de
applications mobiles. La logique métier est quant à elle isolée dans une développement permet de réduire considérablement les contraintes
librairie commune, notre quatrième projet. Il y a plusieurs manières de d’ingénierie pour vous concentrer sur les enjeux « métiers et mobile ». Voici
partager du code. La figure 3 montre l’approche PCL (Portable Class Library). les 4 Piliers sur lequel il est fondamental de s’attarder :
Alors que dans l’exemple du pré-build FieldService de XAMARIN c’est ◗ Expérience utilisateur de la plateforme mobile cible,
l’approche « fichiers partagés » qui est mise en avant. Personnellement ◗ Batterie : on l’oublie souvent, votre architecture et vos implémentations
l’approche PCL me semble particulièrement intéressante car elle « isole » doivent prendre en compte cet aspect. Imaginez une application mobile qui
mieux nos implémentations. Elle impose toutefois de-facto le partage d’un boucle en tâche de fond (ping, synchro, etc…), et, par conséquent fait
subset .Net compatible avec toutes vos plateformes. Le choix de l’approche descendre drastiquement la batterie à 2h d’autonomie ! C’est juste
PCL est donc le choix du plus petit dénominateur commun .Net compatible impossible. D’autant plus que nous voyons apparaître sur les mobiles des
avec les plateformes mobiles ciblées ! Voici les différentes approches pour outils de reporting de consommation d’énergie permettant à l’utilisateur
partager le code entre tous vos projets mobile : d’arbitrer et de « killer » ou réduire l’usage d’une application énergivore.
◗ Sécurité : c’est un vaste sujet mais vos projets doivent impérativement
Méthode Avantages Inconvénients refléter la sécurité sur toutes les couches. On parle de persistance,
Pragma Partage d’un seul fichier, Code illisible sur des volumes de code.
mutualisation d’un « atome »
mémoire, flux, authentification et autorisation. L’enjeu est tellement majeur

de code.
que chez RedFabriQ nous avons développé un centre d’expertise dans ce

File Links Partage d’un seul fichier Une modification pour une plateforme
domaine avec notre partenaire VigiTrust pour intégrer cette dimension dans
peut causer des erreurs sur un autre projet qui
nos développements.
référence le même fichier. L’erreur sera visible ◗ Performance : il s’agit d’un sujet d’architecture, de conception et de
uniquement à la compilation ou à l’exécution. développement. Au même titre que la sécurité, la performance est
PCL Une seule assembly partagée. Périmètre réduit de l’API .NET déterminante. D’anciennes pratiques de développement refont surface. La
Code bien structuré (subset DotNet pour les cibles mobiles). médiocrité de la performance dégrade l’expérience utilisateur.
Partial class Possibilité d’avoir une partie Lisibilité et maintenance du code du fait de
d’une classe partagée et une disposer d’une classe atomisée sur La création des IHM : outillage
autre partie spécifique. plusieurs projets. La création des IHM mobiles iOS et Android sous XAMARIN est possible via
Inheritance Partage d’une partie du code Vous douteriez de mon objectivité ;-)
entre différentes classes
les outils de développement de XAMARIN ou Visual Studio. A ce jour, le plug-

Fig.3

Juin 2014 > Programmez! 41


033_054v2_175 19/05/14 23:59 Page42

in XAMARIN pour Visual Studio couvre uniquement ANDROID. Toutefois, lors Layer du Sous Windows
MVVM Sous iOS Sous Android Universal Apps
VIEW Fichier XIB Fichier AXML Fichier XAML
de la dernière BUILD 2014, Miguel de Icaza, a présenté une pré-version de
b

VIEWMODEL INotifyPropertyChanged INotifyPropertyChanged INotifyPropertyChanged


l’éditeur d’IHM pour iOS sous Visual Studio. Seule la compilation pour iOS
nécessite une machine OSX.
Voici un exemple d’édition d’IHM Android sous Visual Studio. Le plug-in MODELES Classe Object Classe Object Classe Object
XAMARIN vous permettra par conséquent de créer vos vues (ficher XIB pour CONTROLER / UIViewController, Actitity, Fragment, Code Behind
Implémentations UITableViewControleur, Animation…
tiers UITabViewControleur…
iOS, Fichier AXML pour Android). Une fois les vues créées, vous allez devoir
implémenter les traitements dans des « contrôleurs » qui devront hériter des
classes dédiées à cet effet et exposées par XAMARIN. Créer une IHM est finalement la partie la plus « consommatrice » en effort de
Nous y reviendrons Fig.5. développement. Alors n’hésitez pas à investir de votre temps pour en
L’environnement Visual Studio ci-dessus et le plug-in XAMARIN pour Android maitriser les rouages, les outils et les solutions. Je vous propose de passer au
proposent un designer et des outils dans la TOOLBOX avec une collection de reste de l’implémentation. Pour ce faire nous allons utiliser MVVMCross qui
contrôles UI pour bâtir notre écran. vous fera gagner énormément de temps. Pour rappel, MVVMCross est un
Framework MVVM multiplateformes C#. Les plateformes ciblées sont : IOS,
Les patterns UI Android, Windows Phone8, Windows Store et WPF
XAMARIN couvrant les API iOS et Android, cela nous conduit à devoir Les atouts de l’utilisation de MVVMCross
respecter les règles d’implémentation des différentes plateformes comme le ◗ Portabilité : il est important d’utiliser des librairies portables autant que
ferait une implémentation native. Certains Framework comme QT Mobile possible, qu’il s’agisse des modèles de vues, des modèles, des services et
proposent des abstractions aux UI mobiles. de la logique métier.
Cette approche permet de développer une seule fois l’interface graphique ◗ Maintenabilité : utilisation d’un Framework d’inversion de contrôle. Avec
pour tous les mobiles. En contrepartie, votre IHM ne respecte pas les MVVMCross on peut utiliser l’injection de dépendance pour avoir des
standards de chaque plateforme car elle fagote l’expérience utilisateur. Le applications robustes et facilement maintenables.
graal serait que XAMARIN propose également un complément de Framework ◗ Facilite les tests unitaires : l’apport du couplage faible proposé par
UI universel pour offrir le choix aux développeurs. MVVMCross permet de faciliter le développement de tests unitaires.
Aujourd’hui en tant que développeur, vous devez impérativement ◗ Utilisation du pattern d’architecture MVVM : il est utile de découpler les
comprendre les patterns UI des plateformes mobiles que vous allez adresser. vues des modèles en utilisant le binding, ce qui permet d’avoir des
Pour faire simple, voici la liste non exhaustive des modèles d’implémentation applications lisibles et flexibles.
qui sont sous-jacents aux VIEW : ◗ Utilisation des plugins : MVVMCross fournit un ensemble de plugins multi-
◗ IOS : UIViewController, UITableViewControleur, UITabViewControleur… plateformes comme le plugin File ou Network qui offre un certain nombre
◗ Android : Actitity + Fragment + Animation etc… de fonctionnalités.
◗ Windows : code Behind Une solution XAMARIN utilisant le Framework MVVMCross consiste en :
Un projet Core qui contient tous les modèles de vues, les modèles et les
Pour améliorer votre productivité et la réutilisation de votre code, je vous services partagés,
recommande d’utiliser un Framework MVVM tel que MVVMCross. ◗ Un projet UI pour chaque plateforme ciblée,
L’implémentation d’un modèle MVVM vous permettra, de partager une ◗ Optionnellement on peut avoir des plugins ou une partie du code est défini
grande partie du code de vos IHM. dans une librairie portable et l’autre partie dans une librairie spécifique à la
Au regard de la figure 6, les vues créées plus haut sont représentées par le plateforme.
carré bleu. Il nous reste maintenant à implémenter les VIEW MODEL et le ◗ Classes d’une librairie Core :
BINDING entre la VIEW et la VIEW MODEL et ensuite associer votre VIEW - App : classe responsable du démarrage de l’application, elle charge
MODEL à votre service. Voici un tableau qui, pour chaque implémentation UI, les modèles de vues et les services.
révèle les classes qu’il faut surcharger dans les projets correspondant à - Start : Classe responsable de la définition de modèle de vue. C’est la
chacune des cibles mobiles : première classe à s’exécuter.
- ViewModels : les modèles de vue créés
pour l’application
- Services : tous les services créés pour l’ap-
plication
◗ UI
- Classe Application de chaque plateforme
responsable du cycle de vie de chaque
application,
- Setup MVVMCross responsable du lance-
ment de l’application,
- Views : les vues de l’application spécifique à
chaque plateforme,
- Presenter : code personnalisé des vues
pour gérer les interactions des vues
Dans le prochain numéro, nous passerons au
code !
Zaak Chalal
CEO de Red Fabriq
Fig.5
42 Programmez! < Juin 2014
033_054v2_175 19/05/14 23:59 Page43

1 application, 1 code partagé,


5 plateformes !

b
La maitrise du développement mobile sur différentes plateformes est plus ou moins
complexe dans la mesure où, pour offrir la meilleure expérience utilisateur possible,
tout en ayant des performances natives, il faut connaître différentes technologies et
leurs outils, tels que les couples Objective-C et Xcode, Java et Eclipse, C#/XAML et Visual Studio…
Chez Happly-Sfeir , nous avons relevé le défi. Nous avons cherché à maîtriser Ce projet va accueillir la totalité de notre code métier : référence vers les ser-
le sujet. Xamarin nous a aidé à étoffer nos compétences. vices web, nos services, nos convertisseurs, nos ressources texte, etc.
◗ Pour englober un grand nombre de fonctions et faciliter les échanges avec
OUTILS ET TECHNOLOGIES les services Web ainsi que la lecture et l’écriture de données en base et/ou
Pour commencer, nous avons dû nous assurer que l’on disposait des res- dans des fichiers XML, il nous sera utile d’installer les packages NuGet sui-
sources nécessaires pour mener à bien notre mission… vants :
- Microsoft BCL Portability Pack,
Les prérequis techniques - Microsoft BCL Build Components,
Qui dit développement avec Xamarin dit connaissance de la programmation - Microsoft Async,
objet, du Framework .NET et du langage C#. Au niveau des patterns, je vous - Microsoft Http Client Libraries
recommande fortement un minimum de maîtrise des patterns MVC (pour ◗ Créer les différents projets pour nos différentes plateformes :
Android et iOS) et MVVM (pour Windows RT et Windows Phone). - [Link]* pour Windows Phone,
- [Link]* pour Windows RT,
Note : Si le pattern MVVM vous est inconnu, je vous recommande la lecture de «MVVM. De la - [Link]* pour iOS,
découverte à la maîtrise: WPF, Silverlight, WP7» de Jonathan Antoine et Thomas Lebrun.
- [Link]* pour Android.
Niveau ergonomie de vos futures applications, il est essentiel de connaître les ◗ Installer le package NuGet “MvvmCross” dans l’ensemble de nos projets
best-practices pour chacune des plateformes, ainsi que la maîtrise des outils (.Core, .Phone, .Store, .Touch, .Droid). Ce package va créer des classes de
pour faire de belles applications. démarrage, des ViewModel et leurs vues prêts à être utilisés.
Grâce à la possiblité que nous offre Xamarin et le Framework MvvmCross, ◗ Référencer le projet PCL .Core dans chaque projet (.Phone, .Store, .Touch,
nous allons donc architecturer notre solution autour du pattern MVVM sur les .Droid)
différentes plateformes !
(*) Il est recommandé de garder la nomination des projets telle quelle car certains composants de
MvvmCross est un petit Framework qui permet d’architecturer une solution MvvmCross fonctionnent avec de la réflexion et les classes par défaut (App, Setup,
Xamarin autour du pattern MVVM. Il facilite la portabilité et le développement FirstViewModel, …) ont comme namespace .Phone, .Store, .Touch et .Droid.
par interfaces grâce aux classes portables et à l’inversion de controle (IoC).
Cela va également faciliter nos interactions avec les différents éléments des LES FONDAMENTAUX
téléphones (géolocalisation, caméra, …) - en passant par des plugins. Tout en place, il faut demander aux différents systèmes de remplacer leur sys-
tème de navigation initial par celui surchargé par MvvmCross.
Préparer le terrain Pour le projet Windows Phone, il faut par exemple, initialiser le système
Au niveau des logiciels et autres SDK, vous aurez besoin des éléments sui- MvvmCross en ajoutant le code suivant pendant la construction de la classe
vants, en fonction de l’installation matérielle dont vous disposez : [Link] :

D/@ A3 BC> <3 E % 3 BC> $ ==B @/;3


PC Mac Mac + PC
SDK Android Oui Oui Sur l’un ou l’autre
A3 BC> <7 B7 /:7 H3
JDK Oui Oui Sur l’un ou l’autre
SDK iOS - Oui Sur le Mac
SDK Mac OS X - Oui Sur le Mac
Puis, modifier la première navigation :
SDK Windows Phone Oui - Sur le PC
>@7 D/B3 D=7 2 >>:7 1/B7 =<. /C<16 7 <5 =083 1B A3 <23 @ /C<16 7 <5
SDK Windows 8 Oui - Sur le PC
D3 <B @5 A 3
Pour tester vos applications, je vous recommanderais de vous procurer des I
appareils relatifs à chacune des plateformes sur lesquelles vous souhaitez $ ==B @/;3 !/D7 5 /B7 <5 $ ==B @/;3 " <!/D7 5 /B7 <5
développer. K
Note : Un outil d’archivage tel que Git (inclus dans TFS 2013 et Visual Studio 2013) va vous per- >@7 D/B3 D=7 2 $ ==B @/;3 " <!/D7 5 /B7 <5 =083 1B A3 <23 @ !/D7 5 /B7 <5
mettre de synchroniser votre travail entre vos différents espaces de travail sur PC et sur Mac. /<13 : D3 <B @5 A /@5 A
I
PREMIERS PAS /@5 A /<13 : B@C3
Toutes les installations terminées, on peut commencer par : $ ==B @/;3 !/D7 5 /B7 <5 $ ==B @/;3 " <!/D7 5 /B7 <5
◗ Créer une nouvelle solution que nous allons appeler “Happly” (à tout hasard :p) $ ==B @/;3 7 A>/B16 3 @ 3 5 7 < <D=9 3 DF $ 3 A=:D3 DF >>
◗ Créer un premier projet : une librairie de classes portables que nous allons % B/@B % B/@B
nommer «[Link]» (*). K

Juin 2014 > Programmez! 43


033_054v2_175 19/05/14 23:59 Page44

Pour le projet Windows Store, il faudra modifier la méthode OnLaunched de maniè- 23 1:/@3 ABG:3 /0:3 </;3 Q DF 7 <27 <5 Q
re à instancier la classe Setup au niveau où on vérifie que notre pile n’est pas vide : /BB@ </;3 Q DF 7 <2Q 4 =@;/B Q AB@7 <5 Q
b

/BB@ </;3 Q DF /<5 Q 4 =@;/B Q AB@7 <5 Q


7 4 @==B @/;3 =<B3 <B <C:: 23 1:/@3 ABG:3 /0:3
I 23 1:/@3 ABG:3 /0:3 </;3 Q DF =<B@=:Q
)6 3 < B6 3 </D7 5 /B7 =< AB/19 7 A<TB @3 AB=@3 2 </D7 5 /B3 B= B6 3 /BB@ </;3 Q DF& 3 ;>:/B3 Q 4 =@;/B Q AB@7 <5 Q
4 7 @AB >/5 3 23 1:/@3 ABG:3 /0:3
1=<4 7 5 C@7 <5 B6 3 <3 E >/5 3 0G >/AA7 <5 @3 ?C7 @3 2 7 <4 =@;/B7 =< 23 1:/@3 ABG:3 /0:3 </;3 Q DF 7 AB(7 3 EQ
/A / </D7 5 /B7 =< /BB@ </;3 Q DF B3 ;& 3 ;>:/B3 Q 4 =@;/B Q AB@7 <5 Q
>/@/;3 B3 @ /BB@ </;3 Q DF @=> =E< B3 ;& 3 ;>:/B3 Q Fig.1
4 =@;/B Q AB@7 <5 Q
D/@ A3 BC> <3 E % 3 BC> @==B @/;3 23 1:/@3 ABG:3 /0:3
A3 BC> <7 B7 /:7 H3 7 B3 ; BG>3 Q 7 2Q </;3 Q DF 7 <27 <5 & /5 ' <7 ?C3 Q
D/@ AB/@B DF $ 3 A=:D3 DF >>% B/@B 23 1:/@3 ABG:3 /0:3 </;3 Q DF ;/5 3 (7 3 EQ
AB/@B % B/@B /BB@ </;3 Q DF% =C@13 Q 4 =@;/B Q AB@7 <5 Q
K 23 1:/@3 ABG:3 /0:3
@3 A=C@13 A
En ce qui concerne iOS, il faut remplacer le contenu de la méthode Finihed-
Launching par le code suivant :
A partir de ce moment, on peut commencer à coder ! Presque… Je vais m’éta-
>C0:7 1 =D3 @@7 23 0==: 7 <7 A6 3 2 /C<16 7 <5 ' >>:7 1/B7 =< />> ler sur quelques explications quant aux classes de démarrage et aux différents
!% 7 1B7 =</@G =>B7 =<A héritages obligatoires.
I
.E7 <2=E <3 E ' )7 <2=E ' % 1@3 3 < /7 <% 1@3 3 < =C<2A Les classes App et Setup
D/@ A3 BC> <3 E % 3 BC> B6 7 A .E7 <2=E Dans le projet cœur, il sera nécessaire d’instancier les plugins éventuels et
A3 BC> <7 B7 /:7 H3 d’informer le ViewModel de démarrage de notre application dans une classe
D/@ AB/@BC> DF $ 3 A=:D3 DF >>% B/@B «App» (héritant de MvxApplication).
AB/@BC> % B/@B
D7 C;IF7 9; #7 FFBO EH;
.E7 <2=E /9 3 3 G <2(7 A7 0:3
Q
@3 BC@< B@C3
FK8B?9 9B7 II FF 'LN FFB?97 J ?ED
K
Q
Enfin, pour Android, pas besoin de modifier le système d’amorçage. Vous >C0:7 1 =D3 @@7 23 D=7 2 <7 B7 /:7 H3
devrez simplement ajouter un SplashScreen, soit la classe suivante à la racine : I
$ 3 5 7 AB3 @ >>% B/@B 7 @AB(7 3 E =23 :
+ 1B7 D7 BG /03 : P 3 ::= )=@:2Q /7 < /C<16 3 @ B@C3 1=<
K
P 2@/E/0:3 7 1=<Q -
S
>C0:7 1 1:/AA % >:/A6 % 1@3 3 < DF% >:/A6 % 1@3 3 < 1B7 D7 BG
S
I
7 <AB/<17 3 @ C< A>:/A6 A1@3 3 < /G/<B 1=;;3 DC3 P$ 3 A=C@13 , Dans chaque projet, il est impératif de rajouter une classe Setup à la racine de
/G=CB,% >:/A6 % 1@3 3 < /F;:Q chacun des projets et d’appeler la classe [Link].
>C0:7 1 % >:/A6 % 1@3 3 < 0/A3 $ 3 A=C@13 /G=CB % >:/A6 % 1@3 3 <
I / 1:/AA3 % 3 BC> 2=7 B OB@3 L :/ @/17 <3 23 16 /?C3 >@=83 B
K </;3 A>/13 />>:G # 6 =<3 J />>:G % B=@3 J />>:G & =C16 J />>:G @=7 2
K Q
FK8B?9 9B7 II -;J KF 'LN*>ED;-;J KFR'LN-J EH;-;J KFR'LN.EK9>-;J KFR'LN
D:HE?:-;J KF
...Et une vue AXML dans le dossier “Resources/Layout” () :
F;: D3 @A7 =< Q Q 3 <1=27 <5 Q CB4 Q Q
7 <3 /@ /G=CB F;:<A /<2@=7 2 Q 6 BB> A16 3 ;/A /<2@=7 2 1=; />9 FK8B?9 -;J KF EDJ ;NJ 9EDJ ;NJ 87 I; 9EDJ ;NJ Q W S
@3 A /<2@=7 2Q
/<2@=7 2 =@7 3 <B/B7 =< Q D3 @B7 1/:Q FK8B?9 EL;HH?:; $ 'LN FFB?97 J ?ED H;7 J ; FF
/<2@=7 2 :/G=CB.E7 2B6 Q 4 7 ::.>/@3 <BQ Q
/<2@=7 2 :/G=CB.6 3 7 5 6 B Q 4 7 ::.>/@3 <BQ H;J KHD D;M EH; FF
& 3 FB(7 3 E S
/<2@=7 2 :/G=CB.E7 2B6 Q 4 7 ::.>/@3 <BQ
/<2@=7 2 :/G=CB.6 3 7 5 6 B Q E@/>.1=<B3 <BQ FK8B?9 EL;HH?:; $ 'LN.H7 9; H;7 J ; ;8K=.H7 9;
/<2@=7 2 B3 FB Q =/27 <5 Q
7 <3 /@ /G=CB Q

H;J KHD D;M ;8K=.H7 9;


Puis, ajouter le fichier MvxBindingAttributes dans le dossier

S
“Resources/Values”:

F;: D3 @A7 =< Q Q 3 <1=27 <5 Q CB4 Q S


@3 A=C@13 A S

44 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page45

Héritages obligatoires <=B7 4 7 3 :3 AGABN;3 DD; @=AA ?C3 :/ >@=>@7 MBM / MBM
Les différents éléments de l’application devront hériter de certaines classes ;=27 4 7 M3

b
issues de MvvmCross. Par exemple, un ViewModel devra toujours hériter soit ,7 ?I;*HEF;HJ O >7 D=;: #;BBE
d’un enfant de MvxViewModel soit de cette dernière. Pour des raisons de S
confort (internationalisation par exemple), nous avons fait le choix de créer une S
classe intermédiaire, BaseView :
' <3 1=;;/<23
</;3 A>/13 />>:G # 6 =<3 J />>:G % B=@3 J />>:G & =C16 J />>:G @=7 2 FK8B?9 $ 'LN ECC7 D: -7 O#;BBE
I Q
>C0:7 1 1:/AA /A3 (7 3 E DF# 6 =<3 # /5 3 J DF% B=@3 # /5 3 J DF(7 3 E =;J
=<B@=::3 @J DF 1B7 D7 BG Q
I H;J KHD D;M 'LN ECC7 D:
>C0:7 1 /A3 (7 3 E I R K Q
>C0:7 1 D=7 2 = <GB6 7 <5 I R K #;BBE U ED@ EKH ED ;IJ B; U 7 J ;.?C; (EM
K S
K S
K
D7 C;IF7 9; #7 FFBO *>ED;R#7 FFBO -J EH;R#7 FFBO .EK9>R#7 FFBO HE?: K
Q
FK8B?9 9B7 II !?HIJ 0?;M 7 I;0?;M Windows Phone et Windows 8
Q Sous Windows Phone / Windows 8, la page qui doit hériter respectivement
FK8B?9 !?HIJ 0?;M 87 I; Q W S de 'LN*>ED;*7 =; ou de 'LN-J EH;*7 =; donne le ViewModel en tant
que contexte. Il suffit de binder les propriétés qui nous intéressent : Les com-
FK8B?9 EL;HH?:; LE?: E DOJ >?D= mandes et le contenu.
Q
87 I; E DOJ >?D= X 1?D:EMI -J EH; X
W L?;MI 'LN-J EH;*7 =; N B7 II V#7 FFBO -J EH; 0?;MI !?HIJ 0?;MV NCBDI
S L?;MI V9BH D7 C;IF7 9; ?HH?EKI 'LLC HEII 1?D:EMI-J EH; 0?;MI
S 7 II;C8BO ?HH?EKI 'LLC HEII 1?D:EMI-J EH;V
S X & ; 9EDJ ;DK ?9? X
L?;MI 'LN-J EH;*7 =;
Spécificités iOS et Android
Dans le système d’exploitation mobile d’Apple, les onglets, les “points”, les X 1?D:EMI *>ED; X
tableaux de données ou les collections de données nécessitent qu’on hérite L?;MI 'LN*>ED;*7 =; N B7 II V#7 FFBO *>ED; 0?;MI !?HIJ 0?;MV NCBDI
de controleurs dédiés à ce type de pages… Vous pourrez ainsi créer un L?;MI V9BH D7 C;IF7 9; ?HH?EKI 'LLC HEII 1?D:EMI*>ED; 0?;MI
0?;M EDJ HEBB;H dans lequel vous dessinerez vos onglets où vous pour- 7 II;C8BO ?HH?EKI 'LLC HEII 1?D:EMI*>ED;V
rez hériter de /$ .7 8 7 H EDJ HEBB;H. Ainsi, en fonction de vos besoins, X & ; 9EDJ ;DK ?9? X
vous pourrez être amené à faire hériter vos pages de L?;MI 'LN*>ED;*7 =;
MvxTabBarViewController
S 3 1=<B3 <C >=C@ )7 <2=EA % B=@3 3 B )7 <2=EA # 6 =<3 S
Spécificités Android @7 2 F !/;3 Q =<B3 <B# /<3 :Q @7 2 $ =E Q Q /@5 7 < Q Q
Hello World ! % B/19 # /<3 :
Projets créés, les classes de démarrage App et Setup présentes et présen- & 3 FB =F & 3 FB Q I 7 <27 <5 3 ::= =23 & E=)/GKQ
tées, héritage évoqués, on peut commencer à coder un premier Hello World ! & 3 FB :=19 & 3 FB Q I 7 <27 <5 3 ::=KQ
CBB=< =;;/<2 Q I 7 <27 <5 % /G 3 ::=KQ
Core % B/19 # /<3 :
Dans le dossier ViewModels du projet [Link], on va créer une classe @7 2
!?HIJ 0?;M'E:;B qu’on va faire hériter de 'LN0?;M'E:;B ; y créer une
propriété #;BBE et une commande -7 O#;BBE. iOS et Android
Sous iOS, pas une ligne de code pour designer notre application, il faudra utili-
FK8B?9 9B7 II !?HIJ 0?;M'E:;B 'LN0?;M'E:;B ser XCode ([Link] dispose également d’un designer bêta), pour glisser-
Q déposer vos éléments à partir de la bibliothèque d’objets.
>@=>@7 MBM 3 ::= 3 < 5 C7 A3 2T3 F3 ;>:3 Pour nommer vos objets, il suffit :
FH?L7 J ; IJ H?D= 6>;BBE 1 - D’afficher “Assistant Editor” ,
FK8B?9 IJ H?D= #;BBE 2 - Afficher le “Connections inspector” ,
Q 3 - Faire un glisser-déposer à partir de la commande “New Referencing Outlet”
=;J Q H;J KHD 6>;BBE S jusqu’à l’assistant, en dehors du constructeur de l’interface de votre View-
I;J Controller
Q 4 - Taper le nom que vous souhaitez dans la bulle qui vient de faire son
6>;BBE L7 BK; apparition :

Juin 2014 > Programmez! 45


033_054v2_175 19/05/14 23:59 Page46

/<2@=7 2 B3 FB Q 7 @3 0=<8=C@ Q
:=1/: DF 7 <2 Q :7 19 % /G 3 ::=Q
b

& 3 FB(7 3 E :=1/: DF 7 <2 Q & 3 FB 3 ::=Q


/<2@=7 2 :/G=CB.E7 2B6 Q 4 7 ::.>/@3 <BQ
/<2@=7 2 :/G=CB.6 3 7 5 6 B Q E@/>.1=<B3 <BQ
7 <3 /@ /G=CB

Navigation
La navigation dans chaque plateforme est différente, mais pour chacune
5 - Une propriété a été créée : >@=>3 @BG <=</B=;7 1 @3 B/7 < d’entre elles, la navigation est définie comme la capacité qu’a l’utilisateur
" CB:3 B & *# (=B@3 " 083 B et le constructeur de votre inter- d’avancer ou de revenir en arrière dans différentes pages de contenu.
face contient maintenant : & *# .(=B@3 " 083 B Pour ce faire, vous devrez faire en sorte que chaque page aie un ViewModel
6 - Lorsque vous retournerez sur Xamarin, ce dernier va synchroniser l’inter- qui lui soit propre ; et appeler une méthode qui appelle le nouveau
face en référençant vos modifications dans le fichier .[Link] des Vues. ViewModel : ->EM0?;M'E:;B .0?;M'E:;B .
Lorsque vous faites appel à cette méthode, le framework MvvmCross va :
FK8B?9 9B7 II !?HIJ 0?;M 'LN0?;M EDJ HEBB;H 1 - Trouver la vue à utiliser pour le ViewModel appelé (par réflexion),
Q 2 - Créer une instance de la vue trouvée,
FK8B?9 !?HIJ 0?;M 3 - Créer une instance de votre ViewModel,
87 I; /I;H$ DJ ;H<7 9;$ :?EC$ I*>ED; U!?HIJ 0?;M6?*>ED;V U!?HIJ 4 - Fournir le ViewModel en tant que DataContext à la vue,
0?;M6?*7 :V DKBB Q W S 5 - Demander au système d’afficher la nouvelle page (grâce au pattern IoC),
6 - Chercher à exécuter respectivement les méthodes Init() et Start().
FK8B?9 EL;HH?:; LE?: 0?;M ?:& E7 :
Q Les méthodes Init et Start
87 I; 0?;M ?:& E7 : Dans les ViewModels (héritant soit d’un enfant, soit directement de
CTJ >E:; FEKH 7 FFB?GK;H B;I 8?D:?D=I IKH ?)- IMvxViewModel), deux méthodes nous permettent d’initialiser le contenu de
J >?I H;7 J ; ?D:?D= -7 O#;BBE/$ KJ J ED .E !?HIJ 0?;M'E:;B notre page, hors du constructeur :
LC LC -7 O#;BBE FFBO La méthode virtuelle -J 7 HJ , à overrider si nécessaire, est appelée lors du
J >?I H;7 J ; ?D:?D= -7 O#;BBE/$ & 7 8;B .E !?HIJ 0?;M'E:;B chargement de la page après l’avoir construite.
LC LC #;BBE FFBO
ECC7 D: ?D !?HIJ 0?;M'E:;B <EH D7 L?=7 J ?ED
CTJ >E:; FEKH 7 FFB?GK;H B;I 8?D:?D=I IKH ?)-
FK8B?9 $ 'LN ECC7 D: -?CFB;(7 L?=7 J ?ED
L7 H 8?D:?D=I J >?I H;7 J ; ?D:?D=-;J !?HIJ 0?;M !?HIJ 0?;M
Q
'E:;B
=;J
8?D:?D=I ?D: -7 O#;BBE/$ KJ J ED .E LC LC -7 O#;BBE
Q
8?D:?D=I ?D: -7 O#;BBE/$ & 7 8;B .E LC LC #;BBE
H;J KHD D;M 'LN ECC7 D: ->EM0?;M'E:;B -;9ED:0?;M'E:;B
8?D:?D=I FFBO
S
S
S
S

Sous Android : FK8B?9 -;9ED:0?;M'E:;B Q :E 7 DOJ >?D= S

4 9J ?L?J O & 7 8;B U 99K;?BV '7 ?D& 7 KD9>;H J HK; 5


FK8B?9 LE?: -J 7 HJ
FK8B?9 9B7 II !?HIJ 0?;M 'LN 9J ?L?J O
Q
Q
?< 6BE=?D-;HL?9; $ I& E==;:$ D Q I>EM 9EDJ ;DJ <EH J >?I KI;H S
FHEJ ;9J ;: EL;HH?:; LE?: )D H;7 J ; KD:B; 8KD:B;
;BI; Q I>EM 9EDJ ;DJ <EH 7 BB KI;HI S
Q
S
87 I; )D H;7 J ; 8KD:B;
/4 4 7 16 3 @ 7 @AB(7 3 E /F;: >@MA3 <B 2/<A :3 2=AA7 3 @ $ 3 A=C@13 A, /G=CB La méthode $ D?J E8@ ;9J E8@ E8@ ;9J E8@ W , à créer est
-;J EDJ ;DJ 0?;M ,;IEKH9; & 7 OEKJ !?HIJ 0?;M l’équivalent de la méthode virtuelle -J 7 HJ mais permet de rajouter un
S nombre (infini?) de paramètres, ce qui peut s’avérer utile pour passer des
S paramètres lors de la navigation entre différentes pages :

F;: D3 @A7 =< Q Q 3 <1=27 <5 Q CB4 Q FK8B?9 $ 'LN ECC7 D: *7 H7 C(7 L?=7 J ?ED
7 <3 /@ /G=CB F;:<A /<2@=7 2 Q 6 BB> A16 3 ;/A /<2@=7 2 1=; />9 Q
@3 A /<2@=7 2Q =;J
F;:<A :=1/: Q 6 BB> A16 3 ;/A /<2@=7 2 1=; />9 @3 A /CB=Q Q
/<2@=7 2 =@7 3 <B/B7 =< Q D3 @B7 1/:Q H;J KHD D;M 'LN ECC7 D:
/<2@=7 2 :/G=CB.E7 2B6 Q 4 7 ::.>/@3 <BQ ->EM0?;M'E:;B -;9ED:0?;M'E:;B D;M
/<2@=7 2 :/G=CB.6 3 7 5 6 B Q E@/>.1=<B3 <BQ Q
/<2@=7 2 7 2 Q 7 2 7 @AB(7 3 EQ F7 H7 C;J ;H L7 BK;
CBB=< /<2@=7 2 :/G=CB.E7 2B6 Q 4 7 ::.>/@3 <BQ F7 H7 C;J ;H L7 BK;
/<2@=7 2 :/G=CB.6 3 7 5 6 B Q E@/>.1=<B3 <BQ S

46 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page47

H;J KHD D;M 'LN ECC7 D:


S Q

b
S 'LN ,;IEBL; $ 'LN*>ED; 7 BB.7 IA '7 A;*>ED; 7 BB U#7 FFBO
!EHC7 J ?EDIV U V
FK8B?9 LE?: $ D?J IJ H?D= F7 H7 C;J ;H IJ H?D= F7 H7 C;J ;H S
Q S
6F7 H7 C;J ;H F7 H7 C;J ;H S
6F7 H7 C;J ;H F7 H7 C;J ;H
:E 7 DOJ >?D= M?J > F7 H7 C;J ;HI
XAML Windows Phone / Windows Store :

S KJ J ED W ECC7 D: VQ ?D:?D= 7 BB ECC7 D:SV


AXML Android :

KJ J ED W BE97 B 'LN ?D: V B?9A 7 BB ECC7 D:V


Internationalisation
Il existe plus d’une solution pour internationaliser son application. L’une des
solutions est d’utiliser les fichiers de ressources dans le projet PCL et de bin- iOS :
der les textes dans les vues. Pour cela, on base chacun de nos 0?;M'E:;B J >?I H;7 J ; ?D:?D= 7 BB/$ KJ J ED .E !?HIJ 0?;M'E:;B LC LC
sur une classe faite-maison qui hérite de 'LN0?;M'E:;B et qui nous donne 7 BB ECC7 D: FFBO
un accès statique aux ressources.
Écrire son plugin MvvmCross
Plugins MvvmCross Admettons maintenant que nous cherchions à afficher une barre de progres-
Certaines fonctionnalités nécessitent des développements différents et parti- sion sur les trois plateformes… On pourrait glisser-déposer les éléments gra-
culiers (envoi de messages, appels, …). phiques via Visual Studio et Xcode, puis binder sur une propriété sur chaque
MvvmCross n’inclut pas tout mais grâce à l’architecture basée sur le pattern projet (pour l’afficher/masquer par exemple). Ou, on pourrait envisager de
IoC de MvvmCross, on peut notamment : développer un plugin qui, lorsqu’il sera appelé affichera une barre de progres-
◗ Greffer différents plugins déjà existants et téléchargeables via NuGet par sion (indéterminée pour simplifier le code).
exemple, On va donc créer une nouvelle solution ([Link])
◗ Créer quelques-uns très facilement (sous formes de librairies réutilisables dans laquelle on va créer les projets suivants :
dans n’importe quelle autre solution),
◗ Ecrire des fonctionnalités spécifiques à chaque plateforme (non réutilisables). Plateforme Type de projet Nom du projet
Ainsi, on peut avec le simple appel d’un plugin, passer un coup de fil, interro- Code partagé Bibliothèque de classes portable [Link]
ger le téléphone sur sa position ou encore savoir si l’utilisateur a un accès à Windows Phone Bibliothèque de classes Windows Phone [Link]
Internet ou pas. Windows Store Bibliothèque de classes
(applications Windows Store) [Link]
iOS [Link] Library Project [Link]
Note : Les plugins MvvmCross doivent être instanciés lors du démarrage de l’application.

Un plugin ? Android Android Class Library [Link]


Les plugins MvvmCross sont une couche supplémentaire au dessus de l’IoC.
Chacun d’entre eux contient : Pour chacun de ces projets, on va Installer le package NuGet “MvvmCross -
◗ Un projet “librairies de classes portable” CrossCore”. Dans le projet “[Link]”, on va ajouter deux nou-
- Une interface qui définit les propriétés, les méthodes, … veaux éléments :
- Un point d’entrée à [Link] ◗ une interface qui va définir les méthodes dont on aura besoin dans toutes les
◗ Accessoirement, un projet par plateforme plateformes
- Les méthodes codées de l’interface définies dans la PCL pour la platefor-
me spécifiée. >C0:7 1 7 <B3 @4 /13 /:3 <2/@
- Une entrée à “Plugin” I
D=7 2 % 6 =E /B3 & 7 ;3 AB/@B /B3 & 7 ;3 3 <2 AB@7 <5 </;3
Utiliser les plugins K
Dans un premier temps, à partir de notre “Hello World”, on va appeler le stan-
dard du pôle formations de chez Happly-Sfeir. Pour commencer, on va ajouter ◗ une implémentation de IMvxPluginLoader, qu’on nommera “PluginLoader” :
le package NuGet “MvvmCross PhoneCall Plugin”.
Dans la classe de démarrage [Link], on va ajouter la ligne suivante >C0:7 1 1:/AA # :C5 7 < =/23 @ DF# :C5 7 < =/23 @
pour instancier le plugin, juste avant de spécifier avec quel ViewModel on va I
démarrer notre application : >C0:7 1 AB/B7 1 @3 /2=<:G # :C5 7 < =/23 @ <AB/<13 <3 E # :C5 7 < =/23 @
>C0:7 1 D=7 2 <AC@3 =/23 2
?HH?EKI 'LLC HEII *BK=?DI *>ED; 7 BB $ DIJ 7 D9; DIKH;& E7 :;:
I
Pour passer nos coups de fil, on va dessiner un bouton avec nos différents D/@ ;/</5 3 @ DF $ 3 A=:D3 DF# :C5 7 < /</5 3 @
designers et binder une commande dans notre ViewModel : ;/</5 3 @ <AC@3 # :/B4 =@; 2/>B7 =< =/23 2 # :C5 7 < =/23 @
K
FK8B?9 $ 'LN ECC7 D: 7 BB ECC7 D: K
Q
=;J Dans les différents projets, on va créer une classe Plugin et ajouter une métho-
Q de Load pour :

Juin 2014 > Programmez! 47


033_054v2_175 19/05/14 23:59 Page48

>C0:7 1 1:/AA # :C5 7 < DF# :C5 7 < système d’exploitation hôte. Ensuite, on peut par exemple dessiner un bouton
I et le binder à une Commande :
b

>C0:7 1 D=7 2 =/2


I >C0:7 1 DF =;;/<2 % /D3 " < /:3 <2/@ =;;/<2
DF $ 3 5 7 AB3 @& G>3 /:3 <2/@ DF# 6 =<3 /:3 <2/@J DF% B=@3 I
/:3 <2/@J DF& =C16 /:3 <2/@J DF @=7 2 /:3 <2/@ 5 3 B
K I
K @3 BC@< <3 E DF =;;/<2 7 @AB(7 3 E =23 : A/D3
I
...Et implémenter notre Interface dans chaque projet, en fonction de sa plateforme : />>:G DD; @=AA # :C5 7 <A /:3 <2/@ # :C5 7 < =/23 @ <AB/<13
<AC@3 =/23 2
>C0:7 1 1:/AA DF# 6 =<3 /:3 <2/@ /:3 <2/@ DF $ 3 A=:D3 /:3 <2/@ % 6 =E /B3 & 7 ;3 !=E /B3 & 7 ;3
I !=E 22 =C@A AB@7 <5 3 ;>BG
>C0:7 1 D=7 2 % 6 =E /B3 & 7 ;3 AB/@B /B3 & 7 ;3 3 <2 AB@7 <5 </;3 K
I K
2= 1/:3 <2/@ =< )7 <2=EA # 6 =<3 3 5 % /D3 >>=7 <B;3 <B& /A9 K
K
K Vous aurez sans doute deviné qu’il s’agit du pattern IoC ! Si vous ne souhaitez
pas passer par un plugin pour n’importe quelle raison, il est possible d’utiliser
>C0:7 1 1:/AA DF% B=@3 /:3 <2/@ /:3 <2/@ le pattern au sein même de la solution principale. On aurait donc une interface
I dans notre projet PCL et des classes héritant de cette interface dans nos diffé-
>C0:7 1 D=7 2 % 6 =E /B3 & 7 ;3 AB/@B /B3 & 7 ;3 3 <2 AB@7 <5 </;3 rents projets. Pour l’utiliser, il suffira de “résoudre” l’interface dans une variable
I et d’utiliser cette dernière :
CA3 )7 <2=EA /:3 <2/@ # 3 5 >>=7 <B;3 <B /</5 3 @
K D/@ 1/:3 <2/@ DF $ 3 A=:D3 /:3 <2/@ % 6 =E /B3 & 7 ;3 !=E
K /B3 & 7 ;3 !=E 22 =C@A AB@7 <5 3 ;>BG

>C0:7 1 1:/AA DF& =C16 /:3 <2/@ /:3 <2/@ Design


I Cela ne vous a sans doute pas échappé : l’Interface Utilisateur de chaque pla-
>C0:7 1 D=7 2 % 6 =E /B3 & 7 ;3 AB/@B /B3 & 7 ;3 3 <2 AB@7 <5 </;3 teforme doit être faite séparément avec les designers et/ou les langages spé-
I cifiques aux différentes plateformes, soit les couples suivants :
CA3 7 " % /:3 <2/@ # 3 5 D3 <B 7 B
K
Platefome Type de fichier / Langage Designer

K Windows Phone / Windows Store XAML Visual Studio / Blend


iOS XIB / Storyboard XCode / Xamarin on Mac
>C0:7 1 1:/AA DF @=7 2 /:3 <2/@ /:3 <2/@ Android AXML Xamarin, Eclipse ou autre
I
>C0:7 1 D=7 2 % 6 =E /B3 & 7 ;3 AB/@B /B3 & 7 ;3 3 <2 AB@7 <5 </;3 En dehors de l’aspect réalisation, n’oublions pas que chacun des éditeurs que
I sont Microsoft, Apple et Google ont des préconisations quant au design de
CA3 <2@=7 2 /:3 <2/@ # 3 5 7 <B3 <BA /:3 <2/@ =<B@/1B R vos applications sur leurs plateformes. Vous pouvez les retrouver ici :
K Windows Phone : [Link]
K Windows Store : [Link]
iOS : [Link]
Pour l’utiliser, il suffira de compiler, de récupérer les librairies, et de référencer Android : [Link]
le coeur, ainsi que les différentes librairies dans les projets adéquats. Dans
notre petit exemple : CONCLUSION
Le regard qu’apporte Xamarin est prometteur. Couplé à MvvmCross, c’est
Plateforme Références à ajouter dans notre Solution Happly une merveille : gain de temps (3x pour 3 plateformes), code partagé dans les
Core (PCL) [Link] 80%, presque aucune limite technique et j’en passe ! Les seules limites qu’on
Windows Phone [Link] a pu trouver jusqu’ici s’arrêtent au décalage entre la sortie des dernières ver-
[Link] sions des SDK et la mise à jour sur Xamarin.
Windows Store [Link]
[Link] Remerciements
iOS [Link] MVVM (livre) : Jonhathan Antoine, Infinite Square
[Link] Conseils. MvvmCross : Arnaud Maichac, Happly-Sfeir
Android [Link] Vérification : Arnaud Maichac (Consultant .NET Happly-Sfeir)
[Link]
Andrés Talavera
Avant d’appeler une méthode du plugin, il vaudrait mieux s’assurer que le Développeur .NET Happly-Sfeir
mécanisme des plugins est instancié et que le plugin est bien chargé par le Microsoft Student Partner France

48 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page49

Firefox OS : découverte et développement

b
Nous vous en parlions dès le numéro 161 : l’arrivée du nouveau système mobile Firefox OS,
développé, soutenu et maintenu par la fondation Mozilla. C’est pourquoi il est important de
connaître aujourd’hui la situation de ce système, de son avancée et de sa position mondiale sur le
marché de la téléphonie.
Le projet de Firefox OS a été lancé en 2011 et 2 ans après, il était déjà dis- composants du téléphone de la plateforme de FirefoxOS. Ces compo-
ponible et utilisable. Ainsi, depuis son lancement les versions disponibles sants sont GPS, Bluetooth, USB, appareil photo, caméra, périphériques,
s’appuient sur le cycle de réalisations du navigateur Firefox : etc. De plus, il a la charge de démarrer le téléphone, mais aussi de per-
◗ 1.0 Février 2013 mettre d’appeler une personne ou encore de recevoir la radio.
◗ 1.2 Septembre 2013 basé sur Firefox 24
◗ 1.3 Janvier 2014 basé sur Firefox 28 GECKO Fig.2
◗ 1.4 Version en cours Gecko est le 'runtime', c’est-à-dire le moteur de rendu, ce qui permet
En février 2014, s’est déroulé le Mobile World Congress en Espagne, et d’exécuter des applications pour Firefox OS. Le but de Gecko est de lire
Mozilla y a dévoilé et montré les nombreux avancements de l’existant le contenu Web, et par conséquent les langages ouverts tels que HTML,
ainsi que des nouveautés intéressantes. Par exemple les nouveaux télé- CSS, JavaScript. Il garantit le bon fonctionnement des API avec par
phones et l’orientation de la nouvelle version majeure 2.0. exemple la prise en charge de la partie graphique, la gestion des
contacts, les alarmes, les droits d’accès, les SMS, etc.
ARCHITECTURE
Firefox OS (nom de code "Boot to Gecko" ou "B2G") est un système d’ex- GAIA Fig.3
ploitation Open Source pour les téléphones mobiles. Il possède un cœur Il s’agit de l’interface utilisateur de la plate-forme utilisateur de Firefox OS.
Linux, associé à un moteur de rendu Gecko. La différence par rapport Son rôle permet de gérer toutes les applications standard dont vous avez
aux autres fournisseurs touche les logiciels qui s’exécutent aussi bien sur besoin lors de l’utilisation d’un smartphone : l’accès aux réseaux sociaux,
le téléphone, que sur les ordinateurs, grâce à la technologie (web) utili- la messagerie... C’est-à-dire qu’il s’occupe de la partie que vous visuali-
sée. Elle doit permettre aux développeurs Web de programmer en sez et par conséquent, vous contrôler le verrouillage de l’écran, l’écran
HTML5 et en JavaScript, et en même temps de bénéficier de la puissan- d’accueil, etc. Ce niveau va permettre d’utiliser les différents périphé-
ce technique qu’offrent ces deux langages. La partie la plus complexe riques gérés par la couche Gecko à travers les API Web ouvertes.
pour eux est de comprendre l’intégrité, car l’interface affichée pour les
utilisateurs est une application Web. La sécurité
La sécurité est très importante, car chaque niveau d’architecture peut
Les couches subir une attaque à cause d’une faille de sécurité. De nombreux docu-
Un téléphone fonctionne comme un ordinateur de bureau, c’est-à-dire sur 3 ments liés à la sécurité touchent différents niveaux :
niveaux : tout d’abord un système d’amorçage, ensuite un système exploita- ◗ Le modèle,
tion (OS), et pour terminer le niveau des applications. Ces 3 niveaux indépen- ◗ Le système,
dants, tous aussi importants les uns par rapport aux autres, sont reliés entre ◗ Des applications,
eux pour pouvoir communiquer. Ainsi, vous trouverez : ◗ À l’installation et la mise à jour des applications,
◗ Au niveau des tests et du débogage.
GONK Fig.1
Il s’agit d’un noyau Linux, basé sur Android Open Source Project (AOSP). Les Fonctions
Il fonctionne comme un système d’exploitation. Il contrôle l’ensemble des Comme vous avez pu le voir un peu plus haut, la Roadmap des versions
Fig.1 est importante. Cependant les fonctionnalités nécessaires qu’attendent
les utilisateurs au niveau d’un smartphone, sont disponibles et peuvent
être contrôlées à travers des WebApps.
Les fonctionnalités indispensables concernent :
◗ La téléphonie, c’est-à-dire téléphoner, gérer ses contacts, envoyer et
recevoir des SMS, des emails,
◗ Le multimédia qui se traduit par la possibilité d’utiliser la caméra,
d’écouter de la radio ou de la musique,
◗ La configuration de base qui se traduit par gérer un calendrier, l’heure,

Fig.2
Fig.3

Juin 2014 > Programmez! 49


033_054v2_175 19/05/14 23:59 Page50

l'écran d’accueil, un clavier, des périphériques (USB, Bluetooth...), l'au- avec une fréquence de 1,2 GHz, équipé d’un écran 4.5 pouces et
tonomie (batterie). Mais aussi un Marketplace pour obtenir de nouvelles embarque un processeur double cœur (Dual Core).
b

applications. Une des particularités de ce smartphone est de permettre aux dévelop-


peurs de configurer la mémoire RAM en quelques clics pour choisir un
Les API Web téléphone qui pourrait posséder de 256 Mo à 1 Go. Ainsi leur permettre
Les API Web sont des logiciels indispensables pour un bon fonctionne- de vérifier si le projet Web fonctionne sur les différents modèles distri-
ment du téléphone. À partir de la version 1.2, Firefox OS compte plus de bués. Il est équipé d’une batterie de 1800 mAh, avec un support Dual
30 API Web natives pour améliorer les fonctionnalités au niveau du déve- SIM. Au niveau des composants externes, l’appareil bénéficie des tech-
loppement des applications Web. Certaines API étaient déjà présentes nologies WiFi, Bluetooth et la 3G/UMTS quadri-bande
dès le lancement de l’OS comme WebNFC et Data Store API, mais aussi (850/900/1900/2100).
Webkit, les API de vibration et de l’état de la batterie, Apache Cordova et
PhoneGap. LES AUTRES MODÈLES
La fondation Mozilla propose une compatibilité de Firefox OS pour des
LES TERMINAUX smartphones non partenaires. Grâce à cette ouverture, les appareils équi-
En 2014, une nouvelle vague de smartphones et de tablettes (7 modèles en pés de Android 4.0 (minimum) peuvent prétendre supporter Firefox OS à
tout) a été dévoilée bénéficiant de la dernière version de l’OS. L’ensemble la place du système qu’ils ont. Mais vous pouvez vérifier la configuration
de ces modèles sera disponible dans l’année. exacte de votre appareil avec l’aide en ligne
[Link]
L’entrée de gamme Cette page vous aide à savoir si le socle de l’appareil est basé sur un
Il s’agit d’un téléphone à destination des pays émergeants, car la particu- Linux 64 bits, et propose une suite d’étapes afin de valider si votre appa-
larité concerne le prix de 25 dollars. reil mobile est compatible.
Au niveau des caractéristiques, le modèle présenté est un Spredtrum
avec un processeur SC8621. Il se présente avec 1 processeur Cortex A5 DÉVELOPPEMENT
@ 1 GHz, 2 Gb de mémoire extensible et un petit écran 3.5-inch HVGA, ce Comme Firefox OS est composé d’une architecture à 3 niveaux, le déve-
qui correspond à une résolution de 320x240 pixels. Pour les composants loppement classique que vous pouvez utiliser, concerne le niveau GAIA,
externes, l’appareil bénéficie de WiFi, Bluetooth, FM, Camera... et de car les autres niveaux sont gérés par l’OS de Firefox.
nombreuses fonctionnalités basiques : SMS, Video Player , navigateur,
email, etc. Attention il est tout à fait possible de réaliser des développements sur les niveaux inférieurs,
cependant vous devez solliciter la fondation Mozilla pour connaître tous les détails.

Au-dessus Pour développer au niveau de la couche GAIA, il faut connaître la techno-


ZTE : le fabricant propose différents modèles ZTE Open avec Firefox OS. logie HTML 5, et aussi avoir des connaissances dans les modèles MVC
Le modèle ZTE OpenII disponible en février 2014, se compose d’un CPU pour respecter les bonnes pratiques de développement si vous travaillez
Qualcomm MSM7225A 1.0Ghz et GSM (850/900/1800/1900) en dual à plusieurs.
core 1,2 GHz, d’un écran 3.5'' HVGA (320x480 pixels), 256 de mémoire, Tout d’abord, un environnement de travail est nécessaire. Pour cela, vous
un disque SSD de 32 Gb. Au niveau des composants externes : une bat- avez besoin de posséder votre espace virtuel comme Foxbox, Virtual-
terie 1200 mAh, WiFi, Radio, microUSB, WiFi. Alcatel One Touch Fire est Box... et avoir installé GIT/GitHub.
un autre téléphone. Il se compose d’un écran 3.5'' HVGA (320x480 Ce dernier vous permet de voir les évolutions de votre code, les mises à
pixels) , d’un Qualcomm MSM7227A et GSM (850/900/1800/1900), de jour et les modifications de toutes les personnes qui contribuent au pro-
160 à 256 Mo de mémoire suivant le modèle, un disque SSD de 32 Gb. jet.
Dans cet environnement, pensez à installer 1 navigateur Firefox, l’émula-
Les tablettes teur Firefox OS et l’outil APP Manager (détails plus loin dans l’article). De
La tablette Foxconn InFocus est équipée d’un écran 10 pouces plus, il existe d’autres extensions pour déboguer ce que vous devez ins-
(1280x800 pixels) avec un processeur quadruple cœur de la gamme ARM taller si votre application a besoin d’utiliser les différents périphériques
Cortex A7 (A31) de fréquence 1,0 GHz, d’une mémoire de stockage 16 d’un téléphone.
Go, de 2 Go de RAM, d’un appareil photo arrière de 5 Mégapixels et Cette configuration vous garantit un espace se rapprochant d’un télépho-
d'une caméra frontale de 2 Mégapixels. Au niveau des composants ne Firefox.
externes : A-CPG, une batterie 7000 mAh, Wifi.
La tablette Vixen propose une tablette différente, comprenant un bipro- Les outils de tests
cesseur Cortex-A9 de fréquence 1,2 GHz, dotée d’un écran LCD HD 7 La réalisation des tests s’effectue en semi-automatique. Tout d’abord,
pouces, de 8 Go d’espace de stockage, d’une RAM de 1 Go, d’une vous devez passer votre application Web aux validateurs W3C pour être
caméra arrière de 2,0 Mégapixels et avant de 0,3 Mégapixel. Elle dispose certains de respecter les balises HTML. Cependant, si vous souhaitez
de la technologie WiFi. tester les fonctions spécifiques WebAPPs, vous utiliserez les outils pro-
posés par Mozilla, comme le simulateur.
POUR LES
CONTRIBUTEURS Simulateur
La fondation Mozilla propose aux contributeurs un téléphone appelé 'Fire- Le simulateur FirefoxOS est un add-on, disponible pour le navigateur Fire-
fox OS Flame' pour aider les développeurs dans la réalisation de leurs fox, sous licence GNU et fonctionne sur Linux, Mac et Windows. Grâce à
projets. Il s’agit d’un téléphone modulable à tous les niveaux, mais sur- ce simulateur, vous pouvez tester et suivre l’évolution de l’OS à partir de
tout permettant de tester leurs jeux, applications... Ce téléphone bénéfi- votre ordinateur. Ce simulateur est à destination des développeurs, brico-
cie des technologies suivantes : un Qualcomm Snapdragon MSM8210 leurs et à toutes les personnes qui veulent en savoir plus sur cet outil.

50 Programmez! < Juin 2014


033_054v2_175 19/05/14 23:59 Page51

tuer des tests unitaires. Bien entendu, à l’heure d’aujourd’hui Qunit est un
Fonctionnalités des outils les plus avancés au niveau des tests.

b
Au niveau des fonctionnalités de celui-ci, la version actuelle (4.0) propose
de nombreuses optimisations et corrections de bugs avec des évolutions APP Manager
au niveau MarketPlace, qui est utile pour simuler l’achat de nouvelles Il facilite la programmation d’applications grâce au prototypage et dépan-
applications comme Achat validé, non validé et remboursement. Bien nage en temps réel. Il se compose de plusieurs outils pour vous aider
entendu, la simulation du touchpad a été amélioré pour rendre votre sou- dans les développements Web. Grâce à cela, vous pouvez tester,
ris plus proche d’une utilisation tactile. déployer et dépanner les applications Web sur des téléphones Firefox OS
directement à partir d’un environnement de travail. Il améliore le proces-
Utilisation sus de développement et le débogage des applications Firefox OS ou
Pour bénéficier de l’outil dans votre navigateur, vous devez effectuer cer- lors de l’utilisation du simulateur, ou avec un appareil connecté.
taines étapes : Comme ceci, vous n’avez pas besoin d’utiliser d’outils ou de SDK supplé-
◗ Tout d’abord, vous téléchargez l’extension comme un add-on classique mentaires. En effet, AppManager va aider à déployer directement sur un
dans le navigateur Firefox c’est-à-dire à partir de la barre de menu « appareil, à valider les applications et à les déboguer à partir du périphé-
outils > modules complémentaires ». Vous effectuez une recherche de rique Fig.6.
'Firefox os' et vous installez l’extension. Au niveau de l’utilisation de AppManager, il améliore les outils existants
◗ Ensuite, pour exécuter le simulateur, vous vous rendez dans le menu pour fournir un environnement intégré de débogage et de déploiement, et
déroulant « outils > développeur Web > Firefox OS simulator » par conséquent remplace l’actuel tableau de bord du simulateur. Il per-
L’écran de configuration se lance automatiquement. Il se découpe en 2 met d’installer des applications hébergées ou empaquetées dans le simu-
parties : lateur
Une partie qui est représentée par un bouton, permettant de lancer le Ce gestionnaire d’applications affiche des informations supplémentaires,
simulateur et de l’arrêter. L’autre partie est le journal des applications qui sont utiles pour le développeur telles que : des informations sur l’ap-
Web que vous avez installé. Vous trouverez la possibilité de télécharger pareil connecté, effectuer des captures d'écrans, visualiser un meilleur
les vôtres pour vérifier la compatibilité ou à partir d’un lien internet. rendu du journal des applications déjà installées, etc.
Cette partie est importante, car elle est liée au fichier [Link] et Par ailleurs, l’utilisation de la console est accessible pour consulter les
si le simulateur détecte une erreur, vous serez alerté Fig.4. avertissements et les erreurs à l’intérieur de l’application. De plus, la
Le message signale la ligne qui pose problème. Ici, il s’agit d’un problème modification du code HTML et CSS est toujours possible.
de quote, mal fermé. Les outils sont très nombreux : vous pouvez consulter tous les détails à
Si votre fichier [Link] est correctement configuré, il sera partir de la page dédiée.
reconnu par le simulateur et peut être exécuté par la suite Fig.5.
Lorsque vous démarrez le simulateur, celui-ci effectue les mêmes étapes, LE PARTAGE
comme si vous possédiez un téléphone Firefox dans les mains. Il amorce SUR LE MARKETPLACE
les périphériques, charge l’OS et les applications déjà installées et celles Le partage des applications passe par un market ouvert, c’est-à-dire une
de votre journal (Dashboard). plate-forme de téléchargement, où vous trouverez différentes applica-
L’interface propose une taille simulée de 320x480 pixels, et pour naviguer tions et jeux pour votre téléphone.
entre les écrans, vous cliquez sur le bouton de la souris et faites glisser
tout en le maintenant enfoncé. Ainsi, vous verrez les applications inté- La préparation
grées et les applications que vous avez ajoutées. Une fois que votre application est terminée, vous devez la déployer sur le
Marketplace Firefox. Deux options s’offrent à vous pour la déployer.
Les autres outils
Tests unitaires Applications hébergées
Comme le langage de développement est HTML5/CSS /JavaScript, vous Les applications hébergées permettent de stocker vos applications sur un
pouvez utiliser n’importe quels outils génériques disponibles pour effec- serveur Web de votre choix, qui est accessible publiquement, comme
n’importe quel autre site Web.
Vous devez quand même créer le
fichier '[Link]' valide.
Si votre application ne comporte
que des pages statiques
(HTML/CSS /JavaScript) et sans
Fig.4 aucun traitement du côté ser-
veur, vous pouvez vous appuyer
sur GitHub. Cependant, si les
pages sont dynamiques, il est
Fig.5 préférable d’utiliser un hébergeur
générique qui possède de
bonnes capacités, ou un héber-

Juin 2014 > Programmez! 51


033_054v2_175 20/05/14 00:00 Page52

gement qui correspondra parfaitement à votre application, car l’espace Applications empaquetées
est dédié aussi bien pour les internautes que pour les possesseurs de Les applications empaquetées seront hébergées par le marketplace de
b

smartphones Firefox OS. Firefox, si vous ne souhaitez pas héberger chez vous. Pour cela, vous
Au niveau du code, vous devez créer un fichier d’installation qui se traduit devez créer le fichier '[Link]' pour rendre votre application
par un kit d’installation appelé [Link]. Web compatible et ensuite le transformer en fichier ZIP pour qu’il soit
reconnu dans le marketplace.
Q Le but d’une application empaquetée est d’avoir un moyen pratique de
D7 C; (EC :; BY7 FFB?97 J ?ED fournir des applications sur le marketPlace. Cela donne aux utilisateurs
F7 9A7 =;6F7 J > >J J F LEJ H;-?J ; 9EC 7 F? CED 7 FFB?97 J ?ED P?F de l’application plus d’assurance que l’application a été soigneusement
L;HI?ED étudiée pour la sécurité potentielle , la vie privée et les questions de capa-
:;L;BEF;H Q cité.
D7 C; KJ ;KH
KHB >J J F LEJ H;-?J ; 9EC La publication
S La dernière étape concerne l’envoi de votre application dans le market-
S place. Pour cela, vous devez vous rendre à l’adresse de la marketplace
pour vous faire connaître. [Link]
Vous arrivez sur l’écran de configuration qui se découpe en plusieurs par-
Ce fichier est composé de différentes informations au format JSON que ties. La partie supérieure propose de sélectionner le système d’exploita-
vous devez compléter. tion App Firefox. Vous pouvez aussi sélectionner de proposer une
Ensuite, vous devez prévoir une page d’installation HTML avec le script application payante.
suivant : La partie inférieure affiche deux onglets. Un pour hébergé et l’autre pour
emballé.
>J CB ◗ Si vous avez choisi d’héberger votre application, vous devez vous
8E:O reporter au paragraphe au-dessus et suivre la procédure.
F *7 =; ?DIJ 7 BB7 J ?ED F ◗ Si vous choisissez le mode emballé, c’est à dire que vous voulez dépo-
I9H?FJ ser votre application sur le MarketPlace de Firefox, vous devez alors
L7 H C7 D?<;IJ /HB >J J F 0EJ H;-?J ; 9EC 7 F? F7 9A7 =; C7 D?<;IJ construire votre fichier ZIP
L7 H H;G D7 L?=7 J EH CEP FFI ?DIJ 7 BB*7 9A7 =; C7 D?<;IJ /HB Bien entendu, si une erreur est repérée, une ou plusieurs informations
H;G EDIK99;II <KD9J ?ED Q seront affichées.
7 B;HJ J >?I H;IKBJ EH?=?D L’étape suivante concerne la configuration de l’écran de présentation,
S c’est-à-dire que vous renseignez le nom, la description, une capture-
H;G ED;HHEH <KD9J ?ED Q écran, la catégorie où elle sera rangée, etc.
7 B;HJ J >?I ;HHEH D7 C; Enfin, pour apparaître dans le marketplace, un petit peu de patience est
S nécessaire, car quelques vérifications et contrôles sont effectués pour
I9H?FJ certifier votre application comme conforme.
8E:O
>J CB Où l’acheter
Actuellement les points de vente en France sont limités, voire inexistants,
car même si les pays émergeants et de nombreux pays européens le
Il s’agit d’un script javascript, dont vous devez spécifier le chemin com- commercialisent, les Français souhaitant en obtenir un, doivent l’acheter
plet du '[Link]'. sur internet comme sur Ebay ou Amazon. On pourrait imaginer qu'un opé-
L’installation se fait automatiquement grâce à la fonction InstallPackage. rateur français les proposent dans son catalogue hors forfait puisqu’ils
Bien entendu, il faut prévoir une réponse pour signaler un succès ou un sont compatibles avec l’ensemble des opérateurs que nous connaissons.
problème. Cependant, différents communiqués ont dévoilé qu’à partir du premier
Ces 2 fichiers doivent se placer dans le même dossier pour permettre semestre (été) 2014, certains modèles pourraient être disponibles en
l’installation de l’application. France équipés de Firefox OS.

L’avenir
L’avenir de Firefox OS passe par une nouvelle version majeure, avec une
refonte du moteur principal. Cette version va répondre aux différentes
attentes et absences. L’avantage de ce changement permettra de réali-
ser de nouvelles applications qui manquaient et de suivre l’évolution du
Web. Une des technologies prometteuses concerne la Technologie
WebRTC, qui est une technologie phare. Elle apporte des fonctionnalités
majeures au niveau de la voix, de l’audio et des échanges de types peer-
to-peer.

Christophe Villeneuve
consultant IT pour Neuros, auteur du livre « PHP & MySQL-MySQLi-PDO, construisez votre appli-
Fig.6 cation », aux Éditions ENI. Rédacteur pour WebRIVER, membre des Teams DrupalFR, AFUP,

52 Programmez! < Juin 2014


033_054v2_175 20/05/14 00:00 Page53

Votre application WEB sur Firefox OS

b
Firefox OS vous offre la possibilité de réaliser des applications mobiles HTML 5 sans
connaissances supplémentaires. Cette compatibilité vous permet de développer vos projets en
une seule fois, mais utilisables sur l’ensemble des systèmes du marché : ordinateurs de bureau,
portables, tablettes. Pour rendre votre application web portable, vous devez respecter les
standards W3C. Ainsi elle peut être transformée en une application mobile pour Firefox OS en un
minimum de temps fonctionnel sur Firefox OS.
La migration d’un projet web ou d’une application (API) s’effectue en plu- Vous pouvez spécifier un nom, qui correspond au nom de la personne ou
sieurs étapes. Ces différentes étapes nécessitent très peu d’apprentissa- de la société qui a réalisé l’application. Cette information est utile pour le
ge, car elles s’appuient sur les normes HTML5. Une application web doit market, lorsque les utilisateurs voudront connaître les auteurs du projet.
être autonome et par conséquent pouvoir utiliser le cache de l’appareil
pour être toujours disponible même si vous ne possédez pas de U:;L;BEF;HV Q
connexion internet. UD7 C;V U0EJ H; DECV
UKHBV U>J J F LEJ H;-?J ; 9ECV
S
ÉTAPE 1 : LE MANIFEST
Le 'Manifest' se présente sous la forme d’un fichier, appelé Lorsque vous créez une application web (web App), il est utile que celle-ci
'[Link]'. Il se compose d’informations qui interagissent entre le puisse toujours fonctionner même si vous n’êtes plus connecté, c’est à
navigateur (qui est votre OS) et l’application Web Open Web App. dire, si vous vous retrouvez en mode hors connexion. Pour activer le
Il s’agit de l’étape la plus importante et la plus compliquée, car ce mani- cache, vous devez spécifier le chemin absolu vers le fichier '[Link]-
feste est structuré au format JSON. Comme tous fichiers, certains fest', qui se présente de la manière suivante :
champs sont obligatoires comme le nom, la description, l’affichage des
icônes et les auteurs. Mais de nombreuses options sont disponibles pour U7 FF97 9>;6F7 J >V U 97 9>; C7 D?<;IJ V
améliorer l’autonomie et la possibilité d’avoir une meilleure compatibilité
comme les permissions, le cache, les langues... Au moment du déploiement, vous devez pouvoir identifier vos parte-
naires ou les sites qui pourront proposer votre application. Ici, nous allons
fichier [Link] permettre à n’importe qui d’installer l’application et vous devez ajouter la
Ce fichier '[Link]' se positionne au niveau de la racine de votre ligne suivante :
site web et se décompose de la manière suivante :
Les informations indispensables concernent la version, le nom de l’appli- U?DIJ 7 BBI67 BBEM;:6<HECV 4U V5
cation, la description :
La langue est très importante, surtout si vous désirez être utilisé par le
UL;HI?EDV U V monde entier. Pour cela, la déclaration s’effectue par 'locales'. Il s’agit
UD7 C;V U0EJ H; 7 FFB?97 J ?ED V d’une surcouche 'custom' des informations renseignées un peu plus haut
U:;I9H?FJ ?EDV U& 7 :;I9H?FJ ?ED :; LEJ H; 7 FFB?97 J ?ED M;8V dans le fichier. Ainsi, dans une langue, vous pouvez fournir une descrip-
tion dans une autre langue, spécifier une URL spécifique pour le pays,
Pour exécuter l’application web, c’est-à-dire l’exécution du fichier etc.. Par conséquent, nous ajoutons une nouvelle langue, « l’Anglais »
[Link], vous spécifiez le chemin complet pour lancer celle-ci. Ici le
fichier [Link] se trouve à la racine de votre site web. UBE97 B;IV Q
U;DV Q
UB7 KD9>6F7 J >V U ?D:;N >J CBV U:;I9H?FJ ?EDV U ;I9H?FJ ?ED E< OEKH M;8 7 FFB?97 J ?ED ?D J >;
FHEFEI;: B7 D=K7 =;V
Pour afficher votre application dans la galerie des lanceurs de votre télé- U:;L;BEF;HV Q
phone, il faut définir des icônes avec des tailles différentes, car tous les UKHBV U>J J F LEJ H;7 FFB?97 J ?ED 9ECV
téléphones ne sont pas fabriqués de la même façon, avec des tailles dif- S
férentes. Ici nous définissons 3 tailles des 6 dimensions possibles (max S
256x256), en spécifiant le chemin absolu du fichier icône. Celle-ci est une S
image PNG, qui peut être réalisée avec n’importe quel logiciel de DAO
que vous pouvez utiliser. Comme vous vous trouvez avec 2 langues : le français et l’anglais, vous
choisissez une des deux qui servira de langue par défaut, par exemple
U?9EDIV Q l’anglais :
U V U ?C7 =;I ?9EDI 7 FF?9ED FD=V
U V U ?C7 =;I ?9EDI 7 FF?9ED FD=V U:;<7 KBJ 6BE97 B;V U;DV
U V U ?C7 =;I ?9EDI 7 FF?9ED FD=V
S Pour faire fonctionner une application, celle-ci doit identifier les API qu’el-

Juin 2014 > Programmez! 53


033_054v2_175 20/05/14 00:00 Page54

le compte utiliser et qui nécessitent l’autorisation de l’utilisateur. Cette Tout d’abord, la ligne qui commence par #, correspond à la version des
opération se charge de définir les droits d’utilisation. Il existe de nom- fichiers cachés. C’est à dire que si vous modifiez le contenu d’un de ces
b

breuses options pour contrôler les droits de votre application. fichiers, il faut changer le numéro de version comme ceci, le cache sera
Pour notre exemple, il est nécessaire d’activer l’option 'systemXHR' qui automatiquement régénéré.
permet de créer des requêtes HTTP sans aucune restriction sur l’origine. L’autre point à connaître, concerne les fichiers « .htaccess »,
La configuration se présente de la manière suivante : « [Link] », « [Link] » qu’il n’est pas nécessaire de
cacher, car ils sont déjà utilisés au niveau général de l’environnement.
UF;HC?II?EDIV Q L’opération qui vient d’être présentée dans cette étape va télécharger les
UIOIJ ;C2#,V QS fichiers sur l’appareil. Ainsi, l’application fonctionnera même lorsque
S celui-ci n’est plus connecté à Internet.

Configuration du serveur web ÉTAPE 3 : LES TESTS


Le fichier '[Link]' est considéré comme un type (appelé mime- Il s’agit d’une étape importante dans le processus, car si vous ne testez
type). Cela permet au navigateur de pouvoir traiter correctement ce pas votre application web, des effets de bords non souhaités peuvent
fichier en fonction de son contenu. Pour effectuer cela, vous devez modi- apparaître.
fier la configuration de votre serveur (Apache, Nginx, IIS...) ou dans le C’est pourquoi la vérification est nécessaire.
fichier .htaccess. Nous privilégions la création d'un fichier .htaccess pour Ces tests s’effectuent avec le simulateur de FirefoxOS qui est disponible
que ce 'mime-type' soit pris en compte. Pour cela, nous ajoutons dans ce comme plug-in pour le navigateur Firefox. Nous vous conseillons de vous
fichier la ligne suivante : rendre sur l’article précédent, qui explique les différentes étapes pour uti-
liser ce simulateur.
::.OF; 7 FFB?97 J ?ED N M;8 7 FF C7 D?<;IJ @ IED M;87 FF
ÉTAPE 4 : DÉPLOIEMENT
ÉTAPE 2 : ACTIVER LE CACHE Lorsque les 2 précédentes étapes ont été réalisées, il est important de
Déclaration signaler que votre application est disponible. Pour cela, vous devez l’en-
Pour activer le cache et rendre votre application web utilisable hors voyer au 'Market Place' de Firefox OS, qui permet que votre projet soit
connexion, vous devez ajouter un tag supplémentaire dans la balise disponible auprès des millions d’utilisateurs à travers le monde. Pour se
HTML de votre page de la manière suivante : faire référencer dans le 'Market Place' de Firefox OS, vous vous rendez à
l’adresse Internet suivante : [Link]
>J CB C7 D?<;IJ VE<<B?D; 7 FF97 9>;V
W Nous vous conseillons de vous rendre sur l’article précédent, qui montre
>J CB les différentes possibilités qu’offre le Market Place.

Il s’agit d’un pointeur qui sera en place lors de l’utilisation de votre appli- Ressources
cation. Ainsi, vous pouvez créer votre propre [Link] dans les Manifest
fichiers à télécharger. [Link]

::.OF; J ;NJ 97 9>; C7 D?<;IJ C7 D?<;IJ Documentation du cache


[Link]
Fichier [Link] Simulateur Firefox OS :
Ce fichier '[Link]' se positionne à la racine de votre site web. Il [Link]
s’agit d’un fichier texte contenant, sur une ligne, le nom du fichier de
votre application. Le fichier '[Link] estnécessaire pour le bon Article source original de David Walsh
fonctionnement de l'application car vous y enregistrez votre fichier [Link]
[Link], les fichiers CSS, images, JavaScript...
Bien entendu avec chaque fichier, il ne faut pas oublier le chemin, et la L’ensemble des sources et la structure du dossier sont disponibles en
représentation qui se présente de la manière suivante : téléchargement sur le site Programmez

# ' ($ ! -. Conclusion
L;HI?ED Il est très facile de rendre une application disponible sans être connecté.
L’avantage de s’appuyer sur le cache permet d’étendre les possibilités
?D:;N >J CB des applications de type WebAPP pour vos jeux, animations, applica-
9II :7 J 7 9II tions.... Ainsi, il n’est pas nécessaire d’effectuer de développement sup-
?C7 =;I BE=E FD= plémentaire ou d’utiliser un SDK spécifique. Enfin, l’ensemble du projet
?C7 =;I 87 D:;7 K FD= utilise toutes les fonctionnalités HTML 5, qui évoluent au fil des versions
@ 7 L7 I9H?FJ B?8H7 ?H?; @ I de l’OS de Firefox.
@ 7 L7 I9H?FJ 97 9>; @ I
@ 7 L7 I9H?FJ 7 F? @ I Christophe Villeneuve
Consultant IT pour Neuros, auteur du livre « PHP & MySQL-MySQLi-PDO, construisez
votre application », aux Éditions ENI. Rédacteur pour WebRIVER, membre des Teams DrupalFR,
Le contenu de ce fichier comporte plusieurs particularités, qui sont des AFUP, [Link], Drupagora, PHPTV.
standards du format HTML 5.

54 Programmez! < Juin 2014


055_056_175 19/05/14 23:03 Page55

Brown Bag Lunch :


la pause déjeuner technique

a
Connaissez-vous les BBL ou Brown Bag Lunch, littéralement
déjeuner avec un sac brun ? Le principe est simple : durant le
déjeuner, une mini conférence technique est organisée autour du
panier-repas brun, les fameux brown bag lunch. L’événement
dure environ 1 heure. Vous trouvez un speaker, vous lui achetez
son déjeuner, vous trouvez une salle de réunion. C’est tout.
Devant 10-20 personnes, le speaker parle d’un sujet défini à
l’avance. Une autre manière de déjeuner. En France, les BBL se
développent un peu partout. Retours d’expériences ! ou poser des questions. Cette édition a eu un
franc succès avec plus de 30 participants.
Importateur du BBL dans le présenter un sujet autour des services proposés C’était désorganisé, mais c’était assez riche
nord de la France par Amazon avec AWS. C’était notre premier dans le contenu. Pas moins de 20 personnes
Cyril Lakech, développeur Web et Java chez BBL chez Adeo, et on a tout de suite eu 25 per- ont pris la parole lors de ce BBL et une dizaine
Adeo, créateur et organisateur du Ch'ti JUG et sonnes. Mathieu nous a présenté comment de discrets ont simplement écouté ce qui se
de Devoxx4Kids Lille, speaker à Devoxx France créer une plateforme de crawling de site en utili- disait sur le sujet. Encore une fois, le concept a
sur Git++, importateur du concept BBL dans le sant les différents services d’AWS comme EC2, plu et les participants demandaient déjà quand
nord de la France. Il revient sur son expérience. S3, SQS, IAM... c’était très technique et ça a serait la prochaine édition !
« J’ai vu se développer les BBL via twitter et ça beaucoup plu. Certaines personnes ne connais- Du coup, avec mon équipe de développement,
m’a tout de suite donné envie d’en organiser à saient presque pas les services d’Amazon et on a voulu préparer une présentation d’Angular-
Lille. J’ai donc référencé mon entreprise sur la grâce à ce BBL, ils pouvaient lister plusieurs ser- JS; ce framework intéresse beaucoup de
liste des lieux se proposant d’en accueillir sur le vices majeurs de la plateforme. Cool ! monde dans notre entourage, et il y avait une
site : [Link] Puis on s’est aperçu que pas mal de monde forte demande pour qu’on adresse ce sujet lors
groupeadeo semblait intéressé par NodeJS sur le réseau col- d’un BBL. C’est donc une présentation avec 4
Mais je n’ai pas reçu de propositions immédiate- laborateur interne de l’entreprise. Alors on a speakers qu’on a organisée. Une fois encore
ment, alors je suis parti à la pêche aux sujets qui organisé un BBL sur le format openspace confé- une trentaine de personnes sont venues assis-
pourraient intéresser la communauté locale des rence. Toutes les personnes intéressées par le ter à ce BBL pour découvrir AngularJS. C’était
développeurs. sujet NodeJS pouvaient venir pour participer à très enrichissant de préparer et de présenter
Un camarade de classe m’a proposé de venir un atelier d’échange pour comprendre, débattre cette session, car même si le contenu de la pré-

Juin 2014 > Programmez! 55


055_056_175 19/05/14 23:03 Page56

sentation était assez simple, cela nous a aidés à


comprendre comment expliquer AngularJS à
Romain Linsolas,
d’autres développeurs. On en a profité pour dire DÉVELOPPEUR ET LEADER TECHNIQUE SPÉCIALISÉ JAVA,
tout le bien qu’on pense de ce framework, et au WEB ET USINE LOGICIELLE POUR SOCIÉTÉ GÉNÉRALE.
a

passage, on a quand même appris quelques « Je suis également speaker occasionnel, en avons su garder cet état d’esprit, et c’est
astuces sur le sujet en préparant notre présen- particulier pour Devoxx et Devoxx France. Je cela que j’apprécie dans les BBL.
tation. porte les deux casquettes des brown bag Cette année, ma société a été sponsor de la
Avec Hubert Sablonnière, nous avions été rete- lunches : d’une part je suis bagger, c’est-à- conférence Devoxx France. Nous avons eu
nus pour être speakers à Devoxx France avec dire que je présente des sujets auprès d’en- la chance d’avoir une demi-douzaine de ses-
un sujet autour de l’amélioration de la qualité treprises qui en font la demande, et d’autre sions retenues par le comité. Afin de se pré-
des projets avec l’utilisation de Git. Quoi de part je joue le rôle d’hôte en accueillant des parer le mieux possible, nous avons décidé
mieux qu’un BBL pour tester notre présentation présentateurs à la Société Générale. d’utiliser ce format du BBL pour permettre à
avant Devoxx France pour récolter des retours Mon aventure a commencé en novembre nos présentateurs de se rôder, et ainsi de
et pour répéter nos blagues devant un public 2012 par un billet de David Gageot sur son peaufiner leurs présentations. Quand on voit
moins conséquent qu’une salle de 200 per- blog ([Link] les retours très positifs qui ont été faits sur
sonnes ? On a présenté notre sujet devant une En passant indépendant, il proposait de venir nos présentations durant la conférence, on
vingtaine de personnes, ce qui nous a aidés à faire des BBL dans les entreprises. Connais- se dit que c’est aussi là le but de devenir un
améliorer notre présentation en récoltant de sant David, j’ai sauté sur l’occasion en l’invi- bagger : s’améliorer et avoir des retours
nombreux retours très intéressants auprès du tant début 2013 à la SG. C’est à peu près à constructifs sur les présentations.
public. À la suite de ce BBL, nous en avons pro- ce moment-là que le mouvement BBL est né
fité pour échanger autour de l’organisation d’un sur Paris, avec la création du site Que voudrais-je améliorer ou changer ? Pas
hackathon chez Adeo en juin prochain. [Link] par Nathaniel grand-chose à vrai dire. J’aimerais toutefois
On a donné ce même BBL sur Git avec Hubert Richand. Cela m’a poussé à contacter cer- profiter de cette structure pour pousser des
dans une autre société, Ikomobi, un peu plus taines de mes connaissances pour venir par- personnes en interne à devenir de vrais pré-
tard pour encore mieux se préparer et partager ler devant mes collègues. Le mouvement sentateurs. J’ai remarqué que certains hési-
notre vision sur la qualité de l’historique du code était ainsi lancé à la SG. Le hasard du calen- tent à se lancer par timidité ou parce qu’ils
source avec Git. drier a fait que c’était bien un David qui fut pensent ne rien avoir à dire d’intéressant.
On ne connaît pas encore les dates des pro- notre premier bagger à la SG, mais il s’agis- Leur permettre d’exécuter une courte pré-
chains sujets, mais on va très certainement sait de David Pilato, venu nous présenter le sentation - 10 à 15 minutes maximum - pour-
reparler de NodeJS avec une présentation de sa moteur de recherche ElasticSearch. Pour rait être un moyen de changer cela, et qui
mise en application sur un projet avec le frame- l’anecdote, il faut savoir que David Pilato est sait, de peut-être faire naître des vocations !
work KrakenJS. Le sujet MongoDB intéresse un accroc des BBL, il doit facilement en pré- Un point qui me tiendrait à cœur concernant
aussi beaucoup de monde, à suivre. senter un par semaine. les BBL : sortir du domaine technique.
En résumé, les BBL sont devenus une excuse Finalement, après une quinzaine de mois de Aujourd’hui, tous les BBL que j’ai organisés
pour la communauté des développeurs pour se BBL chez nous, on peut en faire un bilan sont des BBL tournant autour du développe-
réunir et échanger autour d’un verre après les extrêmement positif. Nous avons accueilli ment logiciel ou de la technique en général.
présentations. C’est l’occasion d’apprendre une trentaine d’intervenants sur des sujets J’aimerais tellement pouvoir proposer des
des choses pendant le temps du midi. C’est très variés : bases NoSQL, langages alterna- BBL sur des sujets complètement différents,
également un formidable laboratoire pour se tifs comme Scala, problématiques de tests comme l’astronomie, la physique, etc. Mais
préparer à donner une conférence pour tester (en particulier en JavaScript), etc. Désor- cela est plus compliqué à mettre en place,
une présentation. Les BBLs permettent à ceux mais, à chaque session, nous atteignons les déjà par manque de contact. Je vois l’initiati-
qui souhaitent partager leur savoir avec les cinquante personnes présentes dans la salle, ve très courageuse d’Aude Amarrurtu et
autres de faire connaître les bonnes pratiques et et on se voit malheureusement obligé de Betty Moreau qui ont lancé l’année dernière
évangéliser sur des sujets variés. Bref, les BBLs refuser du monde ! les BBL pour le monde des RH. Nous autres
c’est un moyen incontournable pour animer les développeurs, avons la chance de vivre dans
communautés de développeurs ! » Nous avons eu plusieurs fois l’occasion de un milieu où le partage est omniprésent et
nous poser la question de l’affluence très même encouragé. L’initiative des BBL s’ins-
importante chez nous. Que faire pour per- crit parfaitement dans cet état d’esprit, et
mettre à tous de bénéficier de ces BBL ? faire de ce mouvement un succès n’est pas
Louer, de plus grandes salles - voire des en soi si compliqué. Nous avons ainsi
amphithéâtres - a été évoqué. Personnelle- accueilli notre centième bagger inscrit sur le
ment, je m’y suis opposé. D’une part à cause site [Link] début mai.
de la complexité induite par la location de Mais dans les autres domaines, en particulier
telles structures, et d’autre part parce que celui des RH, cette notion de partage n’est
cela ne correspondrait plus à l’idée que je pas inscrite dans les gènes. Cela fait que je
me fais de ces événements : quelque chose suis encore plus admiratif du mouvement
de convivial, organisé et exécuté dans une BBL RH, et je serais le premier ravi de voir
ambiance bon enfant. Malgré la présence de des BBL apparaître sur de nouvelles disci-
nombreuses personnes, je crois que nous plines ! ».

56 Programmez! < Juin 2014


057_058_175 19/05/14 23:06 Page57

Refactoring, les fondamentaux


Il existe un terme français
exact pour exprimer l’idée

a
de refactoring : réusinage.
Bien que peu employé, ce
terme est important car il
permet de comprendre le
concept derrière un mot
souvent utilisé de manière
inexacte pour désigner toute
modification de code
existant.
Au même titre qu’un objet issu d’une chaîne de
fabrication qui ne correspond pas aux stan-
dards de qualité retourne à l’usine pour y être
retravaillé ou refondu, un morceau de code
peut être réusiné. Cette idée est la pierre angu-
laire du refactoring : retravailler un morceau de
code sans changer ses fonctionnalités origi-
nales. dans les sources. Par conséquent, un code Stratégie
Dans cet article, nous allons étudier les bien factorisé améliore la testabilité. Le cas Bien que n’étant pas destinée à ajouter de nou-
diverses motivations menant à cette démarche, échéant, il ne sera donc plus nécessaire de velles fonctionnalités, l’opération de refactoring
la stratégie à adopter pour minimiser les risques reporter une correction d’anomalie à chaque n’est pas anodine. Elle vise à modifier du code
des opérations de refactoring et enfin les diffé- endroit où le code était présent, limitant ainsi et peut donc causer des régressions comme
rentes techniques utilisées pour mener à bien la probabilité d’oubli sur le long terme. tout développement. Changer tout un pan de
ces opérations. Permettre d’étendre votre application. Dans code d’un coup est donc proscrit : il est néces-
une application réutilisable (framework, biblio- saire de procéder prudemment.
Motivations thèque…), votre code devra fournir la possibilité Afin de se prémunir contre les régressions, ou
Les opérations de refactoring peuvent avoir d’être étendu. tout au moins d’être en mesure de les identifier
diverses motivations, que l’on peut répartir en Pour cela, dans les langages objets, on peut le plus tôt possible, le code qui va être modifié
trois grandes catégories : permettre par exemple l’héritage doit être couvert par des tests automatisés (uni-
Faciliter la maintenance. Votre code doit fonc- ou la délégation. taires et d’intégration). Si exceptionnellement
tionner à un instant T, mais doit aussi permettre Optimiser les performances. Une fois que de tels tests n’existent pas déjà, ou ne sont pas
à un autre développeur d’apporter des évolu- votre code fonctionne correctement, qu’il est complets, les écrire est la première chose à
tions ou de corriger des anomalies. Pour optimi- maintenable et réutilisable, le refactoring de vos faire. On parle dans ce cas de tests de caracté-
ser le temps d’intervention, le code doit être algorithmes permet d’optimiser le temps de cal- risation. On comprend alors l’importance d’écri-
compréhensible immédiatement. Pour ce faire, cul ou la consommation de ressources afin re les tests au moment du développement :
il existe trois angles de travail : la lisibilité, la d’améliorer l’expérience utilisateur (cas d’une cela facilite le travail des développeurs qui tra-
modularité et la factorisation du code. application front), ou encore de minimiser les vaillent après en leur offrant une protection
◗ La lisibilité comprend toutes les modifications délais de traitement (cas d’un traitement de contre les régressions et en ne leur déléguant
de forme telles que la précision du nommage, masse ou d’accès à des bases de données). pas toute la charge de travail de l’écriture des
l’espacement du code (éviter de compresser Ces motivations sont sous-tendues par une tests.
un enchainement d’opérations en une seule motivation générale : la motivation écono- Quand le harnais de test est présent, tout refac-
ligne peu lisible). Ces attentions, répétées sur mique. En effet, la maintenabilité permet d’ef- toring doit être effectué de manière itérative, en
des milliers de lignes de code, améliorent fectuer facilement des corrections ; procédant pas à pas. De cette manière, on
grandement le temps de compréhension du l’extensibilité permet d’ajouter des fonctionnali- effectue une petite modification, on teste, on
code et donc la productivité. tés à moindre coût et l’optimisation permet passe à la modification suivante, et si celle-ci
◗ La modularité correspond au découpage de la d’économiser des ressources et d’améliorer la cause une anomalie, on revient un cran en arriè-
logique en entités facilement testables et productivité de l’utilisateur. Ces trois axes de re et on reprend en changeant d’approche.
réutilisables. Ceci facilite aussi la localisation travail diminuent les coûts liés aux travaux de Comme pour le code « de production », le code
d’anomalies. développement. des tests doit rester lisible et bien découpé. En
◗ La factorisation de code permet de centraliser Voyons maintenant comment réaliser les opéra- effet, celui-ci vivra aussi longtemps que le code
une logique, c’est-à-dire un même code qui tions de refactoring en réduisant au maximum testé et sera donc aussi sujet aux interactions
était initialement présent à plusieurs endroits les risques de régression. avec les autres développeurs. De plus, lors-

Juin 2014 > Programmez! 57


057_058_175 19/05/14 23:06 Page58

qu’ils sont bien découpés et nommés, il est aisé une constante qu’il faut extraire. prévisualiser les changements dans les fichiers
d’identifier la portion de code qui est en cause ◗ L’extraction de fonction sert à faciliter la com- sources induits par un refactoring. Ceci s’avère
si l’un d’entre eux échoue, sans lire le code préhension au premier coup d’œil ; attention, particulièrement utile dans le cas où l’opération
source du test. pour ce faire, il faut minimiser le nombre de de refactoring est sensible, comme par
Enfin, si les tâches de refactoring peuvent paramètres. exemple lorsqu’elle touche des occurrences
◗ L’extraction de classe remplit le même objec-
a

paraître fastidieuses, c’est parce qu’elles ne textuelles, c’est-à-dire des morceaux de code
sont pratiquées que de manière sporadique, en tif quand une classe devient trop longue ou ne bénéficiant pas de système de typage fort
dernier recours. Pratiqué régulièrement, par trop complexe. Dans ce cas, il faut faire parti- vérifié à la compilation (fichiers de configura-
petites touches au cours de chaque nouveau culièrement attention à bien conserver les tion, fichiers de templating, langages dyna-
développement, le refactoring permet d’avoir fonctionnalités existantes au moment de l’ex- mique) ainsi que les commentaires.
constamment du code propre. Cela est compa- traction grâce au harnais de tests explicité ci- Les spécificités entre langages ont une influen-
rable au fait de ranger son bureau : si cette dessus. Il faut également penser à répercuter ce sur les outils de refactoring, qui restent diffi-
tâche est effectuée régulièrement, on trouve ce changement au niveau des tests unitaires. ciles à implémenter pour les langages à typage
rapidement le document, stylo ou ustensile Un autre avantage est la généralisation ainsi faible (tel que JavaScript). Cependant, certains
recherché. Sinon, les documents s’entassent obtenue. IDE modernes, comme IntelliJ IDEA, mettent
anarchiquement, masquant d’autres éléments, Le déplacement consiste à déplacer du code tout de même à disposition des outils pour de
et font que la moindre recherche ou utilisation dans un endroit plus pertinent. Concrètement, tels langages.
du bureau est pénible et nuit à la productivité. cela peut être le déplacement d’une méthode Enfin, même si le support du refactoring reste le
statique vers une classe utilitaire, ou d’une point fort des IDE, les éditeurs de texte avancés
Techniques phares méthode d’instance dans la classe d’un objet proposent des fonctionnalités comparables. On
Les tâches de refactoring peuvent également du contexte courant. peut mentionner par exemple la sélection mul-
être rendues plus faciles par la maîtrise de diffé- Il existe deux cas particuliers dans le contexte tiple dans Sublime Text (multiple selections) et
rentes techniques à utiliser suivant la nature du de la programmation objet : la commande de substitution (substitute) dans
refactoring à effectuer. ◗ pull up, déplacement depuis la classe couran- Vim.
L’extraction est le groupe de techniques le te vers sa super-classe,
plus fréquent. L’extraction de code consiste à ◗ push down, depuis la classe courante vers Conclusion
déplacer un morceau de code cohésif, c’est-à- une sous-classe. Pour conclure, 3 aspects essentiels du refacto-
dire ayant un rôle précis, dans une nouvelle Le renommage peut concerner une classe, ring sont à retenir.
unité de code réutilisable. Cette unité peut être une méthode ou un attribut, après une revue de Le refactoring facilite la maintenance, améliore
une variable locale, une fonction ou une unité code, un changement de comportement de la l’extensibilité et les performances de vos appli-
de compilation (appelée classe en paradigme méthode ou pour corriger une faute d’ortho- cations, en un mot le refactoring diminue les
objet). Cela permet de découper une unité de graphe. Comme nous l’avons vu plus haut, le coûts liés au développement.
code trop longue, donc peu lisible, ou bien de nommage est capital pour faciliter la compré- Il est nécessaire de procéder avec prudence,
factoriser du code redondant. hension du code pour les autres développeurs. avec un harnais de tests unitaires soignés et en
Quel que soit le type d’extraction choisi, la pro- Si votre API est publique, c’est à dire utilisée progressant par petites touches.
cédure reste la même : comme du code n’étant pas le vôtre, il est Les techniques de refactoring courantes (extra-
◗ isoler un morceau de code cohésif, important de bien vérifier les conséquences de ction, déplacement et renommage) sont auto-
◗ créer la nouvelle entité (variable, fonction ou votre renommage. matiquement exécutées par les IDE modernes
unité de compilation), Cependant, toutes ces différentes techniques et facilitées par les éditeurs de texte avancés.
◗ nommer cette dernière, sont dorénavant automatisables dans les envi- Cet article s’attachait à présenter les princi-
◗ déplacer le code identifié dans la nouvelle ronnements de développement intégrés (IDE) pales techniques, applicables à tous les lan-
entité. grâce à quelques outils clés. gages de programmation, mais chaque
Le nommage est capital : c’est l’équivalent d’un paradigme apporte ses propres techniques,
commentaire associé au bloc de code extrait IDE et outils comme par exemple les langages objet (extrac-
qui est présent à chaque emploi. Le nom doit Dans les IDE les plus courants (Eclipse, IntelliJ tion d’une super-classe ou d’une sous-classe,
donc expliciter l’intention de ce morceau de IDEA, Netbeans), les techniques explicitées remplacement de l’héritage par la délégation,
code de façon très précise et lisible, il doit ainsi plus haut sont directement intégrées. remplacement d’une condition par du polymor-
bien s’intégrer dans ses contextes d’utilisation. Ces environnements de développement s’oc- phisme, etc.) ou encore les langages fonction-
Cependant, chaque type d’extraction a ses par- cupent de la propagation des modifications nels (utilisation de fonctions d’ordre supérieur,
ticularités. dans le reste du code. Par exemple, quand on monadification...)
◗ L’extraction de constante permet de centrali- renomme un attribut (en paradigme objet), les Tout cela fait du refactoring une pratique incon-
ser les valeurs constantes comme les libellés accesseurs sont automatiquement et immédia- tournable du software craftsman, ce dévelop-
ou les codes numériques afin de faciliter leur tement renommés. La modification peut aussi peur moderne qui améliore constamment la
réutilisation et leur modification. être propagée dans les occurrences textuelles qualité, l’efficacité et la pérennité de ses pro-
◗ L’extraction de variable locale intervient (commentaires). grammes, qui choisit soigneusement ses outils
quand une expression devient trop complexe De plus, les outils de refactoring intégrés aux et les maîtrise parfaitement pour appliquer son
et nécessite une explication. C’est encore IDE sont capables de prévenir certaines erreurs savoir-faire.
plus important quand cette expression est uti- comme l’écrasement d’une variable dans la
lisée à plusieurs endroits du code. Si elle ne portée, ou scope, courante. Bastien Bonnet et Christophe Pelé
dépend pas du contexte d’exécution, c’est Ces outils offrent également la possibilité de Xebia IT Architects

58 Programmez! < Juin 2014


059_062_175 19/05/14 23:08 Page59

Du son dans vos apps avec le SDK


Javascript de Deezer

d
L’API Deezer est un véritable miroir du site et de ses applications mobiles. Elle permet non
seulement d’accéder aux metadata du catalogue de 30 millions de titres, mais aussi de streamer de
la musique, d’enrichir la bibliothèque musicale des utilisateurs, d’accéder à l’historique d’écoutes,
aux recommandations, etc. Si vous n’êtes pas allés sur Deezer depuis longtemps, c’est le moment !

Il n’est plus nécessaire de présenter Deezer, le service de musique en Fig.1


streaming français compte plus de 12 millions d’utilisateurs actifs, répar-
tis dans plus de 180 pays.
L’API, quant à elle, a vu le jour en mai 2012 et son histoire ne déroge pas
à la règle. D’abord mise en place pour les partenariats avec les construc-
teurs, celle-ci a ensuite été ouverte à tous les développeurs souhaitant
intégrer de la musique dans leurs sites et applications mobiles. Les appli-
cations de Sonos, TuneWiki, Soundrop, ou encore Chordify, en sont
quelques exemples.

Introduction
L’API Deezer est exposée en REST. Pour la consommer, il suffit de faire
une requête HTTP. Il est toutefois plus simple de passer par les SDK pour
faire les requêtes API dans la mesure où ils gèrent automatiquement l’au-
thentification et les permissions des utilisateurs Fig.1.
En résumé, les SDK servent 3 fonctions principales : mais aussi pour développer des Deezer apps (applications à l’intérieur du
◗ le player, avec les méthodes permettant de lire des chansons, playlists, site et des applications mobiles Deezer, dans l’App Studio).
radios, etc. Pas besoin d’être un expert en streaming, c’est Deezer qui Notez que si vous avez « juste » besoin d’un player web, il existe aussi un
prend en charge la complexité du chargement. widget que vous pouvez créer à partir de n’importe quel album, chanson
◗ l’authentification des utilisateurs, avec support d’OAuth 2.0, ou playlist, dans le format que vous voulez. Il est responsive, son format
◗ les requêtes API, à utiliser pour tout le reste : les metadata sur le cata- s’adaptera au conteneur dans lequel il se trouve Fig.2.
logue, les infos utilisateurs, etc. Reprenons par exemple l’application montrée lors de la session
Nous allons détailler ici le SDK Javascript, qui servira pour vos sites web, Coding4Fun aux Microsoft TechDays. The Ugly Truth fait un quiz sur les
écoutes de vos amis. Sans rentrer dans tous les détails de la réalisation
Fig.3 de cette application, nous allons voir comment connecter un utilisateur,
récupérer son historique d’écoute et enfin utiliser le player Fig.3.

Créer une application Deezer


Pour commencer, il faut d’abord s’identifier en tant que développeur et
créer une application sur [Link] Il vous faudra pour
cela un compte Deezer, que vous pourrez créer gratuitement.
Cela vous permettra de récupérer un Application ID que vous utiliserez
pour initialiser le SDK Fig.4.

Fig.2

Fig.4

Juin 2014 > Programmez! 59


059_062_175 19/05/14 23:08 Page60

Charger et initialiser le SDK connexion. L’ouverture des popup en Javascript étant bloquée par les
Tout d’abord, il va falloir indiquer à votre site où trouver le SDK en ajou- navigateurs, il ne faudra exécuter cette méthode que lors d’un évènement
tant un lien vers le script : « click ».
Suite à la connexion, le retour à l’application est automatique à condition
B2A8?C BA2 M7CC? 23= 58;4B 344H 4A 2>< 9B <8= 3H 9BM B2A8?C
d

d’avoir bien paramétré la channelUrl. Attention par exemple à ne pas


Une fois intégré, il faut maintenant initialiser votre application avec deux mettre le préfixe http:// lors de la configuration de l’application sur le por-
paramètres : tail Deezer Developers Fig.5.
◗ l’app id, récupéré précédemment sur Deezer Developers,
◗ une channelUrl, qui doit pointer vers une page du site, qui ne contien- 5D=2C8>= ;>68= I
dra que le lien vers le script du SDK : , ;>68= 5D=2C8>= A4B?>=B4 I
85 A4B?>=B4 0DC7& 4B?>=B4 I
B2A8?C BA2 M7CC? 23= 58;4B 344H 4A 2>< 9B <8= 3H 9BM B2A8?C , 0?8 O DB4A <4P 5D=2C8>= A4B?>=B4 I
Avoir cette url est obligatoire car, en plus de permettre l’amélioration de 2>=B>;4 ;>6 O >>3 C> B44 G>D O A4B?>=B4 =0<4 O P
la communication entre le player et votre site (notamment sur les naviga- K
teurs anciens), elle est indispensable au bon fonctionnement de l’authen- K
tification. K I ?4A<B O4<08; 10B82/0224BB ;8BC4=8=6/78BC>AGP K
En effet, le SDK utilise un système d’iframe afin de communiquer avec K
Deezer lors du processus d’authentification. Pour ne pas polluer la struc- 3>2D<4=C 64C ;4<4=C G 3 O3H ;>68= 1C=P >=2;82: ;>68=
ture HTML de l’application, il est indispensable de créer une balise dans
laquelle le SDK pourra charger ces iframes. Pour qu’il puisse l’utiliser, il La fonction renvoie notamment le user token : la clé d’accès pour faire les
faudra lui attribuer l’id « dz-root ». requêtes sur l’API nécessitant des autorisations spécifiques. Une fois l’uti-
Attention à ne pas créer cette balise après l’exécution de [Link]. lisateur connecté, ce user token sera directement intégré dans les
requêtes faites sur l’API.
38E 83 M3H A>>CM 38E
B2A8?C Utiliser l’API
, 8=8C I Pour explorer tous les contenus de l’API, vous pouvez aller voir la docu-
0?? 3 O* $ (& / % % / P mentation complète : [Link]
270==4;)A; O7CC? * $ (& / $ " # 270==4; 7C<;P Il existe une méthode commune pour tous les points d’entrée : , 0?8,
?;0G4A I qui gère le cross-domain et qui inclut le user token.
>=;>03 5D=2C8>= IK Dans le cas qui nous intéresse, à savoir récupérer l’historique :
K
K , 0?8 O DB4A <4 78BC>AGP 5D=2C8>= A4B?>=B4 I
B2A8?C N
K
Authentification et permissions
Authentifier les utilisateurs permet de faire des requêtes avancées sur qui retourne le résultat au format json :
l’API, comme accéder à leur historique d’écoute. En effet, la fonction de
login prend en paramètre la liste des permissions souhaitées. Ici il sera I
nécessaire de demander la permission ‘;8BC4=8=6/78BC>AG’ pour L30C0M -
avoir accès à l’historique : pour des raisons de confidentialité, il est impé- I
ratif que l’utilisateur donne son accord. L’accès au catalogue ou la L83M L M
recherche sont publics et peuvent se faire sans être connecté. LA40301;4M CAD4
Un autre intérêt, et pas des moindres, les abonnés Deezer Premium pour- LC8C;4M L$ <4=M
ront écouter les chansons entières sans publicité. L;8=:M L7CC? F F F 344H 4A 2>< CA02: M
Que vous soyez sur desktop ou sur mobile, appeler la fonction L3DA0C8>=M L M
. va automatiquement ouvrir une nouvelle fenêtre de L?A4E84F M L7CC? 23= ?A4E84F 344H 4A 2>< BCA40<
5 3 1 5 3 <? M
LC8<4BC0<?M
L0AC8BCM I
L83M L M
L=0<4M L(74 % A>386GM
L;8=:M L7CC? F F F 344H 4A 2>< 0AC8BC M
LCG?4M L0AC8BCM
K
L0;1D<M I
L83M L M
LC8C;4M L =E034AB " DBC 84M
L;8=:M L7CC? F F F 344H 4A 2>< 0;1D< M
L2>E4AM L7CC?B 0?8 344H 4A 2>< 0;1D< 8<064M
Fig.5 LCG?4M L0;1D<M

60 Programmez! Juin 2014 Juin 2014 > Programmez!


<
059_062_175 19/05/14 23:08 Page61

K ?;0G% ;0G;8BC pour les playlists, ?;0G ;1D< pour les albums, etc.
LCG?4M LCA02:M Remarque : Le respect des droits sur la musique impose l’utilisation de
K Flash Player, qui est donc nécessaire à la lecture des chansons en entier.
I Quelques détails sur les droits : seuls les utilisateurs authentifiés pourront
L83M L M

d
accéder aux chansons en entier. Les autres devront se contenter des
LA40301;4M CAD4 extraits de 30 secondes. Voici un exemple complet avec le player :
LC8C;4M L% >8B>= !8?BM
L;8=:M L7CC? F F F 344H 4A 2>< CA02: M $ (+% 7C<;
L3DA0C8>=M L M 7C<;
L?A4E84F M L7CC? 23= ?A4E84F 344H 4A 2>< BCA40< 7403
042 31 5 5 1 5 4 34 <? M B2A8?C BA2 M7CC? 23= 58;4B 344H 4A 2>< 9B <8= 3H 9BM
LC8<4BC0<?M B2A8?C
L0AC8BCM I 7403
L83M L M
1>3G
N K 38E 83 P3H A>>CP 38E

Comme la liste peut contenir des dizaines de milliers de chansons, l’API 8=?DC CG?4 M1DCC>=M >=2;82: M , ?;0G4A ?;0G ;1D<
renvoie un résultat paginé avec un attribut pour accéder aux résul- M E0;D4 M% ;0GM
tats suivants. Vous pouvez utiliser les fonctions de pagination avec les B2A8?C
paramètres , pour préciser à partir de quel index vous souhaitez , 8=8C I
récupérer, et , le nombre d’objets à retourner. 0?? 3 O+$ )& / % % / P
Voici quelques exemples d’autres requêtes que vous pouvez effectuer : 270==4;)A; O7CC? +$ )& / $ " # 270==4; 7C<;P
◗ faire une recherche : , 0?8 OB40A27 @ <4CA>=><GP 20;; ?;0G4A I
102: ; >=;>03 5D=2C8>= IK
◗ créer une playlist : , 0?8 ODB4A <4 ?;0G;8BCBP O% $ ' (P K
IC8C;4 L<G C8C;4MK 20;;102: ; K
◗ accéder aux recommandations : , 0?8 ODB4A <4 A42><<4=30 B2A8?C
C8>=B ?;0G;8BCBP 20;;102: 1>3G
◗ voir les tops - du pays depuis lequel la requête est émise : 7C<;
, 0?8 O438C>A80; 270ACBP 20;;102:
Le SDK permet de créer et personnaliser entièrement le player. En plus de
Utiliser le player fonctions basiques comme play/pause/prev/next, il dispose de fonctions
Pour jouer la chanson de votre choix, une seule ligne de code suffit : pour :

, ?;0G4A ?;0G(A02:B - .

Les id des chansons sont directement accessibles depuis le site


[Link], dans l’url indiquée lors du partage.
Le player dispose de fonctions spécifiques pour chaque type de contenu :

Fig.6

Fig.7

Juin 2014 > Programmez! 61


059_062_175 19/05/14 23:08 Page62

◗ contrôler le volume, [Link],


◗ mettre en shuffle/repeat, [Link]/setRepeat
Vous avez aussi à votre disposition des événements vous informant sur
son état : savoir si la chanson est terminée ou pas, si le player est en train
d

de jouer, où en est sa position, etc.

, E4=C BD1B2A814 O?;0G4A/?>B8C8>=P 5D=2C8>= 0A6 I

1 code, 3 apps :
l’intégration au Deezer App Studio
L’App Studio, lancé en novembre 2012, est l’espace permettant aux appli-
cations de s’intégrer directement dans Deezer (aussi bien le site web que
les applications iOS et Android). Il compte maintenant plus d’une centai-
ne d’applications. Ces dernières sont accessibles depuis le menu princi- Cela veut dire que vous pouvez réutiliser le même code pour vos appli-
pal de Deezer, pour donner de la visibilité aux projets auprès de tous les cations car vous appellerez toujours les mêmes fonctions :
utilisateurs du service. [Link](), [Link](), etc. Seul le chargement va différer légèrement,
tous les détails sont précisés dans la documentation Fig.7 et 8.
Remarque : L’accès au test des applications pour Deezer est encore privé, Quelques fonctionnalités supplémentaires sont disponibles lorsque vous
mais un simple email à deezerdevs@[Link] vous permettra de récupé- vous trouvez dans Deezer pour engager les utilisateurs :
rer un accès. Deezer se réserve ensuite la liberté de valider ou non les ◗ envoyer des notifications. Elles se matérialisent par un message dans
applications pour les mettre en ligne sur l’App Studio Fig.6. la live bar de droite, et par un compteur à droite du nom de l’application
dans le menu gauche.
C’est là tout l’intérêt du SDK Javascript de Deezer : il fonctionne aussi
bien dans un site web tiers qu’à l’intérieur de Deezer, qu’il s’agisse du site
web ou des applications mobiles. En effet, il va détecter où vous vous
situez, et en fonction, il va soit contrôler le player de [Link] ou des
applications natives, soit utiliser le player du SDK.
, 0?8 ODB4A )' & / =>C85820C8>=BP O% $ ' (P I<4B
B064 L D4BB F 7>PB 0 50= >5 0CG % 4AAG MK 20;;
102:
inviter des amis à utiliser votre application avec les app requests Fig.9.

, D8 0??& 4@ D4BC
I
C> O)' & / P
<4BB064 L 742: C70C 0?? M
K
5D=2C8>= A4B?>=B4 I
2>=B>;4 ;>6 A4B?>=B4 BC0CDB CAD4 J 50;B4
Fig.9 K

Fig.8 L’objectif est de fournir aux développeurs les


meilleurs outils possibles pour créer une rela-
tion avec les utilisateurs.

Dans ce cadre, les Deezer apps pourront bien-


tôt recommander des contenus sur la page
d’accueil « A écouter » des utilisateurs, qui
regroupe toutes leurs recommandations per-
sonnalisées. Stay tuned !

Julie Knibbe
Platform Evangelist, Deezer
[Link]
[Link]

62 Programmez! < Juin 2014


063_064v2_175 19/05/14 23:11 Page63

4 possibilités d’optimiser
les performances d’[Link]

.
[Link] est une technologie très populaire pour développer des applications Web. De
nombreux développeurs l’utilisent pour cela. Quand ces applications génèrent des trafics
importants, elles sont déployées sur de multiples serveurs Web pour gérer la montée en charge,
assurant un temps de réponse optimal et de hautes performances pour les utilisateurs. Mais
plusieurs facteurs peuvent faire baisser les performances.
Dans cet article, nous allons nous concentrer Fig.1
sur l’[Link] View State qui ne concerne
que les échanges entre le serveur et le navi-
gateur. Plus il y a de requêtes et de View
State, plus il y aura de trafic réseau entre les
serveurs et le navigateur.

Les 4 préoccupations
Premièrement, le View State (littéralement
“état de l’affichage”)” peut charger le trafic et
les requêtes HTTP. Le View State d’[Link]
est un texte encodé envoyé comme un
champ caché (_VIEWSTATE) dans une page
[Link] que le navigateur reçoit.
Le View State peut peser quelques dizaines
de ko, voire, plusieurs centaines. Or, il n’est
pas utilisé par le navigateur. Le navigateur
conserve le View State et le retourne au ser- Les problèmes de performances sous [Link]
veur quand un postback est généré sur l’ap-
plication Web par l’utilisateur. Un HTTP postcall se génère. Le View State envoyée à un serveur différent ayant son cache local. Et dans ce cas le
est un élément important pour l’application [Link] pour afficher et rafraî- View State caché sera introuvable (sauf à “tomber” sur le bon serveur). Un
chir les pages et les informations. cache distribué évite ce problème et la clé est comme un identifiant per-
Deuxièmement, si l’output de la page n’est pas fréquemment modifié, la mettant de localiser le View State et de l’envoyer au navigateur Fig.2.
page est tout de même exécutée sur le serveur Web. Cette opération Comme le montre la figure 2, cette technique réduit la charge. Par
pénalise le temps de réponse de votre application. exemple, imaginons qu’une requête utilisateur représente un View State
Troisièmement, une page [Link] contient souvent du JavaScript et du de 30 à 60 ko, multipliez ces ko par x millions de requêtes par jour… La
CSS. Si c’est le cas, le navigateur émettra de multiples appels HTTP pour mise en cache va à la fois améliorer le temps de réponse et optimiser la
charger chaque fichier. Ces appels accroissent le trafic réseau. Multipliez bande passante utilisée. Vous pouvez utiliser une solution tierce de cache
ces appels par x milliers ou millions d’utilisateurs et les performances ris- distribué en mémoire. Elle sera implémentable en utilisant
quent de s’effondrer. Avoir de trop nombreux fichiers JavaScript impac- [Link] qu’il faudra rajouter dans vos
tent directement les performances et la bande passante. applications en modifiant le [Link]. Il enregistrera le View State de la
Quatrièmement, avoir de nombreuses images à afficher dans les pages page dans le cache distribué. Au prochain postback, ce PageAdapter sera
[Link]. Le navigateur va charger séparément chaque image à travers appelé et chargera le View State du cache distribué.
des appels HTTP. Nous retrouvons les mêmes problèmes qu’avec le
JavaScript et le CSS Fig.1. Les performances et le cache de sortie
[Link] propose un mécanisme spécifique : l’output cache ou cache de
[Link] View State et la charge sortie. Il permet de mettre en cache une page ASP ou seulement une par-
Quel est le problème avec le View State ? Le principal problème est son tie d’une page. Ainsi, si une page est appelée, elle ne sera pas réexécutée
enbompoint et les multiples allers-retours serveurs – navigateurs, surtout, sur le serveur, car elle sera dans le cache et sera envoyée au navigateur.
quand le navigateur n’a pas besoin de mettre à jour. Ce serait donc parfait Gain de temps et performances assurées.
si nous pouvions nous passer de View State sur le navigateur. Mais si l’output ne change pas souvent et que la page semble toujours
Pour ce faire, il faut utiliser des mécanismes de cache côté serveur et identique, ou du moins certaines parties, alors ces portions qui ne chan-
envoyer uniquement ce qui est nécessaire grâce à un système de clé. gent pas peuvent être incluses dans le cache de sortie. Ou encore, si l’in-
Cette clé peut être utilisée, plus tard, pour envoyer le View State quand le tégralité de la page ne change pas, vous pouvez l’inclure dans le cache de
navigateur le demande. Nous recommandons d’utiliser la mémoire de sortie et cela vous fera économiser à la fois de la consommation mémoire
cache distribué. vive et du temps CPU.
Si votre application fonctionne sur plusieurs serveurs Web, vous ne pou- Avant .Net 4.0, l’architecture de l’output cache interdisait l’ajout d’un sys-
vez pas utiliser un cache “local”. À chaque postback, la requête peut être tème de cache tierce. Il fallait donc utiliser un cache local sur chaque ser-

Juin 2014 > Programmez! 63


063_064v2_175 19/05/14 23:11 Page64

veur. Avec la disponibilité de .Net 4.0, il est désormais possible d’utiliser Ces fichiers contiennent souvent beaucoup d’espaces et de caractères
un cache externe. La figure 3 montre comment utiliser un cache externe : inutiles. En les supprimant, vous réduisez la taille des fichiers sans impac-
.

ter le fonctionnement des codes JavaScript et Css. La 2e possibilité est


de fusionner (on utilisera le terme merge / merging) les fichiers JavaScript
en un seul fichier. Là encore, sans modifier le fonctionnement du code.
Cette opération ne nécessite aucun développement, c’est la solution
d’optimisation déployée sur les serveurs qui s’en occupera.
Ces deux optimisations évitent de multiplier les fichiers, de limiter les
appels HTTP et de réduire la bande passante réseau. Gain de temps,
meilleures performances et temps de réponse optimal! Cependant, la
réduction de la taille des fichiers consomme du temps et des ressources.

Et les images ?
Pourquoi le cache distribué ? Le nombre des images explose et on retombe dans les problématiques
Pourquoi utiliser un cache distribué et non le cache par défaut d’[Link] ? JavaScript et CSS : multiplication des fichiers images, appels HTTP. Mais
Comme nous l’avons dit précédemment, le cache d’[Link] est local et quand les images sont fusionnées, il est possible d’utiliser la fonction de
doit être présent dans chaque worker process. Si vous avez plusieurs splicing. Il s’agit d’afficher une section de l’image selon des coordonnées
worker process, vous aurez donc plusieurs caches. Problème : ces précises. Par exemple : afficher une image de 0,0 à 3,4. Dans ce cas,
caches ne sont pas synchronisés en eux. Donc, rapidement, vous allez seule la partie de l’image comprise entre ces coordonnées sera affichée.
avoir un problème d’intégration de données, car vous aurez des données Mais en utilisant cette fonction, vous ne pouvez afficher qu’une partie de
plus anciennes ou plus récentes selon le cache. Le cache distribué suppri- l’image.
me cet inconvénient. Le cache distribué saura tirer parti des ressources
mémoires de vos serveurs et pourra ainsi améliorer les performances et le Conclusion
temps de réponse Fig.4. Dans cet article, nous avons évoqué plusieurs pistes pour améliorer les
performances des applications [Link]. Nous recommandons l’usage
Fusionner et réduire les fichiers JavaScript et d’un cache en mémoire distribué surtout quand vous déployez sur plu-
CSS sieurs serveurs de production. Ce cache pourra s’adapter aux ressources
Nous avons vu au début de l’article les problèmes liés à la multiplication disponibles et vous pourrez mettre à profit l’ensemble de vos serveurs.
des fichiers JavaScript et CSS. Il faut agir sur deux éléments : réduire le
Iqbal Khan
nombre de fichiers et réduire la taille de ces fichiers. Le JavaScript est Évangéliste technique à Alachisoft
déployé sur le serveur, mais il s’exécute sur le navigateur. Il transite donc [Link] / iqbal@[Link]
du serveur vers le navigateur, nécessitant un trafic réseau. Alachisoft est spécialisé dans les solutions de cache distribué pour .Net et Java.

Fig.2 Fig.4

Le cache distribué réduit la charge réseau. Cache distribué sur plusieurs serveurs

64 Programmez! < Juin 2014


065_066_175 19/05/14 23:21 Page65

Pourquoi la méta-programmation va-t-elle


révolutionner notre façon de coder dans le futur ?

a
Commençons par une définition de la méta-programmation : «Metaprogramming is the writing of

a
computer programs that write or manipulate other programs (or themselves) as their data, or that
do part of the work at compile time that would otherwise be done at runtime.» Wikipedia
Il y a donc deux parties bien distinctes dans la

a
méta-programmation : l’analyse de code et l’uti-
lisation de celui-ci en tant que donnée du pro-
gramme que l’on écrit, et la génération de code.
Bien entendu, il est possible de faire les deux en
même temps. C’est exactement ce que fait par
exemple un compilateur.

Pourquoi utiliser
la méta-programmation ?
La génération de code est un moyen potentielle-
ment considérable de gagner en productivité
mais aussi en fiabilité, qualité et maintenabilité.
Enfin j’ajouterai que cela permet également de
rendre le métier de développeur plus intéres-
sant.
La productivité, c’est évident; un ordinateur
peut générer du code beaucoup plus rapide- Fig.1
ment que si nous devions l’écrire à la main. S’il
est souvent plus long d’écrire du méta-code tâche n’est pas particulièrement intéressante. Plusieurs personnes se sont essayées à l’ap-
comparé à l’écriture du code, on sera très vite Aussi, l’utilisation de la méta-programmation proche DSL (Domain Specific Language) géné-
gagnant, dès lors que notre code sera redon- pour générer ces tâches améliore l’intérêt de ralement accompagné d’un designer.
dant à l’intérieur même de notre projet, ou entre notre travail. Ceci d’autant plus qu’écrire le Il existe cependant, d’après-moi, deux pro-
nos différents projets. méta-code est une tâche souvent très intéres- blèmes à cette approche :
La fiabilité est en revanche rarement mise en sante. ◗ Les possibilités d’expression du modèle sont
avant, alors qu’elle représente pourtant un inté- souvent limitées,
rêt bien réel. Parfois, on est amené à appliquer Pourquoi la ◗ Si l’approche designer est souvent très utile
des patterns qui nous poussent à écrire du code méta-programmation pour convaincre les DSI, il est souvent beau-
redondant, sans grand intérêt (ex : l’implémen- ne s’est-elle jamais imposée ? coup plus compliqué de convaincre les déve-
tation de INotifyPropertyChanged). De fait, pen- Au vu des avantages évoqués précédemment, loppeurs qui ont du mal à voir leur valeur avec
dant l’écriture de ce code, le développeur a on peut s’étonner que son utilisation soit si mar- cette approche, et qui n’ont aucune envie de
souvent tendance à être moins concentré, et ginale et je vais tâcher de vous faire partager « dessiner des rectangles avec des flèches »
c’est là qu’il risque de faire des erreurs d’étour- mon analyse. au lieu de coder. Enfin, la productivité avec un
derie. L’avantage du méta-code c’est qu’une Dans Visual Studio, pendant très longtemps, la designer est souvent relativement décevante
fois qu’il est validé, le code généré sera toujours génération de code se résumait essentiellement dûe à l’utilisation de la souris.
bon, sans risque d’erreur. (mais pas uniquement) aux DSL et à T4. Dans un Il existe une autre raison beaucoup plus psycho-
Par ailleurs, la génération de code se base cas comme dans l’autre, ce n’était pas simple. logique : la crainte de l’inconnu et le mot méta
généralement sur un modèle dont la définition Visual Studio n’inclut pas d’éditeur de code qui fait tout de suite penser à quelque chose de
est plus contraignante que le code. Cela peut pour T4. Si j’ai appris à coder sur ma calculatri- très compliqué.
donc potentiellement éviter les excentricités de ce puis Emacs, le confort apporté par Visual Je ne suis pas en train de vous dire que la méta-
certains développeurs. Ainsi, il sera plus simple Studio est tel qu’il est souvent difficile de revenir programmation est quelque chose de basique à
pour n’importe quel développeur de l’équipe de au mode bloc note pour éditer nos T4; cette dif- la portée de n’importe quel développeur débu-
faire évoluer le code généré à partir du modèle ficulté se transformera en « no way » pour tant. Cependant, il ne faut pas exagérer non
d’un autre développeur. nombre de développeurs. plus sa complexité, comme le font de nombreux
Si certains développeurs apprécient d’effectuer A noter, cependant, qu’il existe des providers développeurs.
des tâches redondantes, car, ce faisant, ils sont tiers qui peuvent venir enrichir Visual Studio
dans leur zone de confort, pour beaucoup pour offrir un IDE de T4. Mais l’outillage reste, Pourquoi Roslyn va
d’autres, dont je fais partie, faire régulièrement dans tous les cas, très inférieur à celui dont on tout changer ?
la même tâche est quelque chose de particuliè- dispose quand on édite un fichier CSharp dans Dans le titre de cet article, j’évoque le fait que la
rement ennuyeux, qui plus est quand cette Visual Studio. méta-programmation va révolutionner notre

Juin 2014 > Programmez! 65


065_066_175 19/05/14 23:21 Page66

façon de coder. Le mot « révolutionner » n’est nologies comme [Link]. Cependant, cela la propriété Total à de nombreux endroits dans
pas choisi au hasard. Je pense en effet que Ros- s’avérait relativement compliqué de manipuler le code, ce qui rendra plus compliquées la main-
lyn va tout changer. l’IL. Le fait de pouvoir, en mémoire, modifier la tenabilité et l’évolutivité de notre code.
a

Les rares démonstrations faites par Microsoft à solution pour ensuite la compiler simplifie consi- Avec WAQS, on va définir une méthode d’exten-
ce jour nous montrent comment améliorer dérablement cela. sion GetTotal prenant en paramètre un Order.
Visual Studio relativement facilement en rajou- De plus, dans la même logique, on peut relative- Cette méthode ne sera jamais utilisée. Elle va
a

tant des fonctionnalités de Refactoring et de ment facilement enrichir le langage C# à sa juste servir de modèle à la génération des pro-
Code review. convenance. priétés calculées sur le serveur et le client, ainsi
La plupart des développeurs qui ont eu la curio- Cependant, si faire cela est quelque chose de que pour la génération des PropertyChanged.
sité de faire de la veille techno sur Roslyn se très intéressant, je pense que ce n’est pas vrai- En effet, en analysant le code de la méthode
sont donc arrêté à cela, y compris parmi les ment souhaitable dans un cadre professionnel. GetTotal, on est capable de déterminer ses
a

experts VS / .NET. Et la plupart se sont dit qu’ils En effet, imaginez que chaque entreprise utilise dépendances. Enfin, LINQ To WAQS et L2EW
n’avaient pas vocation à concurrencer Reshar- son propre compilateur C#. Cela risque de vite (LINQ To Entities + WAQS) supportent l’utilisa-
per, et que Roslyn ne leur servirait pas à grand- poser de gros problèmes pour des raisons évi- tion de la propriété Total. En effet, le code géné-
chose. dentes de compétences des développeurs, ré est capable d’extraire l’expression LINQ de
Cependant, ce n’est que la face émergée de sans même parler du fait que C# continuera de notre méthode GetTotal, et de la combiner avec
l’iceberg et, vous vous en doutez, si je parle de progresser indépendamment des compilateurs l’expression de la requête courante.
révolution c’est que l’usage que l’on peut en customs (même si, pour le coup, l’usage de Afin d’éviter le problème des fichiers pdb,
faire va bien au-delà. Roslyn devrait grandement faciliter l’intégration WAQS génère le code (via des T4) dans la solu-
des nouveautés). tion. Ce qui fait que le code généré est bien celui
Que peut-on faire avec Enfin, il ne faut pas oublier que si le code compi- compilé.
Roslyn ? lé n’est pas le code original, on perd les sym- Utiliser des T4 a un autre intérêt. Imaginons que
Roslyn nous permet d’accéder à la syntaxe de boles des fichiers pdb, ce qui ne nous permet l’on veuille changer la formule de calcul du total
notre code, et à sa sémantique. Prenons un plus de débuguer, sauf à recréer les symboles d’une commande. Dans le cas normal, il va fal-
exemple : associés à notre code source (comme c’est le loir repasser partout. Dans le cas de WAQS, il
cas pour le yield return ou le await par exemple). suffira de changer la méthode GetTotal puis de
A titre personnel (tous les experts de la méta- régénérer les T4, ce qui se fait très facilement
L’arbre syntaxique de ce code est le suivant : programmation ne sont pas d’accord sur le depuis Visual Studio.
Fig.1 sujet), je pense que la vraie révolution réside Avec cette approche, la méta-programmation
Comme vous pouvez le constater, l’arbre d’ex- dans l’utilisation de code comme un modèle apporte un niveau d’abstraction supplémentai-
pression est très détaillé. Roslyn nous met éga- pour notre génération. re. Cela nous permet en effet de s’abstraire de
lement à disposition des visitors pour analyser C’est typiquement ce que fait WAQS la technique, pour se concentrer sur ce qui a de
cet arbre syntaxique et également pour pouvoir ([Link] la valeur pour l’utilisateur final (les écrans et les
modifier le code (en mémoire). Prenons un exemple très simple avec des Order règles métiers), tout en améliorant la qualité de
Roslyn nous donne également accès à la et des OrderDetails de la base Northwind. notre développement à travers différents axes
sémantique. C’est-à-dire que là où l’analyse Imaginons une application 3-Tiers dans laquelle tels que :
syntaxique nous informe que le code appelle on a besoin de calculer le total d’une comman- ◗ la productivité,
une méthode WriteLine sur un membre Conso- de. ◗ la maintenabilité / évolutivité,
le, la sémantique nous permet de savoir qu’il Avec du code classique tel que nous le connais- ◗ l’intérêt pour le développeur (écrire des pro-
s’agit d’une méthode statique définie dans la sons, nous allons définir une propriété calculée perty changed, ce n’est pas passionnant…).
classe [Link] dont nous pourrons Total sur la classe Order, côté client et côté ser-
extraire de nombreuses informations telles que veur (on pourrait partager le même code mais Dans le cadre de cet article, nous avons démon-
celles accessibles par Reflection. ce n’est pas forcément pertinent). Côté client, tré l’intérêt d’une approche basée sur la méta-
Roslyn va aussi nous permettre de modifier nous allons reprendre la logique de la méthode programmation et l’apport énorme de Roslyn
notre solution en mémoire et de la compiler. pour définir la logique des PropertyChanged / dans celle-ci.
Roslyn nous donne également accès à des API CollectionChanged afin que la modification Dans le prochain numéro, nous reviendrons sur
de Visual Studio tels que le renommage global d’une quantité provoque le recalcul automa- les API de Roslyn.
de la solution. tique du Total. Si nous voulons effectuer une
requête LINQ To Entities, nous allons devoir Matthieu MEZIL
En quoi ces features augu- répéter la logique de la propriété Total, car Enti- Consultant
rent-elles d’une révolution ? ty Framework ne connaissant pas cette proprié- Infinite Square
Aujourd’hui, pour faire de l’AOP (Aspect Orien- té, il n’est pas possible de l’utiliser.
ted Programming), on pouvait utiliser des tech- Résultat, nous avons dû dupliquer la logique de

MariaDB Coding à la plage :


Cahier vacances
À LIRE

AàZ
de Raspberry Pi, Gadgeteer,
DANS LE
JavaScript, Google Maps, Nokia X,
PROCHAIN
NUMÉRO
iOS, Windows Phone, Xamarin
n° 176 en kiosque
100 % Drupal
le 28 juin 2014
Attention : numéro exceptionnel de 100 pages
66 Programmez! < Juin 2014
067_070_175 19/05/14 23:27 Page67

Raspberry : utiliser la carte PiFace Fig.1

4
L’arrivée du Raspberry Pi, il y a deux ans, a ouvert un
champ d’exploration pour l’initiation à l’informatique de
la nouvelle génération. Alors que depuis des années la
formation initiale se cantonne à l’enseignement de la
bureautique, pompeusement baptisée «informatique» le
Raspberry Pi offre aux enseignants un outil accessible et
ludique. En particulier, la disponibilité en standard de
Scratch permet aux élèves de développer des
programmes sous forme graphique en s’appropriant les bases de l’algorithmique, tout en les
aidant à créer et à travailler ensemble. Dans cet article vous apprendrez comment utiliser Scratch
pour commander la carte d’interface numérique PiFace et agir sur le monde réel.
Prérequis : Savoir écrire un programme en Scratch
PRÉSENTATION vées) par un bouton poussoir présent sur la carte (entrées 0 à 3) ou par un
DE LA CARTE PIFACE dispositif extérieur mettant l’entrée à la masse (entrées 0 à 7).
L’idée de la carte PiFace a été lancée par Andrew Robinson, un chercheur Remarque : Les entrées et sorties sont numérotées de 1 à 8 sur la carte et non pas de 0 à 7
de l’université de Manchester, spécialisé dans les processeurs embar- comme il est d’usage en informatique. Sur l’émulateur graphique, par contre les boutons de com-
qués et passionné par l’éducation. La carte a été conçue pour être facile- mande des sorties sont numérotés… de 0 à 7.
ment utilisable, initier les enfants à l’électronique et leur permettre
d’interagir rapidement avec le monde réel. La PiFace se connecte directe- INSTALLATION
ment sur le connecteur GPIO du Raspberry Pi. Les entrées et sorties se ET TEST DE LA CARTE
raccordent sur des borniers situés le long des côtés de la carte. La carte Installation et mise à jour du système Raspbian
est équipée d’un MCP23S17 connecté sur le bus SPI du GPIO, et offrant Installez une version «propre» de Raspbian sur une carte SD de 4 Go mini-
16 entrées/sorties numériques. Les 16 I/O se répartissent en 8 entrées mum ([Link] au moment de l’écriture de l’ar-
(dont 4 équipées de boutons poussoirs) et 8 sorties. ticle). Mettez en place la carte PiFace sur le Raspberry Pi, en veillant à ce
qu’il ne soit pas alimenté (la prise d’alimentation micro-USB ne soit pas
Sorties de la carte PiFace connectée). Insérez la carte SD dans son support et branchez la prise
Les sorties (bornes jaunes) sont bufferisées par un ULN2803 et munies d’alimentation. Le système démarre et affiche l’outil de configuration
chacune d’une LED de contrôle. Chaque sortie est un Darlington en col- raspi-config. Dans le choix 4 Internationalisation Options, réglez les
lecteur-ouvert qui supporte 50 V et peut commander une charge jusque locales sur fr_FR.UTF8 UTF8 puis la zone sur Europe-Paris (si vous rési-
500 mA. Les sorties 0 et 1 sont équipées chacune d’un relai dont les dez en France), enfin configurez le clavier en AZERTY et redémarrez le
contacts (NO/NF) sont accessibles sur un bornier à vis (noir). Raspberry Pi.
Des cavaliers présents sur la carte permettent un certain nombre de Mettez le système à jour :
réglages : adresse de la carte, alimentation externe, diodes anti-retour,
désactivation des relais, désactivation des sorties.

Entrées de la carte PiFace Test de la PiFace en Python


Les entrées de la carte PiFace sont maintenues à l’état haut (1) par une Les versions récentes de Raspbian intègrent les outils de gestion de la
résistance de tirage activée par défaut. Les entrées sont mises à 0 (acti- carte PiFace par défaut. Les programmes de test en Python sont donc dis-

Fig.2 Fig.3 Fig.4

Juin 2014 > Programmez! 67


067_070_175 19/05/14 23:27 Page68

ponibles et vous pouvez lancer le programme [Link] qui fera clignoter la dans le but d’autoriser le jeu multi-joueurs, une méthode nommée Mesh
LED 7 une fois par seconde et permettra de vérifier que tout est en ordre : permet de partager entre plusieurs projets Scratch des variables et des
4

messages diffusés en broadcast, même si ces projets sont hébergés sur


des ordinateurs différents. Mesh envoie un message à tous les pro-
grammes connectés, chaque fois qu’un broadcast est envoyé dans Scrat-
Le clignotement d’une LED est souvent utilisé en tant que «Hello World» ch, ou qu’une variable globale est modifiée. Dans notre cas, le serveur
de l’embarqué… La lecture des programmes présents dans le dossier Mesh sera hébergé sur l’ordinateur local, et c’est sur le port 42001 que
examples constitue une bonne introduction au pilotage de la PiFace en viendra se connecter le programme de gestion de la carte PiFace (Fig.5).
Python.
Mise en route de Mesh dans Scratch
Installation de l’émulateur graphique Par défaut Mesh n’est pas activé dans Scratch. Normalement, il faut cli-
Maintenant que nous avons vérifié que tout est en ordre, passons à l’ins- quer sur Partage dans la barre de menu, en appuyant sur Shift, pour accé-
tallation de l’émulateur graphique. der au menu permettant d’activer Scratch… Enfin ça c’est la théorie,
parce que Mesh n’est pas accessible par défaut. Je vous propose donc
de voir la procédure pour activer Mesh. Respectez bien toutes les étapes
pour obtenir le résultat attendu. Si à l’issue de toutes les manipulations
Cette installation va occuper environ 108 Mo supplémentaires sur la carte Mesh n’est pas activé, soyez persévérant, et recommencez en suivant
SD. Apres la fin de l’installation, redémarrez le Raspberry Pi : scrupuleusement chaque étape (Fig.6).

1 – Ne démarrez pas Scratch en cliquant sur l’icône du bureau


L’icône de l’émulateur PiFace est maintenant présente sur le bureau de Démarrez Scratch en super-utilisateur.
LXDE. Double cliquez sur l’icône nouvellement installée pour l’interface Ouvrez un terminal LXterminal et tapez en ligne de commande :
graphique (Fig.2).
L’interface graphique représente la carte PiFace vue de dessus. Par
défaut, les sorties sont dévalidées. Pour les mettre en service, cliquez sur L’ouverture de Scratch avec sudo permettra après l’activation de Mesh,
Enable puis sur Output Control pour les mettre en service. En bas de la de sauvegarder les modifications. Si vous démarrez avec l’icône du
fenêtre, la zone Output Control qui était grisée et non accessible avant la bureau, les modifications ne seront pas enregistrées et il faudra recom-
validation des sorties, devient opérationnelle. Les boutons numérotés per- mencer la procédure.
mettent d’activer/désactiver chaque sortie séparément. Vous pouvez véri-
fier le bon fonctionnement en observant l’allumage/extinction des LED, et 2 – Accédez au menu caché de Scratch
pour les sorties 0 et 1, vous entendrez simultanément le bruit des relais. L’accès au (premier) menu caché de Scratch se fait en maintenant la
Le bouton All on active toutes les sorties, All off désactive toutes les sor- touche Shift appuyée et en cliquant dans le rond formé par la lettre R de
ties et Flip inverse l’état de chaque sortie. Scratch en haut à gauche de l’écran (Fig.7). Dans le menu qui s’ouvre, cli-
Testez les différentes possibilités en contrôlant que les informations four- quez sur turn fill screen off. Ceci a pour effet de réduire la taille de la zone
nies par l’émulateur coïncident avec ce que vous observez sur la carte. occupée par l’interface graphique Scratch dans la fenêtre qu’il occupe.
Sur la Fig.4, les poussoirs S2 et S4 sont appuyés, les entrées correspon- L’accès au second menu caché est maintenant possible (Fig.8).
dantes sont indiquées par un cercle coloré qui remplace le dessin de la
vis. Les boutons appuyés apparaissent en jaune, et les LED allumées 3 – Accédez au second menu caché de Scratch
brillent en rouge. Déplacez la souris au bas de l’interface graphique de Scratch. L’action
Le relai 0 (situé sous la rangée de LED) est collé. Le contact est établi précédente a libéré un peu de place dans le bas de la fenêtre (Fig.9).
entre les deux bornes supérieures. Le relai 1 est au repos, le contact est Cliquez dans la zone blanche libérée sous l’interface graphique. Un menu
établi entre les deux bornes basses de son bornier. s’ouvre : cliquez sur l’item open puis dans le menu suivant cliquez sur
browser. Ceci vous donne accès au navigateur d’objets de Scratch qui va
CONFIGURER SCRATCH (enfin) vous permettre d’activer Mesh.
POUR PILOTER LA CARTE PIFACE
Scratch est un environnement de développement graphique et un langa- 4 – Modifier addServerCommandTo
ge de programmation utilisant des blocs prédéfinis. Les blocs ont des Après ouverture du navigateur d’objets, Cliquez successivement sur
formes qui ne permettent d’encastrer que les blocs autorisés, éliminant de Scratch-UI-Panes => ScratchFrameMorph => menu/button actions =>
fait les erreurs de syntaxe. addServerCommanTo: Une zone texte apparait dans la partie basse du
D’origine, Scratch anime des lutins (sprites) sur une scène. Cependant, navigateur. Remplacez le texte «t2 true» par le texte «t2 false».
Fig.5
Fig.7

68 Programmez! < Juin 2014


067_070_175 19/05/14 23:28 Page69

La modification est faite, il faut maintenant la sauvegarder. Juste à gauche Relevé de l’adresse du serveur Mesh
de addServerCommandTo: et au-dessus de la flèche de défilement, figu- Cliquez sur Show IP Address, une fenêtre s’ouvre et vous indique l’adresse

4
re un rectangle contenant un signe -. Cliquez sur ce rectangle pour ouvrir du serveur Mesh (Fig.13). Notez cette adresse, c’est celle qui permettra au
le menu permettant de valider la modification que vous avez effectuée. programme pifacedigital-scratch-handler de dialoguer avec Mesh. Vous
Cliquez sur accept(s) pour valider les modifications que vous avez appor- pouvez choisir d’arrêter Mesh en cliquant sur Stop Hosting Mesh. La remi-
tées à addServerCommandTo:. Le menu se ferme et vous pouvez quitter se en route se fait dans le même menu, en cliquant sur Host Mesh, ce qui
le browser d’objets en cliquant sur la croix située à gauche de la barre de affiche automatiquement la fenêtre indiquant l’adresse IP du serveur Mesh.
titre System Browser.
Lancement du programme interface entre Scratch et la
5 – Enregistrer les modifications carte PiFace
Pour enregistrer les modifications que vous venez d’apporter à Scratch, il Laissez Scratch ouvert, ou réduisez la fenêtre, mais Scratch doit fonction-
faut ouvrir à nouveau le premier menu caché, en maintenant la touche ner pour que le programme puisse se connecter au serveur Mesh. Ouvrez
SHIFT appuyée et en cliquant dans le rond de la lettre R. Dans un premier un terminal LXTerminal et saisissez :
temps cliquez sur turn fill screen on pour que l’éditeur graphique remplis-
se à nouveau la fenêtre. Ensuite cliquez sur save image for end user pour
enregistrer les modifications. Répondez Yes pour confirmer que vous vou- L’adresse IP sera bien entendu celle que vous aurez relevée à l’étape pré-
lez sauver vos modifications. A l’issue de la sauvegarde, la fenêtre de cédente, sur votre propre Raspberry Pi. Le programme doit démarrer et
Scratch se ferme, et vous revenez à LXTerminal. On ne peut pas dire que se connecter au serveur Mesh (Fig.14).
la mise en service de Mesh soit facilement accessible, mais si vous suivez Le programme initialise également la valeur des variables correspondant
l’ordre des opérations minutieusement, le serveur devrait être opération- aux 8 entrées numériques de la carte PiFace.
nel sur le port 42001. Attention : la configuration de Scratch est enregistrée et Mesh sera lancé
à chaque démarrage de Scratch. Par contre, il faudra répéter le lancement
Test du fonctionnement de Mesh de pifacedigital-scratch-handler chaque fois que vous démarrerez Scrat-
Pour vérifier le bon fonctionnement de Mesh, ouvrez cette fois Scratch en ch pour l’utiliser avec la carte PiFace. Vous pouvez cependant automati-
cliquant sur l’icône du bureau. Maintenez la touche SHIFT appuyée et cli- ser le lancement en écrivant un script shell.
quez sur le menu Partage. Si Mesh fonctionne, deux lignes supplémen-
taires apparaissent en bas du menu (Fig.6). Commande d’une LED à partir de Scratch
Fig.6 Fig.13
Dans Scratch, Cliquez sur le bouton Variables puis sur Nouvelle variable.

Fig.15
Fig.16

Fig.14 Fig.11

Fig.9

Fig.10

Juin 2014 > Programmez! 69


067_070_175 19/05/14 23:28 Page70

Dans la fenêtre qui s’ouvre saisissez le nom de la variable : piface-out- En appuyant sur le bouton 1 de la carte PiFace, puis en le relâchant, le
put1. Respectez absolument la façon de nommer la variable, c’est ce qui chat annonce le résultat en permanence.
permet au programme pifacedigital-scratch-handler de la reconnaître !
4

Laissez coché le bouton radio Pour tous les objets, et cliquez sur OK PROGRAMME EN SCRATCH
pour enregistrer votre variable (Fig.15). Tous les outils nécessaires à la réalisation d’un programme Scratch utili-
Vous disposez maintenant d’une variable qui est liée avec la sortie 1 de la sant la carte PiFace sont maintenant disponibles :
carte PiFace. Déplacez le bloc à piface-output1, attribuer 0 dans la zone ◗ Installation et test de la carte PiFace
des scripts (zone centrale de l’interface graphique). Modifiez la valeur de ◗ Installation de l’interface avec Scratch
la variable dans le bloc que vous venez de déplacer, en remplaçant le 0 ◗ Communication entre Scratch et les sorties
par un 1. Cliquez sur le bloc pour appliquer la modification. La sortie 0 de ◗ Communication entre Scratch et les entrées
la carte PiFace est activée : la LED s’allume et le relai correspondant colle.
Si vous remplacez le 1 par un zéro et cliquez à nouveau sur le bloc, la sor- Organisation du programme
tie repasse à 0 et le relai retombe (Fig.16). Annoncer le mode d’emploi du programme
Si le bouton 4 n’est pas actionné
Lecture de l’état d’une entrée de la carte Si le bouton 1 est actionné
PiFace Annoncer que le chenillard fonctionne
Dans Scratch, cliquez sur le bouton Capteurs. Cliquez sur le bloc valeur Activer le chenillard (10 balayages des diodes 1 à 4)
du capteur potentiomètre et déplacez-le dans la zone des scripts. Ouvrez Si le bouton 2 est actionné
la liste déroulante en cliquant sur la flèche située à droite de potentio- Annoncer que le clignotant fonctionne
mètre (Fig.17) Activer le clignotant (10 clignotements des diodes 1 à 4)
Choisissez l’entrée piface-input1. Pour utiliser la valeur de cette entrée, Sinon
renvoyée par le bloc valeur du capteur, il va falloir écrire un court pro- Dire au revoir
gramme (Fig.18).
La conversion de cet algorithme en Scratch ne pose pas de problème par-
Répéter ticulier, les blocs du programme correspondent aux blocs de l’algorithme.
Si le bouton est appuyé A partir de cet exemple, vous pouvez maintenant développer vos propres
Le chat dit : Appuyé ! idées : jeu de dé, commande d’un moteur avec Scratch….
Sinon
Le chat dit : Relaché ! Sources :
[Link]
Fig.19
[Link]
[Link]
ling_PiFace_Digital_modules/
[Link]

François Mocq
Passionné par l'électronique, il est l'auteur de "Raspberry Pi" aux éditions ENI

Fig.17 Fig.18

Fig.8

Fig.12

100%
cloud
computing
Actualités, avis d’experts, analyses, stratégies, programmation...
071_074_175 19/05/14 23:29 Page71

Java 8 : La révolution

a a
des Lambdas expressions 2e partie
La première partie de cet article aura permis de découvrir en profondeur les Lambdas expressions
ainsi que les principales nouveautés associées apparues dans Java 8. Clairement, les Lambdas
constituent un tournant dans l’histoire de Java qui propose désormais la programmation
fonctionnelle à ses développeurs. Dans cette seconde partie, nous allons mettre en application de
manière plus poussée les Lambdas au travers d’exemples mettant en lumière une autre grande
nouveauté de Java 8 : les Streams.
L’introduction des Lambdas expressions dans Java 8 aura mis au grand stream. Une fois cette opération appliquée, le stream est considéré
jour le côté vieillissant de l’API Collections du JDK. En effet, cette API, au comme consommé et n’est donc plus utilisable par la suite. Une opéra-
coeur des applications Java, date de plus de 10 ans maintenant, et il aurait tion terminale renvoie un type différent de Stream donc.
été fort judicieux de lui créer un remplaçant de type «Collections II». Outre En reprenant l’exemple précédent, on utilise l’opération terminale sum de
le fait que cet effort de remplacement aurait constitué une tâche considé- l’interface Stream afin de compter le nombre de Shapes de couleur bleue :
rable, décalant encore plus la sortie de Java 8, il aurait induit un gros tra-
vail pour les développeurs puisque les interfaces Collections ont un 6 9> 0:?9> =5.;2= =><2.8 36 7>2< = = 42> :7:< " *
impact sur l’ensemble du JDK. De fait, une telle solution aurait eu l’effet 0:?9>
indésirable de retarder son adoption par les développeurs Java.
Afin d’éviter une telle situation, les architectes du langage Java ont choisi Le schéma classique d’utilisation des Streams est ainsi limpide. Il est
une voie d’évolution toute en douceur en introduisant par exemple les constitué de 3 étapes :
méthodes virtuelles d’extension aux interfaces existantes. Ceci permet- 1 - Obtention d’un stream à partir d’une source de données
tant d’étendre, sans souci de compatibilité, les interfaces Collection, List 2 - Application d’une ou plusieurs opérations intermédiaires
ou bien Iterable. Dans un second temps, cela facilite la création des 3 - Application d’une opération terminale
Streams et leur ajout au JDK. La puissance de l’implémentation des Streams dans Java 8 réside avant
tout dans la différence de comportement entre opérations intermédiaires
Streams et terminales. En effet, les opérations intermédiaires sont implémentées
Définis au sein du package [Link], les Streams constituent la de manière lazy et peuvent donc être chaînées sans souci de performance
grande nouveauté de Java 8 en terme d’abstraction. Un Stream représen- puisque c’est uniquement lors de l’application d’une opération terminale
te une séquence de valeurs, et expose un ensemble d’opérations d’agré- que les opérations sur le stream seront effectivement réalisées. Ces der-
gations autorisant le développeur à exprimer des manipulations nières étant par nature plus coûteuses en temps d’exécution. Sans
classiques sur ces valeurs de manière simple et claire. Au sommet de la détailler de manière exhaustive les opérations de l’interface Stream, on
hiérarchie des Streams, on retrouve l’interface Stream<T>, représentant peut citer les opérations intermédiaires map, filter, distinct, ou encore
un stream de références d’objets. Plusieurs objets spécialisent cette inter- limit, qui, combinées aux opérations terminales forEach, toArray, collect
face comme IntStream qui décrit un stream de primitives entières. Autre ou reduce, mettent à la disposition du développeur Java tout ce qu’il faut
point important, les bibliothèques existantes permettent d’obtenir facile- pour réaliser des transformations de type filtrage / accumulation, filtrage /
ment des streams à partir de collections, de tableaux ou d’autres sources tri / parcours, etc …
de données. Enfin, on peut signaler que l’API propose des méthodes statiques dans
Les opérations proposées par les streams sont chaînées au sein de pipe- l’interface Stream (ce qui constitue une nouveauté avec Java 8) permet-
lines. Ainsi, il est possible de changer la couleur des objets Shape seule- tant d’obtenir des streams infinis. De fait, on peut obtenir un stream infini
ment s’ils sont bleus : d’entiers contenant la suite des puissances de 2 comme suit :

=5.;2= =><2.8 36 7>2< = = 42> :7:< " * 3:< .05 (><2.8 6 >2<.>2 B B
= = =2> :7:< '
Le premier argument contient ici la valeur initiale du stream, et le second,
La méthode stream de l’interface Collection produit une vue Stream des la fonction permettant de passer de l’élément n à l’élément n + 1 dans le
éléments de la collection. La méthode filter produit un stream filtré ne gar- stream.
dant que les objets Shape bleus, et, enfin, on utilise une itération interne
via forEach pour appliquer la couleur rouge sur ces Shapes. Streams en pratique
Les opérations proposées par les Streams sont soit de type intermédiaire, Afin de mettre en pratique les Streams de manière plus poussée, considé-
soit de type terminal avec les nuances suivantes : rons un POJO Person :
◗ Une opération intermédiaire garde le stream ouvert et permet l’applica-
tion des transformations suivantes. Les méthodes filter et map de cet ;?/76 0 07.== & 2<=:9 D
exemple sont des opérations intermédiaires. Ainsi, elles retournent des ;?/76 0 29?8 (2B D
objets Stream autorisant le chaînage d’opérations. # " # "
◗ Une opération terminale doit être l’opération finale invoquée sur un E

Juin 2014 > Programmez! 71


071_074_175 19/05/14 23:29 Page72

" 6 => & 2<=:9 <:=>2< & 2<=:9 0<2.>2' :=>2<


a a

(><6 94 9.82 <:=>2< =><2.8 3:< .05 ; ; ;<6 9>& 2<=:9


" :0.7 .>2 /6 <>51.C
(2B 42912< On remarque ici l’utilisation d’une Lambda expression en entrée de la
(><6 94 28.6 7 11<2== méthode forEach. Cette Lambda étant une instance de l’interface fonc-
tionnelle Consumer sur laquelle nous reviendrons plus tard. Avec cette
& 2<=:9 (><6 94 9 " :0.7 .>2 /6 <>5 (2B 4 (><6 94 8.6 7 D liste de personnes, nous pouvons calculer l’âge moyen des personnes de
9.82 9 type masculin :
/6 <>51.C /6 <>5
42912< 4 1:?/72 .@2<.42 <:=>2< =><2.8
28.6 7 11<2== 8.6 7 36 7>2< ; ; 42> 2912< & 2<=:9 (2B # "
E 8.;): 9> & 2<=:9 42> 42
.@2<.42
;?/76 0 6 9> 42> 42 D 42> = :?/72
<2>?<9 /6 <>51.C
?9>6 7 =: 5<:9:7:4C $ () $ 1.>2$ :A Une fois le stream de la liste récupéré, on applique un filtrage sur les per-
42>-2.<= sonnes de type MALE, avant d’obtenir le stream correspondant aux âges
E des personnes filtrées grâce à l’utilisation de l’opération intermédiaire
mapToInt avec, en entrée, la référence de méthode Person::getAge.
;?/76 0 @:6 1 ;<6 9>& 2<=:9 D Reste ensuite à calculer la moyenne du stream d’entiers en appelant
(C=>28 :?> ;<6 9>79 9.82 G G >56 = 42> 42 l’opération terminale average. L’opération mapToInt peut également être
E mise à profit pour calculer la somme des âges des personnes de la liste :

;?/76 0 =>.>6 0 6 9> 0:8;.<2 C 42 & 2<=:9 . & 2<=:9 / D 9>242< >:>.7 42 <:=>2< =><2.8
<2>?<9 . /6 <>51.C 0:8;.<2): / /6 <>51.C 8.;): 9> & 2<=:9 42> 42
E =?8

;?/76 0 =>.>6 0 " 6 => & 2<=:9 0<2.>2' :=>2< D Il est également possible de réaliser la même somme en employant les
opérations de map et de reduce des Streams :
" 6 => & 2<=:9 <:=>2< 92A <<.C" 6 =>
<:=>2< .11 9>242< >:>.7 42' 21?02 <:=>2< =><2.8
92A & 2<=:9 8.; & 2<=:9 42> 42
G(C7@.6 9H <21?02 . / . /
=: 5<:9:7:4C $ () $ 1.>2
& 2<=:9 (2B # " L’opération reduce est utilisée ici avec un élément identité valorisé à 0. Il
G=C7@.6 9 8.6 7 0:8H constitue la valeur initiale de l’accumulateur, et la valeur par défaut qui
<:=>2< .11 sera renvoyée si le stream sur lequel le reduce est appliqué est vide. En
92A & 2<=:9 second paramètre, reduce prend une Lambda expression instance de l’in-
G' .056 1.H terface fonctionnelle BinaryOperator<T> qui prend 2 éléments de type T
=: 5<:9:7:4C $ () $ 1.>2 en entrée et renvoie un élément de type T en sortie.
& 2<=:9 (2B # " G<.056 1. 8.6 7 0:8H
<:=>2< .11 Streams parallèles
92A & 2<=:9 Un des moteurs de l’apparition des Lambdas expressions et des Streams
G 1.8H dans Java 8 est la volonté d’Oracle de rendre le parallélisme plus acces-
=: 5<:9:7:4C $ () $ 1.>2 sible aux développeurs Java. Plus personne n’a de doute quant au fait
& 2<=:9 (2B # " G.1.8 8.6 7 0:8H que les applications de demain devront tirer profit au maximum de la
<:=>2< .11 parallélisation des traitements. Néanmoins, et bien que la plateforme four-
92A & 2<=:9 nisse un support important pour favoriser les traitements concurrents,
G$ .>5.9H peu de développeurs franchissent le pas devant les obstacles présents
=: 5<:9:7:4C $ () $ 1.>2 pour migrer leur code séquentiel vers du code parallèle. De fait, les archi-
& 2<=:9 (2B # " G9.>5.9 8.6 7 0:8H tectes du langage ont décidé de promouvoir des idiomes pouvant être à la
fois séquentiels ou parallèles. Le but étant de décrire quelles opérations
<2>?<9 <:=>2< doivent être appliquées, et non comment elles doivent être exécutées. Le
E tout pour faciliter les traitements parallèles au maximum sans toutefois les
E rendre invisibles pour les développeurs.
En suivant cette volonté, les opérations intermédiaires des streams qui
A partir de cet objet, nous allons créer plusieurs instances de Person sont traitées au sein de pipelines peuvent être exécutées soit en série soit
grâce à la méthode statique createRoster. Dans un premier temps, nous en parallèle. Le basculement entre les modes étant un simple choix à faire
allons simplement afficher les personnes de la liste à l’aide de la méthode au niveau d’un stream. Par défaut, les implémentations au sein du JDK
forEach : retournent toujours des streams séquentiels. Le passage d’un stream

72 Programmez! < Juin 2014


071_074_175 19/05/14 23:29 Page73

a a
séquentiel à un stream parallèle se faisant en invoquant la méthode paral- que BufferedReader, Random ou BitSet. En outre, la méthode
lel(). L’opération inverse nécessitant quant à elle le recours à la méthode [Link]() permet d’obtenir une vue Stream d’un tableau donné. En
sequential(). Ainsi, le parallélisme demeure explicite, mais il n’est pas fait, tout ce qui peut être décrit à l’aide d’un Iterator peut être utilisé
intrusif puisqu’il ne nécessite pas d’adaptations particulières pour le déve- comme source de données pour les Streams.
loppeur. En reprenant l’exemple du calcul de la moyenne des âges, on
peut paralléliser le traitement de la sorte : Itération interne
Comme on a pu le constater, les Streams proposent une méthode forEach
1:?/72 .@2<.42 <:=>2< ;.<.7727(><2.8 permettant d’itérer sur les éléments du stream. Alors que les Collections,
36 7>2< ; ; 42> 2912< & 2<=:9 (2B # " et plus généralement tout ce qui implémente l’interface Iterable, ont été
8.;): 9> & 2<=:9 42> 42 bties sur le concept d’itération externe, Java 8 met à disposition l’itération
.@2<.42 interne directement sur les Collections.
42> = :?/72 Pour ce faire, l’interface Iterable a été étendue grâce à une méthode vir-
tuelle d’extension forEach. Au lieu de contrôler l’itération, le client délègue
Devant la facilité de parallélisation des opérations des Streams, le dévelop- ainsi ce travail à la bibliothèque standard, et passe en entrée le code à
peur ne devra cependant pas perdre de vue que les sources de données exécuter durant l’itération. Ainsi, pour modifier la couleur d’une liste d’ob-
associées aux streams sont généralement mutables, et qu’il existe donc jets Shape, la méthode forEach est employée comme suit :
des possibilités d’interférence si la source est modifiée pendant l’exécu-
tion des traitements d’un stream. Le contenu d’une source de données =5.;2= 3:< .05 = = =2> :7:< '
associé à un stream, doit donc rester constant lors de l’exécution des opé- Bien plus qu’un simple sucre syntaxique, ce changement est très signifi-
rations du stream. On notera que cette condition nécessaire au bon dérou- catif. En effet, le contrôle de l’itération a été déporté du code client vers
lement des traitements des Streams se rapproche de ce que l’on connaît l’API sous-jacente, autorisant cette dernière à optimiser le traitement que
déjà à l’heure actuelle avec les restrictions concernant la modification ce soit en termes de parallélisme ou bien de lazy. Au final, l’itération inter-
d’une Collection lorsque l’on est en train d’itérer dessus par ailleurs. ne permet d’obtenir un code plus clair séparant le quoi (appliquer la cou-
leur rouge) du comment (itérer sur les éléments).
Streams vs Collections
Bien que présentant un certain nombre de similarités en surface, les Collectors
Streams et les Collections poursuivent en réalité des buts différents. Les Une fois obtenus à partir d’une source de données, les Streams permet-
Collections sont principalement destinées à gérer efficacement des élé- tent d’appliquer des opérations de transformations. Il se peut alors qu’à la
ments tant d’un point de vue mémoire que d’un point de vue accès. A suite de ces opérations, on souhaite obtenir un objet List ou un Set repré-
contrario, les Streams n’ont pas vocation à manipuler ou accéder directe- sentant le résultat de ces transformations.
ment à ces éléments, mais plutôt à décrire de manière déclarative les opé- Pour adresser ce cas d’usage, les Streams proposent la méthode collect()
rations à effectuer sur une source de données. De ce fait, les Streams dont l’argument est un Collector qui représente la manière utilisée pour la
possèdent un certain nombre de propriétés spécifiques : création de la structure qui accueillera les données.
◗ Un Stream ne stocke pas de données contrairement aux Collections. Il La classe Collectors propose des factories, pour la plupart des collectors
se contente de les transférer d’une source de données quelconque (Col- communs. A ce titre, on citera toList() et toSet() qui sont les plus clas-
lection, tableau, channel I/O, …) vers un pipeline d’opérations. siques et sont utiles pour obtenir la liste des noms des hommes :
◗ Un Stream est fonctionnel par essence. Ainsi, les opérations appliquées
à un stream produisent un résultat sans modifier la source de données " 6 => (><6 94 9.82=% 3# .72# 28/2<= :7720> <:=>2<
associée. Si des données doivent être modifiées, un nouveau stream est =><2.8
alors produit et ainsi de suite. Ce point se révèle essentiel pour garder 36 7>2< ; ; 42> 2912< & 2<=:9 (2B # "
une cohérence lors de la parallélisation des traitements. 8.; ; ; 42>$ .82
◗ Les opérations intermédiaires appliquées à un Stream sont de type lazy 0:7720> :7720>:<= >:" 6 =>
afin d’optimiser les performances. De fait, le pipeline d’opérations d’un
stream est exécuté une seule fois lors de l’appel à une opération finale. La classe Collectors met également à disposition des méthodes pour créer
◗ Un Stream n’est pas obligatoirement borné, contrairement à une Collec- des maps que ce soit via toMap() ou via groupingBy() qui, dans notre cas,
tion. En effet, certains problèmes nécessitent d’être exprimés comme s’avère intéressant pour grouper les personnes de notre liste par genre :
des streams infinis en laissant le soin au client de consommer les valeurs
jusqu’à ce qu’il soit satisfait. Attention toutefois à bien veiller à ce que les # .; & 2<=:9 (2B " 6 => & 2<=:9 /C 2912< <:=>2< =><2.8
opérations appliquées sur un stream infini se terminent en un temps fini 0:7720> :7720>:<= 4<:?;6 94 C & 2<=:9 42> 2912<
via l’emploi de méthodes comme limit(n) ou findFirst.
◗ Un stream ne peut être utilisé qu’une seule fois. Une fois consommé, il " 6 => # .; 9><C & 2<=:9 (2B " 6 => & 2<=:9 /C 2912<" 6 => 92A
faudra recréer un nouveau stream. <<.C" 6 => /C 2912< 29><C(2>
Définis au sein d’une API à part entière, les Streams sont totalement indé- /C 2912<" 6 => =><2.8
pendants des Collections. Alors qu’il est aisé d’obtenir un stream à partir 3:< .05 2 D
d’une Collection via les méthodes stream() et parallelStream(), et d’effec- (C=>28 :?> ;<6 9>79 G 29<2 G 2 42>! 2C
tuer l’opération inverse en créant une Collection depuis un stream via l’ap- 2 42>+.7?2
pel à collect() comme nous le verrons plus tard, les Streams ne se limitent =><2.8
bien évidemment pas aux Collections. 8.; & 2<=:9 42>$ .82
Il est ainsi possible d’effectuer des opérations avec des Streams sur de 3:< .05 3 (C=>28 :?> ;<6 9>79 3
nombreuses classes du JDK qui ont été étendues pour l’occasion telles E

Juin 2014 > Programmez! 73


071_074_175 19/05/14 23:29 Page74

& <216 0.>2 & 2<=:9 291=,6 >5$ ; ; 9.82 291=,6 >5 G9H
a a
Maintenant, nous allons mettre à profit la puissance des Collectors pour
obtenir le total des âges des personnes de notre liste en groupant les per- & <216 0.>2 & 2<=:9 .>" 2.=> ; ; 9.82 7294>5
sonnes par genre :
<:=>2< =><2.8 36 7>2< 291=,6 >5$ .91 .>" 2.=>
# .; & 2<=:9 (2B 9>242< >:>.7 42 C 2912< <:=>2< =><2.8 3:< .05 ; ; ;<6 9>& 2<=:9
0:7720>
:7720>:<= 4<:?;6 94 C & 2<=:9 42> 2912< On utilise l’opérateur logique AND via la méthode éponyme, mais les opé-
:7720>:<= <21?06 94 & 2<=:9 42> 42 9>242< rateurs OR et XOR sont également supportés. Toujours à partir de notre
=?8 exemple fil rouge, on peut calculer la moyenne d’âge des membres de
genre masculin via un Consumer spécialisé pour les entiers de type Int-
Consumer :
" 6 => # .; 9><C & 2<=:9 (2B 9>242< >:>.7 42 C 2912<" 6 => 92A
<<.C" 6 => >:>.7 42 C 2912< 29><C(2> ;?/76 0 07.== @2<.42< 6 8;72829>= 9> :9=?82< D

>:>.7 42 C 2912<" 6 => =><2.8 ;<6 @.>2 6 9> >:>.7


3:< .05 2 ;<6 @.>2 6 9> 0:?9>
(C=>28 :?> ;<6 9>79 G 29<2 G 2 42>! 2C
G ):>.7 42 G 2 42>+.7?2 ;?/76 0 1:?/72 .@2<.42 D
<2>?<9 0:?9> 1:?/72 >:>.7 0:?9>
Ce bout ce code met en avant toute la puissance des Lambdas et des E
nouveautés associées qui débarquent dans Java 8.
On retrouve ainsi l’utilisation d’un stream pour y appliquer un collect basé % @2<<6 12
sur la méthode statique groupingBy de Collector, prenant en entrée la ;?/76 0 @:6 1 .002;> 6 9> 6 D
référence de méthode Person::getGender afin de grouper les personnes >:>.7 6
par genre. Le second argument est un Collector créé à l’aide de la métho- 0:?9>
de utilitaire reducing qui permet d’additionner les âges des personnes E
groupées par genre. La suite du code affichant les éléments via une itéra-
tion interne. ;?/76 0 @:6 1 0:8/6 92 @2<.42< :>52< D
Plus encore que tout ce que nous avons pu passer en revue jusqu’à pré- >:>.7 :>52< >:>.7
sent, les Collectors révèlent toute la puissance de la programmation fonc- 0:?9> :>52< 0:?9>
tionnelle que nous allons pouvoir mettre en oeuvre avec Java 8. Attention E
toutefois, cette puissance demandera un temps d’apprentissage certain E
aux développeurs avant de pouvoir en tirer pleinement partie.
Il ne reste plus ensuite qu’à employer notre classe Averager sur l’opéra-
Interfaces fonctionnelles standards tion collect comme suit :
Les possibilités de programmation fonctionnelle introduites avec Java 8
ont mis en exergue la nécessité d’avoir un certain nombre d’interfaces @2<.42< .@2<.42 :7720> <:=>2< =><2.8
fonctionnelles prêtes à l’emploi dans le JDK en standard. 36 7>2< ; ; 42> 2912< & 2<=:9 (2B # "
Ces interfaces ayant vocation à couvrir des besoins classiques du monde 8.; & 2<=:9 42> 42
fonctionnel. Dans la grande majorité des cas, elles ont été ajoutées au 0:7720> @2<.42< 92A @2<.42< .002;> @2<.42<
sein du package [Link] et sont organisées dans les catégories 0:8/6 92
suivantes :
◗ Function<T, R> : prend en entrée un paramètre T et retourne un objet R (C=>28 :?> ;<6 9>79 G# :C2992 F42 G .@2<.42 :7720> .@2<.42
◗ Predicate<T> : prend en entrée un paramètre T et retourne un booléen
en sortie Conclusion
◗ Consumer<T> : prend en entrée un paramètre T, effectue un certain L’introduction des Lambdas expressions dans le langage marquera un
nombre de traitements et ne retourne rien tournant dans l’histoire de Java. Le langage décrit comme moribond va
◗ Supplier<T> : aucun paramètre en entrée et retourne un objet T regagner en attrait en proposant aux développeurs la possibilité de mêler
◗ BiFunction<T, U, R> : prend 2 paramètres en entrée respectivement de le paradigme fonctionnel au modèle objet. Les architectes d’Oracle ont eu
type T et U, renvoie un objet R la bonne idée de ne pas s’arrêter à cet ajout en modifiant également en
Il est bon de souligner que nous avons abondamment eu recours à ces profondeur les bibliothèques au coeur du JDK et en introduisant les
interfaces fonctionnelles standards lors des exemples précédents. Les Streams afin de permettre aux développeurs de tirer pleinement partie de
exemples les plus simples viennent de l’opération de filtrage des Streams la puissance de la programmation fonctionnelle dans les applications
qui prend en entrée un Predicate, de l’opération map qui prend une Func- Java d’entreprise. Enfin, le fait d’abstraire le développeur du travail de
tion, et de l’itération forEach qui prend un Consumer en entrée. Dans nos parallélisation des opérations liées aux Streams va booster la puissance
exemples de filtrage, la Lambda expression passée en entrée est une ins- des applications Java tout en laissant le développeur se concentrer plei-
tance de Predicate. En sus, ces prédicats peuvent être combinés pour en nement sur les traitements métiers à forte valeur ajoutée dans son code.
créer des plus complexes et également facilement réutilisables. On peut
ainsi effectuer le filtrage sur les personnes dont le nom se termine par la Sylvain Saurel - Ingénieur d’Etudes Java / Java EE
lettre ‘n’ et comporte au moins 4 lettres : [Link]@[Link]

74 Programmez! < Juin 2014


075_077_175 19/05/14 23:32 Page75

Lync et Skype :

e
Créez votre scénario de communication
On dit souvent « la communication est la base de toute relation ». C’est donc pour cela que les
solutions de communication unifiée prennent une place de plus en plus importante dans les outils
d’entreprise, voire même dans certains cas se substituent au mail. Les entreprises souhaitent
toucher directement leur clientèle en utilisant des outils comme les réseaux sociaux, ou les
plateformes de communication instantanée.
Microsoft est présent sur le marché des commu- ◗ La fonction javascript [Link] est l’équivalent du bouton précédent
nications unifiées en entreprise depuis quelques mais ajoute des fonctions supplémentaires

05B 50 /-8 8 , ?@E8 1 C50@4 .-/7 3>;A:0 /;8 ;> 22


années maintenant : Live Communications 2003

?/>5<@ @E<1 @1D@ 6-B -?/>5<@


et 2005, Office Communications 2007 et 2007

& 7 E<1 A5 G
R2, Lync 2010 puis 2013 mais également depuis 2011, sur le marché du

:-91 /-8 8
grand public, grâce au rachat de Skype. Ces deux produits ne s’adressent

18 191:@ /-8 8 ,
pas à la même cible mais sont très complémentaires. Ils communiquent

<->@5/5<-:@? * 1/4; +
directement via un processus de « fédération ». Toutes les modalités de

59-31& 5F1
communications sont possibles : messagerie instantanée, audio, vidéo,

59-31 ;8 ;> C45@1


partage de contenu comme un Powerpoint, un sondage, un tableau blanc,

H
téléphonie, etc … Et pourquoi ne pas utiliser tous ces éléments pour créer

?/>5<@
son propre scénario de communication? Microsoft met à disposition des

05B
développeurs des API pour créer des applications permettant :
◗ D’améliorer la communication entre les personnes,
◗ De réduire la latence des communications, Toutes ces informations sont résumées sur le site [Link]
◗ De trouver facilement les informations grâce à des scénarios de commu-
nications automatiques, Lync
Voici les API et quelques exemples pour commencer. Lync est une solution de communication instantanée. Elle se différencie
de ses concurrents sur la partie développement grâce à ses API clientes
Skype et serveurs. La majorité sont basées sur le framework .net et utilisent le
La communication entre Lync et Skype est disponible jusqu’à la modalité pattern « Begin / End » pour développer en mode asynchrone.
audio. La vidéo sera disponible pour le milieu de l’année 2014.
Skype s’intègre assez facilement dans une application métier via les Lync 2013 SDK
« Skype URI ». Elles sont supportées sur les environnements suivants : Commençons par le plus simple et le plus abordable de toute cette liste.
◗ Page Web Lync 2013 SDK est utilisable côté utilisateur et s’appuie sur la connexion
◗ Email du client Lync 2013 pour communiquer avec les services exécutés sur le
◗ Application Windows 8 serveur pour la présence, les conférences, etc …
◗ Application Android Les cas d’usages les plus fréquents sont :
◗ Application iPhone ◗ Intégration de la présence dans un portail web ou dans une application
Le client Skype sera lancé puis automatisé sur la modalité configurée. Si de bureau,
le client n’est pas installé, vous serez invité à le télécharger. L’intégration ◗ Automatisation d’une conversation à partir d’une application métier,
la plus simple consiste à utiliser, dans une balise href la syntaxe « skype : » ◗ Ajout de l’application dans Lync avec une contextualisation.

- 4>12 ?7 E<1 1/4; /-8 8 -8 8 @41 & 7 E<1 /4; & ;A:0 ' 1?@ & 1>B 5/1 -
Comme vous l’aurez compris le
client Lync est obligatoire pour
suivi du contact et de la modalité ou de l’action (ajouter un utilisateur par développer, vous pouvez utiliser
exemple) à lancer : Fig.1 et 2. aussi bien le client Lync intégré à
Vous pouvez également ajouter d’autres participants en séparant les utili- Office Pro ou le client Lync Basic
sateurs avec un point-virgule : disponible gratuitement.

- 4>12 ?7 E<1 <->@5/5<-:@ <->@5/5<-:@ /-8 8 -8 8 @41 & 7 E<1


Trois grandes « couches » sont

/4; & ;A:0 ' 1?@ & 1>B 5/1 -


exploitables et permettent de com-

Fig.1
Pour pouvoir communiquer avec un utilisateur Lync, la syntaxe doit être
adaptée en ajoutant un 2 juste avant l’utilisateur :

- 4>12 ?7 E<1 6;4: /;:@;?; /;9 /-8 8 -8 8 @41 & 7 E<1 /4;
& ;A:0 ' 1?@ & 1>B 5/1 -

Vous pouvez également aller un peu plus loin en utilisant :


◗ Les « Skype Button » : En utilisant la librairie
Fig.2
Juin 2014 > Programmez! 75
075_077_175 19/05/14 23:32 Page76

◗ Diffusion de message ou d’alerte,


e
prendre ce que nous sommes capables de faire avec cette boîte à outils :
Comme son nom l’indique la couche supérieure présente une collection ◗ Service d’enregistrement,
de contrôles WPF et Silverlight qui ne sont ni plus ni moins que les ◗ Application de test pour la montée en charge.
contrôles présents dans le client Lync Fig.3, 4 et 5. Ils peuvent être ajoutés Ces applications sont très puissantes et ont besoin d’accéder de la
dans des applications métiers et également personnalisés aux couleurs couche basse (SIP) à la couche Haute (Service de conférence par
de la société. Ils possèdent également des propriétés supplémentaires exemple) pour automatiser les communications. Toutes les classes implé-
pour étendre et enrichir la communication. La partie « Automation » fournit mentent des méthodes de gestion d’erreur et de répartition de la charge
un objet pour paramétrer automatiquement une conversation Lync en Fig.7. Certains développements nécessitent également des fonctions qui
fournissant les participants, la modalité de conversation à utiliser, et des ne sont pas disponibles. Prenons l’exemple d’un serveur vocal interactif :
paramètres de la conversation comme le premier message à envoyer. vous pouvez utiliser le SDK Lync Server pour rediriger l’appel vers l’appli-
La partie « Managed API » contient les fonctions bas niveaux de l’API pour cation UCMA. Celle-ci va exécuter un workflow de distribution d’appel et
exécuter des actions essentielles comme l’authentification ou bien encore faire de la synthèse vocale. Cette partie est basée sur le SDK Microsoft
la gestion de la liste des groupes et des contacts. Il existe un mode sans Speech en version 11. Complété par d’autres API, vous pouvez créer des
interface appelé « UI Suppression Mode » où Lync tourne en tâche de scénarios de communications sans limites !
fond et donne la possibilité au développeur de réécrire complètement le
client Lync. Avec toutes ces méthodes le client Lync est donc entièrement Lync Server SDK
pilotable sans interagir avec l’interface par défaut. Cette API a été créée lors de la sortie de Lync 2010. Elle est moins impor-

B -> ,8 E:/ 8 51:@ ! E:/ 8 51:@ 1@ 8 51:@


tante que les deux précédentes mais possède des fonctions très puis-

B -> ,-A@;9-@5;: ! E:/ 8 51:@ 1@ A@;9-@5;:


santes. Elle est généralement utilisée en complément d’UCMA.
Les scénarios d’utilisation sont :
Pour terminer sur ce SDK, certains composants ou méthodes prennent en ◗ Filtrer ou bloquer certains trafics de communication.
compte la contextualisation permettant de donner un sujet précis à la ◗ Modifier le contenu de certains messages.
conversation. Une clé de registre appelée « contextual Package » contient ◗ Rerouter des messages vers une autre destination ou vers une applica-
les informations de l’application comme un GUID qui est lié avec le com- tion UCMA.
posant. L’utilisateur connait donc directement le sujet et le contenu de la ◗ Intégrer des logiciels dans une communication.
conversation. Dans le cas d’un site web, la fenêtre de la conversation ◗ Personnaliser le fonctionnement de certaines communications comme
s’étend pour mettre en avant l’information Fig.6. les appels téléphoniques ou bien la fédération.
Lync utilise le protocole SIP pour la signalisation des communications.
UCMA C’est sur ce protocole que Lync Server SDK intervient. Il est capable de
Lync server 2013 présente la quatrième version d’UCMA (Unified Communi- filtrer des types de messages INVITE, MESSAGE et de réaliser un traite-
cation Managed API). Beaucoup de progrès ont été effectués surtout en ment sur celui-ci. L’application est enregistrée sur le serveur Lync via une
matière de simplification. Il s’agit de l’API la plus complète et la plus puissan- cmdlet Powershell (*-CsServerApplication) et utilise un manifest basé sur
te. Elle est utilisée par les services Lync comme les response group, pour un langage de script appelé MSPL (Microsoft SIP Processing Language).
Exchange pour la messagerie unifiée, ou bien elle sert de socle pour
d’autres API (ex : UCWA ou Persistent Chat). Les applications UCMA sont D98 B 1>?5;:
exécutées sur un serveur ajouté dans l’infrastructure Lync. Il est déclaré > -<<8 5/-@5;:"-:521?@
comme «Trusted Applications Server» et maintient un lien sécurisé via un > -<<(>5 4@@< CCC 95/>;?;2@ /;9 ! & & -9<8 1? ;:@1:@";0525/-@5;:
certificat. Dans certain cas il peut également être présent comme client pour D98 :? > 4@@< ?/419-? 95/>;?;2@ /;9 8 /?
simuler par exemple un utilisateur. Les cas d’usages les plus fréquents sont :
◗ Création de serveurs vocaux interactifs avec différentes modalités (Mes- Fig.6
sagerie instantanée, Audio, …),
◗ Distribution d’appel automatique,

Fig.4

Fig.5

Fig.3

Fig.7

76 Programmez! < Juin 2014


075_077_175 19/05/14 23:32 Page77

> >1=A1?@ 58 @1> 91@4;0#-91? #) ' " & &

e
par exemple [Link]. Une fois authentifié, vous pouvez
?@>5/@%;A@1 @>A1 requêter en REST et récupérer le résultat en json : Fig.8. L’objectif de ces
>135?@>-> 1:1>-@10 2-8 ?1 informations exposées par le serveur Lync est d’intégrer les données
0;9-5:& A<<;>@10 2-8 ?1 dans n’importe quelle application web. Si vous souhaitez tester les fonc-
> >1?<;:?1 58 @1> >1-?;: ;01? #$ # tionnalités et connaitre plus de détails, vous trouverez toutes les informa-
> ?/>5<@$ :8 E tions sur le site [Link]
> ?<8 & />5<@
I Lync 2013 Persistent Chat SDK
Le Persistent Chat est une fonctionnalité de Lync Server 2013, ancienne-
Certaines méthodes peuvent être réalisées directement dans le script ment appelée « Group Chat » Elle met à disposition des utilisateurs des
comme le forking, pour rerouter un appel vers une autre destination. Le salles de discussion persistantes, pour par exemple créer un fil de discus-
traitement peut également être passé vers une application en code mana- sion sur un projet. Chaque utilisateur vient enrichir la conversation. Les
gé pour ajouter une interaction avec une base de données par exemple. droits sont délégués à un « super – utilisateur » pour créer les salles et
La puissance du SDK est définie par la possibilité de réaliser une action ajouter les différents utilisateurs Fig.9.
sur toutes les communications passant par le serveur, mais cela peut éga- Certaines méthodes sont également disponibles dans le SDK Lync Client.
lement être très dangereux. Une attention importante doit être donnée sur La partie Persistent Chat est destinée à une utilisation serveur pour gérer
les performances afin de ne pas ajouter une latence supplémentaire aux les différentes salles, ajouter / supprimer un message mais aussi dévelop-
flux temps réels. per des plugins s’intégrant comme la contextualisation dans la fenêtre de
la conversation.
UCWA
UCWA pour « Unified Communication Web API » est la seule API web dis- Lync Software Defined Networking
ponible aujourd’hui sur Lync. C’est aussi une exception dans cette liste Ce SDK est spécifique et lié à la partie réseau. Il contient un service sup-
car elle est basée sur les technologies http, json, Oauth et javascript. Elle plémentaire, installé sur le serveur Lync, qui remonte les informations
est donc utilisable à partir de n’importe quelle application même non réseaux des trames SIP à un listener. Ce listener parse le message et ren-
Microsoft. Si vous utilisez Lync 2013, vous l’utilisez sans le savoir via le voie les informations de qualité à l’outil de supervision. Il est par exemple
client Lync Mobile ou bien encore le client de conférence Lync Web App. utilisé par certains constructeurs d’équipement réseau pour améliorer les
Il s’agit de la première version, et elle n’expose qu’une partie des modali- communications Lync sur le réseau.
tés de communications :
◗ Présence. A venir
◗ Gestion des informations de redirection d’appel. La lync Conference a eu lieu lors de la troisième semaine de février à Las
◗ Planification et gestion des conférences en ligne. Vegas. Cet évènement a apporté son lot de nouveautés avec, entre-
◗ Messagerie Instantanée. autres, l’annonce d’une nouvelle API nommé UCJA ou « Jlync ». Le nom
◗ Appel Audio en mode « Call via work ». sera confirmé lors de la sortie.
Contrairement à l’API Lync Client, il n’est pas nécessaire d’avoir un client Comme UCWA, il s’agit d’une API web basée sur javascript reprenant
Lync sur le poste. Les paramètres de connexion comme l’adresse du site quelques fonctionnalités mais surtout permet d’ajouter les modalités
se fait via une requête sur l’enregistrement DNS du domaine Lync comme audio et vidéo directement dans une interface web. Elle offre un nombre
incroyable de nouvelle interactions. Elle est annoncée pour la fin de l’an-
née. Pour conclure, voici un récapitulatif des différentes API disponibles
Fig.8 pour Lync :

Client Serveur Online


Lync SDK X X
UCMA 4.0 X X
Lync Server SDK X
UCWA X
Lync Persistent Chat X
Lync SDN X

Grâce à ces outils et à la plateforme de communication, vous pouvez


construire des scénarios très riches et personnalisés en manipulant les
services aussi bien sur la partie client que serveur. Lors de la Lync Confe-
rence, Gurdeep Singh Pall a introduit le changement de l’unified communi-
cation vers l’universal communication, ou chaque personne peut
communiquer de n’importe quel endroit avec n’importe quel périphérique.
Ces outils vont nous aider à accélérer ce changement.

Alexis Conia
Lead Developer & MVP Lync – Neitiv
[Link] - @alexis_conia

Fig.9 Juin 2014 77


> Programmez!
078_079_175 19/05/14 23:33 Page78

Développez avec Yammer c’est facile !


Nous sommes de plus en plus confrontés à l’utilisation des RSE (réseaux sociaux d’entreprise).
Impossible de passer outre. Aujourd’hui le message de Microsoft est très clair; nous sommes dans
a

l’air du Cloud Computing. De ce fait Yammer, plateforme de RSE, fait partie toute intégrante du
nuage magique. Elle trouve sa place tout naturellement dans cet écosystème où se mêlent gestion
documentaire, SharePoint et Office 365.
Comment aborder le développement ? Etapes Requêtes
Yammer propose à ce jour et selon sa propre documentation, plusieurs 1 Demande d’authentification depuis une [Link]
API pouvant être exploitées assez facilement ([Link] application server (client id, url de l’app) _id=[:client_id]&redirect_uri=[:redirect_uri]
com/documentation/). Nous retrouvons ainsi dans le détail : 2 Une redirection vers une autorisation de
◗ API REST l’application est demandée [Link]
3 Demande d’authentification depuis une [Link]
◗ SDK : JavaScript, Ruby, Python
application server (client id, code secret _token.json?client_id=[:client_id]&client
◗ SDK Mobile : IOS, Windows Phone 8
de l’app et code de l’app) _secret=[:client_secret]&code=[:code]
◗ Widget Embarqué : HTML/JavaScript 3 Un token (Bearer) est fourni afin GET /api/v1/messages/[Link] HTTP/1.1
◗ OpenGraph : API centrée sur les activités liées à l’utilisateur d’accéder à une requête émise Host: [Link]
Vous l’aurez compris nous pouvons développer avec Yammer sur tout Authorization: Bearer abcDefGhi
type de support que cela soit du Web, du client lourd, des Apps etc… les 4 Résultat de la requête en JSON {«type»:»user»,»id»:1534234,»network_id»:
possibilités sont plurielles et les idées ne manquent pas, que cela soit sur 464564,»state»:»active» …….
des outils tiers, ex : outils d’analyse et de reporting (GoodData Yammer
Analytics) ou des outils CRM. Un APP Store Yammer est présent et vous L’autre pour l’authentification cliente (Client-Side Flow) :
permet de consommer des apps et/ou d’en publier.
Si l’on se concentre un peu plus sur la partie REST API, nous distinguons Etapes Requêtes
1 Demande d’authentification depuis une [Link]
application cliente (un ID Client est fourni _id=[:client_id]&redirect_uri=[:redirect
plusieurs « end points » disponibles pour les développeurs ([Link]
[Link]/restapi) :
et l’url de l’app) _uri]&response_type=token
◗ Messages
2 Redirection automatique vers l’application [Link]
◗ Users
par le navigateur, avec le token fourni. [:access_token]
◗ Groups 3 Résultat de la requête en JSON {«type»:»user»,»id»:1534234,»network_id»:
◗ Search 464564,»state»:»active» …….
◗ Activities
◗ Autocomplete Quels outils dois-je utiliser pour gagner du
◗ Invitations temps ?
◗ Suggestions Il est vrai que compte tenu de la multiplicité des « endpoints », le résultat
◗ Networks des objets envoyés par les requêtes sont assez complexes et les « par-
Plus concrètement, cette api se manipule uniquement en HTTPS et vous ser » toutes une à une prendrait du temps. Si vous faites du C#, des outils
donne des réponses JSON. comme JSON C# Class generator sur CodePlex ([Link]
Quant aux opérations fournies, uniquement du GET, POST et DELETE. [Link] ), ou encore un outil online tel [Link] peu-
vent vous faire gagner un temps précieux. Des outils comme RestSharp
Qu’en est-il du modèle d’authentification ? ([Link] ) peuvent vous aider dans le fait d’avoir une API pure-
Le modèle d’authentification est basé sur OAuth 2.0, apportant une simpli- ment cliente. Et sans oublier Fiddler ([Link] pour
cité d’opération et d’implémentation sur tout type de support client. débugger vos applications le plus finement possible.
Lorsque l’on développe des Yammer Apps toute application est compo-
sée d’un identifiant applicatif public et d’un identifiant privé (secret). Où puis-je trouver des exemples ?
Deux types d’authentifications existent. L’un pour application serveur Sans conteste la première source d’exemple est la plateforme GITHUB.
(Server Side Authentication Flow) : Elle offre pléthore d’implémentations des API Yammer, et ce, dans plu-
sieurs langages; vous pouvez trouver des « Wrapper » pour Ruby, JS, ou
C#... ([Link] )
Plus simplement un projet sur CodePlex, s’intitulant [Link],
est un simple « wrapper » pour C# et son utilisation est assez simple
([Link] ).

Un petit exemple pour la route


Ici nous utilisons une bibliothèque graphique JavaScript du nom de Infovis
Toolkit ([Link] ) permettant d’avoir une vue « Graphe » de
nos objets. La librairie utilisée est la suivante ([Link] sta-
tic/v20/Jit/Examples/ForceDirected/[Link] ). Cela vous donnera une
bonne base de départ. Dans notre exemple, après avoir créé et déclaré une
application, les fichiers JavaScript Yammer, implémenté les méthodes

78 Programmez! < Juin 2014


078_079_175 19/05/14 23:33 Page79

« [Link] » avec les identifiants applicatifs, appelé la méthode


« [Link] », il me suffit d’implémenter simplement comme
dans les exemples fournis dans la documentation Yammer, comme par
exemple :

a
<<Code JS>>
=& 1 (3 2+., > & 4 4 ) A B ?
=& 1 ,* 8 3 ,.2!8 & 8 9 7
+9 2(8 .3 2 6 * 74 3 27* >
.+ 6 * 74 3 27* & 9 8 - * 74 3 27* >
:& 6 +.2& 0 ' /* (8
=& 1 6 * 59 * 78 >
9 6 0 A-8 8 4 7 ;;; =& 11* 6 (3 1 & 4 . : 9 7* 6 7 (9 6 6 * 28 /73 2B
1* 8 -3 ) A " B
)& 8 & " =4 * A/73 2B
79 ((* 77 +9 2(8 .3 2 )& 8 & >
.2.8 )& 8 & 4 4 * 0 )* 23 8 6 * +3 2(8 .3 2 6 & 4 -
? ? $
* 6 6 3 6 +9 2(8 .3 2 <-6 78 & 8 9 7 > 79 .8 * )9 (3 )*
& 0* 6 8 <-6 78 & 8 9 7 ?
? <</CodeJS>>
?
? Par défaut le code fourni par cette librairie de prend pas en charge les
* 07* > images ! Si vous observez bien nous avons défini un nouveau type
& 0* 6 8 A23 8 03 ,,* ) .2B « Image ». Voici l’extension de paramètre pour cette librairie, celui-ci est à
? mettre en dehors de la fonction « init »
?
<<CodeJS>>
<</CodeJS>> /.8 3 6 (* .6 * (8 * ) 03 8 3 )* " =4 * 7 .14 0* 1* 28 >
C.1& ,* D >
Une fois que l’on a choisi quel « endpoint » nous voulons requêter, ici les C6 * 2)* 6 D +9 2(8 .3 2 23 )* (& 2:& 7 >
données relatives à l’utilisateur courant, nous pouvons travailler avec les :& 6 (8 < (& 2:& 7 ,* 8 8 <
données JSON et les transmettre assez simplement dans notre librairie. :& 6 4 3 7 23 )* 4 3 7 ,* 8 ( 8 6 9 *
Téléchargez l’exemple 1 et rendez-vous directement dans la fonction .+ 23 )* ,* 8 & 8 & C.1& ,* D >
« init » du fichier « [Link] ». :& 6 .1, 23 )* ,* 8 & 8 & C.1& ,* D
Voici ce que nous faisons. Nous récupérons les données courantes de (8 < )6 & ; 1& ,* .1, 4 3 7 < 4 3 7 =
l’utilisateur ainsi que des préférences et nous les mettons sous formes ?
d’adjacences dont le point de départ est l’utilisateur courant, ce qui nous ?
donne : C(3 28 & .27D +9 2(8 .3 2 23 )* 4 3 7 >
:& 6 24 3 7 23 )* 4 3 7 ,* 8 ( 8 6 9 *
<<CodeJS>> ).1 23 )* ,* 8 & 8 & C).1D
+9 2(8 .3 2 .2.8 4 & 6 & 1)& 8 & > 6 * 8 9 6 2 8 -.7 23 )* * 04 * 6 (.6 (0* (3 28 & .27 24 3 7 4 3 7 ).1
.2.8 )& 8 & ?
:& 6 & )/ #$ ?
+3 6 :& 6 . . 4 & 6 & 1)& 8 & ;* ' % 4 6 * +* 6 * 2(* 7 -3 1* % 8 & ' 7 0* 2,8 - . ?
> <</CodeJS>>
& )/ 4 9 7- 4 & 6 & 1)& 8 & ;* ' % 4 6 * +* 6 * 2(* 7 -3 1* % 8 & ' 7#.$ 2& 1*
? Tout cela nous donne le résultat suivant : voir figure ci-dessus.
:& 6 /73 2 #
> Conclusion
6 3 3 8 Nous pouvons faire pléthore de chose avec l’API Yammer, cet article n’est
.) 4 & 6 & 1)& 8 & #A.)B $ que purement introductif sur les possiblités offertes. Ajoutons que l’ex-
2& 1* 4 & 6 & 1)& 8 & #A+.6 78 % 2& 1* B $ ploitation de cette donnée est très rapide ce qui permet d’avoir des résul-
)& 8 & > tats assez prometteurs, dans un laps de temps très court. Avis au
A (3 03 6 B A B amateurs de développements mobiles qui souhaitent se lancer dans des
A 8 =4 * B A.1& ,* B applications révolutionnaires !
A 9 6 0B 4 & 6 & 1)& 8 & #A19 ,7-3 8 % 9 6 0B $
? Nabil Babaci
)@ 4 * 2)& 2(* 7 MVP SharePoint - Consultant Senior SharePoint
A& )/& (* 2(.* 7B & )/ [Link]

Juin 2014 > Programmez! 79


080_081_175 19/05/14 23:35 Page80

Timeline : 1998-présent-futur
Objet : Linux bouleverse l’industrie
des serveurs
Conçu initialement comme un hobby, Linux va motoriser
la majorité des serveurs Web en s’imposant juste avant
l’arrivée de l’e-commerce, avec l’argument d’être un Unix
qui fonctionne sur un simple PC.
Durant les années 80, les étudiants en génie les entrées-sorties. Il ajoute ensuite autour
informatique ont une marotte : réécrire leur toutes les commandes, bibliothèques et autres
Créateur de Linux, le finlandais Linus Torvalds
propre système Unix. Unix, c’est un système composants Unix que des étudiants New-yor- continue d’en superviser le développement au sein
d’exploitation mis au point un peu par hasard kais ont déjà réécrits dans le cadre d’un certain de la Fondation Linux.
vers le début des années 70 au sein des labora- projet GNU. L’histoire aurait pu s’arrêter là et le
toires Bell d’AT&T. Le but, qui paraît très simple système Linux, ainsi nommé pour faire la ce sont des environnements de développement
aujourd’hui, était de permettre à un ordinateur contraction entre Linus et Unix, n’être jamais complets, avec tous les langages disponibles et
d’exécuter plusieurs applications simultané- rien d’autre qu’un simple hobby. que les programmeurs peuvent utiliser gratuite-
ment, et de manipuler des fichiers sur disque. Seulement voilà. Il se trouve que le projet GNU, ment.
Sous l’impulsion de ses deux concepteurs, les initié dès 1983 par le doctorant en intelligence Citons la distribution Softlanding Linux System
informaticiens bidouilleurs Ken Thompson et artificielle Richard Stallman, poursuivait un vrai (1992), qui sera rebaptisé un an plus tard en
Dennis Ritchie, mais aussi pour des questions but industriel, celui de bâtir un Unix libéré de Slackware, ainsi que sa version allemande, la
légales, Unix fut cédé en 1975 avec son code toute propriété intellectuelle, dont n’importe qui Suse (1994). La Debian (1993), puis la Red Hat
source aux milieux universitaires. pourrait faire le commerce sans avoir à reverser (1994) ajouteront chacune un système dit de
Ceci en plus d’être revendu sous forme de de droits. L’intérêt pour un tel système est fort gestion des paquets, lequel permet d’installer
licences aux principaux constructeurs informa- chez la quantité de start-ups qui se créent alors un logiciel avec tous les éléments (biblio-
tiques (IBM, Dec, HP...) afin qu’ils puissent dans la Silicon Valley pour vendre des technolo- thèques, etc.) nécessaires à son fonctionne-
mettre au point des solutions clients/serveur. gies et des services informatiques en toute ment. Dès 1998, la Suse et la française
Support de cours, Unix inspira aux universi- liberté. Problème, le noyau du système GNU ne Mandriva (initialement Mandrake) adopteront le
taires de nombreux développements, eux- sera jamais fonctionnel. Alors que celui de Linux système de paquets de Red Hat.
mêmes redistribués avec leur code source dans l’est dès 1991. Actif sur les newsgroups - sortes
un but pédagogique. de salon de discussion en mode texte - popu- No 1 sur les serveurs
Parmi ces développements, citons les systèmes laires dans les milieux des hackers de l’époque - des hébergeurs
BSD (du nom de l’université californienne de Linus Torvalds se rend rapidement compte des Le succès de Linux a d’abord lieu chez les
Berkeley) qui serviront d’OS aux premiers ordi- opportunités de son système. En 1992, il annon- hébergeurs. En 1996, avec son logiciel serveur
nateurs de Silicon Graphics et Sun, ainsi qu’aux ce ainsi passer son noyau sous licence GPL, la Apache et son matériel x86 (des PC sans écran)
premiers dispositifs de communication réseau licence « libre de tous droits » inventée par pas cher, Linux devient ainsi le système le plus
en TCP/IP (le protocole de ce qui deviendra Richard Stallman, qui autorise quiconque à utilisé pour motoriser les sites web, à la barbe
ensuite Internet). Mais de toutes les réécritures redistribuer le noyau Linux accompagné des des solutions de Sun. Microsoft décide alors de
d’Unix, c’est celle de l’étudiant finlandais Linus outils GNU, tant qu’il n’y a pas de logiciel com- se lancer lui-aussi sur ce marché. Mais le couple
Torvalds qui marquera durablement l’histoire, mercial dans le lot. Windows-serveur IIS, quoique tournant aussi
car elle permettra l’essor de la net-économie et, sur x86, n’aura jamais la même réussite (il culmi-
plus tard, des smartphones. Livré sous forme nera au mieux à 10 points de parts de marché
de distributions en-dessous de Linux-Apache entre 2007 et
Du hobby au phénomène C’est alors que le phénomène des distributions 2009).
industriel Linux se multiplie, à savoir des kits téléchar- Le décollage en fanfare de Linux surviendra
En 1991, Linus Torvalds se lance dans l’écriture geables sous forme d’images disque, à graver vers la fin de l’année 2000, lorsque le géant IBM
d’un Unix qui fonctionnerait sur PC, au prétexte sur CD ou disquettes pour installer un Linux annonce avoir investi 1 milliard de dollars dans
que le serveur Unix de son université n’était pas entièrement fonctionnel sur PC. Ces distribu- Linux, pour contribuer à son développement.
souvent disponible. Pour le réaliser, il télécharge tions Linux présentent deux intérêts. D’une part, Pour son PDG de l’époque, Louis Gerstner, le
la matière première depuis les serveurs du MIT, elles mettent dans un simple PC à 6000 Frs Web doit sous peu devenir une place de marché
l’institut technologique de New York. Il y trouve (NDLR environ 900 €) les fonctions réseaux des pour des boutiques et des services administra-
Minix, une version simplifiée d’Unix mise au serveurs Unix qui coûtent plusieurs dizaines de tifs en ligne (il invente à cette occasion le terme
point par un professeur, et adapte son code milliers de francs. De fait, il devient possible de e-Business). Et comme les rouages de cette
source pour concevoir un noyau, à savoir la par- proposer des serveurs Internet (routeurs, puis e- nouvelle industrie seront majoritairement exécu-
tie centrale du système, qui régit le multitâche et mail, FTP et Web) très peu chers. D’autre part, tés par des serveurs Linux, il est urgent que les

80 Programmez! < Juin 2014


080_081_175 19/05/14 23:36 Page81

GPL qui régit Linux. En 2006, l’accord que


passe Microsoft avec Suse - pour que chacun
ait le droit de revendre le système de l’autre
dans le but de l’administrer avec son propre
système - ce qui permet à Microsoft de vendre
du Windows aux hébergeurs pour chapeauter le
fonctionnement de leurs serveurs - est à deux
doigts d’être jugé illégal. Les premières box
ADSL, dont la FreeBox, qui contiennent du
Linux sans pour autant être livrées avec son
code source, créent aussi la polémique. Les dif-
férends finiront par se tasser suite à la publica-
tion, en 2007, d’une nouvelle licence GPL.

Un succès d’estime sur PC


Initiateur du projet GNU et inventeur de la licence GPL, L’homme d’affaires américain Lou Gerstner déclenchera le Du côté des machines clientes, Linux connaîtra
l’américain Richard Stallman gagne aujourd’hui sa vie en succès de Linux dans le domaine de l’e-business, en un micro-succès éphémère sur PC au lende-
animant des conférences sur les logiciels libres. investissant un milliard de dollars dans son développement
lorsqu’il était le patron d’IBM. main de la publication par Microsoft de son pire
Windows : Vista, en 2007.
développeurs cessent de programmer pour éditeur Unix de la première heure, et qu’il a trou- Ubuntu, une sorte de Debian conçue dès 2004
Windows et qu’ils basculent sur Linux. vé dans ses cartons les licences originales pour offrir l’expérience du Mac sur PC, canalise
IBM a deux modèles : eBay et Amazon. Les d’AT&T. jusqu’en 2010 toutes les passions, mais n’équi-
deux tous premiers sites d’e-commerce (lancés Celles-ci pourraient faire de lui l’héritier de la pe guère plus de 1% des PC connectés à Inter-
en 1995) tournent sur Linux, avec le logiciel ser- propriété intellectuelle d’Unix et de tous ses net. Il offre un environnement bureautique
veur Web Apache, la base de données MySQL descendants. Mais jusqu’en 2007, année de son gratuit, sans virus, mais n’exécute pas les appli-
qui mime le fonctionnement des bases de don- dépôt de bilan, SCO n’aura jamais été capable cations grand public du PC. Malgré un bon capi-
nées Oracle, et les nouveaux moteurs applica- de prouver que Linux violait une propriété intel- tal sympathie, les entreprises préféreront
tifs PHP, Perl ou Python. Tous ces logiciels sont lectuelle lui appartenant. Il faut dire que plus maintenir sur leurs PC le vieux Windows XP, ou
Open Source et l’ensemble, dont l’acronyme aucun système Unix ne comportait une seule alors passer au Mac.
devient LAMP, fait dès lors figure d’infrastructu- ligne du code original depuis longtemps, ce que La notoriété d’Ubuntu chutera fortement dès
re standard pour toute entreprise qui veut avoir SCO avait oublié de vérifier avant d’intenter son 2011, avec l’arrivée d’une interface conçue pour
une présence sur Internet. Selon le W3Techs, procès. les écrans tactiles alors que les PC en sont
Linux exécute encore aujourd’hui les deux tiers L’affaire SCO, quoique considérée par tous dépourvus. Les fervents utilisateurs de Linux
du Web mondial. comme une énorme farce, aura pour effet d’exa- sur PC (environ 30 millions dans le monde) lui
cerber les prises de position autour de la licence préfèrent aujourd’hui la distribution Mint.
L’affaire SCO En revanche, Linux est en quelque
Les premiers démêlés arrivent en sorte depuis 2010 le No 1 des sys-
2003. L’éditeur Caldera réclame tèmes pour Smartphones, puisque
cette année-là à IBM des dommages c’est sur lui que repose Android. Mis
et intérêts de 1, puis 3, puis 5 mil- sur le marché en 2008, Android a profi-
liards de dollars pour avoir soi-disant té de la puissance industrielle et mar-
mis du code Unix dans Linux. Dans keting de Google, lequel n’a pas eu de
la foulée, il exige que tous les utilisa- comptes à rendre aux défenseurs de
teurs de Linux lui reversent des la licence GPL puisque le système ne
droits de licence. Caldera, à ce contient pas les outils et librairies
moment-là rebaptisé SCO, argumen- GNU habituels.
te qu’il avait racheté trois ans aupa-
ravant Santa Cruz Operation, un La distribution Ubuntu aura un temps tenté d’imposer Linux sur PC. En vain. Yann Serra

Une publication Nefer-IT Crédits couverture : 10-13-10 © mstay (tornade)


Abonnement : Programmez, 17, Route des 7 avenue Roger Chambonnet 08-06-13 © whanwhanai (usine) Contacts
Boulangers, 78926 Yvelines Cedex 9 - Tél. : 91220 Brétigny sur Orge Maquette : Pierre Sandré Rédacteur en chef :
01 55 56 70 55 - [Link]- redaction@[Link] ftonic@[Link]
mez @[Link] - Fax : 01 55 56 70 91 - Tél. : 01 60 85 39 96 Publicité : PC Presse, Rédaction : redaction@[Link]
du lundi au jeudi de 9h30 à 12h30 et de Directeur de la publication Tél.: 01 74 70 16 30, Fax : 01 41 38 29 75 Webmaster : webmaster@[Link]
13h30 à 17h00, le vendredi de 9h00 à & rédacteur en chef : François Tonic pub@[Link] Publicité : pub@[Link]
12h00 et de 14h00 à 16h30. Tarifs abonne- Ont collaboré à ce numéro : Pablo Arrighi, Sylvain Saurel, Evenements / agenda :
Imprimeur : S.A. Corelio Nevada Printing, 30 allée de la
ment (magazine seul) : 1 an - 11 numéros Yann Serra, François Mocq redaction@[Link]
recherche, 1070 Bruxelles, Belgique.
France métropolitaine : 49 € - Etudiant : 39 Secrétaire de rédaction : Olivier Pavie
Marketing et promotion des ventes : Dépôt légal : à parution - Commission paritaire :
€ - CEE et Suisse : 55,82 € - Algérie, Experts : M. Nimier-David, J-M Commets, A. G. Monod, A. Dicu,
Agence BOCONSEIL - Analyse Media Etude 1215 K 78366 - ISSN : 1627-0908
Maroc, Tunisie : 59,89 € Canada : M. Hubert, P-H Gache, Z. Chalal, A. Talavera, C. Villeneuve,
68,36 € - Tom : 83,65 € - Dom : 66,82 € B. Doolaeghe, Noel Bardelot, M. Schneider-Dufeutrelle, F. Lagrede, Directeur : Otto BORSCHA oborscha@[Link] © NEFER-IT / Programmez, mai 2014
- Autres pays : nous consulter. B. Cotinat, C. Gilet, M. Belmokhtar, F. Duminy, M. Avomo, O. Vine, Responsable titre : Terry MATTARD Toute reproduction intégrale ou partielle est
PDF : 30 € (Monde Entier) souscription ex- F. Chaachoua, I. Fofana, L. Bugnion, V. Kovalsky David, J. Knibbe, Téléphone : 0967320934 interdite sans accord des auteurs
clusivement sur [Link] I. Khan, M. Mezil, CommitStrip, N. Babaci, A. Conia, C. Lakech, Ce numéro comporte deux encarts jetés sur une partie du et du directeur de la publication.
R. Linsolas, Bastien Bonnet, Christophe Pelé tirage : Component Source et PC Soft.
082_175 19/05/14 23:37 Page82

Chaque mois, retrouvez CommitStrip dans Programmez!

Chaque semaine, de nouvelles aventures ! [Link]


82 Programmez! < Mai 2014

Vous aimerez peut-être aussi