Behat, un framework de tests unitaires pas comme les autres

J’ai récemment découvert Behat et comme je trouve le concept très intéressant, j’ai pensé que quelques informations intéresseraient peut-être nos lecteurs pendant mon initiation à cette nouvelle forme de tests unitaires.

Behat a été créé dans le cadre d’une méthode de développement agile « Behavior Driven Development », je vous recommande la lecture de l’article Wikipédia qui traite du BDD pour plus d’information car comme je ne connais bien le concept, je vais écrire des choses triviales à ce sujet.

L’idée de Behat, qui s’inspire de projets pour d’autres langages (comme Cucumber pour Ruby), est d’écrire des tests en langage naturel. Voici l’exemple de la documentation officielle de Behat (pardonnez le manque de coloration syntaxique, mais le langage n’est pas supporté dans le plugin WordPress) :

Feature: ls
  In order to see the directory structure
  As a UNIX user
  I need to be able to list the current directory's contents

  Scenario:
    Given I am in a directory "test"
      And I have a file named "foo"
      And I have a file named "bar"
     When I run "ls"
     Then I should get:
       """
       bar
       foo
       """

C’est en voyant cet exemple sur Twitter que j’ai découvert Behat, intrigué par cette façon de faire, assez éloignée de la façon de tester avec des outils de type xUnit.

Je vous propose de créer une petite classe PHP et de la tester rapidement pour découvrir Behat.

Read More

De la subtilité de générer du JSON en PHP

J’ai récemment été confronté à un bug dans une application JavaScript au boulot. J’ai mis un certain temps à comprendre car je ne connaissais pas la subtilité dont je vais vous parler. Ne vous attendez pas à des révélations fracassantes ni à des démissions en chaînes, il s’agit d’un tout petit point qui mérite l’attention des développeurs et qui relève autant de la logique et du bon sens que de la connaissance des langages incriminés !

J’utilise un script PHP pour récupérer des données en base de données qui sont ensuite formatées en JSON avant d’être transmises à l’application JavaScript (JS). Il s’agissait d’une collection de couleurs (avec des infos du genre identifiant, code de la couleur et nom de public de la couleur).

Tout fonctionnait bien jusqu’à très récemment (l’application JS permet de dessiner en pixel art) et j’ai donc cherché pourquoi une des fonctionnalités (l’importation d’une image et sa transformation en pixel) ne marchait plus. Après un bon moment de debugging dans le JS, j’ai fini par découvrir que c’était lorsque l’application bouclait sur la collection de couleurs que les problèmes survenaient:

for(var i = 0, acl = availableColors.length; i < acl; i++)

L’instruction « availableColors.length » renvoie  » undefined  » alors que availableColors me montre une collection d’objets JSON. Oui mais non, pas tout à fait. Comme me le fait remarquer un collègue, firebug indique un objet contenant les objets couleurs et non pas un tableau. Or, l’appel à « .length » ne fonctionne que sur les tableaux. C’est l’une des choses sur lesquelles il faut être attentif lorsqu’on travaille sur du JSON généré par PHP. Mais pourquoi diable ?

La réponse se trouvait dans la méthode PHP qui récupère les données dans une BDD : j’ai récemment modifié l’array PHP de sortie en le transformant en array associatif (ironiquement, pour corriger un bug. Merci l’absence de tests ahah). Ce même tableau transformé en JSON par « json_encode » lors de la transmission à la vue. Un petit tour sur la page de la documentation de json_encode m’a permis de réaliser que les array associatifs sont toujours transformés en objet JSON.

Il m’a suffit d’écrire une méthode qui se charge de générer le JSON qui sera envoyé au client.

     /**
      * Returns a JSON string ready to be used by the client
      *
      */
     public static function formatAvailableColorsForClient(array $availableColors)
     {
         return json_encode(array_values($availableColors));
     }

Pour info, la fonction array_values permet de réindexer un tableau.

Et voilà !

 

Comment Facebook gagne-t-il de l’argent ?

Il semblerait que Facebook s’intéresse de plus en plus à son image et tente de contredire les « on dit ». Des petites phrases que l’on croise partout nous le rappellent, comme sur la page d’accueil par exemple, où le « c’est gratuit, et ça le restera toujours » vient rassurer les gens qui ont, je suppose, reçu les même chaînes qu’à l’époque d’MSN : « Facebook va devenir payant si tu ne renvoies pas ce message à 72 milles personnes en faisant quatre fois le tour de toi même, que tu n’écris pas un mail à l’adresse envraijesuisunpiratemaisçaressembleàuneadressefacebook@fb-presquefrance.com », mail qui permettra de référencer ton adresse dans les listes de spam, voire carrément des « Facebook va devenir payant si tu n’envoies pas des sous à tel adresse en utilisant western union » (ben oui, pour maintenir un service gratuit, faut payer).

Et finalement, il semblerait que des gens s’interrogent : « Ok, on veut bien croire que Facebook restera gratuit si tu nous le dis, mais alors comment gagne-t-il de l’argent ? » Et là, il faut l’avouer, les réponses qu’on trouve sont rarement en faveur de l’entreprise, avec notamment la réponse la plus courante : « Facebook vend tes données personnelles aux entreprises. »

Read More

Adblock Plus 2.0 : « Autoriser les publicités non-intrusives »

Adblock plus est une extension bien connue pour Firefox (elle existe aussi sous Chrome) qui permet de bloquer les publicités des sites internet. Sous Firefox, contrairement à Chrome qui ne bloque que l’affichage au visiteur, les scripts qui correspondent à la publicité sont aussi désactivés, ce qui permet d’avoir une navigation plus rapide et fluide, plus sécurisée et plus respectueuse de la vie privée, empêchant les promoteurs de vous suivre à la trace. (pour ceux qui ne connaissent pas et souhaitent en savoir plus, je vous renvoie à cette vidéo de présentation ou directement au site officiel du projet (en français !).

Adblock Plus 2.0 est sorti il y a quelques jours, et c’est une grosse évolution (nous étions avant en 1.3.10). Et parmi les nouveautés, il y en a une qui fait un peu parler d’elle : « Autoriser les publicités non-intrusives » ou « Allowing acceptable ads », en anglais. Adblock plus était sensé nous débarrasser des publicités, et voilà qu’il se permet de décider pour nous lesquelles sont correctes et il laissera affichés, ou lesquelles il va bloquer. Et en plus, cette option (oui, fort heureusement, c’est une option) est cochée par défaut lors de la mise à jour, mise à jour qui est automatique si vous êtes sur une version supérieur à la 3 de Firefox. Il y a là en effet de quoi créer une petite controverse, Adblock plus concernant quand même un très grand nombre d’utilisateurs (13,5 millions d’après Mozilla, l’extension numéro 1)

Read More

Réflexions sur les protocoles de communication

Article complet initialement écrit pour mon blog, sous licence Creative Commons BY-SA 3.0

Réflexion sur les protocoles propriétaires et Libres

Voilà quelques temps que j’avais envie d’aborder la problématique de la (ma ?) communication sur Internet. Par communication je veux parler des protocoles. On peut en citer quelques-uns à titre d’exemple : ICQ, IRC, MSN, XMPP, etc. Vous connaissez sans doute MSN, peut-être moins les autres. Ces protocoles définissent tous un moyen de communiquer avec des personnes (contacts), c’est-à-dire la manière dont est envoyé les messages.

logo MSN

À une certaine époque, tous mes contacts étaient sur MSN. La question à la mode c’était « Tu peux me filer ton adresse MSN ? » (je vous parle d’une époque que les moins de 12 ans ne peuvent pas connaître). Au début j’étais plutôt réfractaire, je trouvais le programme lourd, pas pratique… puis surtout je n’avais pas vraiment besoin de communiquer via Internet : je trouvais que ça faisait gadget… Puis je m’y suis habitué, j’ai pris goût à cette communication numérique. Bref, tout allait pour le mieux dans le meilleur des mondes.
Un beau jour, j’ai reçu un mail : « Monsieur Bidochon est sur Facebook, rejoignez-le, retrouvez vos amis, et communiquez avec eux » (oui, le contenu n’était pas exactement le même, c’est un résumé). Ma première réaction a été « Mais j’ai déjà MSN pour discuter avec eux ! 😮 « . Et je n’avais pas tort, MSN me convenait parfaitement. Ceci dit, tout le monde n’a pas dû réagir comme moi vu que les mails d’invitation se sont multipliés. Et j’ai cédé. J’y ai jeté un coup d’oeil. Le temps a fait que je m’y suis habitué, tous les contacts que j’avais sur MSN se sont retrouvés sur Facebook, et je pouvais communiquer avec eux, comme avant.

Read More

Pourquoi je soutiens Firefox ?

Si vous traînez pas mal sur le web, vous n’êtes pas sans savoir que le navigateur de Google, Chrome, est en pleine expansion et grignote des parts de marché à droite à gauche. Au début, c’était surtout Internet Explorer, le navigateur de Microsoft, qui en faisait les frais. Mais avec leur version 9 et l’adoption de Seven, leur dernier système d’exploitation, par de plus en plus d’utilisateurs, il semble que la part de marché d’IE cesse de baisser, et pour la première fois serait même en train de croître. L’expansion de Chrome se fait donc au détriment du dernier navigateur principal présent sur le web : Firefox. Les deux autres navigateurs, Opera et Safari, restent pour l’instant très minoritaires, malgré une adoption de plus en plus importante sur les smartphones notamment.

Ladies browsers

Read More

Réserver son canal sur IRC

Hoy hoy,

Comme on a du le faire pour notre canal, je me suis dis que ça serait intéressant de le partager, tout simplement.

Commençons par une explication sur ce qu’est IRC, au cas où vous ne sauriez pas encore. Plutôt que de réécrire une énième définition d’IRC, j’ai piqué celle de Wikipédia.

Internet Relay Chat ou IRC, (en français, « discussion relayée par Internet »), est un protocole de communication textuelle sur Internet. Il sert à la communication instantanée principalement sous la forme de discussions en groupe par l’intermédiaire des canaux de discussion, mais peut aussi être utilisé pour de la communication de un à un. Il peut par ailleurs être utilisé pour faire du transfert de fichier.

Je vous invite à consulter cet article si les aspects techniques vous intéressent, il y a aussi quelques détails sur les commandes etc.

Pour utiliser IRC, vous devez utiliser un client. Certains réseaux IRC (la plupart en fait) sont accessibles depuis un webchat. Par exemple pour le réseau Freenode, l’adresse est http://webchat.freenode.net/.

Le client le plus connu pour Windows est mIRC, pour Mac OSX je conseille vivement X-Chat-Aqua et enfin on me dit qu’Empathy fonctionne plutôt bien sur Linux.

Revenons à nos moutons, ou plutôt à notre canal IRC. Nous nous sommes installés sur irc.freenode.net et avons choisi le canal #geexxx.

Comment réserver votre propre canal IRC ? C’est très simple, il suffit de suivre le guide et de taper quelques commandes !

Read More

Ouverture du blog des Geexxx

Bienvenue sur le blog des Geexxx !

Nous sommes un groupe d’étudiants / jeunes travailleurs dans le domaine de l’informatique et nous souhaitions disposer d’un espace de publication collaboratif pour laisser cours à nos instincts de geeks primaires.

Au programme : des articles techniques, des articles engagés (comprendre des trolls en puissance), un partage de nos trouvailles et de nos expériences. Et bien sûr des grosses conneries 😀 (sponsorisées par Vaz_Ar)

Nous espérons que vous apprécierez votre séjour par ici.

La bande de Geekxxx.

Canard
Flaburgan
Joseph
Marien
Taratatach
Vaz_Ar