samedi 31 mars 2012

google maps en mode pixel

Perdu au fin fond de la campagne, le débit de la connexion ADSL est faible.
Heureusement google maps sait s'adapter:



Je plaisante, le lien ici vous permet de d'obtenir un google map pixelisé, un mode minitel ?


Sinon il suffit d'aller sous google maps et  de cliquer sur le bouton magique pour basculer dans l'univers du pixel.

mardi 27 mars 2012

Publier ses modules sur #npm pour #node.js

Réaliser ses propres modules pour node.js et les distribuer par le npm n'est pas très compliqué.

Ce post est destiné à exposer la manière de faire un module, le tester et afin le distribuer.

npm

npm est le node packager manager. C'est l'équivalant du cpan et de la commande cpan pour Perl ou encore du système de 'gems' gemmes pour Ruby.
npm est à la fois un dépot et une commande pour gérer ses modules.
lien sur npm


Préparation d'un  module pour npm.


Un module est tout d'abord une archive compressée contenant un fichier de metadonnée :le package.json et les fichiers de votre module.

La première opération à faire est de créer un répertoire de travail pour votre module:
ex : mon_mondule/
Puis en fonction des besoins, des sous-réperoires seront  préparés:


  •  tests/ : car vous êtes un développeur consciencieux
  •  lib/   : si votre projet prend de l'ampleur
  •  examples/ ou exemples/ : car vous êtes vraiment un développeur consciencieux
  •  bin/: si vous livrez des exécutables
Enfin un répertoire docs pour votre documentation volumineuse
 npm n'est pas directif dans les règles de nommage des répertoires.

Pour mon module cela donne :
(copie écran)


Dans votre répertoire du module lancer la commande : npm init
Cette commande vous posera une série de question et vos réponses vont servir à confection le fichier package.json
Par la suite les modifications du fichiers se font manuellement

package.json


Exemple de fichier


Le plus important est l'indication du point d'entrée 'main' du module qui sera repris par la commande require.
ici require('ETag')



Versionning avec git et hébergement par github (partie optionnelle)

A partir de la là les bonnes habitudes reviennent : ajouter un fichier .gitignore (le mien est très simple 1 seule ligne : *~ )


Puis lancer la commande 'git init' pour commencer à versionner votre code.

ok vous êtes sur des bons rails.

Pour le reste des  opérations de versionning j'utilise gitk (copie d'écran).

Le source du module sera géré par la forge github. Aussi la création d'un fichier README.MD pour avoir une page d'accueil bien lisible s'impose. L'extension md signifie MarkDown : c'est un langage qui permet d'écrire des pages de documentation plein texte qui seront automatiquement transformées en html.
Le lien suivant permet de se familiariser avec le MarkDown.


Voici le projet installé sur la forge github.


Le packaging


Un fois le module achevé, il suffira de créer une archive compressée (tgz)
L'archive doit contenir un répertoire nommé package qui accueillera votre module.

Avant de publier le module sur npm, un petit test en local s'impose en lançant la commande suivante
npm install nom_module.tgz

Publication du module sur npm


La première chose à faire et valable une bonne fois pour toute est de créer un compte pour npm par la commande suivante:
npm adduser

Afin la publication sera faite par :

npm publish mon_module.tgz
Ca y est votre premier module est sur npm:


Vos utilisateurs peuvent à présent faire npm install mon_module
(avec ou sans l'option -g) 

Les tests du module


Dans le but de faire un livrer un travail de qualité, il est bien de prévoir une batterie de test.
L'idée est d'avoir un point d'entrée pour exécuter des petits programmes de test. C'est le role du programme run.js du répertoire tests.

Le dispositif est complété par un Makefile qui permet d'automatiser le lancement des tests.


Ainsi la ligne du package.json



"scripts": {
        "test": "node tests/run.js"
    }


permet à vos utilisateurs de tester votre module par
npm test mon_module


En conclusion:  vous n'avez plus d'excuse pour ne pas publier vos modules sur npm.










lundi 26 mars 2012

La phase d'estimation dans les projets informatiques

La plannification de projet répond à une série de lois.

1) La loi Hostadter.

La plus connue est celle  Hofstadter. Cette loi énonce le principe suivant pour l'estimation d'une charge:
Cédric Villani : médaille Fields 

Ça prend toujours plus de temps qu'on croit, même en prenant compte de la loi de Hofstadter.

Ce qui veut dire : qu'il est difficile d'estimer correctement la charge d'un projet ET par l'emploi d'une formulation récursive : cette dificulté ne fait qu'augmenter pour tendre vers l'infini. reference: http://fr.wikipedia.org/wiki/Loi_de_Hofstadter 

2) La racine carrée comme pivot

A coté de cette loi très sérieuse on en trouve une autre pas mal : Après avoir estimer la charge totale d'un projet et faut aligner en face des ressources. 
Une technique pour calculer le bon équilibre entre la charge , la  durée et le nombre de personne est de prendre comme valeur la racine carrée de la charge: cette valeur constitue un point d'équilibre. Exemple : charge 36 mois/h , il faudra au maximum 6 personnes pour réaliser le projet. Il est possible de descendre en dessous de cette limite mais à l'inverse mettre plus de monde va ralentir le projet. Pour encadrer ces personnes , une septième personne (le chef de projet) sera nécessaire.
En conclusion : le gestion de projet agile reprend ces lois à son compte. Notamment, il est recommandé de passer très peu de temps sur l'estimation d'une charge. Plus on affine une estimation plus elle s'écartera de la réalité.  L'estimation ne doit pas se faire uniquement dans la phase d'avant projet.  Elle est partie intégrante du projet. Elle sera  réévaluée tout le long du projet . Elle sera fonction de la métrique des équipes : la vitesse d'avancement ramené au point de fonction. Aussi la loi de Germanlinux est la suivante: il n'est pas possible d'estimer correctement la charge d'un projet ....avant de l'avoir terminé (si on le termine un jour..) . Aussi mesurez ce qui a été fait et non pas ce qui reste à faire: c'est trop décourageant.

mercredi 21 mars 2012

Ceci est une console - non - un blog #design




Non ce n'est pas une console, c'est la page d'accueil du blog : http://www.steveklabnik.com/
Allez sur le site pour voir l'animation. Les fichiers sont des liens.

Le rédacteur  steve Klabnik est l'auteur d'un ouvrage intitulé: Designing Hypermedia APIs 


 "Hypermedia" (en bref les liens hypertextes ) et  "RESTful" ont donné naissance aux architectures 'HATEOAS' :Hypermedia as the Engine of Application State (explications ici). 
 Mais c'est une autre histoire..Je reviendrai sur ce sujet plus tard.




samedi 17 mars 2012

Tests de charge :3 fonctionnalités de jmeter à connaitre


Jmeter ou un projet  de la fondation Apache qui permet de réaliser des tests sur des applications WEB mais aussi sur des serveurs de messagerie, des annuaires LDAP ou encore des base de données (SQL).
 Ce programme en Java est très simple à installer : le telecharger et le lancer.

Voici 3 fonctionnalités de jmeter à connaitre:


1) Enregistrer vos scénarios de test avec jmeter.

Il n'est pas necessaire de partir de zéro pour réaliser ses plans de test avec jmeter.
jmeter dispose d'un mode 'enregistreur' qui lui permet de retracer votre navigation et de créer à la volée les éléments constituants le plan de test.
Pour cela il suffit d'ajouter dans son plan de travail un composant 'serveur proxy HTTP' et un contrôleur enregisteur en tant que fils (copie d'écran).


Après avoir lancé le proxy jmeter. Une reconfiguration de son navigateur s'impose pour lui faire utiliser ce proxy : dans le cas présent le proxy écoute sur 'localhost' port '8080'.

Puis, avec votre navigateur accédez à l'application à tester. Chaque requête viendra s'inscrire sous le composant enregisteur sous la forme de deux composants: La requete elle meme (GET et ressource) et un composant stockant les entetes HTTP.

On prendra soin à la fin de la session d'arreter le proxy et de faire glisser les éléments collectés du plan de travail au plan de test.(copie d'écran)



Des ajustements seront alors  nécessaires.


  • Le comportement d'un vrai utilisateur
Un utilisateur prend son temps pour lire une page et passer à la suivante. Les composants temporisateurs de jmeter servent à simuler ces transitions.
  •  La gestion du cache du navigateur. 
Si un testeur vient deux fois sur un site, son navigateur utilisera son cache pour les ressources statiques (images etc..) ainsi sa navigation, sera allégée
  • Les pages contenant de composants AJAX.
 jmeter ne saura pas tout seul reconnaître le bon fonctionnement du page sur le seul code retour. Il faudra ajouter un 'extracteur d'expression régulière' pour intercepter les réponses en JSON.(copie d'écran)




2) Réaliser des tests fonctionnels

Un case à cocher vous permet de basculer en mode 'test fonctionnel' (copie d'écran) . Dans ce cas, tous les échanges seront sauvegardés dans des fichiers. Ce mode sert à mettre au point un plan de test, à tester les expressions régulières ou tout simplement pour faire des tests de non régression. Ce mode ne doit pas etre activé pour des tests de charge car la taille des données collectées devient vite importante.

3) Faire des tests de chargement de fichier.

Jmeter peut d'envoyer des fichiers sur un site à tester.
Pour tester des uploads sur un site, les fichiers à envoyer doivent se trouver dans le système de fichier de l'injecteur.(copie d'écran) . Dans cette exemple, une varible '${C}' est associée à un compteur pour joindre à chaque itération un fichier different. (Important: Le nom des variables est en MAJUSCULE)


Pour terminer:

Un livre très bien sur jmeter. (lien ici)
Apache JMeter: A Practical Beginner's Guide to Automated Testing and Performance Measurement for Your Websites de Emily Halili (Broché - 30 juin 2008)

Un site sur jmeter en francais pour bien démarrer et plus encore: c'est une véritable mine d'information et de tutoriels sur jmeter  http://blog.milamberspace.net/index.php/jmeter-pages

J'utilise tous les jours jmeter pour tester l'efficacité des microserveurs node.js.  Node.js encaisse  800 ulploads simultanés sur un simple PC .



mercredi 14 mars 2012

#kanban et scrum pour les projets informatiques #agile

Vous connaissez le scrum ? La méthode agile, alors  vous allez adorer le 'Kanban' .  Et le meilleur des deux se trouve sur ce site:http://www.aubryconseil.com/post/Le-mini-livre-Scrum-et-Kanban-en-francais


Le lien suivant est celui d'un site qui propose un kanban en ligne et gratuit.
Ca donne un tableau comme ceci :
autre exemple:



Un retour d'expérience dans un prochain post.