Gérer un projet Open Source efficacement
Gérer un projet Open Source efficacement
Un code
pour les gouverner tous !
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)
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.
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 ?
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.
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
Basic a 50 ans !
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)
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
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
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.
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]
“
pas concernées par le copyright potentiellement demander à la cour suprême
”
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
[Link]
018_026_175 19/05/14 21:57 Page18
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.
“
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
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-
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
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.
nouveau
vous pouvez aussi commander directement sur notre site internet : [Link]
■ 173 :
■ 174 : exemplaires x 6 € € ■ 29,90 € soit au TOTAL €
PROG 175
soit +
TOTAL
Prix unitaire : 6 ! (Frais postaux inclus),
. France métropolitaine uniquement.
Prénom : Nom :
Valable jusqu’au 30 juin 2014
Adresse :
Quantités limitées
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
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]()}»
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
à 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.
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
% / ++# 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
b
Un code pour les
gouverner tous !
Aujourd’hui, il existe clairement 3 plates-
formes : Android, iOS, Windows Phone.
Bon code.
08-06-13 © whanwhanai (usine)
La rédaction.
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.
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-
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;
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é
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]
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
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
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
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] :
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
S
“Resources/Values”:
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 :
/<2@=7 2 B3 FB Q 7 @3 0=<8=C@ Q
:=1/: DF 7 <2 Q :7 19 % /G 3 ::=Q
b
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
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
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 :
>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
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
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
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-
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,
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-
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.
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]
# ' ($ ! -. 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.
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é-
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 ! ».
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-
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
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 !
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.
Fig.2
Fig.4
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
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 - .
Fig.6
Fig.7
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
Julie Knibbe
Platform Evangelist, Deezer
[Link]
[Link]
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-
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-
.
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
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
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
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
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.
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
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
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
;?/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
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
& <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
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
& 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,
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.
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 -
Fig.4
Fig.5
Fig.3
Fig.7
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 :
Alexis Conia
Lead Developer & MVP Lync – Neitiv
[Link] - @alexis_conia
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] ).
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]
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