vendredi 14 décembre 2012

Human Talks Grenoble du 11 déc 2012

Introduction


Mardi dernier, 11 décembre 2012, j'ai assisté et participé en tant que "talkeur" aux Human Talks à Grenoble. En voici un petit retour.

Principe : Une rencontre autour de présentations de 10' par des développeurs pour des développeurs.

Pour notre soirée, il y avait 5 présentations au programme.

lundi 3 décembre 2012

Speed Boat pour état des lieux

Introduction

Il y a quelques mois, j'ai réalisé une mission de formation auprès d'une équipe pour l'aider à migrer de développements d'applications autonomes en .Net C#, vers des applications client-serveur avec interfaces WEB. En résumé : formation au développement WEB.

Lorsque j'ai débuté mon intervention, l'équipe avait déjà commencé à faire de la R&D et à développer, et rencontrait bon nombres de difficultés.

Je ne connaissais pas du tout cette équipe de 6 personnes, ni leur compétences du moment, ni les difficultés rencontrées, ni les attentes par rapport à mon intervention.

J'ai donc proposé de commencer par faire un état des lieux, avec l'équipe. Pour cela, j'ai choisi le "Speed boat" qui fait partie des Innovation Games, et qui me semblait tout à fait adapté au besoin. En voici un retour.

Déroulement de l'atelier

jeudi 29 novembre 2012

[Maven] Générer un ZIP contenant un autre ZIP

Pour changer un peu, un article bien technique pour répondre à un besoin que j'ai rencontré : générer un premier ZIP puis un second contenant le premier ZIP, et éventuellement d'autres fichiers.

Je partage ici la solution, avec quelques explications, si toutefois ça peut servir à d'autres.

Point de départ

Avec le plugin maven-assembly-plugin, je sais générer un ZIP contenant des dépendances (ou des fichiers).

Il me faut un fichier pom.xml contenant le plugin :
Et un fichier assembly-final-classic.xml comme par exemple celui-là pour assembler les dépendances (avec le chemin "libs" dans le ZIP) et les fichiers du répertoire "zip-final" :

samedi 17 novembre 2012

[Java] Différences entre == et equals()

Suite à une question de Jérôme Avoustin sur Twitter, quelques éléments de réponses ...

Première approche

Comme l'a dit Guillaume Lours, pour simplifier, == vaut VRAI si les 2 objets sont les mêmes, et equals() vaut VRAI si les 2 objets ont un contenu équivalent.

Illustration

Si je crée une classe User, ainsi que 2 instances de cette classe, le == entre ces 2 objets sera

dimanche 11 novembre 2012

Ingénierie agile : n'oubliez pas vos développeurs


Avec un pied dans l'agilité et un dans le développement, je me penche depuis pas mal de temps sur les aspects techniques liés à l'agilité dans le domaine du développement logiciel.

Ma constatation est simple : dans les transitions agiles, les aspects techniques sont complètement oubliés.


Une entreprise qui veut réussir sa transformation va y mettre les moyens (formations et coaching), et par exemple pour Scrum, va tout bien mettre en place : choix minutieux du Product Owner et du Scrum Master, mise en place des supports (backlog, Scrum Board, graphes, post-its, niko-niko, ...), mise en place des cérémonies (planification, revue et démo, rétro), etc ...

Agile Grenoble et Agile Innovation 2012



Cette semaine, j'ai passé 2 superbes journées à Grenoble, pour Agile Grenoble 2012 et Agile Innovation 2012. En voici quelques éléments de retour.




Ce que j’ai aimé


  • Des rencontres avec plein de personnes que je connais et qui me connaissent, et des discussions très intéressantes, merci !
  • Des rencontres et échanges avec des personnes que je ne connaissais pas, les nouvelles rencontres sont évidemment indispensable et riches
  • La session d'Alexis Monville et Bruno Sbille (voir ci-dessous)

lundi 15 octobre 2012

Les étapes de l'apprentissage du TDD

Introduction

Depuis des années que je mets en oeuvre le TDD, ma pratique et ma vision ne cessent d'évoluer, surtout ces derniers temps en accompagnant des équipes de développement, en essayant de les aider à migrer vers la mise en place de tests unitaires, et bien sûr, l'approche TDD.

Récemment, en analysant les freins exprimés par une équipe, et en étudiant leurs difficultés, j'en suis arrivé à la conclusion que l'apprentissage du TDD se découpe en 3 étapes que je vous partage aujourd'hui.

vendredi 12 octobre 2012

Agile Tour Marseille 2012


Hier, pour la 3e année consécutive, j'ai participé à Agile Tour Marseille 2012, et 2e année en tant qu'orateur (après un atelier "TDD en coding-dojo" pour l'édition 2011). Grosse bonne journée dont voici quelques retours en suivant les sessions auxquelles j'ai assisté.


jeudi 4 octobre 2012

Développement et conception : mon approche P(N)OO

Ces derniers temps, j’ai eu plusieurs occasions pour échanger au sujet de l’architecture du code, comment concevoir ses classes, ses objets, leurs liens, leurs interactions, leurs tests, etc … Il y a eu des échanges avec des développeurs qui ont leurs visions, qui s’interrogent, qui cherchent la bonne voie vers l’excellence. Et il y a eu des interventions auprès d’équipes qu’il m’a fallu guider, qui attendaient de moi une réponse, et avec qui j’ai partagé ma vision, plutôt pragmatique même si ce n’est pas la pure beauté du geste …

Je vous la propose aujourd’hui en espérant vos avis et réactions.

jeudi 13 septembre 2012

Développement logiciel agile : informations sur l'outillage


Introduction

De plus en plus d’entreprises et d’équipes s’intéressent aux outillages modernes permettant d’industrialiser et automatiser leurs productions logicielles. Et récemment, à plusieurs reprises, lors d’échanges avec des clients, j’ai pu me rendre compte que les confusions sont nombreuses entre les différents outils, leurs rôles, leurs intérêts, leurs interactions, etc …

Je vous propose donc ce petit article pour essayer de recenser ces outils avec des présentations rapides et succinctes. Nous parlerons donc de :

  • Gestionnaire de sources et de versions
  • Système de build
  • Gestionnaire de repositories
  • Séquenceur pour intégration continue

mercredi 5 septembre 2012

Innovation Games - Formation - REX

Introduction

Le 19 juin dernier, j'ai assisté à la formation "Innovation Games" avec Claude Aubry et Alexandre Boutin. En voici mon retour et mes impressions (désolé pour le délai).

La journée s'est articulé autour de 8-9 jeux, en alternant pratique et théorie générale sur les jeux.

Parmi ces éléments de théorie, j'ai bien aimé le graphique présenté par Alex représentant :
  • "Ce que je sais" : un toute petite tranche du camembert
  • "Ce que je sais que je ne sais pas" : un petit tiers
  • "Ce que je ne sais pas que je ne sais pas" : le reste, et c'est là que se situe l'innovation ! (*)
Un autre point important, "Utiliser des outils spécifiques pour résoudre des problèmes spécifiques". Et c'est tout l'enjeu des Innovation Games et autre ateliers : bien les connaitre et maîtriser pour savoir lesquels utiliser, à quels moments et dans quels buts ...

Sachant que chaque atelier peut être classifié (Bas, moyen ou élevé) selon différentes caractéristiques :
  • Niveau d'ouverture d'esprit
  • Vision du future
  • Effort de préparation côté client
  • Effort de préparation côté producteur
  • Effort de préparation matériel et logistique
Et maintenant, le retour sur les différents ateliers :
  • Carte de visite
  • Constellation
  • Buy a feature
  • Product Box
  • Remember the future
  • Speed boat
  • Spider Web
  • Start your Day
  • Prune the Product Tree

jeudi 21 juin 2012

Ateliers et jeux agiles : découvertes et retours d’expérience


Introduction


Depuis quelques mois, j’interviens auprès du service informatique « Boite à Outils » du groupe SAMSE à Grenoble : conseils et accompagnement en ingénierie agile. 

L’agilité est très présente depuis des années au sein des services informatiques. Animés par une volonté d’entreprise d’élargir l’agilité aux autres services, les agilistes du groupe ont organisé, il y a quelques semaines, des ateliers pour faire découvrir l’agilité au travers de jeux. J’ai eu la chance de pouvoir participer à certains de ces ateliers et ainsi de faire des découvertes dont voici des retours et commentaires.

dimanche 10 juin 2012

Déployer une application Play! sur le cloud

Le but de cet article est de présenter une solution simple que j'ai mis en place, si ça peut servir à d'autres ...

Introduction - Contexte


Mon besoin est simple. Pour un client, j'ai commencé à développer une application avec Play! framework version 2. Les développements se font sur un poste Windows. L'hébergement doit se faire sur un VPS (Virtual Private Server) sur le cloud.

Pour ce projet, le développement se fait en mode agile sur toute la ligne. Le déploiement de l'application doit donc se faire souvent, et donc de façon automatisée et rapide. Les objectifs sont les suivants : ne pas me faire perdre de temps à chaque déploiement, avoir une opération sûre, donc pouvoir déployer aussi souvent que nécessaire et mettre souvent des versions à disposition de mon Product Owner et du client.

Je présente ici une solution que j'ai mise en place suite à des recherches ici et là, elle est simple mais efficace et me satisfait (pour l'instant).

Les grandes opérations nécessaires sont les suivantes :

  • En local, packager l'application pour avoir un ensemble cohérent et autonome pour exécuter l'application sur le serveur
  • Transmettre le(s) fichier(s) sur le serveur
  • Sur le serveur, arrêter l'application en cours, et la relancer avec la nouvelle version

lundi 30 avril 2012

Mix-IT 2012 : retours


Introduction

Jeudi 26 avril avait lieu Mix-IT 2012 à Lyon, une conférence visant à mixer agilité, écosystème Java et Innovation IT et j’ai enfin pu y aller : en voici mon retour.

Avant de rentrer dans les détails des sessions que j’ai suivies, un mot sur l’organisation : impeccable ! Très bon accueil, bonne organisation, affichages efficaces, collations irréprochables. Côté programme, une grande diversité et des sessions de qualité : le problème est alors de devoir faire des choix ! Côté point d’amélioration : circulation un peu serrée entre les sessions et écrans un peu bas pour les projections en session, il valait mieux être devant. Mais bon, c'est mineure !

Après les mots d’accueil, nous avons eu une intervention de Martin Gömer (Google France) qui nous a parlé du nouveau Chrome pour Android et a fait sa pub de recrutement ... Pas trop compris ce que ça faisait là ... Mais bravo pour l'écharpe et pour la capture d'écran animée ...

jeudi 5 avril 2012

Les tests unitaires sont-ils toujours si rentables ?

Chez un client, les membres de l'équipe, que j'accompagne pendant quelques semaines, m'avaient demandé de leur proposer quelque chose pour aborder la question des tests unitaires et du TDD, dont ils ont entendu parler mais ne pratiquent pas du tout, ce qui ne les empêchent pas de produire en toute qualité, avec un nombre réduit d'anomalies.

Je leur ai naturellement proposé une journée "Tests unitaires et TDD", formule déjà éprouvée chez d'autres clients, avec un programme progressif :
  • Présentation théorique (2h) :  coût de correction des bugs, pourquoi tester, tests unitaires, mocks, TDD, bonnes et mauvaises pratiques, conseils et pièges, lien avec l'agilité, intégration continue, etc ...
  • Démonstrations sous forme de Kata (1h30) : exemple basique, exemple simple, introduction aux mocks avec Mockito, ...
  • Et l'après-midi, mise en pratique pour les participants sous forme de coding-dojo Randori (3h30) : tests simples avec JUnit, puis sujet propice à la mise en oeuvre des mocks, cette session me permettant de guider les participants, les accompagner, d'insister sur les bonnes et mauvaises pratiques, tout en leur offrant un espaces d'expérimentation où ils peuvent toucher du doigt les tests unitaires en approche TDD
  • Conclusion, rétrospective, ROTI

jeudi 15 mars 2012

Tests et automatisation : pourquoi et comment ? Ou comment j’ai été convaincu pour Selenium

Introduction

Aujourd’hui, j’ai eu la chance de participer à une séance de présentation et d’échanges, inter-services, autour du sujet « tests et automatisation » : vaste sujet !

La séance, proposée et animée par Laurent, était sur la forme de « forum ouvert » (« open space » pour les anglophones), un peu préparé pour guider la séance.

Une introduction, avec quelques généralités sur les tests, a permis d’introduire les termes comme JUnit, Selenium, Jenkins, Sonar, … ainsi que d’aborder très rapidement la question « pourquoi des tests ? » en évoquant : la sérénité, la non-régression, le codage plus rapide, etc …

Ensuite Laurent a proposé et présenté plusieurs sujets, auxquels les participants en ont ajouté quelques uns. Après une séance de vote (type « buy a feature »), une première session avec 2 ateliers en parallèle s’est mise en place :

  • Présentation et démonstration Sonar
  • Les tests, par quoi commencer ? Selenium et/ou JUnit
    et/ou Jenkins ? 

Connaissant un peu Sonar, je me suis orienté vers le 2e atelier, d’autant plus que les membres de l’équipe que j’accompagne y étaient, et que le sujet est plus d’actualité pour ma mission.

jeudi 2 février 2012

Présentation d'offre en mode agile

Récemment, j'ai répondu à un appel d'offre pour un projet de développement logiciel, en mode agile. J'ai donc fourni un document écrit, assez conséquent. Hier, j'étais convié à Paris chez ce client potentiel, pour présenter oralement mon offre devant une poignée de personnes.

En préparant ma présentation, limitée à 1 petite heure, j'ai listé bon nombres de sujets à aborder, avec la difficulté de synthétiser tout cela pour le peu de temps imparti.

Le client voulant une approche agile pour la gestion et le suivi du projet, je me suis donc naturellement orienté vers l'agilité pour ma présentation, en m'inspirant notamment de l'atelier "Buy A Feature".

J'ai donc commencé par une introduction rapide mais précise, en expliquant que j'avais beaucoup de choses à dire, mais que je voulais être sûr, dans le peu de temps imparti, de répondre aux réelles attentes de l'auditoire, pour un ROI (retour sur investissement) optimum pour tous.

Ensuite, j'ai présenté une diapo avec la dizaine de sujets que je pouvais aborder. Les sujets couvraient tous les aspects du projet, en reprenant en grande partie la trame de mon document initial : qui suis-je, pourquoi ai-je répondu, la solution proposée, l'interface utilisateur, détails techniques, organisation du projet, support et maintenance, etc ...

Comme je m'y attendais, les participants ont d'abord semblé surpris par cette organisation, surtout lorsque je leur ai donné la parole moins de 5' après le début de mon intervention ! La première question d'un des participants a été de savoir s'il n'était pas possible de passer tous les sujets dans la séance. J'ai donc ré-expliqué l'idée d'aborder en priorité les sujets qui les intéressent le plus, et que l'avenir nous dira ce que nous aurons le temps d'aborder ou pas.

Après un petit flottement, pendant lequel je me suis demandé si je n'allais pas renoncer et parcourir linéairement tous les sujets, un participant s'est lancé en choisissant un premier sujet. Puis les choses se sont enchaînées doucement, les participants comprenant certainement un peu mieux le principe, et en voyant peut-être déjà les avantages. Après 20' sur quelques sujets, les dialogues intéressants sont apparus sur base de questions-réponses, au fil des sujets abordés.

Finalement, mon intervention a duré plus longtemps que prévu, le client ayant la maîtrise de la limite horaire. Malgré tout, tous les sujets n'ont pas été abordés. Sont notamment restés des sujets que j'étais persuadé de présenter, comme quoi il est impossible d'anticiper les attentes d'un auditoire, d'un client, d'un utilisateur, le mieux étant vraiment de lui donner la parole !

Comme bon nombre de situations où il faut faire des choix, j'ai senti une certaine frustration des participants pour les sujets non abordés. J'ai un peu pallié à cela en leur laissant le diaporama. Et je préfère qu'ils aient cette frustration en ayant fait leurs choix, plutôt qu'une présentation que j'aurais figé et qu'ils soient frustrés de ne pas avoir entendu certaines informations qu'ils auraient attendues ....

Conclusion. Je suis vraiment content de ce choix de présentation qui était pourtant un peu risqué. Mon objectif a été atteint, et cette nouvelle expérience "agile" était vraiment enrichissante ! Merci aux participants qui ont joué le jeu ...

jeudi 19 janvier 2012

Objectif Cloud avec l'AlpesJUG


Hier soir, j'ai réussi à m'organiser pour assister à une des soirées organisées par l'AlpesJUG. Les invités Nicolas De Loof et Paul Sandoz étaient venus nous parler .... cloud, c'était à ne pas manquer !


Après quelques rappels sur le cloud, les solutions IaaS, PaaS et SaaS (voir par exemple sur Wikipédia si ces termes ne vous disent rien), Nicolas nous a plus précisément parlé des solutions proposées par CloudBees, notamment :

  • Run@Cloud qui offre un service de type PaaS, permettant d'exécuter une application WEB dans un serveur d'application
  • Dev@Cloud qui offre un service plutôt SaaS, permettant d'héberger ses sources (Git, ...) et de construire ses projets (ordonnanceur Jenkins)

En 2ième partie, Paul a présenté les projets CloudBees pour 2012, avec notamment plusieurs évolutions autour de Jenkins et des liens entre cloud public et cloud privé. La volonté de CloudBees pour 2012 est de "faire tomber les barrières" pour démystifier le cloud et y amener les acteurs ....

En fait, je connaissais CloudBees puisque j'ai une application hébergée chez eux depuis 2 ans, enfin avec un démarrage chez Stax Networks qui a été racheté par CloudBees. En effet, en 2010, j'ai développé une application qui devait être accessible par plusieurs utilisateurs via internet. J'ai naturellement cherché un hébergé à la hauteur de mes moyens financiers pour ce projet : aucun ! L'application étant développée avec Play! framework (mince, toujours pas écrit mon article ...), j'ai cherché du côté de la communauté, et Stax m'avait été indiqué sur le forum de Play!.

Pour moi, il n'y avait pas d'alternative. D'ailleurs, je garde et propose cette approche dans bon nombre de situations. L'application mentionnée précédemment est à usage privé, mais devrait s'ouvrir à d'autres groupes d'utilisateurs, et la solution restera "cloud" ! Récemment, pour un nouveau projet, j'ai encore proposé une solution de type SaaS, avec création d'espaces privés pour chaque utilisateur, les avantages d'une telle solution sont tellement nombreux que je n'y vois pas beaucoup d'autres alternatives.

Ce qui me frappe c'est à quel point "le cloud" semble faire peur ou semble mystérieux ... Et pourtant, les solutions de type SaaS sont de plus en plus nombreuses et répandues, mais sans forcément afficher l'étiquette "cloud" : c'est le cas pour GMail, ce blog, les réseaux sociaux, etc ... Finalement, petit à petit et sans s'en rendre compte, tout le monde profite du cloud !

Bon, bien sûr, il y a différents niveaux d'approches. Mon application mentionnée plus haut est en quelques sortes simplement hébergée sur internet, comme une appli PHP chez Free il y a 10 ans (15 ? ah bon, déjà ...), elle n'est pas "scalable" pour que les traitements et les données puissent être répartis sur plusieurs instances de serveurs à la volée, mais c'est bel et bien une première étape vers le cloud, non ?

Pour revenir à CloudBees, je n'ai pas encore utilisé Dev@Cloud, mais j'ai évidemment regardé et suivi cette offre, en attendant une opportunité pour tester.

Mais c'est sûr, le cloud va prendre de plus en plus de place dans notre monde de développement logiciel, il va falloir s'y adapter, revoir nos habitudes, s'ouvrir l'esprit, et certains prestataires comme CloudBees font beaucoup pour nous faciliter la transition !

Merci aux intervenants, à l'AlpesJUG pour cette bonne soirée, et aux chauffeurs de voiture pour les covoiturages !