Blog Technologique
Retour sur les TechDays 2012, annonciateurs d’une année riche pour les développeurs
Je souhaite ici partager avec vous mon sentiment sur la dernière édition des TechDays, qui s’est déroulée au début de ce beau (mais froid) mois de février. Fermons la parenthèse météorologique.
Développement fonctionnel avec F#
J’ai pu assister à quelques présentations lors de la dernière édition des TechDays. Et le sujet que j’ai choisi de présenter est le langage F#. Mon choix est dû au fait que je ne connaissais pas ce langage… et que ce fut une des sessions où j’ai découvert le plus de choses. J’ai beaucoup apprécié l’accessibilité du speaker qui n’est ni plus ni moins que le concepteur du langage, Don SYME.
Dans cet article je voudrais répondre aux quelques questions que je me suis moi-même posées, à savoir :
- Qu’est ce que le langage F# ?
- Quel est l’intérêt de F# ?
Je vais aussi faire une description des principales nouveautés apportées par F#3.0.
Qu’est ce que le langage F# ?
On dit de ce langage que c’est un langage fonctionnel inspiré fortement d’un autre langage qui est OCaml, je ne vais pas m’attarder la dessus car je ne connais pas ce langage, par contre j’ai voulu comprendre ce que signifie un langage fonctionnel.
Apres avoir googlisé j’ai trouvé en effet qu’il existe 3 familles de langages de programmation :
- La programmation logique : ce sont les langages dédiés à faire de l’intelligence artificielle je citerai prolog.
- La programmation impérative : l’exemple que je donnerais est le C#, enfin, je me dois de citer aussi le C, le C++, Java et même l’assembleur. Vous trouverez certainement plusieurs définitions de ce que cela représente la programmation impérative, mais en quelques mots : c’est l’exécution des instructions successives pour modifier l’état de la mémoire, l’assignation, le bouclage, le branchement conditionnel, et le branchement sans condition. Si je vous dis que le plus grand inconvénient de ce type de programmation c’est le fait de connaitre à tout moment l’état d’une variable pour éviter les effets de bord, vous allez me dire mais c’est ça la dure vie de programmeur et que si cela ne me plait pas, je peux faire un autre métier… Mais il ne faut pas cacher la dure réalité c’est que l’on passe un temps fou à déboguer nos programmes impératifs. Et c’est là où je vais introduire la programmation fonctionnelle.
- La programmation fonctionnelle s’affranchit de façon radicale des effets de bord en interdisant toute opération d’affectation. Les programmes ont également tendance à être plus concis. Vous tapez et typez moins : moins de frappes et moins d’endroits où le compilateur doit connaître le type de la variable, des arguments ou du retour. Ceci peut signifier beaucoup moins de code à gérer.
Quel est l’intérêt de F# ?
Le langage fonctionnel F# aide les développeurs à prendre en charge la simultanéité en encourageant des structures de données constantes qui peuvent être transmises entre les threads et les machines sans avoir à se soucier de la sécurité des threads ou de l’accès atomique. Il a également tendance à faciliter l’écriture de bibliothèques plus adaptées à la simultanéité telles que les flux de travail F# asynchrones.
Certaines améliorations importantes du Framework .Net notamment dans les génériques, LINQ, PLINQ et Futurs proviennent de l’application de concepts de programmation fonctionnelle et l’une des nouveautés du Framework 4.5 c’est l’introduction de la programmation asynchrone.
Donc pour ceux qui développent en C# ou VB.NET, sachez que vous faites presque de la programmation fonctionnellle sans vous en apercevoir !
Je note aussi que F# a un profil de performances similaire à C#. Cependant, il a un profil de performances bien supérieur aux langages concis comparables, en particulier les langages dynamiques et de script. Et, comme plusieurs des langages dynamiques, F# inclut les outils qui vous permettent d’explorer des données en écrivant des fragments de programmes et en les exécutant de façon interactive.
F# reste entièrement interopérable avec le reste de l’écosystème .NET, ce qui signifie que vous pouvez profiter de la majeure partie de la connaissance existante et de nombreux outils existants pour aider à introduire F# dans votre arsenal de codage.
Nouveautés F#3.0
Lors de la présentation de Don SYME, les nouveautés de la version 3.0 de F# ont été introduites.
On peut distinguer 3 niveaux.
Langage F# et compilateur
A l’évidence on ne peut pas penser à développer sans avoir une source de données où stocker nos informations. Maintenant avec F# on pourra accéder à nos diverses sources de données facilement. les types de providers ajouté sont les suivants
- OData services
- Database Connections
- Database Schema
- Web services
- Resource files
Et au final on a ce joli schéma
Pour aller plus loin et savoir comment cela fonctionne, je vous invite à visiter le site MSDN : http://msdn.microsoft.com/en-us/library/hh156509(v=vs.110).aspx
l’autre nouveautés c’est la possibilité de faire les Query Expressions tel que l’on voit en utilisant LINQ
/ A query expression.
let query1 = query { for customer in db.Customers do
select customer }
Environnement de développement
On a l’habitude de développer sur Visual Studio et donc vous dire que l’IntelliSense et le Parameter Help sont des nouveautés de visual F#3.0 ça vous paraîtra ridicule, mais cela reste un argument de plus pour vous lancer à faire du F#, cela peut nous aider à débuter par exemple.
Library F#
Etant données que l’accent a été mis sur les différents type de providers et l’accès aux données, alors il ne faut pas s’étonner de voir que des classes de manipulation de données aient été ajoutées à la library F#:
- Linq.QueryBuilder : http://msdn.microsoft.com/en-us/library/hh323943(v=vs.110).aspx
- Linq.Nullable : http://msdn.microsoft.com/en-us/library/hh324123(v=vs.110).aspx
- Linq.NullableOperators : http://msdn.microsoft.com/en-us/library/hh323953(v=vs.110).aspx
- Microsoft.FSharp.Data.UnitSystems.SI : http://msdn.microsoft.com/en-us/library/hh289707(v=vs.110).aspx
Conclusion
A la fin de la présentation je me suis posée encore plus de questions, celle que j’ai retenu est : Peut on faire des applications web avec F#? et comme google est mon ami, je lui ai posé la question, il m’a répondu que Ouiiiiiiiiiiii c’est possible. Dans une des prochaines réunions de la communauté .Net, je présenterai un exemple d’application web écrit avec F#.
[HTML 5] Offline et stockage client
Une application web fonctionnant sans connexion réseau et capable de sauvegarder les données de l’utilisateur, quelle drôle d’idée ? Grâce à HTML 5 se sera pourtant bientôt possible !
Mercredi 8 février 2012, je me suis rendu aux MS TechDays 2012 dans le but d’assister à une présentation répondant au nom de « Création d’une application HTML5 gérant l’offline et le stockage client » afin d’en savoir un peu plus sur le sujet.
L’objectif de cette présentation était de découvrir quatre briques importantes d’HTML 5 : « le mode offline », « le DOM storage », « l’Indexed DB » et « le drag & drop ».
Les deux intervenants Microsoft que sont David Rousset, responsable de la relation avec les développeurs Web, et David Catuhe, spécialiste interface utilisateur, ont commencé la session par une démonstration de SnapX, une application de gestion de diaporamas sur laquelle a été basée toute la présentation. SnapX est entièrement développée en HTML 5.
David Rousset a alors présenté le mode Offline permettant l’utilisation d’une application web sans connectivité réseau permanente. Le principe est le suivant : L’application est téléchargée par le navigateur comme une simple application web à la différence que celle-ci indique au navigateur la liste exhaustive des fichiers nécessaires à son fonctionnement en mode hors ligne. Tout ceci grâce à la définition d’un fichier « manifest » dans lequel on précise, les ressources hors ligne, les ressources en ligne et les ressources à utiliser en cas d’erreurs.
L’application SnapX, est utilisable en mode hors ligne grâce à cette technique mais elle permet aussi l’import de fichiers images ainsi que leurs manipulations et leurs sauvegardes, normal me direz-vous pour un diaporama… David Catuhe nous a alors décrit les méthodes utilisées pour permettre ces fonctionnalités en passant par la manipulation des fichiers grâce à la « File API » et la brique « DOM storage » qui permet de sauvegarder jusqu’à 10 Mo de données sur le poste client. Cette nouvelle brique qui permet d’outrepasser les limites des cookies, embarque deux objets que sont le localStorage (données partagées pour une application) et le sessionStorage (données de session uniquement).
Pour aller un peu plus loin dans la sauvegarde des données utilisateurs en local, la présentation s’est ensuite orientée sur la brique IndexedDB fournie par HTML5. Véritable base de données NoSQL, elle permet de stocker des objets Javascript (typiquement des objets JSON) et est totalement sécurisée (les bases de données d’une application sont liées au domaine). Il n’y a pour le moment pas de limitation sur la quantité de données et celle-ci varie selon les navigateurs. Nos intervenants lors de cette session nous ont laissé penser qu’une forme de limitation sera mise en place avec validation par l’utilisateur lorsque la spécification sera finalisée. Petit plus de la présentation, ils nous ont indiqué une ressource très intéressante permettant d’afficher le contenu de l’IndexedDB (aller sur http://blogs.msdn.com/b/ie/archive/2012/01/25/debugging-indexeddb-applications.aspx)… pratique pour débuguer !
Cette session s’est enfin terminée par une présentation de la brique « Drag & Drop », une fonctionnalité déjà possible avec les frameworks Javascript (jQuery…) existant mais devenue native avec HTML5. Rentrée dans les mœurs des utilisateurs, cette fonctionnalité offre la possibilité d’améliorer l’ergonomie des applications en simplifiant les interactions entre le bureau et le navigateur web.
Ces présentations sont aussi l’occasion de récupérer des bonnes pratiques ou des astuces que l’on ne trouve pas partout. J’en ai retenues deux :![]()
- La spécification n’étant pas encore terminée, les implémentations des API instables sont systématiquement préfixées en fonction de l’organisme qui les a implémentées. Ainsi, l’implémentation de IndexedDB sur IE sera windows.MsIndexedDB, sur FireFox windows.MozIndexedDB, etc.
- Pour savoir si un navigateur implémente une fonctionnalité, il faut tester l’existence ce cette fonctionnalité et non la version du navigateur.
Pour aller plus loin :
http://www.caniuse.com (liste les fonctionnalités HTML5 disponibles en fonction des navigateurs)
http://blogs.msdn.com/b/ie/ (IE team Blog)
Comparaison des meilleurs outils d’intégration du marché (Jenkins, Quickbuild, UrbanBuild/AnthillPro, Bamboo, Apache Continuum, TeamCity, Go/Cruise Control) – Décembre 2011
Depuis quelques années, avec la montée de l’agilité dans la gestion des projets informatiques, l’intégration continue devient de plus en plus une problématique très importante dans les entreprises. Elle induit l’automatisation du cycle de vie des applications informatiques. Les processus de compilation, l’exécution des tests et même le déploiement soit sur des serveurs de développements ou de production sont alors exécutés de manière la plus atuomatique possible à des fréquences variables.
Les moyens de cette automatisation sont, entre autres:
- la mise en place d’outils comme Maven ou Ant,
- l’écriture de tests unitaires à l’aide de frameworks de tests comme JUnit/JMock pour le language Java,
- la réalisation de tests fonctionnels ou d’intégration avec des outils comme Selenium ou SOAP UI.
Ces différents outils et frameworks mis en place au sein des projets sont les fondements de ce qu’on appelle aujourd’hui les usines logicielles. Basées sur les moyens ci-dessus, elles nécessitent le déploiement d’un outil orchestrateur que l’on appelle le serveur d’intégration. Celui-ci permet de lancer de manière automatique ou manuelle à fréquence variable différentes tâches.
Dans ce cadre, j’ai réalisé une étude comparative des outils d’intégration actuels du marché dont j’ai souhaité partager les résultats aujourd’hui. En effet, il n’existe aucune étude sur internet actuellement qui compare les principaux outils d’intégration du marché. Ces informations sont donc intéressantes pour n’importe quel architecte, chef de projet ou développeur qui souhaite mettre en place ce type d’outil dans son entreprise. Cette étude est basée seulement sur les documentations et informations officielles (forums, blogs des éditeurs) et pas sur des tests réels sur des machines.
Voici les résultats basés sur des besoins identifiés comme important pour un outil d’intégration:
Légende du tableau

Tableau comparatif complet






Avantages / Inconvénients


L’ensemble des informations de cette étude comparatives des outils d’intégration actuels du marché au dernier trimestre 2011 se trouve sur les tableaux ci-dessus. Les informations sont plutôt denses et complètes d’où la taille assez petite des tableaux. Ces informations pourront, cependant, certainement vous servir si vous devez faire un choix d’outil d’intégration le plus adapté à votre contexte d’entreprise. Sinon, vous pouvez toujours me laisser un commentaire si vous souhaitez plus d’informations…
Retours sur l’Agile Tour 2011 (2/2)
Je fais suite à mon premier billet concernant l’Agile Tour 2011 pour vous faire part cette fois des conférences auxquelles j’ai assisté l’après-midi.
Améliorez l’efficacité de vos cérémonies agiles
Suite à la formation que j’ai suivi sur SCRUM, il m’avait paru que les différentes réunions n’étaient pas forcément évidentes à mener étant donné que chaque membre de l’équipe peut donner son avis. 7 à 10 personnes qui émettent chacune leur opinion pour à la fin prendre une décisionn, cela ne doit pas être évident dans la vraie vie. J’ai donc décidé de suivre cette conférence qui devait me donner une partie des réponses à mes questions.
L’oratrice est une Coach (encore une) et certifiée SCRUM Master. Elle accompagne ou a accompagnée, depuis 15 ans, plusieurs équipes en phase de transition vers SCRUM. Tout au long de son discours, elle insiste sur la dimension humaine liée à la bonne gestion des cérémonies agiles. L’agilité nécessite un comportement et une façon d’être spécifique. Pour que tout se passe bien, il faut être ++ comme elle dit. ++ veut dire qu’on est soit même dans une idée plutôt positive de nous-même et avec les autres. On peut alors être constructif pendant la cérémonie agile puisqu’on est dans un pied d’égalité avec les autres membres de l’équipe. On est en phase de collaboration. Dans le cas contraire, la réunion ne pourra être constructive puisque les interactions entre nous et les autres membres de l’équipe seront parasytées par du négativisme (on se sent supérieur aux autres ou inférieur, on sent qu’on n’a pas notre place dans l’équipe).
Conduite du changement et gestion de conflits
Cette conférence est liée à la précédente toujours dans cette esprit des difficultés rencontrées par les équipes agiles. Cependant, l’oratrice, psychologue clinicienne, apparemment débutante dans la prise de parole en présence d’un public assez nombreux n’était pas vraiment à l’aise. Elle n’a fait que lire son support de présentation. On n’entendait parler de gestion de conflits, de stress mais cette lecture assez monotone a complètement anihilé la conférence. Du coup, j’en ai pas retenu grand chose malheureusement. 45 minutes très longues en pure perte…
Ni Gladiateurs ni Bisounours – une équipe remarquable au quotidien
Avec la première conférence de l’après-midi, celle-ci était sans doute la meilleure de cette deuxième partie de journée. L’orateur, Christophe Thibaut, est un consultant senior ayant 20 ans d’expérience en développement et direction de projets. Il sait bien de quoi il parle et est plutôt très pragmatique.
Lors de cette session, il nous parle de la vie d’une équipe de développement en mode agile avec un focus sur les problèmes rencontrés dans ce mode de fonctionnement. Un des éléments qui revient souvent, et c’est le cas dans n’importe quelle équipe, est la gestion des conflits. Le problème dans l’agilité c’est que cela peut perdre un temps certain et créer une dynamique dans l’équipe très négative. En effet, l’efficacité d’une équipe agile réside dans la communication entre ses membres. Un conflit mal géré aboutit toujours à des blocages entre certains membres de l’équipe. Les interactions ne se font plus et l’équipe aura alors beaucoup de mal à s’autogérer et livrer dans les temps.
Christophe nous donne ainsi quelques élements pour éviter que les conflits fragilise une équipe agile. L’un des plus intéressants aspects de cette session fut alors la découverte des « core protocols » de communication. Je dis intéressant mais je ne l’utiliserais pas forcément dans la vie de tous les jours même en milieu professionnel. Pour ceux qui, comme moi, ne connaissent pas les « core protocols » c’est en fait un moyen de gérer la communication au sein d’une équipe à l’aide d’un protocole. Déjà pour moi, c’est pas l’idéal, s’il faut un protocole pour communiquer avec mon équipe c’est qu’il y a déjà un problème. Bref, ce n’est que mon point de vue après ce qui est important c’est la finalité des core protocols. Ils nous montrent qu’il est important dans une équipe que chacun de ses membres puissent indiquer à un autre membre que ce qu’il fait est bien ou pas bien, qu’une personne peut avoir envie de faire une pause, de faire autre chose, de demander de l’aide, etc…
Les core protocols permettent cela grâce à des mots clés. Je vais vous présenter dans la suite quelques exemples choisis par l’orateur.
Check in
C’est le mot clé qui est utilisé pour « entrer » dans l’équipe. Son utilisation indique aux autres membres de l’équipe que la personne est bien présente et motivée pour travailler sur ses tâches. Quand on arrive le matin, par exemple, la personne dit:
- Check in
- Je suis content d’arriver au boulot
- Je suis content parce que j’ai trouvé dans la nuit la solution à mon problème d’hier
- Je suis énervé car j’ai passé 2 heures dans les bouchons
L’équipe répond alors: Bienvenue!
Ask for help
Ce core protocol, comme son nom l’indique, est utilisé lorsqu’une personne de l’équipe a besoin d’aide. La personne dit alors:
- Quelqu’un peut m’aider j’ai un problème avec un bug que je n’arrive ps à résoudre depuis deux jours ?
Le membre de l’équipe qui le souhaite peut répondre alors oui et prendre le temps d’aider la personne qui a demandé de l’aide.
Check out
Sans justification, ce core protocol peut être utilisé par n’importe quel membre de l’équipe pour « sortir » de l’équipe. Un membre de l’équipe est fatigué, énervé de travailler sur la même tâche depuis 2 jours sans arriver à une solution, ne peut pas tenir ses engagement, etc… Il dit alors:
- Check out
Il va alors prendre une pause, boire un café et revient plus tard ou il rentre chez lui.
J’en ai présenté que trois mais il existe beaucoup d’autres core protocols comme Perfection Game, Pass, Protocol chec, Intention Check. L’avantage avec les core protocols c’est qu’ils forcent les membres d’une équipe à se parler et surtout à se dire ce qui va ou va pas. Ils nous apprennent qu’il est important de :
- faire des retours positifs à quelqu’un ainsi que des négatifs,
- de demander de l’aide à l’équipe,
- de faire une pause quand on arrive plus à avancer,
- …
Cependant, à mon sens, leur utilisation rends l’individu proche d’une machine. De plus, ils aboutissent à des contraintes puisqu’on est obligé de les utiliser lorsqu’ils sont mis en place dans une équipe. Cela déshumanise les individus sans oublier le fait que vu de l’extérieur les autres personnes doivent prendre les membres de ce genre d’équipe pour des fous ou des membres d’une secte. En tout cas, c’était intéressant de savoir que ce genre de moyen existe.
Les frontières de l’équipe
L’orateur, un consultant de SFEIR, a commencé sa conférence par un petit jeu basé sur les fameux oeufs en chocolat Kinder. Il a partagé 6 personnes du public en deux équipes de 3 avec chacune 3 oeufs. La première, spécialisée sur une tâche, s’est organisée en une personne qui devait sortir l’oeuf de son papier alluminium, la seconde devait manger tous les chocolats et la dernière était spécialisée dans la réalisation de la Kinder surprise. La seconde équipe elle multi-disciplinaire dont chaque membre devait faire les 3 étapes d’affiler avec son oeuf. Bien sûr, c’est l’équipe multi-disciplinaire qui l’a emporté. L’orateur en conclut par l’efficacité en agile d’équipe multi-disciplinaire.
Pour la suite, se fut en résumé, une nouvelle formation à SCRUM avec des illustrations basées sur la bande-dessinée Asterix. Une équipe d’irréductible, les agiles, représentée par le village gaulois au milieu de tous les autres (PO, client, équipes non agiles, …) que sont les différents camps retranchés romains.
Une session qui ne m’a pas vraiment laissée d’éléments instructifs.
Conclusion
Malgré certaines sessions très peu intéressantes, j’ai quand même eu beaucoup de retours intéressants sur l’utilisation de l’agilité dans le milieu professionnel. J’ai pu voir les difficultés rencontrées par les équipes agiles et surtout les moyens de les atténuer au maximum. En résumé, il n’est pas évident de mettre en place l’agilité mais, comme tout, l’important c’est d’adopter une attitude positive avec soi-même et les autres. Un élement important de l’agilité c’est qu’une équipe ne performe pas du jour au lendemain. Cela nécessite plusieurs mois de travail ensemble pour améliorer sans cesse les choses. Il est donc primordial, à mon sens, plus qu’avec des méthodes traditionnelles, que cette équipe ne soit pas dissoute après quelques mois. Cependant, l’agilité c’est aussi une façon d’être et de penser en équipe. Quelqu’un qui a une expérience dans l’agilité aura plus d’aisance à se réintégrer dans une nouvelle équipe agile puisqu’il aura, au moins, acquis l’état d’esprit agile. J’aurais aussi compris qu’au delà de l’équipe elle-même, le succès de la mise en oeuvre de l’agilité dans une entreprise est basé sur la confiance de ses dirigeants envers leurs équipes agiles.






