Infos

Fil RSSÉquipe Infoglobe

Archives

PHPUnit; Intégration de nouvelles fonctionnalités

Yannick Voyer | CMS/SGC,Développement | Jeudi, 30 juin 2011

Lorsque nous développons de nouvelles fonctionnalités dans notre code, il nous arrive de se demander si une modification viendra en briser une autre créée antérieurement. Afin de s’assurer de la stabilité de notre composante, il est impératif d’avoir un système qui nous assure que les fonctionnalités implémentées auparavant n’aient pas été supprimées. PHPUnit à la rescousse!

 

PHPUnit permet de tester nos blocs de code indépendamment les uns des autres. Lors de la création d’un test de fonctionnalité, nous devons donner une valeur à notre fonction. PHPUnit s’assurera que la valeur retournée par la fonction sera la valeur attendue. Plus la fonction sera étendue afin de supporter de nouveaux paramètres, plus les tests nous permettront de nous assurer qu’aucune fonctionnalité précédemment développée ne sera brisée.

Installation

Le mode d’installation à été trouvé sur PHPUnit.de. Il nous permet d’installer la version via les canaux PEAR.

Installer xdebug

Installer PHPUnit

sudo pear channel-discover pear.phpunit.de

sudo pear install –alldeps phpunit/PHPUnit

Une fois que PHPUnit est installé et fonctionnel, vous êtes prêt à créer votre premier test. Idéalement, si vous utilisez une librairie ou un framework, vous voudrez sans doute vouloir configurer vos tests afin que chacun utilise les classes de votre librairie. Pour cela, je vous suggère de vous créer une classe qui servira de « bootstrap » et qui sera appelée avant chaque test.

Voici un exemple de « bootstrap ».

setup.php

class Setup {

public static function init() {

// Root, libraries, classes and tests directories.
$root       = dirname(dirname(__FILE__));
$config     = $root} . ‘/config’;
$librairies = $root . ‘/libraries’;
$tests      = $root . ‘/tests’;

// Empêche le coverage du dossier de tests.
PHPUnit_Util_Filter::addDirectoryToFilter($tests);

// Update include path.
$path = array($config, $librairies, $tests, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $path));

// Add files to the PHPUnit code coverage whitelist.
if (version_compare(PHPUnit_Runner_Version::id(), ’3.1.6′, ‘>=’)) {
PHPUnit_Util_Filter::addDirectoryToWhitelist($starLib);

}

}

Votre classe de test

Blog.php

require_once ‘PHPUnit/Framework.php’;
//require_once dirname(__FILE__) . ‘/setup.php’;

class Blog extends PHPUnit_Framework_TestCase {

public function test_failed() {

$this->assertFalse(true, ‘Ce test ne fonctionne pas’);

}

public function test_success() {

$this->assertTrue(true, ‘Ce test fonctionne’);

}

}

Une fois ces étapes réalisées, vous n’avez qu’à exécuter le fichier Blog.php pour obtenir ce résultat:

phpunit –colors Blog.php

Pour plus d’informations sur l’utilisation de PHPUnit, voir sur le site .

Bon test !

 

Flexform et itemsProcFunc

Mehdi Guermazi | CMS/SGC,Développement,Web | Mardi, 21 juin 2011

Ces derniers temps, l’équipe Infoglobe a été assez active sur le blogue. C’est le T3CON à San Francisco qui nous a inspiré tous. Nos articles, bien qu’intéressants, n’étaient pas très techniques. Cependant, notre blogue s’adresse aussi aux programmeurs et aux utilisateurs invétérés de notre SGC favori TYPO3.

C’est la raison pour laquelle j’ai décidé aujourd’hui, de vous parler d’une astuce que j’ai appris il y a de cela quelques mois. Les logiciels libres c’est avant tout un partage de connaissances!

Flexform et itemsProcFunc

Récemment, j’ai dû développer une extension qui liste des enregistrements provenant du DAM (Digital Assets Management). Très simple me diriez-vous? C’est vrai lorsque nous sommes seul à gérer un site. La plupart du temps, les sites web et les intranets que nous développons pour nos clients sont beaucoup plus complexes que ça. Ils impliquent un grand nombre d’intervenants (utilisateurs back-end BE) et un grand nombre de rôles et de permissions (groupes back-end BE). Le choix des enregistrements dans le formulaire back-end créé grâce à un « flexform » dépend donc des permissions accordées à l’utilisateur BE courant et aux groupes auxquels ce dernier appartient.

Supposons par exemple que notre utilisateur BE appartienne à un groupe BE qui a pour « filemount » un dossier bien précis. Il ne faudrait pas dans ce cas, lui afficher des enregistrements du DAM qui ne sont pas inclus dans ce dossier.

Exemple :

Un champ de type select dans un flexform

Un champ de type select dans un flexform

 

<config>
  <type>select</type>
  <foreign_table>table</foreign_table>
  <foreign_table_where>
      AND table.champ_1 = x  AND table.champ_2 = y
      AND table.deleted = 0 AND table.hidden = 0
      ORDER BY table.champ_3 ASC
  </foreign_table_where>
</config>

Dans un flexform, nous pouvons utiliser un « select » avec un « foreign_table » et faire des requêtes simples avec « foreign_table_where » comme dans l’exemple ci-haut. Par contre, la tâche devient plus ardue lorsqu’on arrive au point où il faut jouer dans plusieurs tables de la base de données et chercher dans des relations stockées dans un champ grâce à des indentifiants séparés par des virgules.  Heureusement que TYPO3 est assez flexible pour nous permettre de tout configurer selon nos besoins. Dans le « flexform » nous pouvons utiliser « itemsProcFunc », qui nous permet d’aller chercher les items de notre « select » dans une userfunc.

Dans la classe user_maclass, il suffit d’avoir une fonction addElements qui nous permettra de faire les requêtes les plus complexes possibles. Cette fonction peut recevoir deux variables par référence : &$config et &$ref. La première contient toute la configuration du champ du flexform en question. On pourra alors accéder à la valeur du paramètre « exemple » dans $config['config']['exemple']. Nous pouvons aussi modifier les valeurs dynamiquement, seulement en les attribuant à la variable : $config['items'] = array_merge($config['items'],$optionList);.

Flexform :

 <config>
  <type>select</type>
  <itemsProcFunc>user_maclass->addElement</itemsProcFunc>
  <exemple>valeur</exemple>
</config>

class PHP :

 class user_maclass {        
   function addElement(&$config) {
      $optionList = $this->getList($config);
      if(is_array($optionList)){	    
         $config['items'] = array_merge($config['items'],$optionList);
      }	    
   }
}

Attention – la class class.user_maclass.php doit être incluse par le fichier ext_tables.php de la façon suivante :

include_once(t3lib_extMgm::extPath($_EXTKEY).'class.user_maclass.php');

Pour accéder aux données de l’utilisateur BE courant, nous avons la variable globale $BE_USER.

Exemple :

global $BE_USER;

if(!$BE_USER->isAdmin()){        
   //Récuperer les usergroup de l'utilisateur actuel    
   $ug = $BE_USER->user['usergroup'];    
   $arrug = explode(',',$ug);
}

On pourra toujours affirmer que TYPO3 est difficile à apprendre, du moins, pour les développeurs et non pas pour l’utilisateur final. Mais personne ne peut nier la force et la flexibilité de ce SGC.

Erreur de BOM (Byte Order Mark).

Yannick Voyer | Développement | Mardi, 14 juin 2011

       Ça vous dit quelque chose?

Dernièrement, j’ai tenté de mettre du code en production. C’est alors que ces caractères plutôt étranges sont apparus dans le haut de ma page. J’ai d’abord pensé que c’était un problème d’encodage. Je me suis donc mis à la recherche d’un saut de ligne ou d’un autre caractère qui pouvait être rendu avant le doctype. Il m’a fallu bien peu de temps pour me rendre compte que ces recherches ne règleraient en rien mon problème. J’ai donc regardé l’encodage des fichiers sur le serveur afin de les comparer avec l’encodage de la page dans Firefox. Mon constat : les deux étaient identiques, soit UTF-8.

 

J’ai alors eu l’idée d’utiliser le « valideur W3C»  afin de vérifier s’il n’y avait pas d’autres problèmes sur la page en question. À ma grande surprise, cette note est apparue:

Byte-Order Mark found in UTF-8 File

Le Byte-Order Mark permet aux programmes de comprendre que le texte est en UTF-8, UTF-16 ou UTF-32. Le IdéeBOM est un espace insécable de largeur nulle zero-width no-break space. Certains encodages tel que UTF-16 ont besoin des BOM pour bien fonctionner. Pour ce qui est de UTF-8, il n’est pas nécessaire et est plutôt mal supporté par les IDE. Par contre, certains programmes peuvent l’ajouter pour diverses raisons. Puisque les BOM ne sont pas visibles, nous sommes incapables de les remplacer avec un « search/replace ».

On peut corriger ce problème en utilisant un éditeur qui permet d’enregistrer un fichier dans un encodage sans BOM. En faisant quelques recherches sur le net, j’ai trouvé que Notepad++ nous offre cette possibilité. Dans l’éditeur, cliquez sur l’option UTF-8 without BOM dans le menu Encoding. Il ne vous restera qu’à sauvegarder votre fichier pour que le caractère ne s’affiche plus sur la page.

Voilà donc une bonne raison pour laquelle il vaut mieux utiliser des éditeurs standards pour tous les développeurs afin qu’aucun problème causé par une personne ne surgisse et bloque tous les autres développeurs.

Fin du T3CON11 San-Francisco

pboivin | CMS/SGC,Événements,T3CON | Lundi, 13 juin 2011

Le T3CON 2012 en Amérique du Nord aura lieu chez nous, dans la ville de Québec. Cette nouvelle a été présentée à la fin des trois jours de conférence qui ont eu lieu au Fort Mason de San-Francisco. C’est notre collègue Patrick qui a fait cette annonce et les gens présents dans la salle étaient très enthousiasmés de l’apprendre. Plusieurs rumeurs circulaient déjà depuis notre arrivée à San-Francisco et dès le départ, la majorité des gens espérait que ce soit vrai.

La « délégation » Infoglobe, constituée de six membres de l’équipe Web, a pu assister à plusieurs conférences très intéressantes telles que le développement avec FLOW3, l’utilisation de Varnish avec TYPO3 et le nouvel éditeur riche de TYPO3 5 Aloha Editor.

Pour ma part, les conférences que j’ai davantage appréciées fut celle portant sur la productivité avec Git et Gerrit ainsi que celle sur l’état actuel de TYPO3 Phoenix (version 5 de TYPO3). TYPO3 5 est déjà disponible pour le développement et cette conférence m’a permis de réaliser à quel point ce CMS est performant. Cependant,  il n’est pas encore assez stable mais il est tout de même expérimenté par les plus braves.

En ce qui concerne les activités hors conférences, le taux de participation fut incroyablement élevé. Il y a d’abord eu le match de baseball des Giants contre les Red de Cincinnati. Ensuite, une soirée sociale (« social event »)  a été organisée dans un restaurant du Chinatown. Finalement, certaines personnes tels que les membres d’Infoglobe ont été invités à un party privé dans les locaux d’Infield Design, les organisateurs du T3CON11 San-Francisco. Infield Design est une petite entreprise spécialisée dans le design et l’intégration de site Web (TYPO3 et Magento).

Nous avons tous pris quelques notes concernant l’organisation de ces activités car ce sera à notre tour, avec la participation de Qc média et d’autres partenaires, d’organiser cet événement l’année prochaine. À suivre…

T3CON11SF jour 2 : « Continuous Delivery » par Jez Humble

Mehdi Guermazi | T3CON,Web | Lundi, 13 juin 2011

Après une première journée très réussie au T3CON11SF, nous sommes passés aux choses sérieuses. Aujourd’hui, beaucoup de gens ont rejoint la conférence. C’est impressionnant de voir autant de personnes intéressées par le SGC TYPO3 et qui prennent la peine de faire un long voyage pour approfondir leurs connaissances et contribuer à la promotion de ce produit.

Jez Humble et Mehdi Guermazi au T3CON11SF

Lors du 2e matin au T3CON, nous commençons la journée avec la présentation de Jez Humble, qui nous parle de la méthode Agile et des processus de mises a jour des développements logiciel. Jez est l’auteur du livre « Continuous Delivery » (plus d’information sur http://continuousdelivery.com/).

L’idée principale de la présentation repose sur l’importance d’augmenter le nombre de mises à jour et de réduire au maximum le nombre de fonctionnalités ajoutées. Selon lui, il ne faut surtout pas développer de fonctionnalités qui ne seront pas utilisées. Lorsqu’on augmente le nombre de mises à jour, on reçoit plus de « feed-back » des clients, ce qui assure une meilleure orientation pour les futures améliorations du logiciel. Dans le même ordre d’idée, Jez a recommandé d’éviter les branches dans un logiciel de gestion de version décentralisée dans le cas ou les « merge » ne sont pas fréquents.

Pour conclure, notre présentateur nous a rappelé que le plus important, dans le processus de développement d’applications, c’est toujours les personnes impliquées. Il faut donc fréquemment organiser des réunions de suivi pour tenir les participants au courant des étapes du projet.

C’est parti!

Patrick Gaumond | CMS/SGC,T3CON | Vendredi, 10 juin 2011

Première journée officielle, nouveauxFort Mason visages et amis de longue date sont présents.

 

 

Après une marche d’une quinzaine de minutes de l’hôtel, nous arrivons finalement à destination, au Fort Mason de San Francisco.


Nous arrivons tôt afin de donner un coup de main pour la préparation des salles et de la nourriture. Les gens d’Infield Design avaient demandé sur la liste interne des organisateurs, qui pouvait offrir de l’aide. C’est donc l’ensemble de notre délégation qui a participé à mettre ces choses en place. J’ai beau ne pas vouloir être paternaliste, c’est tout de même gratifiant de voir ses collègues collaborer autant.

J’ai pris en charge l’enregistrement et ça m’a permis de voir tous les participants de cette journée axée sur le framework FLOW3, ExtJS et Sencha. Vous comprendrez que nous ne sommes pas allés à la présentation de TYPO3, offerte spécialement pour les gens qui ne connaissent pas encore ce CMS.

Mon collègue Simon Ouellet, a écrit un billet pour notre blogue concernant la conférence sur FLOW3:  Ce texte donne des informations plus techniques sur ce que nous avons vu et appris au cours de la journée.

Conférence FLOW3On voit ici Karsten Dambekalns initier les participants à FLOW3, ce puissant framework PHP sur lequel sera basé la version 5.0 de TYPO3.

 

 

Lorsque je prétends qu’assister aux conférences c’est beaucoup plus que pour faire du tourisme ou que pour se sauver du bureau, c’est à des moments comme ceux-çi auquels je pense…

Patrick Gaumond

T3CON Jour 1 : Fluent Development with FLOW3

souellet | CMS/SGC | Vendredi, 10 juin 2011

Pour notre première journée à la conférence T3CON San Francisco, nous avions au programme une présentation sur le « framework »  FLOW3. Ce « framework » sera utilisé dans la version 5 de TYPO3 et la première version bêta est attendue pour juillet.

 
Bien que FLOW3 soit toujours en développement, la plupart de ses concepts de base fonctionnent très bien. La programmation orientée aspect ainsi que l’injection de dépendance, sont mises de l’avant dans le but de produire des modules simples, lisibles et rapides à développer.

Voici les principaux sujets de la conférence :

  • Programmation orientée aspect
  • « Packages »
  • Fluid
  • MVC
  • Doctrine
  • Mise à jour des tables
  • Scripts de validation
  • Sécurité

Ce que j’aime bien dans ce « framework », c’est la facilité à modifier les « Packages » existants, en utilisant la programmation orientée aspect.  Je crois bien que ce sera désormais la nouvelle manière de modifier une extension déjà en place. L’utilisation des « hooks » est révolue !

Il est à noter que la première version de FLOW3 ne supportera pas la traduction. Avec de la chance, tout sera implémenté dans la version 1.1.

Ce qui m’a davantage intéressé dans cette présentation, c’est que les deux conférenciers y ont présenté plusieurs exemples de concepts avancés. FLOW3 est, selon moi, un framework complet et simple à mettre en place. Dommage que la documentation ne soit pas encore à jour, car j’aimerais très prochainement l’expérimenter et le découvrir.

Mis à part de petites erreurs de parcours, cette conférence a été des plus intéressantes.

 

Simon Ouellet

T3CONSF11 : Avion et tourisme

Patrick Gaumond | T3CON | Jeudi, 09 juin 2011

Infoglobe à San FranciscoIl est plutôt rare de se retrouver à 4h30 du matin avec ses collègues, surtout si ce n’est pas pour finir la soirée mais pour la débuter. Les six « infoglobiens » étaient prêts, bien plus que le taxi qui nous a conduit à l’aéroport…

Le voyage s’est déroulé sans incident et c’est à 11h20, heure de San Francisco, que nous avons récupéré nos valises. Direction le Hilton Fisherman Wharf, très bien situé pour des touristes pédestres comme nous. Notre arrivée assez tôt nous aura permis de croiser de vieilles connaissances, Ron Hall (TemplaVoilà framework) et Jeff Segars du WEC (plusieurs extensions de qualité dans le TER). C’est aussi eux qui ont organisé les deux derniers T3CON de Dallas.

 

Le temps de prendre un premier repas santé (pas du tout), nous décidons d’aller faire un tour en bateau avec Ron et Jeff. Ce périple nous a conduit sous le Golden Gate, autour d’Alcatraz et nous avons pu voir, à partir de l’eau, le Fort Mason, là où la conférence débute ce jeudi.

 

On le dit souvent, chez Infoglobe on croit et on supporte le projet TYPO3. C’est pourquoi toute l’équipe se prépare ce matin à aller donner un coup de main à l’organisation de la conférence. Au programme, outre le bénévolat: une journée complète sur le tout nouveau « FLOW3 Framework » et des demi-journées sur HTML5 pour le mobile et la conception d’applications avec ExtJS.

Patrick Gaumond

Cinq des six d'Infoglobe

« Lunch and Learn », une technique efficace pour partager l’information

mrebai | Divers | Lundi, 06 juin 2011

Le partage d’information au sein d’une organisation est un sujet qui se discute dans la majorité des entreprises à travers le monde. Du moins, celles qui œuvrent dans les technologies de l’information. Certaines le font via les courriels tandis que d’autres utilisent un réseau social privé.

Mais comment rendre ce partage d’information efficace et stimulant?

La réalité est que plusieurs employés ne lisent pas les courriels qui mesurent 4 mètres de long (j’exagère à peine) ou encore ne cliquent pas sur les liens suggérés. D’autres par exemple, ne s’impliquent pas dans le réseau social interne ou n’y jette jamais le moindre petit coup d’œil.

Chez Infoglobe, notre directeur Web nous a proposée l’idée du « Lunch and Learn ». Un concept que tous ont apprécié et aussitôt adopté.

Le 4 mai dernier, j’ai fait la présentation du premier « Lunch and Learn » durant lequel j’ai abordé le sujet du langage « HTML 5 ».

Qu’est ce que le « Lunch and Learn » exactement?

C’est une technique très simple de partage d’information qui est répandue dans un grand nombre d’entreprises un peu partout dans le monde. À chaque semaine chez Infoglobe, une personne de l’entreprise se porte volontaire pour présenter un sujet sur lequel les autres employés possèdent moins de connaissances. Cette présentation est offerte durant l’heure du « lunch » et le sujet traité a un rapport direct ou indirect avec notre champ d’expertise. C’est dans une ambiance décontractée et amicale que le présentateur informe ses collègues. En passant du « geek » à  l’adjointe administrative, tout le monde est invité à venir parfaire leurs connaissances sur des sujets les touchant de près ou de loin. Il n’y a pas de place pour la gêne, tout le monde peut poser des questions.

Comment le thème est-il choisi?

Le thème du « Lunch and Learn » peut être proposé par un employé qui maîtrise un sujet mieux que les autres. Une présentation peut aussi être offerte suite à la participation d’un employé à une conférence, une formation, un congrès, etc.

J’ai donné le premier « Lunch and Learn », après avoir assisté à la conférence HTML5 au WAQ 2011. J’ai simplement présenté à mes collègues le même contenu que la conférence elle-même. Le «Lunch and Learn» dure environ 30 minutes. Étant donné cette limite de temps, j’ai du filtrer les informations pour ne présenter que les plus pertinentes.

Suite à ce premier essai, beaucoup d’autres présentations ont suivi.  Notamment au sujet de JQuery, Redmine, ou même sur des évènements comme le WebCamp.

Les employés absents peuvent-ils en profiter aussi ?

Tous les « Lunch and Learn » sont filmés afin de permettre aux employés absents et qui sont intéressés par le sujet de l’écouter ultérieurement. Nous pensons mettre certaines de ces présentations en ligne pour partager ces informations avec la communauté.

Je recommande à toutes les entreprises d’utiliser cette technique assez simple mais très efficace, afin de permettre à tous les membres de parfaire leurs connaissances ou de partager leur savoir.

Mohamed Rebai.

Le partage d’information au sein d’une organisation est un sujet qui se discute dans la majorité des entreprises à travers le monde. Du moins, celles qui œuvrent dans les technolo