Dur Comme Faire

Aller au contenu | Aller au menu | Aller à la recherche

De la misanthropie et de l'expérience

On est moins déçu des autres à mesure qu'on se déçoit soit-même.

mercredi 26 août 2009 à 13h46 - Pensées 0   0

Les français et le travail

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)

vendredi 21 août 2009 à 07h40 - Divers 6   0

Parsing de l'analyse syntaxique de fichiers PHP

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.

mercredi 19 août 2009 à 19h31 - PHP 5   0

De l'arrogance et de la médiocrité

L'arrogance qu'ils me prêtent n'est souvent que le reflet de leur médiocrité.

mercredi 19 août 2009 à 07h54 - Pensées 0   0

Weezer - The 8-bit Album

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 :

  1. Island In The Sun (Belmont's Revisal) - videogame orchestra
  2. Holiday - Anamanaguchi
  3. El Scorcho - Tugboat
  4. The World Has Turned And Left Me Here - Bit Shifter
  5. You Won't Get With Me Tonight - PDF Format
  6. Hash Pipe - seal of quality
  7. In The Garage - OxygenStar
  8. You Gave Your Love To Me Softly - : (
  9. We Are All On Drugs - Rabato
  10. Jamie - Unicorn Dream Attack
  11. Come To My Pod - Mahamajama
  12. Why Bother? - I Fight Dragons
  13. Buddy Holly - nordloef
  14. I Do - arcadecoma.

dimanche 16 août 2009 à 18h05 - Musique 1   0

XHTML - CSS - DotClear - Technorati

Les billets de ce blog sont sous licence Creative Commons