Conseils à un jeune développeur

L’enseignement scolaire fait souvent l’impasse sur certains points qu’il est important de connaitre particulièrement quand on commence sa vie professionnelle. Certains domaines sont réservés à des études supérieures pourtant les bases restent très simples et essentielles. En informatique (mais pas seulement) des études plutôt courtes peuvent être compensées avec ces quelques conseils qui peuvent ajouter quelques lignes à votre CV et quelques propos/réponses à vos entretiens.

Lire la suite

Pourquoi il est important de développer un projet perso

Il est toujours intéressant de travailler sur des applications personnelles surtout quand l’on est adepte du DIY. Pour ceux qui ne voient pas l’intérêt, voici la liste de 6 avantages dans la réalisation d’un projet personnel.

Apprendre une nouvelle technologie / un nouveau framework

Il est évident que si vous faites du PHP dans votre boite, vous aurez un peu de mal à apprendre Python. Je pense que la volonté de découvrir un nouveau langage, une bibliothèque ou un nouveau framework est la première raison du développeur pour se lancer dans un projet personnel. Il est évidemment plus instructif de réaliser une application quelle qu’elle soit que de simplement lire un livre « Maitriser Ceci-Cela en 30 minutes » (même si ce genre de livre propose souvent à appliquer les acquis via un petit TP. L’informatique étant un monde très évolutif, il est important de suivre ses dernières nouveautés.

S’ouvrir à un nouveau domaine

Un projet personnel est aussi l’occasion de se plonger dans un outil/domaine habituellement géré par un autre rôle dans le domaine professionnel. Qu’il s’agisse de base de données ou de design par exemple, il est toujours intéressant de s’ouvrir et de découvrir les autres petits côtés du grand ensemble qu’est une application.

Par ailleurs, certes à moindre mesure, un projet personnel permet aussi d’adopter une nouvelle méthode de travail (Kanban par exemple), d’adopter une certaine organisation/planification et ainsi d’entrer dans le domaine de la gestion de projet (et de mieux le comprendre).

Développer « à sa façon » (et de nouveaux outils)

Le milieu professionnel est bien trop souvent régit par les contraintes temporelles et humaines qui impliquent que dans le cas d’un développement les outils utilisés seront ceux qui sont généralement connus (bonjour SVN) et que le moyen utilisé pour résoudre un problème sera (souvent) celui qui prend le moins de temps… On néglige ainsi de nombreux logiciels, outils, méthodes qu’il peut être intéressant de découvrir: la génération automatique de documentation, le TDD/BDD ou les nouvelles architectures et paradigmes (architecture orientée document, programmation orienté aspect… ).

Développer sa créativité / son coté artistique

Une application est aussi l’occasion de penser ou de repenser la mise en page, l’interface, le graphisme. Si vous attaquer une application au besoin très précis, par exemple où l’information doit être facile d’accès, les interfaces conventionnelles peuvent ne pas suffire. Si vous développer par exemple une application qui permet de trouver un DAE (Défibrillateur automatique externe) il faut minimiser le nombre de clic, et presque avoir trouvé au lancement le DAE le plus proche (mise en cache des positions GPS), pouvoir en un clic contacter le responsable du materiel, pensez à une utilisation très simple et ultra-intuitive (le stress d’un secouriste est énorme lors d’un accident).

De nombreux design/mockup  sont proposés par des artistes à destination des développeurs sur des sites comme dribbble ou devianart.

Améliorer l’existant

Vous trouvez l’interface du bug-tracker immonde ? L’annuaire de la société manque cruellement d’ergonomie. Si l’outil est en open-source il vous est possible de créer un thème ou un plug-in et de le partager avec les autres utilisateurs. Une fois le développement achevé il vous sera plus simple de le faire adopter au sein de votre entreprise, bénéficiant d’un exemple de rendu et ne coûtant aucun développement sur le temps de travail: votre responsable n’en sera que plus tenté.

Délier développement et travail

Enfin personnellement le point le plus important. Passez du bon temps sur un développement est quelque chose de très agréable qui peut compenser la pression, le manque d’originalité ou la correction de bugs du monde professionnel. Si votre travail ne vous permet pas un épanouissement personnel alors ce genre de projet pourrait vous redonner un peu de goût pour la programmation.

 

Le « mais » …

Avant de débuter un projet il faut y réfléchir un minimum et poser sur papier les objectifs de l’application. Il faut toujours rester dans un fonctionnement simple, facilement évolutif. Imaginer un logiciel aux fonctionnalités trop nombreuses, aux interactions trop complexes peut facilement devenir une charge de travail trop lourde et mener à un échec. Gardez toujours à l’esprit que votre motivation et votre temps alloué peut fortement chuter au cours du temps.

Enfin ce projet ne doit pas vous priver de ce qui est important, vos relations, votre santé, vos autres passions, il doit donc rester un plaisir, avec un peu de défi mais ne pas engendrer de stress et un coût (humain) trop élevé.

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.