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.

Design Emotionnel par Aaron Walter

Le Design émotionnel consiste à intégrer au sein de son application, ou site Web, une personnalité particulière. Aaron Walter montre dans ce petit livre quelque exemples et usages de sites. Il explique aussi comment créer un Personna, une représentation de l’application au travers d’un animal par exemple. La partie présentant les avantages du Design émotionnel est, selon moi, le chapitre le plus intéressant.

Le livre est très court (une centaine de pages) offre une bonne initiation aux idées du désign émotionnel mais pourrait ne pas contenter les esprits curieux. Une lecture très rapide qui peut s’avérer utile mais dont le contenu peut sembler évident et traité au sein de certains articles de Design.