Profile cover photo
Profile photo
Gaelle Guimezanes
100 followers
100 followers
About
Gaelle's posts

Post has attachment
Pudding de chia chocolaté
deux ingrédients pour cette crème dessert,  plus quelques framboises pour faire joli, rien de plus facile! Ce n'est pas moi qui ai inventé le pudding aux graines de chia, ce n'est quasiment pas une recette tellement c'est simple, mais je vous propose les pr...

Post has attachment
Pas besoin de partir en vacances... Quand on bosse à Suresnes, le dépaysement c'est le temps d'une pause déjeuner ! (Moulin de Longchamp et Grande cascade du bois de Boulogne)
PhotoPhotoPhotoPhotoPhoto
suresnes
12 Photos - View album

Post has attachment
Tabourets en carton : à gauche, celui que je viens de finir, à droite, celui qui sert déjà depuis deux ans et demi -- comme quoi les meubles en carton ça vieillit assez bien!
(Modèle tiré du livre "Créer son mobilier en carton volume I" d'Eric Guiomar)
Photo

Post has attachment
Balade dans le parc des Buttes Chaumont : vu le beau temps, il y avait du monde, mais le parc est grand, ça disperse... Il me semble que c'est la première fois que je voyais un héron en plein Paris.
PhotoPhotoPhotoPhotoPhoto
16 Photos - View album

Post has shared content
Je vous parlais de Neal Ford et de sa présentation The Productive Programmer à #devoxxfr ... et voilà que je tombe sur une illustration tout à fait adaptée du principe d'automatisation :)
IT • PROGRAMMING • Geeks vs Non-Geeks
Photo

Suite de mon compte-rendu #DevoxxFr : la conférence "Kanban pour les nuls" par +Dimitri BAELI et +Guillaume LOURS .

Les cartes kanban sont les unités de base représentant le travail à effectuer. Les cartes ont des codifications colorées (en fonction de la complexité, en fonction d'une séparation technique/métier, etc.) afin qu'on les identifie d'un seul coup d'oeil. On parle de management visuel.
Le système kanban est un processus, un flux tiré de cartes kanban. On définit les différentes étapes du processus (par exemple: Prêt, Design (En cours+ file d'attente Fait), Développement (En cours+ file d'attente Fait), Test, Déployé), avec un nombre maximal de cartes par étape. Une carte passe d'une étape à l'autre du processus, non pas quand elle est prête, mais quand l'étape suivante est prête à l'accueillir, d'où le flux "tiré". Par exemple : j'ai un nombre maximal de 3 cartes en état Test, car c'est la capacité maximale de mon équipe de test. Lorsqu'une fonctionnalité est finie de tester et qu'on la déploie, je peux accueillir en Test une carte de la file d'attente 'Fait' de l'étape Développement. Cela libère une place dans l'étape Développement, où je peux faire entrer (en mode En cours) un carte de la file d'attente 'Fait' du Design. L'idée, c'est qu'il est inutile de continuer à accumuler des fonctionnalités en développement s'il y a un goulot d'étranglement au niveau du test (peut-être vaut-il mieux alors revoir l'organisation des équipes, augmenter l'automatisation des tests etc. plutôt que de développer de nouvelles fonctionnalités). De la même manière, il n'est pas utile que les spécifications soient finalisées (étape Prêt) trop longtemps à l'avance et prennent la poussière, devenant obsolètes avant même d'avoir donné lieu à des développements!
La méthode Kanban consiste à utiliser le système kanban dans une optique d'amélioration continue : partir des pratiques actuelles de l'équipe, faire évoluer de façon incrémentale (modifier des étapes pour mieux coller à la réalité du processus, changer les nombres max, ajouter des nombres min pour ne jamais être en attente, etc.) Une règle importante : respecter le processus, les personnes ainsi que leurs rôles tout au cours de l'évolution (c'est une évolution douce, pas une révolution).

Les points clés de la méthode Kanban :
1. Visualiser l'état d'avancement d'un simple coup d'oeil
2. Limiter le work in progress (= limiter le stock) par une amélioration progressive du flux
3. Définir des règles explicites. Les règles peuvent évoluer dans le temps, mais à un instant donné, elles doivent être claires et adoptées par toute l'équipe.
4. Mesurer et piloter, grâce à une sélection d'indicateurs (par exemple, temps d'une carte pour traverser tout le processus de la spécification à la production, etc.)
5. Améliorer le processus : analyse des blocages de façon collaborative.
La méthode Kanban est une façon d'avoir un feedback visuel pour mieux appréhender les points de blocage et aider à l'amélioration continue. Elle n'est pas spécifique à un environnement de travail (adaptable aussi bien au cycle en V qu'à SCRUM) : chaque équipe définit ses propres processus, ses propres règles.

#DevoxxFr , c'est fini... Le temps est venu de mettre au propre ses notes!
Pour commencer, je vous propose un petit compte-rendu de la conférence "The Productive Programmer", présentée par Neal Ford.

Basée sur un livre du même nom et du même auteur, la présentation était divisée en deux parties : les mécanismes pour être plus productif, et 10 manières d'améliorer son code. En ce qui concerne les mécanismes, 4 concepts ont été abordés: accélération (faire les choses plus vite), focus (éviter les distractions), automatisation (ne pas faire manuellement ce que l'ordinateur peut faire pour vous) et canonicality (le principe DRY - Don't Repeat Yourself).

Accélération : écrire au clavier est plus rapide que naviguer avec la souris. Il faut maximiser le temps passé les mains sur le clavier plutôt que sur la souris. Une technique pour apprendre les raccourcis clavier : à chaque fois qu'on utilise un menu, s'il y a un raccourci clavier visible à côté de l'action qu'on voulait faire, fermer le menu et faire le raccourci clavier (c'est en répétant qu'on apprend).
Des outils externes permettent d'améliorer l'utilisabilité "clavier" de windows. On peut par exemple mettre en cache le clipboard pour pouvoir copier-coller plus d'un seul élément (Neal nous a parlé de CLCL mais ça ne semble pas marcher sous Windows 7. Je suis personnellement en train de tester Clipboard Magic). Il est également utile d'avoir accès à la ligne de commande directement dans l'explorateur Windows (Neal nous a parlé de command prompt explorer bar mais encore une fois ça ne semble pas fonctionner sur Windows 7. Sur Windows 7 vous avez la possibilité d'ouvrir une ligne de commande dans un dossier si vous appuyez sur Shift en même temps que vous faites un clic droit sur le dossier).
pour être plus productif quand on code: personnaliser son IDE, notamment en ajoutant des templates pour les formes de code qu'on utilise souvent (de nombreux templates sont proposés par défaut, mais saviez vous qu'on peut aussi en ajouter?)

Focus : Neal a introduit la notion de "flow state", notre état de concentration maximale où on est le plus efficace. Lorsque l'on est interrompu, on peut mettre plus de 20 minutes à retrouver cet état. Il conseille donc de supprimer les notifications, le mail, la messagerie instantanée, de mettre des écouteurs pour signaler son indisponibilité aux personnes qui viendraient vous voir... voir de mettre en place une politique d'entreprise "office quiet time", une plage horaire pendant laquelle on n'a pas le droit de déranger ses collègues... On peut aussi utiliser des bureaux virtuels (un classique sur Linux, utilisable sous Windows en utilisant des applications spécifiques comme VirtuaWin) afin de mettre toutes les applications de communication sur un bureau et n'y aller qu'au moment choisi.
On utilise tous des systèmes de gestion des sources. Il est possible à tout moment de revenir en arrière. Ne plus committer de code commenté (au cas où...) : à la lecture du code, cela ne fait qu'ajouter du bruit et disperser l'attention.

Automatisation : intégration continue, création de ses propres scripts pour automatiser les actions que l'on répète souvent (même si ça prend plus de temps d'écrire le script que de réaliser l'action manuellement, sur le long terme on y gagne - ne serait-ce que parce qu'on apprend à scripter et que c'est une compétence réutilisable)... Nous écrivons des tests selenium pour tester des applis web. Mais on oublie souvent que cela peut nous aider aussi à gagner du temps en rejouant à vitesse éclair des suites d'actions que nous faisons fréquemment - par exemple, passer les trois écrans avant d'arriver à la fonctionnalité qu'on est en train de développer, etc. Selenium IDE est un plugin pour firefox qui permet d'enregistrer ce que l'on fait sur le browser et de créer du code selenium correspondant : en général le code généré n'est pas très maintenable (moins beau que du code de test bien conçu), mais pour du one-shot c'est idéal. Notamment, vous perdez beaucoup de temps à reproduire des bugs? Demandez à votre équipe de QA (ou qui que ce soit qui vous assigne les bugs) de joindre à les description du bug le code selenium correspondant!

Canonicality : ne pas se répéter. UML + base de données + POJO + configuration XML pour Hibernate : un magnifique exemple de répétition de la même information dans des formats différents! Se mettre d'accord sur qui sert de référence, et générer le reste automatiquement permettra de diminuer les efforts (et les erreurs).

10 manières d'améliorer son code :
1. les "composed methods" : diviser une méthode en méthodes plus petites faisant chacune une seule tâche facilement identifiable
2. TDD (test driven development). On devient le premier consommateur de son API - on voit rapidement quelles méthodes on veut pouvoir utiliser avec quels paramètres, puisqu'on les appelle réellement dans nos tests. De plus, comme on devient obligé de mocker les dépendances, on a tendance à écrire du code plus propre avec le moins de dépendances possible.
3. analyse statique : utiliser des outils qui analysent le code. Utiliser par exemple FindBugs, qui trouve des bugs potentiels, des violations de bonnes pratiques ou des zones de code "difficiles à lire". Cela peut parfois éviter des semaines de debugging! PMD est également utile, notamment avec la fonctionalité CPD (copy-paste detector).
4. utiliser le "Good Citizenship" : les méthodes statiques sont utilisées uniquement pour les fonctionnalités haut niveau accessibles en "black box", ne pas utiliser le pattern singleton (qui ne marche pas en multithread), n'être dépendant que d'interfaces (versus classes concrètes), ne pas renvoyer null mais des Empty Objects etc...
5. YAGNI "You Ain't Gonna Need It" : ne coder que ce dont on a besoin tout de suite. Ne pas perdre de temps et ajouter de complexité pour "au cas où"... on verra si le cas se présente réellement! Ne pas construire de framework a priori, mais extraire le framework à partir de code qui fonctionne.
6. remettre en cause l'autorité. Ne pas continuer à adopter une pratique "parce que c'est comme ça qu'on fait", mais parce que vous avez des éléments réels permettant de montrer que c'est mieux.
7. SLAP "Single Level of Abstraction Principle" : passer d'un niveau d'abstraction à un autre rend le code plus difficile à comprendre. Utiliser les composed methods pour externaliser du code bas niveau afin d'avoir une lecture fluide de ce que fait une méthode.
8. programmer de façon polyglotte. Java n'est pas le seul langage de la JVM. Beaucoup de langage cohabitent et collaborent de façon très efficace. Aucun langage n'est le meilleur dans l'absolu, choisir le bon langage pour chaque problème concret.
9. connaître toutes les nuances du langage. On avait l'idée reçue que la reflection en Java était lente, ce n'est plus le cas dans les JVM modernes. Connaître et savoir utiliser les expressions régulières à bon escient.
10. Antiobjects : la programmation objet nous pousse à vouloir représenter les objets du monde réel dans nos classes, et à mettre le comportement dans la classe représentant l'objet réel qui a ce comportement. Mais parfois la méthode la plus efficace est de retourner le problème (exemple classique de pac man : ce n'est pas chaque monstre qui a l'intelligence et la vision de pac man, c'est le tableau de jeu).

Post has attachment
Une des stars de #DevoxxFr : le robot NAO.
Photo

Bon à savoir : les quarts d'heures bonus des bornes v+ de vélib' sont indivisibles. Pour 3 minutes de dépassement, j'ai perdu 15 minutes de bonus.

Qualifiée! 2058e sur les 20613 participants... Je me suis bien amusée pour ma première participation à Google #codejam
Wait while more posts are being loaded