Aller au contenu | Aller au menu | Aller à la recherche
On est moins déçu des autres à mesure qu'on se déçoit soit-même.
Une étude effectuée par UBS étude révèle plusieurs choses intéressante sur les français et le travail.
Sans surprise, le pays des 35h est le celui où l'on passe le moins de temps à travailler : environ 1 600 h par an contre 1 900 h en moyenne dans le monde. Sans surprise également, l'Asie est le continent où l'on travaille le plus.
Pa railleurs, la France n'est pas le pays avec le PIB par habitant le plus important, loin de là même car elle est placée au 18e rang mondial.
Cependant, si l'on rapporte le PIB par habitant au nombre d'heures travaillées, la France est le pays qui produit le plus de valeur ajoutée pour une heure de travail d'un de ses habitants. Nous sommes donc le pays le plus productif au monde.
Bien que ce ne soit pas la première fois que la France arrive en tête de ce classement, cela m'interpèle toujours. Tout d'abord, que ce soit au niveau du recrutement ou en tant que client, je constate continuellement que des tas de gens ne font pas leur travail et se contente d'occuper une chaise. Cela veux dire que notre productivité pourrait être bien plus importante qu'elle ne l'est.
Par ailleurs, compte-tenu de ce "manque à gagner" français, la situation des autres pays me laisse perplexe. La déperdition d'énergie est-elle encore plus forte dans ces pays ? Comment est-ce possible ? Je pense notamment à des pays où la fainéantise est socialement très mal vue comme le Japon.
Source : French: The Most Productive People In The World (Non, moi non plus je ne sais pas pourquoi une photo de la première dame de France en maillot de bain illustre cet article)
Afin d'améliorer les méthodes de développement dans la société pour laquelle je travaille, j'ai mis en place un hook Subversion de type "pre-commit" pour vérifier que la syntaxe PHP des fichiers que l'on souhaite commiter est correcte. Je ne parle pas là de respect de standards de codage, juste du respect de la syntaxe PHP. Cela peut paraître inutile mais je retrouve régulièrement des fichiers avec des erreurs de syntaxes.
L'idée est simplement de récupérer la liste des fichiers impactés par le commit en cours et pour chacun d'en vérifier la syntaxe à l'aide de PHP en ligne de commande. J'ai cependant été confronté à une subtilité dont je voudrais vous faire part.
Voici le code complet du hook en question :
#!/usr/bin/php
<?php
$repositoryPath = $_SERVER['argv'][1];
$transaction = $_SERVER['argv'][2];
$stderr = fopen('php://stderr', 'w');
(..)
// autres vérifications
(...)
// Checks PHP files for syntax errors
$command = "/usr/bin/svnlook changed -t $transaction $repositoryPath";
exec($command, $lines);
$errorsFound = false;
$syntaxErrors = '';
foreach ($lines as $line) {
$file = trim(substr($line, 4));
if ('.php' == substr($line, -4)) {
// KLUDGE: PHP returns found syntax errors through stderr so "2>&1" must be added to redirect stderr to stdout
$command = "/usr/bin/svnlook cat -t '$transaction' '$repositoryPath' '$file' | /usr/bin/php -l 2>&1";
exec($command, $output, $returnValue);
if (0 != $returnValue) {
$errorsFound = true;
$syntaxErrors .= 'Fichier: ' . $file . PHP_EOL;
array_pop($output);
foreach ($output as $line) {
$position = strpos($line, ':');
$line = substr($line, $position + 1);
$syntaxErrors .= ' - ' . trim($line) . PHP_EOL;
}
$syntaxErrors .= PHP_EOL . str_repeat('-', 80) . PHP_EOL;
}
}
if ($errorsFound) {
fputs($stderr, str_repeat('-', 80) . PHP_EOL);
fputs($stderr, 'Des erreurs de syntaxe PHP on ete detectes :' . PHP_EOL . PHP_EOL);
fputs($stderr, $syntaxErrors);
fclose($stderr);
exit(1);
}
fclose($stderr);
exit(0);
La ligne qui nous intéresse principalement est la suivante :
$command = "/usr/bin/svnlook cat -t '$transaction' '$repositoryPath' '$file' | /usr/bin/php -l 2>&1";
La première partie, à gauche du pipe, demande à Subversion d'afficher le contenu du fichier $file du dépôt situé à $repositoryPath et cela pour la transaction $transaction. On parle ici de transaction et non de révision parce que nous sommes avant le commit. Enfin, la partie après le pipe reçoit le contenu du fichier renvoyé par Subversion et l'analyse syntaxiquement.
Je souhaitais afficher des informations sur les erreurs éventuellement rencontrées afin que le développeur sache exactement pourquoi son commit a été rejeté. Le problème est que PHP m'affichait bien les détails quand je capturais la sortie écran avec de l'output buffering mais je ne les avais pas dans la variable sensée contenir la sortie écran.
La raison est en fait toute bête mais on peut y passer un peu de temps avant de trouver si on n'a pas l'habitude du shell. Nous allons donc faire un petit rappel sur le sujet.
Sur Unix, il existe des flux standards. Ce sont des canaux pour l'entrée et la sortie de données. Ces flux sont au nombre de trois, au travers desquels les programmes peuvent faire entrer ou sortir des informations. Ceux qui nous intéressent en l'occurrence sont "stdout" et "stderr". Le premier correspond à la sortie classique tandis que le second correspond aux messages d'erreur.
Revenons maintenant à PHP. La fonction exec() permet de récupérer la sortie dans une variable. Le problème c'est que c'est le flux "stdout" qui est renvoyé et non l'ensemble de l'affichage. Les messages envoyés à "stderr" n'y figurent donc pas, ce qui explique le problème que je rencontrais.
Heureusement, il est possible de rediriger les messages du flux "stderr" vers "stdout" en ajoutant "2>&1" après la commande. Dès lors, la fonction exec() renvoie bien ce que j'attends et je peux afficher les messages d'erreur au développeur.
L'arrogance qu'ils me prêtent n'est souvent que le reflet de leur médiocrité.
Si je parle essentiellement d'informatique sur ce blog, j'ai une autre passion pour la musique. J'en écoute énormément. Beaucoup d'artistes et de styles différents. Je voudrais partager avec vous une curiosité que j'ai découverte récemment et qui m'amuse beaucoup.
Il s'agit d'un album de reprises de chansons de Weezer par divers artistes. La particularité est qu'il s'agit de reprises dans le style chiptune. Ce style utilise des échantillons de musique 8-bit tirés de jeux vidéos et les assemblent pour créer des mélodies. Cela donne un son très particulier.

Au programme :
© 2003-2010 Jean-Marc Fontaine - Tous droits réservés
XHTML - CSS - DotClear - Technorati
Les billets de ce blog sont sous licence Creative Commons