Pirum Header

L’acronyme pourrait laisser entendre qu’il s’agit d’un petit frère de Piwam. Pirum, est un gestionnaire de serveur de canaux PEAR réalisé par Fabien Potencier (Sensio Labs). Il y a encore quelques limitations (pas de catégories, pas d’interface web pour gérer les packages…) mais c’est tout de même largement utilisable et… utilisé ! Swift Mailer, Twig, PHPUnit, symfony et Pirum lui même utilisent cette solution. http://www.pirum-project.org

Doctrine

Piwam est historiquement basé sur Propel. Parce qu’il est né avec symfony 1.0, et qu’à ce moment là, il « fallait » apprendre Propel, très en vogue.Mais la donne a changé, Doctrine est devenu l’ORM par défaut dans symfony, l’avenir du projet est bien plus certain que celui de Propel. J’ai donc décidé de changer d’ORM pour Piwam, et j’ai décidé de vous faire part de cette excitante expérience.

Les gros changements

Au premier abord, la logique de Doctrine déroute. La sélection des enregistrements se fait avec une approche de « méta-langage », le DQL, à l’instar de ce qui se fait dans Hibernate (pour les Javatistes) et le HQL. Adepte de l’approche 100% objet, j’y trouvais là un premier reproche par rapport à un Propel clair et loin de tout langage SQL. Ainsi pour sélectionner une liste d’utilisateurs qui sont dans le groupe « 42″, on procèdera de la sorte :

class UserTable extends Doctrine_Table
{
  /**
   * Retrieve users who belong to the group $id
   *
   * @param integer $id
   * @return array of User
   */
  public static function getForGroupId($id)
  {
    $q = Doctrine_Query::create()
           ->from('Member m')
           ->where('m.group_id = ?', $id);

    return $q->execute();
  }
}

Finalement, cette manière de faire rappelle les habitudes prises en HQL et s’avèrent agréables à utiliser en PHP.  On notera par ailleurs que la table hérite tout de suite de Doctrine_Table ; nous n’avons plus accès aux méthodes statiques auto-générées par Propel (doSelect(), doCount()…). À vous de les ré-implémenter !

À l’instar de Propel, Doctrine propose de méthode pour hydrater les résultats : sous forme d’objets ou sous forme de tableaux. Remplacez alors l’appel à ->execute() par ->fetchArray(). Un benchmark réalisé sur AmicalementWeb présente des gains de performances non négligeables pour la seconde méthode. Dans le cadre de Piwam, je suis néanmoins resté sur ma gestion d’objets, pour éviter d’avoir à réécrire les templates, et parce que les performances sous Piwam ne sont pas un point critique.

Les trucs cools de Doctrine

On s’aperçoit très vite qu’il y a plein de choses super cools dans Doctrine. Je veux parler par exemple de l’export / import ultra-facilité dans différents formats (XML, YML, Json), des post- et pré- méthodes, ou encore un comportement géographique ! La possibilité d’ajouter des plugins nous confortent encore plus quant au choix d’avoir abandonné Propel ! L’intégration à symfony est elle aussi bien poussée, à tel point qu’il est possible d’exécuter des requêtes DQL directement depuis la ligne de commande via la tâche doctrine:dql.

Ma méthodologie

Plutôt que de « bidouiller » le fichier schema.yml de Propel, j’ai décidé de laisser Doctrine générer un nouveau schema.yml à partir de la structure actuelle de la base de donnée.
> php symfony doctrine:build-schema
Après avoir renommé les noms des relations et supprimé les relations à double sens qui alourdissaient inutilement la lecture et créaient une trop forte dépendance entre les classes, en avant pour la génération des fichiers Model. Tout comme pour Propel, on dispose de tâches puissantes et explicites, avec la possibilité (youpi !) de regénérer uniquement certaines classes du modèle.

Vous remarquerez que le nom des classes générées a changé. Du moins, l’équivalent des classes « Peer » de Propel, maintenant suffixées par « Table » comme dans mon exemple. Vous pouvez envisager une session de chercher/remplacer automatisée dans votre liste de contrôleurs, c’est ce que j’ai fais et c’est plutôt rapide et efficace. J’ai opté pour ce choix afin de rester dans la « logique » Doctrine. L’autre solution ? Renommer ces classes avec les anciens noms donnés par Propel.

Si votre application comporte très majoritairement des requêtes basiques de sélection / insertion / mise à jour, la ré-écriture des méthodes est relativement rapide. MAIS, c’est relativement énervant de se voir refaire un travail déjà effectué, et assez peu automatisable, en créant de surcroît un nouveau risque d’erreur.

Note d’auteur

Je ne sais pas si c’est un fait ou un hasard, mais en cherchant de la documentation sur Doctrine, je suis tombé sur pléthore de sites montrant des exemples de requêtes intégrés… dans leur contrôleur. Je ne me souviens pas avoir vu autant d’horreurs en faisant des recherches Propeliennes !

Le soucis des formulaires

Ne prenez pas peur, c’est un tout petit soucis. Et oui, pour peu que vos formulaires intègrent de la logique « Propel » (vérification d’unicité, listes de sélections générés via des Criteria, etc.) vous allez devoir mettre à jour chacun de ces formulaires. C’est en qui me concerne la partie que je considère comme la plus énervante.

Mon avis

Pour conclure sur ce bref retour, qui s’est fait dans un cadre propre à un et un seul projet (Piwam), je dirais que switcher de Propel vers Doctrine n’est pas anodin mais peut s’opérer sans douleur. Avoir des tests en place permet de s’assurer du fonctionnement une fois la procédure achevée. Je recommanderais à ceux qui veulent opérer de la sorte sur un projet conséquent de procéder par itérations, et d’intégrer chaque classe Propel les unes après les autres, quitte à se retrouver avec un mélange improbable de classes. Bien avant cela, je pense que la migration vers Doctrine est loin d’être systématique et que Propel n’est pas mort. Comprenez par là que si votre estimation du temps nécessaire pour migrer est bien supérieur à votre temps disponible, n’hésitez même pas et restez Propeliste. Au pire, commencez une nouvelle branche de votre projet avec Doctrine.

Flickriver

Ça faisait un moment n’est-ce pas ? Il faut dire que ces derniers temps, j’ai surtout découvert des projets géniaux, ou des articles géniaux, mais cela ne suffit pas pour prétendre au « lien de la semaine ». C’est pour cette raison que la série devrait être prochainement complétée par ses frères et soeurs « projet de la semaine » et « article de la semaine« .

Mais cette semaine, c’est bel un bien un lien, Flickriver, qui se trouve en haut de l’affiche. Basé sur l’API offerte par Flickr, cette rivière de photos vous permet de découvrir les clichés réputés « intéressants » du moment, dans un fil potentiellement infini d’images de qualités qui déroulent sous vos yeux. Le genre de lien que je vais consulter au moins une fois par semaine quand je suis en panne d’inspiration, pour voyager ou simplement imaginer. http://www.flickriver.com

J’ai récemment migré Piwam vers symfony 1.4. Une tâche ma foi fort peu consommatrice de temps et qui se fait plutôt sans encombre, du moins pour un projet tel que Piwam, recodé from scratch avec symfony 1.2 .

En revanche, pour de gros projets débutés parfois sous symfony 1.0, qui ont effectué une mise à jour vers 1.1, puis 1.2, il va falloir s’assurer que TOUT a bien été mis en place pour éviter que la migration tourne au désastre. Symfony 1.3 assure en effet la rétro-compatibilité, mais la mouture 1.4 ne pardonne pas (clone de la 1.3, mais les éléments deprecated sont supprimés).

C’est alors là que le billet devient intéressant, puisque je vous annonce que Fabien Potencier a eu l’idée de mettre en place une tâche « project:validate« , qui effectue une multitude de vérifications pour que tout se passe en douceur. À essayer avec la dernière version !

Google Wave Coule

C’est la question que je me pose lorsque je vois le nombre de blogs capables d’organiser des concours pour gagner une invitation au service. On en arrive à un point que tout bonhomme possédant des invitations ressent l’envie de crier au monde entier qu’il organise un concours.

On peut comprendre un tel engouement à la première semaine de lancement, mais là franchement, il y a plus d’offres que de demandes. Doit-on en conclure que Wave est en passe de devenir le futur G-Flop ?

Google Fonts

Ce billet aurait pu porter la mention #fail ou que sais-je encore… à trop utiliser les raccourcis clavier, voilà ce qu’une combinaison hasardeuse m’a fait faire…  Bien sûr, l’aide apparaît également dans ce dialecte étrange…

Piwam-install

Tadam ! C’est maintenant chose faite, Piwam, le gestionnaire d’association open-source, est maintenant sorti en version finale. Des bugs ont été corrigé depuis les release candidates, ce qui nous donne le lot d’améliorations suivant depuis la 1.1.1 :

  • trombinoscope
  • mode multi-associations paramétrable
  • possibilité de retrouver un mot de passe perdu
  • message d’erreur explicite en cas d’erreur d’identification
  • le nom d’utilisateur n’est pas sensible à la casse
  • possibilité d’effectuer des demandes d’adhésion
  • formatage des numéros de téléphone
  • lien vers les activités et comptes mentionnés dans le bilan
  • les membres sans droit peuvent voir et éditer leurs propres informations
  • correction des liens vers les adresses emails dans les profils utilisateurs
  • le lien pour enregistrer une nouvelle association est masqué si le mode multi-associations est désactivé
  • message d’erreur lorsqu’on tente d’utiliser un identifiant déjà pris
  • correction d’un bug lors de la récupération de paramètres en mode multi-associations
  • correction d’un bug lors du calcul du nombre de membres ayant un certain statut
  • début de la documentation développeur
  • documentations README, README-FR et UPDATE-FR à jour
  • correction de bugs lors du contrôle de la version du logiciel
  • les valeurs des préférences peuvent être supprimées
  • la valeur « 0″ est affichée si une somme est nulle (au lieu de rien)

En attendant la version 1.2, qui apportera un bon lot de nouveautés et une utilisation de symfony 1.3. Une nouvelle vidéo fait également son apparition, expliquant comment installer Piwam par FTP. Et pour télécharger cette fameuse nouvelle version, ça se passe sur Google Code !

Des changements très simples

Comment augmenter sa productivité ? Celle de ses employés ? C’est une question à laquelle un peu tout le monde s’attache ou du moins peut s’attacher.  Il y a des pistes purement organisationnelles (méthodologie – Scrum a le vent en poupe -, hiérarchie dans l’entreprise, workflow général…) mais un certain nombre de petites choses peuvent venir agrémenter le quotidien d’un travailleur. D’un point de vue très général, j’identifierai :

  • Changer le volume de la musique (fond sonore, « fort », son coupé…)
  • Changer le type de musique (relaxante, variété, « hard »…)
  • Changer souvent de position (très droit, avachi…)
  • Changer de temps en temps les postes de travail : leur position, l’orientation
  • Modifier les affiches / photos sur les murs

Autant de modifications qui peuvent paraître extrêmement anodines mais qui tiennent constamment l’esprit en alerte. Sans jouer au neurologue expert, le cerveau identifie inconsciemment un changement et relance l’attention, la créativité. En dehors de ces dispositions inhérentes au poste de travail, on peut s’attaquer à l’outil de travail en lui même. En prenant le cas – fréquent – d’un intranet fréquemment consulté par les employés, on pourrait ainsi imaginer un changement, global ou mineur, de l’apparence de cet intranet.

Des changements menés à bien

Effectuer des changements sur un outil de travail est un art qui s’il est manié sans précaution peut très vite venir semer la zizanie. Un bouton déplacé, un champ qui n’apparaît que dans certaines conditions, des menus ré-organisés… voilà de bien bonnes manières de diviser par 2 la productivité !

Bien que des choses comme ITIL existent pour aider à mener à bien ce genre de changement, je ne souhaitais évoquer ici que les modifications purement visuelles, sans engendrer un seul impact fonctionnel. Changer les couleurs du bandeau principal, mettre un fond aux couleurs de noël ou d’halloween, faire jaillir de l’écran une photo « volée » qu’un employé souhaitait partager (attention aux dérives !) autant de petites modifications qui peuvent venir casser le train-train des employés manipulant constamment l’outil et se lassant du jeu de couleur bleu et blanc. À condition, bien sûr, d’avoir un outil un tant soi peu personnalisable.

Pour quel impact ?

Encore une fois, c’est une question qui obtient une réponse au cas par cas. Il y aura certains employés qui souhaiteront qu’une habitude ne soit JAMAIS cassée (jamais de musique, ne jamais changer de poste de travail, etc.) et qui ne manqueraient pas de vous le faire savoir, j’en suis certain. Ce billet n’est qu’une réflexion personnelle après une petite analyse introspective de mon comportement, corrélée avec une observation effectuée sur l’ensemble de la population estudiantine comme professionnelle que je peux côtoyer jour après jour.

Alors que les extensions pour Google Chrome pointent le bout de leur nez, dont celle qui me manquait tant pour gérer les bookmarks via Delicious, il y a encore pléthore d’extensions pour Firefox à découvrir. Je vous propose par ce billet de partir à la découverte de Download Statusbar.

Le concept est simple mais a le mérite d’exister : remplacer la fenêtre de téléchargements de Firefox pour venir intégrer toutes les informations dans la barre d’état du navigateur. Cerise sur la gâteau, 2 modes de présentation sont disponibles : affichage « complet » :

Download Statusbar complet

et affichage « réduit », affichant le petit « 1:0″, respectivement le nombre de téléchargements en cours et ceux terminés :

Download Statusbar réduit

Pour télécharger tout de suite cette extension rendez-vous sur addons.mozilla.org ou sur le site officiel.

Google Wave Header

Envie d’une invitation Google Wave ? Plutôt que de vous proposer un 42e concours, ou de proposer – injustement ? – ces invitations aux plus réactifs, j’ai décidé de me baser sur le bon vieux principe de l’échange. Tout bug rapporté découvert dans Piwam et rapporté via Google Code donnera droit a une invitation pour le nouveau service de Google.

La marche est suivre est donc simple : télécharger la dernière version de Piwam, l’installer, rapporter un problème rencontré. Let’s go !