Utiliser Trello comme backlog de sprint Scrum

Chez SRMvision, nous utilisons les méthodes agile depuis le début, principalement Scrum, que nous avons quelque peu modifié pour coller à nos besoins au fil du temps. Nous avons cherché depuis le début une bonne alternative informatisée aux bons vieux post-it.

TrelloScrum Chrome Extension

Quand je l’ai découvert, j’ai rapidement pensé que Trello pouvait être un des piliers de notre organisation interne. Nous avons d’abord commencé par utiliser la très bonne extension TrelloScrum disponible sur le Chrome Web Store pour effectuer le décompte des points de nos sprints. Ce plugin est réellement utile dans la planification de sprint, il permet au Scrum-master de facilement gérer le nombre de points utilisés pour remplir efficacement chaque jour du sprint.

Contribuer à l’extension

Après quelques sprints, nous nous sommes rendus compte que nous avions besoin d’un petit peu plus que ce que le plugin offrait. La principale chose dont nous avions besoin était d’identifier les points consommés au jour le jour afin d’avoir une analyse rapide (on obtient donc un burndown en temps réel). Grace aux développeurs de l’extension originale (Q42) et à la magie de Github, j’ai pu contribuer à l’extension en ajoutant ces fonctionnalités :

  • en notant les points entre crochets : [3] ceux-ci seront considérés en tant que points utilisés (cette amélioration est maintenant présente dans la version disponible sur le Chrome Web Store)
  • dans le détail d’une carte, le bouton “Done” permet de marquer l’intégralité des points de la carte utilisés, de fermer la carte, et de la bouger à la fin de la liste, pour permettre de se concentrer sur la prochaine tâche à effectuer (uniquement disponible dans ma version modifiée)
  • utilisation de l’API cliente Trello, les modifications provoquent moins de clignotements dans l’interface

Décompte de points sur la liste et les cartes

Grace à cette version, vous aurez deux décomptes dans le coin supérieur droit de chaque liste ainsi qu’en haut de l’ardoise en cours. Les points utilisés sont présentés en bleu clair et les points restant en bleu foncé. Les notions de points “utilisés” et “restant” sont les termes que nous utilisons pour gérer nos sprints chez SRMvision, mais vous pouvez bien entendu changer la signification des décomptes pour coller à votre façon de gérer vos sprints.

Utiliser l’extension

Si vous désirez utiliser ma version de l’extension, vous devrez la récupérer en allant la télécharger depuis mon compte Github. Puisqu’elle n’est pas disponible dans le Chrome Web Store, vous devrez effectuer un glisser déplacer du fichier téléchargé sur la page chrome://extensions de votre navigateur.

Plugin non autorisé

Ensuite, vous devrez autoriser le plugin auprès de votre compte Trello. Pour ce faire, il y a un petit cercle présent au dessus de votre image de profil (dans le coin supérieur droit).

Vous pouvez utiliser le plugin sans l’autoriser, si c’est le cas, vous n’aurez pas le bouton “Done” dans le détail d’une carte et vous ne bénéficierez pas du déplacement automatique des cartes.

Pour autoriser le plugin, vous devez cliquer sur le cercle, la fenêtre d’autorisation s’ouvrira, dans laquelle il suffit de suivre les étapes pour autoriser le plugin (vous devrez fermer manuellement la fenêtre qui s’est ouverte – limite de l’extension pour l’instant).

Plugin autorisé

Une fois le plugin autorisé, vous devriez voir le plugin passer au vert, et vous devriez avoir le bouton “Done” présent sur le détail des cartes.

Si vous avez des idées de fonctionnalités ou détecté un bug, n’hésitez pas à vous servir du système de ticket de Github.

Trello, favicon pour les notifications non lues

Qu’est ce que Trello ?


Trello est une application très sympa permettant de gérer un peu tout ce que vous voulez. Nous l’utilisons actuellement au travail pour voir si l’outil nous intéresse et la première impression est réellement très bonne. Si vous voulez en savoir plus, n’hésitez pas à aller voir la présentation sur le site de Trello et à essayer l’application.

Système de notifications

Trello fournit un système de notificaiton vraiment très bien pensé. Plutôt que de vous envoyer une tonne de mail à chaque action sur le système, l’application vérifie si vous êtes présent en ligne et décide de vous envoyer un message si vous êtes déconnecté / inactif. La seule chose qui me manquait était la possibilité de voir si j’avais des notifications non lues directement à partir de mon onglet épinglé de Trello. Je me suis rappelé d’un script GreaseMonkey permettant d’afficher le nombre de mails non lu dans GMail que j’utilisais il y a quelques temps. Étant donné que je n’ai aucune expérience en développement de scripts GreaseMonkey, je me suis servi de ce script comme base d’apprentissage. Le script que j’ai réalisé affiche le nombre de notification manquées dans l’icône de favoris (de 1 à 9, et affiche un + s’il y en a plus de 9).

Vous pouvez avoir un aperçu de notification dans l’image associée à l’article.

Le script est téléchargeable sur userscripts ou vous pouvez visualiser le source sur mon dépôt github.

Head.js – accélérez votre site web

Cet article n’a pas été traduit, veuillez trouver ci-dessous sa version anglaise

I found a little work in progress javascript library which seems to do what we all want : speed up our websites : Head JS. It allows to load every script in parallel, taking advantage of fast CDN, and gives you easy way to target browser by the features they implements / lacks.

I didn’t had the time to test it in a real use case but I’ll do it for sure and I will be giving some feedback !

Les nouveautés de Prototype 1.7

Màj : Voici l’annonce officielle

Introduction

Alors que la version 1.7 de Prototype, le fameux framework JS, s’apprête à voir le jour. Nous allons, dans cet article, lister trois nouveautés majeures de cette version.

Element.Layout

Cette classe permet de fournir, avec un maximum de précision, tout un tas de mesures sur un élement. Il existe deux manières d’utiliser cette classe, voici la méthode du fainéant :

 $('elt').measure('margin-top'); // -> retourne la marge haute en pixel de elt
 $('elt').measure('height'); // -> retourne la hauteur en pixel de elt

Le fonctionnement de la deuxième ligne est similaire à l’utilisation de la méthode Element#getHeight(). Une utilisation plus minutieuse pourrait ressembler à ça ;

var layout = $('elt').getLayout(true);
layout.get('margin-top'); // retourne la même hauteur que précédemment.
layout.get('height'); // retourne la même hauteur que précédemment.

L’avantage de la seconde méthode est que les valeurs de base nécessaire au calcul des dimensions sont mises en cache dans la variable layout et donc un seul appel est fait au DOM (gourmand en ressource).

Le paramètre “true” de Element#getLayout() permet de forcer la récupération de toutes les valeurs d’un seul coup. Si ce paramètre est homis, les valeurs seront récupérées une par une et conservées en cache.

Pour des raisons d’optimisation, les anciennes méthodes Element#getWidth() et Element#getHeight() n’utilisent malheureusement pas cette méthode, mais utilisent l’ancienne méthode Element#getDimensions().

La liste des propriétés mesurables est disponible à cette adresse.

Note 1 : Il faut bien garder à l’esprit que si les dimensions de l’élément, auquel votre layout fais référence, change, vous devrez créer un nouvelle instance de Element.Layout.

Note 2 : Si votre élément est masqué avec style “diplay:none” il vous sera possible d’effectuer des mesures uniquement si l’élément parent est visible. Par ailleurs les mesures width, height, top, left, bottom et right auront toujours pour valeur 0.

Event.Handler

L’un des problèmes de la délégation d’évènement avec les anciennes méthodes d’observation d’évènement est le ciblage de l’élement qui nous intéresse. Considérons pour les exemples suivant l’arbre HTML ci-dessous :

<ul id="elt">
  <li class="foo" data-code="un"><a href="javascript:void(0);">un</a></li>
  <li class="foo" data-code="deux"><a href="javascript:void(0);">deux</a></li>
  <li class="foo" data-code="trois"><a href="javascript:void(0);">trois</a></li>
</ul>

Lorsque qu’un évènement est levé sur un élément il est levé sur tous ses parents récursivement, tant qu’il n’est pas arrêté explicitement ou qu’il a atteind la racine de l’arbre. On devait précédemment faire ce genre de chose :

var listener = function (evt) {
  var target = evt.findElement('.foo');
  if (!Object.isElement(target)) {
    return;
  }
  ... // traitement avec target, élement qui nous intéresse
}
$('elt').observe('click', listener);
... // et au besoin :
$('elt').stopObserving('click', listener);

Quand nous devions arrêter l’observation d’un évènement particulier il était fastidieux de devoir stocker la fonction assignée dans une variable bien précise afin de pouvoir la re-passer en paramètre à la méthode Element#stopObserving().

Heureusement les développeurs de Prototype nous ont simplifié la tache avec la méthode Element#on(). Cette nouvelle méthode prend en paramètre un nouveau paramètre (un selecteur CSS) permettant de cibler exactement la cible qui nous intéresse. De plus elle renvoie une instance de Element.Handler qui possède des méthodes stop() et start() qui permettent respectivement d’arrêter et de reprendre l’observation d’un évènement particulier. En voici un exemple d’utilisation :

var handler = $('elt').on('click', '.foo', function (evt, target) {
  ... // traitement avec target, élement qui nous intéresse
});
... // et au besoin :
handler.stop();
... // et de nouveau :
handler.start();

Pour compléter ces améliorations, une nouvelle méthode a été ajouté : Element#purge() permettant de nettoyer un élément de tous les listeners d’évenement qui lui sont attachés.

Sizzle

Sizzle est le nom du sélecteur CSS utilisé dans jQuery. Afin de pouvoir utiliser ce middleware partagé entre plusieurs frameworks, l’équipe de développement a fait un gros travail de modularité pour laisser le choix du moteur du traitement CSS. En effet, si vous souhaitez par exemple utiliser l’ancien moteur (présent depuis la version 1.5.1), il vous suffit de rapatrier le code source (via github par exemple) et compiler prototype de la manière suivante :

rake dist SELECTOR_ENGINE=legacy_selector

De la même manière vous pouvez écrire votre propre moteur en le plaçant dans le répertoire vendor/ du package.

Conclusion

Les trois améliorations de la nouvelle mouture énoncées ci-dessus peuvent-être complétées par une ribambelle d’ajustements (notamment lié à IE9). Cette nouvelle version confirme les prétentions de la librairie visant à palier les manquements de compatibilités inter-navigateurs et simplifier considérablement le développement d’applications javascript, tout en restant le plus léger possible.