Loisirs : jeux-vidéos

il y a 2 semaines

Jusqu'à peu, lorsque je lisais "jeux-vidéos" dans la partie souvent nommée "divers" ou "loisirs" du CV d'un candidat, je comptabilisait inconsciemment cette précision comme un "malus". Pourtant, c'est totalement idiot puisque je suis moi-même un joueur (même si le temps me manque pour m'y consacrer en ce moment). Pour la précision, je joue principalement aux jeux de l'époque où j'étais adolescent (vive SEGA !) mais je m'intéresse aussi aux dernières sorties.

Alors pourquoi cette impression négative ? Les jeux-vidéos ne sont plus depuis des années destinées aux plus jeunes, bien au contraire de plus en plus de titres sont réservés à un public adulte. Il serait donc illogique de considérer que le fait de passer du temps avec une manette entre le main pour un adulte en ferait quelqu'un d'immature. De plus, quelle différence y a-t-il entre passer une soirée à regarder des épisodes de Stranger Things, le denier James Bond ou à jouer à Resident Evil 7 ?

Après réflexion, je me suis rendu compte que ce préjugé négatif venait du monde de l'entreprise et en particulier du recrutement. A jouer le rôle du recruteur devant être impartial pour ne pas prendre une mauvaise décision, on a tendance à analyser de manière froide les profils des candidats. Ainsi, on tente de les ranger dans des cases les postulants : "le geek", "le passionné", "le développeur à l'arrache", ... C'est regrettable mais c'est naturel, quand on voit défiler un certain nombre de CV, on ne peut pas recevoir et analyser en profondeur chaque candidat, on prend donc des raccourcis. La mention "jeux-vidéos" représente alors un +1 pour la case "geek".

Une autre explication peut être trouvée en s'intéressant au pedigree des chargés des RH, recruteurs, dirigeants ... qui sont souvent quarantenaires ou cinquantenaires. En particuliers les chefs d'entreprise qui sont les derniers décideurs dans le contexte d'une embauche. Contrairement à la génération des années 80 et plus, ils n'ont pas baigné durant leur enfance dans un monde où Mario, Sonic, Son Goku, Link, Ryu et tant d'autres occupaient leurs week-end. Ils ont donc souvent un avis négatif sur cet univers auquel ils sont étrangers.

Être un joueur ne devrait en aucun cas être vu de manière négative, pas plus que la mention "Féru de cinéma" ne l'est. Le recrutement et l'analyse de profils sont des exercices difficiles, en particulier quand on n'est pas issu du monde RH. Au fur et à mesure, j'essai de m'améliorer, de ne pas prendre tous les raccourcis et surtout de toujours considérer les personnes qui prennent la peine d'envoyer un CV (parfois même de rédiger une lettre de motivation !) en tant que telles et non en tant que simples "profils".

Bon je vous laisse, j'ai une partie de Silent Hill 2 à finir... laugh

Retour aux sources : de PHP à Java

il y a 3 mois

Cela fait maintenant 5 ans que je suis dévelopeur web PHP à Télémaque, une société basée à Sophia Antipolis qui édite des logiciels essentiellement pour ses besoins internes. Ce poste a été ma première véritable expérience professionnelle à la fin de me études. Au cours des deux premières années j'y ai appris énormément grâce à une philosophie de transversalité technique qui m'a donné l'opportunité d'être impliqué sur l'ensemble des étapes de vie des projets, de la conception à la maintenance en passant par les étapes de recettage et de mise en production. J'ai vécu cela comme un véritable laboratoire où j'ai pu mettre les mains dans de nombreuses technologies différentes ce qui m'a permis de gagner très vite en compétence.

Les trois années suivantes, j'ai occupé un poste de référant technique au sein de l'équipe "back office" de Télémaque. J'avais pour rôle d'encadrer les développements sur un plan technique au sein d'une petite équipe allant jusqu'à 5 personnes et très orientée back-end. J'ai également beaucoup appris durant cette période mais sur un plan différent.

Aujourd'hui, je ressens le besoin de me confronter à de nouveaux défis et de sortir de la fameuse "zone de confort". Parmi les différentes voies possibles pour la suite de ma carrière, j'ai hésité entre :

  • développer mon expertise web dans l'écosystème PHP ;
  • revenir dans le monde Java que j'ai quitté il y a 5 ans.

Une belle opportunité aidant, c'est la seconde voie que j'ai choisi d'emprunter smiley Toutefois, je compte conserver un pied bien encré dans le monde PHP qui me plaît autant qu'il me frustre parfois. J'écrirais d'ailleurs prochainement un article dédié à la comparaison des deux univers.

Me voilà donc, avec une grande excitation, revenu à Java smiley. Je reprends le train en marche avec 3 versions majeures de retard, une vision du développement logiciel bien différente qu'à la sortie d'études ainsi qu'un certain recul sur tout ça.

Voici donc mes objectifs sur ce domaine d'ici la fin de l'année 2017 :

Je mettrais cette liste à jour dans les semaines à venir, en espérant tenir les objectifs laugh.

PHP Tour 2017

il y a 5 mois

Le PHP Tour 2017 s'est tenu cette année à Nantes les 18 et 19 mai. C'est un événement majeur de la communauté PHP Française avec le PHP Forum qui lui a lieu chaque année à Paris.

Cette année, j'ai eu la chance d'y participer et j'en suis ravi ! Je ne peux que vous conseiller de participer à ces événements qui sont - outre le fait d'apprendre de nouvelles choses - l'occasion de se rapprocher de la crème des développeur PHP en France et de voir ce qui se passe ailleurs. L'herbe n'est pas toujours plus verte chez le voisin mais il faut bien reconnaître que si on parle aux conférenciers, on se rend souvent compte assez rapidement qu'ils sont épanouis dans leur entreprise et qu'ils aiment ce qu'ils font.

Personnellement, cela m'a permis de conforter ma vision de ce qu'est un "bon" développeur web back-end aujourd'hui (et qui utilise PHP laugh) mais aussi ce qu'est une "bonne" entreprise (pour un développeur). Dans ce lot des sociétés qui font participer leurs développeurs à ce type d'événement, joliCode s'est particulièrement démarqué de par le nombre de conférences qu'ils ont menés mais surtout leur qualité. Selon moi, c'est clairement un deal "gagnant gagnant" entre l'entreprise et le développeur. D'un côté, on cite plusieurs fois par jour le nom de la société en question, elle est valorisée par la qualité des sujets traités et l'expertise de ses collaborateurs et d'un autre, on voit des développeurs passionnés qui ont l'occasion d'aller en profondeur sur des sujets qui les intéressent avec un objectif de partage de connaissance qui mène à une satisfaction personnelle et professionnelle. Tout ça pourrait bien me donner envie dans les années à venir d'animer moi aussi quelques conférences...

C'était aussi l'occasion pour quelques sociétés comme Deezer de se créer des contacts parmi la crème des développeurs PHP en France mais si vous n'habitez pas à Paris, laissez tomber frown. Quoi qu'il en soit, c'est un excellente stratégie de recrutement qui va très certainement rapporter ses fruits pour un coût minime comparé à un chasseur de têtes associé à un processus de recrutement plus ou moins lourd.

Avec le recul, je pense que l'intérêt numéro 1 des conférences organisées par l'AFUP est de permettre l'interaction entre des individus qui font souvent exactement les mêmes choses (technos, outils, projets, ...) mais qui ne sont pas liés les uns aux autres dans la vie de tous les jours. Le contenu des conférences est bien entendu l'objectif lorsqu'on se déplace à un événement pareil mais c'est le contact avec les autres qui donne le plus de pep's en sortant de là !

Pour conclure ce petit post, je vous invite vraiment à vous rendre aux événements de l'AFUP, ce que je ferais le plus possible à partir de maintenant pour ma part.

ps : les enregistrements des conférences seront prochainement disponibles sur la chaîne Youtube de l'AFUP

Epic bug #1 : 0 compte double

il y a 7 mois

Ça faisait déjà un petit moment que je pensais à aborder les bugs mémorables que j'ai eu l'occasion de rencontrer depuis que je travaille en entreprise. Je ne sais pas trop quel nom pourrait leur correspondre le mieux, je tente "epic bug" mais sans grande conviction !

Quoi qu'il en soit, c'est l'occasion pour moi de revenir sur un problème marquant comme on en rencontre souvent quand on est développeur ou ops et qui sert de leçon une fois qu'on a fini par comprendre le pourquoi du comment wink. J'espère que le concept vous plaira, je pense continuer ce genre d'articles par la suite (ce ne sont pas les sujets qui vont manquer !).

Contexte :

Dans le cadre d'une application web permettant à des utilisateurs d'envoyer des SMS à leurs prospects, notre mission était le support de l'ensemble des caractères définis par l'encodage GSM 03.38. Sans rentrer dans les détails, c'est cet encodage qui est utilisé par nos téléphones la plupart du temps, notamment lorsque 1 SMS = 160 caractères. Ce qu'il faut savoir, c'est qu'un caractère est généralement encodé sur 7 bits mais peut aussi occuper 14 bits pour certain d'entre eux comme le symbole euro. Notre mission était donc de supporter le plus de caractères possibles dont ceux comptant double (14 bits).

Symptôme :

Plusieurs jours après la mise en production de ce dev, le commercial nous remonte un problème majeur : certains envois de SMS sont facturés double aux clients ! Branle-bas de combat dans l'équipe : on a un problème de facturation et c'est la pire chose qui peut arriver ! Après avoir vérifié l'ampleur du problème on finit heureusement par se rendre compte que le soucis ne touchait que quelques SMS. Ouf !

Recherche :

Viens maintenant le moment magique de la recherche de l'origine du problème et là... rien d'évident ! Le bout de code incriminé est forcément celui qui compte le nombre de caractères de 7 bits dans le contenu des SMS, voici à quoi cela ressemblait à peu près :

function count7bitCharacters(string $msg) : int
{
    $doubleCharacters = ['€', '^', '|', '~', '[', ']', '{', '}', '\\'];

    $numberOf7bitCharacters = 0;
    foreach (countChars($msg) as $char => $occurence) {
        if (in_array($char, $doubleCharacters)) {
            $numberOf7bitCharacters += $occurence * 2;
        } else {
            $numberOf7bitCharacters += $occurence;
        }
    }

    return $numberOf7bitCharacters;
}

/**
 * Retourne un tableau associatif avec en clé chaque
 * caractère présent dans $msg et en valeur le nombre
 * d'occurence de celui-ci.
 */
function countChars(string $msg) : array
{
    // ...
}

Après quelques tests, les résultats correspondent bien à nos attentes, le symbole euro est bien compté double contrairement à la lettre "e", etc... Cependant, après un bon moment à chercher le ou les caractère(s) comptant double (à tort), nous sommes arrivé à isoler 2 messages proches mais qui diffèrent au niveau du résultat lorsqu'on les passait à notre fonction count7bitCharacters() :

echo count7bitCharacters("Cher client, bénéficiez d'une super promotion dans tous vos magasins truc muche, -15€ sur tous nos articles !");
// Résultat attendu : 110
// Résultat obtenu : 110

echo count7bitCharacters("Cher client, bénéficiez d'une super promotion dans tous vos magasins truc muche, -10% sur tous nos articles !");
// Résultat attendu : 109
// Résultat obtenu : 110

(évidemment, tout est bien simplifié pour cet article, c'était bien plus fouillis en réalité laugh)

Résolution :

Ça y est on a trouvé le coupable, c'est le '%' ! Eh non ! C'est le zéro... Mais pourquoi ?

Regardons ce qui se passe quand c'est au tour du '0' d'être sélectionné par le foreach :

$doubleCharacters = ['€', '^', '|', '~', '[', ']', '{', '}', '\\'];

// ...

if (in_array(0, $doubleCharacters)) {
    $numberOf7bitCharacters += $occurence * 2;
} else {
    $numberOf7bitCharacters += $occurence;
}

Rien ne vous choque ? Moi non plus, cependant :

  • Une subtilité de la fonction in_array() qu'on connaît pourtant quasiment tous quand on a fait un peu de PHP joue les troubles fête. 
    Rappel de la signature de in_array() :
    bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
    Ah oui, il y a cette histoire de $strict...
  • Sachant maintenant que nos comparaisons d'égalité implicites via in_array() sont non strictes, détaillons encore le code :
    if (0 == '€' || 0 == '^' || 0 == '|' /* etc... */)) {
        $numberOf7bitCharacters += $occurence * 2;
    } else {
        $numberOf7bitCharacters += $occurence;
    }
    

    Vous l'avez senti venir ? Si ce n'est pas le cas, voici l'explication :

    var_dump(0 == "N'importe quelle chaine de caractères non numérique");
    
    // bool(true)

    Une chaîne de caractères comparée de manière non stricte avec un entier entraîne le transtypage de la string en int ! En l'absence d'une valeur numérique interprétable, la chaîne vaudra 0 (int).

  • Précision : c'est bien 0 (int) qui est passé à in_array() et pas '0' (string), mais pourquoi ? Parce que ce caractère est extrait d'une clé du tableau retourné par countChars(). 
    Rappel :
    var_dump(['0' => 'foo']);
    
    // array(1) {
    //  [0] =>
    //  string(4) "toto"
    // }

    On perd le typage d'origine de la clé au profit d'un entier.

Conclusion :

Par chance, il n'y a pas eu de conséquence à ce problème puisqu'il était spécifique au caractère '0' qui est relativement peu utilisé, on s'en est bien sorti laugh ! Quoi qu'il en soit, c'est un bel exemple qui montre à quel point des tests unitaires sur un jeu de données complet peuvent éviter bien des soucis...

Conférences de l'AFUP : deux retours d'expérience

il y a 8 mois

A quelques mois du PHP Tour 2017 qui aura lieu à Nantes les 18 et 19 mai 2017, voici un retour sur le contenu des différentes conférences qui se sont tenues en 2016 grâce à l'AFUP (dont je suis membre depuis peu) qui fait un travail excellent au côté d'intervenants de qualité.

N'ayant pas eu la possibilité d'assister à ces événements en 2016, je me suis rattrapé sur la chaîne Youtube de l'AFUP : https://www.youtube.com/user/afupPHP. Si vous n'avez pas encore regardé ces conférences, cette série d'article est faite pour vous ! Je vais passer rapidement sur les conférences qui m'ont le plus marqué.

Ce premier post sur les conférences de l'AFUP est l'occasion de mettre en avant les retours d'expériences qui, au delà des considérations techniques, sont des mines d'or pour éviter de mauvais choix lorsque certaines situations se présentent. En particulier, je m'intéresse aux retours d'expériences consacrés à la mise en place de devops, de l'intégration continue et du déploiement continue car ce sont des sujets sur la table actuellement dans la société dans laquelle je travaille.

Deux conférences se sont particulièrement démarquées selon moi :

Industrialisation et automatisation chez M6Web Lille - Pierre Marichez, Renaud Bougre

C'est pour moi la meilleure conférence de l'AFUP en 2016. Les 2 intervenants expliquent comment en l'espace d'une année ils ont réussi à passer d'un environnement hétérogène à une solution quasi unique pour leur environnement de travail ainsi que leur procédure de déploiement. Au programme : jenkins, docker, gitlab, ...

Bref, à voir absolument !

La place de PHP dans l'architecture technique de Radio France

Cela aurait pu s'appeler "on vous dit tout sur notre SI !". Radio France a des besoins hétérogènes tout en nécessitant d'absorber des pics de trafic. Cette conférence présente la réponse apportée à ces problématiques en terme d'architecture technique (architecture orientée microservices, technologies, ...).

Très intéressant, particulièrement si on s'intéresse aux microservices sans forcément déjà en avoir conçu.