Quelques astuces pour le télétravail

Pour des raisons de maladie, d’handicap ou de distance, un jour on fini par travailler chez soi. Après la lecture du livre REMOTE (Jason Fried, David Heinemeier) je pensais pouvoir trouver quelques bonnes pratiques mais malheureusement rien de très concluant. Alors je me suis fixé quelques règles afin de tirer le meilleur parti de cette expérience, je les partage ici mais n’hésitez pas à me faire part de vos remarques/idées en commentaires.

Ce ne sont pas des vacances

Démarrer à heure fixe en suivant le rythme habituelle d’une journée de travail :  en gardant des horaires de réveil et de travail habituel on évite surtout une rupture quand on quitte le télétravail. Avec l’absence de temps de transport, on peut cependant prendre quelques minutes en plus pour soi le matin.

Ne pas interrompre son travail pour quelque chose de personnel : pas d’achat en ligne, pas de surf sur les réseaux sociaux, pas d’envoi de mails personnels afin de garder à l’esprit le travail que l’on est en train de réaliser. En plus de rester concentré on évite surtout la démotivation.

Faire au moins une journée un peu plus chargée toute les deux semaines : par habitude pour compenser un éventuel imprévu (plombier qui passe) et pour entrainer sa capacité à rester motivé plus de 7h.

A titre personnel je met une musique d’ambiance sans casque mais à volume très bas afin de rester habitué aux restrictions du bureau. J’évite de grignoter ou parcourir les articles quand je tombe sur un blog intéressant.

Créer un espace de travail

Si aucune pièce spéciale ne peux accueillir votre poste de télétravail, il faudra faire avec votre bureau de tous les jours (salon/chambre) ainsi que votre ordinateur personnel. Il suffit de suivre quelques règles et astuces afin d’éviter au maximum les interruptions/ moments de déconcentration :

  • Avoir un bureau propre, vidé de toute distractions, décoré comme il le serait en entreprise. Téléphone, kit main libre, eau, stylo, papier et chargeurs à portée de main.
  • Utiliser un ordinateur différent, si ce n’est pas possible créer une session particulière. Personnellement j’ai créer un profil Firefox différent afin de n’avoir en proposition que mes marques pages pro, pas de suggestion de type leboncoin ou Amazon à l’ouverture d’un nouvel onglet et en prime l’ouverture de toute les anciens onglets au démarrage permet d’avoir une idée rapide d’où on s’était arrêté la veille.
  • Mettre le maximum d’appareil personnels en mode calme (téléphones) et couper les notifications sur l’ordinateur si elles ne sont pas pertinentes (GMail perso)
  • Un post-it et un crayon a porté de main si quelque chose de personnel vous traverse l’esprit (passer un coup de fil ou quelque chose à acheter). Il faut systématiquement le reporter à la fin de journée, où, si c’est rapide, à l’une des pauses café.
  • Faire des « pauses café » même si on aime pas cette boisson. Faire un break d’une dizaine de minutes dans une autre pièce (la cuisine c’est bien) permet d’éviter de s’énerver sur un bout de code qui ne marche pas. Se rafraichir les idées permet bien souvent de trouver la solution en un instant à son retour. On peut en profiter pour faire un brin d’activité personnelle (lancer une lessive) si celle ci n’excède pas  la durée que l’on s’est fixée.

Faites un débrief

Chaque jour il convient de regarder le travail accompli mais surtout de vérifier si un contretemps s’est produit et si il peut être évité à l’avenir. Le but étant d’améliorer soit l’espace de travail (température de la pièce, temps de lancement du poste) soit les conditions (téléphone perso qui sonne, facteur, …).

Faites un break

Le temps de transport pour se rendre à son bureau mais surtout lors du retour à la maison permet de décompresser et de faire une séparation entre vie personnelle et professionnelle. Lors du télétravail cet durée devient nulle et il devient plus compliqué d’oublier complètement le travail juste en fermant son ordinateur. Il convient donc de trouver une activité de rupture pour se changer les idées, se défouler, évacuer le stress de la journée et comme le télétravail est peu physique, rien de tel qu’une bonne marche, un footing ou tout autre activité sportive.

 

Et profitez des avantages:

  • Pas d’open-space ni de collègues bruyants
  • Votre ordinateur, vos outils et votre système favori
  • Votre rythme de travail, des horaires plus souples
  • Pas de perte de temps dans les transports
  • Du thé/café maison

Motivation

Attention, le plus gros problème est rapidement le manque de motivation. Dans REMOTE on conseille parfois de trouver un endroit autre que chez soi (espace de coworking, café) ou l’activité extérieure, la présence humaine permet de mieux se motiver.

Pour ma part je défini chaque matin le travail que je dois réaliser dans la journée. Cette idée, inspirée du DSM de Scrum, permet de m’apercevoir d’éventuel problèmes qui pourrait survenir et débuter mon travail dans les meilleurs conditions.

 

Vérifier la bonne réplication de bases de données avec databaseCheck

L’idée de débuter ce projet est partie du simple constat que pour vérifier que deux bases de données sont identiques, il faut bien souvent les exporter (dump) dans un format texte, et les comparer via un outil comme Meld. Le problème étant que ce genre d’opération est un peu fastidieuse et peu automatisable, un script serait le bienvenu.

DatabaseCheck est donc un projet qui vise, à partir d’une configuration JSON, à vérifier un ensemble de conditions sur deux serveurs distincts. On pourra par exemple vérifier que les tables order comportent bien une colonne transaction_id ou que les tables customer ont bien une ligne correspondant à id = 3.

Dans un premier temps ce projet vise à des vérifications sur deux serveurs Postgresql, mais à l’avenir il sera possible de comparer la table order d’un serveur Postgresql avec une table order d’un serveur MySQL par exemple.

Par ailleurs il sera aussi possible de définir des règles (SQL) qui seront vérifiées sur l’ensemble des serveurs.

Pour plus d’informations et d’exemples n’hésitez pas à vous rendre sur la page du projet sur Github.

Pour ceux qui n’ont pas de compte GitHub vous pouvez me remonter tout problème ou idée d’amélioration en commentaire de cet article. Merci.

 

 

PG-Day France 2014 se déroulera … pendant deux jours !

Comme chaque année le PG-Day France est organisé afin de partager autour de la communauté PostgreSQL. Après une édition 2012 à Lyon, une version 2013 à Nantes, pour cette année 2014 nous accueillerons les participants à Toulon, le 5 et 6 juin 2014.

Contrairement au programme habituel, le PG-Day 2014 se dote d’une nouvelle formule avec une journée de formation et une journée de conférences. Nous aurons l’honneur d’accueillir au sein de la communauté le développeur Bruce Momjan qui sera auteur d’une conférence et de l’un des ateliers.

Au programme cette année, les nouveautés de PostgreSQL 9.4, de la réplication et de PostGis, l’optimisation en lecture/écriture, la présentation d’un SIG en Côte d’Ivoire ou son utilisation dans les entreprises françaises, les types, VACUUM ou l’intégration de données.

Par ailleurs à l’occasion des 10 ans de la communauté PostgreSQL Francophone, une soirée spéciale est organisée.

Site web de l’événement.

 

Fonctionnalités JSON dans PostgreSQL 9.3

PostgreJSON

La croissance de la base de données NoSQL a permis d’enregistrer des données avec un schéma plus libre que les SGBD relationnels classiques. Dans sa version 9.3, PostgreSQL s’adapte et ajoute à son catalogue de type de colonnes le format JSON. Voici un rapide aperçu des possibilités qu’offre cette nouvelle colonne.

Jeux de test

CREATE TABLE developpeurs (
  id serial NOT NULL,
  nom character varying(64),
  prenom character varying(64),
  contact json,
  CONSTRAINT pk_developpeurs PRIMARY KEY (id));
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Drd', 'Tyler','{"adress":"Paper Street", "city":"Los Angeles"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('D', 'Jeff','{"twitter":"CotcotCoder", "email":"jeffd@mail.fr"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Sld', 'Lisbeth ','{"twitter":"lizbets", "email":"lizbets@mail.fr"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Lgh', 'David','{"linkedin":"DavidLgh", "email":"david.lgh@mail.fr", "phone":"0666789561"}');

Notre colonne contact est au format JSON. C’est à dire un format Text vérifiant que son contenu est bien formaté dans le format éponyme. Le développeur sera donc libre d’y stocker des informations dans un schéma facilement évolutif (ajout d’un nouveau moyen de contact). Enfin ce format permettra l’utilisation des commandes JSON que nous allons voir par la suite.

SELECT information->>’deeper’

La commande suivante permettra de récupérer directement le champs email de notre contact sans avoir à retourner l’objet JSON au complet à notre applicatif :

SELECT contact->>'email' AS email FROM developpeurs

Image Ici nous utilisons l’opérateur ->> qui permet de retourner l’élément sous sa forme textuelle.

Naturellement ce champs peut être filtrées ou utilisée comme une colonne « relationnelle classique »:

SELECT CONCAT (nom, ' ', prenom) AS "Email OK"
FROM developpeurs
WHERE contact->>'email' NOT LIKE '';

ImageSi nous ajoutons un peu de variété à notre jeu de test :

INSERT INTO developpeurs (nom, prenom, contact)
VALUES('IM', 'Max','{"telephones":["0345467921","0345467490"]}');

La requête suivante permettra d’accéder au tableau :

SELECT prenom, contact->'telephones'
FROM developpeurs
WHERE prenom ILIKE 'Max'

Nous avons utilisé l’opérateur -> qui nous retourne l’objet en tant que tel, donc ici un tableau.

ImageMais nous allons aussi pouvoir sélectionner directement le second élément du tableau (l’index commence à 0) :

SELECT prenom, contact->'telephones'->1
FROM developpeurs
WHERE prenom ILIKE 'Max'

ImageOu connaitre sa taille :

SELECT json_array_length(contact->'telephones')
FROM developpeurs
WHERE prenom LIKE 'Max'

Naturellement de nombreuses autres fonctions sont présentes afin de traiter plus finement le type JSON, dans les procédures stockées.

On pourra ainsi traiter chaque élément de la colonne comme une ligne indépendante :

SELECT * 
FROM json_each('{"fixe":"0384852540", "portable":"0673484312"}')

ImageOu alors de traiter les clés :

SELECT  * 
FROM json_object_keys('{"rue":"Place Victor Hugo", "CP":"25000", "ville":"Besancon"}')

Image

Pour plus d’informations n’hésitez pas à consulter la documentation.

Documentation officielle

Installer et utiliser SonarQube en 5 minutes

SonarQube est une application open-source regroupant sous forme de plugins divers outils permettant de définir la qualité du code source d’un projet (couverture du code par les tests, duplication de code, respect des conventions, …).

Nous allons voir ici comment déployer très rapidement cet outil dans sa version 4.1.2 sur un poste Debian, sans avoir à l’installer et de lancer une analyse rapide d’un projet. SonarQube nécessite cependant Java pour fonctionner.

Cette opération se résume en 5 étapes:

  1. Téléchargement de SonarQube et lancement du service
  2. Télechargement de SonarQube Runner
  3. Création du fichier de configuration
  4. Ajout du plugin PHP
  5. Lancement de l’analyse
  6. Résultats

Téléchargement de SonarQube et lancement du service

wget http://dist.sonar.codehaus.org/sonar-3.7.4.zip
unzip sonar-3.7.4.zip
cd sonar-3.7.4
sh bin/{version linux}/sonar.sh console

Téléchargement de SonarQube Runner

wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.3/sonar-runner-dist-2.3.zip
unzip sonar-runner-dist-2.3.zip

Fichier de configuration

Allez à la racine de votre projet puis créez un fichier sonar-project.properties

vim sonar-project.properties

Remplissez le avec les lignes suivantes

# Required metadata
sonar.projectKey=MonProjet
sonar.projectName=MonProjet
sonar.projectVersion=0.1

sonar.sources=app
sonar.language=php
sonar.sourceEncoding=UTF-8
sonar.php.tests.reportPath=tests.xml
  • Les trois premières lignes concernent le nom du projet et sa version.
  • La ligne source est le chemin relatif (à partir de la base de votre projet et donc du fichier de configuration) où se trouvent le code source de l’application, ici app (framework CakePHP)
  • On précise le language de programmation utilisé
  • et l’encodage des sources
  • la dernière ligne permet de spécifier le fichier de résultats des tests (format junit) généré par exemple via Jenkins.

Installation d’un plugin (ici PHP)

Seul le langage Java est utilisé par défaut, on va donc aller activer des modules pour gérer un autre langage. Pour cela il suffit d’aller sur l’interface d’administration avec un navigateur web sur l’adresse :

http://localhost:9000

De cliquer sur Login (menu du haut) et de rentrer les identifiants : admin / admin

Pour ajouter un plugin on va

  • suivre les menus Settings /Update Center / Available plugin
  • Cliquer sur le nom du plugin à installer
  • Et cliquez sur le bouton installer
Ajout d'un plugin dans Sonar

Ajout d’un plugin dans Sonar

Il existe un plugin pour de nombreux langage de programmation et outils, ainsi que pour traduire cette interface d’administration.

Une fois le plugin installé il faut relancer le serveur en interrompant la commande du service (étape 1) et en la relançant :

sh {chemin vers sonar}/sonar-3.7.4/bin/{version linux}/sonar.sh console

Lancement de l’analyse

On va se placer à la racine du repertoire du projet, là où se trouve le fichier de configuration et lancer SonarQube-Runner :

sh {chemin de sonarqube-runner}/sonar-runner-2.3/bin/sonar-runner
Lancement de l'analyse avec SonarQube-runner

Lancement de l’analyse avec SonarQube-runner

Résultats

On va se rendre sur l’interface web :

http://localhost:9000

Puis parcourir les projets pour voir le résultat de l’analyse:

SonarQube - Interface du projet

SonarQube – Interface du projet

Conclusion

La mise en place de SonarQube pour l’analyse d’un code-source s’est révélée extrêmement simple et rapide. Mais cette opération basique ne prend pas en compte toutes les possibilité de SonarQube, il faudra veiller à configurer l’outil à son goût ainsi que les chemins vers les différents rapports de PHPUnit. Naturellement SonarQube bénéficie d’une bonne documentation pour cela.

Note

Pour cette démonstration nous avons utilisée la version open-source communautaire mais il existe d’autres versions à destination des entreprises.

Démo de SonarQube

Pour trouver rapidement une configuration pour votre projet n’hésitez pas à chercher dans ce projet.

La revue de code : brouillon d’idées

La revue de code est un processus visant à améliorer de manière continue la qualité du code produit par une équipe de développement. Cette pratique est tout aussi importante que les tests unitaires mais pourtant, à ma connaissance, moins d’outils existent pour aider à cette revue. Et sans bon outil, simple et pratique à utiliser, on ne permet pas son adoption.

Le seul outil que j’ai rencontré est l’interface de BitBucket qui permet d’approuver les commits et éventuellement de commenter une ligne. Une fois approuvé ou commenté, le commit hérite d’une petite icone dans la vue d’ensemble. Il est possible de voir les « Reviewers » du commit, les informations sont visibles mais l’interface reste (selon mon avis très critique) peu adaptée à du code review.

Pourquoi faire de une revue

(liste non exhaustive):

  • voir les développements des autres membres de l’équipe
  • déceler les problèmes de sécurité et de performance
  • faire remarquer les noms de variables non explicites, les fonctions dépréciées, le code en doublons, le refactoring à faire
  • vérifier les tests unitaires, la couverture du code, les cas non traités
  • permettre l’échange de bonne pratiques

Process

Afin de garantir une bonne qualité, le mieux serait que chaque développeur (ainsi que des éventuelles personnes externes) puissent approuver une liste de commit données, y compris son propre travail.

Prototype

Il faudrait une interface simple permettant de visualiser les modifications de ce commit et d’ajouter une question, une remarque ou d’approuver le commit avant de passer au suivant (donc une naviguation simple entre commit suivant/ precedent). Sur cette interface le reviewer devrait pouvoir voir l’ensemble des remarques et avis des autres reviewers.

Prototype de code review

Prototype de code review

A ce moment, la création d’une remarque qui bloquerait le commit (faille de sécurité, refactoring nécessaire, …) entrainerait la création d’un ticket dans un système lié (ou externe de type Mantis, Bugzilla, Jira, …).

Après avoir commenté ou approuvé toute la liste de commit, le reviewer doit pouvoir accéder à une interface listant l’ensemble de ses commits indiquant les remarques ou questions et se chargerait de :

  • répondre aux questions
  • planifier la correction des tickets (liés aux remarques)
Prototype, l'après code-review

Prototype – résultat de ses commits persos

Cette application viserait une revue de code individuelle, car, sur une petite équipe de quatre ou cinq personne la revue pourrait se faire en groupe, autour d’un même écran où les développeur parlerait de leur code à tour de rôle.

Je n’ai pas trouvé trop de ressources sur le sujet mais n’hésitez pas à partager vos méthodes, outils ou logiciels utilisés.

Se former au PSC-1

Quoi ?

Le PSC-1 est le diplôme Premiers Secours Civiques de niveau 1. Il est enseigné par de nombreux organismes parmi lesquels la Croix-Rouge. Il remplace depuis 2007 l’Attestation de Formation aux Premiers Secours en changeant de nombreuses pratiques et intègre la formation pour l’utilisation d’un défibrillateur. La formation dure une dizaine d’heures et comporte la prévention des risques et le traitement des différentes victimes (hémorragies, inconscience, arrêt cardio-respiratoire, étouffement, plaie ou brûlure, etc …).

Pour qui ? Pourquoi ?

Il est à destination de tous, de 12 ans à plus, sans pré-requis concernant le secourisme. De par son programme il permet une formation rapide aux gestes de premiers secours indispensables et permet d’éviter l’aggravation de la santé d’une victime.

Comment ?

L’inscription est très simple. De nombreux organismes forment à ce diplôme. Il suffit de les contacter pour s’inscrire à une session qui coute entre 50 et 60€ selon l’établissement. Un diplôme est remis avec un fascicule rappelant les bons gestes. Pour certaines professions il est demandé qu’il soit âgé de moins de 2 ans, dans les autres cas il est juste conseillé de faire un rappel tous les deux ans.

 

Des programmes existent pour former les étudiants, j’avais en 2007 bénéficié de l’AFPS grâce à mon lycée (financement partiel). Ces gestes sont indispensables dans de nombreuses situations et le PSC permet de mettre fin à de nombreuses pratiques dangereuses et fausses pensées. Il faut savoir par exemple que le défibrillateur automatique qui apparaît dans de nombreux lieux publics ne remplace pas le massage cardiaque, seul, le défibrillateur, ne pourra pas sauver quelqu’un … mais vous, vous pourrez.