16/11/2018 11 Minutes read

Retour sur la première journée du Forum PHP 2018

Les 25 et 26 octobre derniers a eu lieu l’édition 2018 du Forum PHP. Rendez-vous incontournable pour la communauté PHP, l’évènement organisé par l’AFUP (Association Française des Utilisateurs de PHP) a une nouvelle fois tenu toutes ses promesses ! Les équipes PHP d’ekino étaient bien sûr présentes sur place afin de profiter de conférences ainsi que de rencontres de qualité. (Re)vivez la première journée comme si vous y étiez !

Forum PHP Paris 2018

Le soleil est en train de se lever lorsque j’arrive devant l’entrée de l’hôtel Marriott Rive Gauche, lieu reconduit de l’édition précédente. La première conférence débutera dans plus d’une heure mais je peux déjà repérer une poignée de futurs spectateurs en train d’attendre devant l’entrée. Après avoir retiré mon badge sans encombres auprès de l’un des nombreux bénévoles de l’évènement, je découvre la salle principale. Une équipe de serveurs habillés aux couleurs de l’établissement s’y active, mettant en place un petit déjeuner assez varié. Une soixantaine de personnes, réparties en petits groupes, sont déjà agglutinées autour des tables. Sur les extérieurs de la salle sont installés les différents stands des sponsors de l’évènement. Au fur et à mesure de l’arrivée des spectateurs, je peux sentir les regards qui se cherchent ou bien qui se détournent vers les badges nominatifs que nous portons. Le cadre est posé.

Après quelques discussions diverses, mes collègues et moi nous rendons dans la salle de conférence principale “Katherine Johnson” afin d’assister à la keynote d’ouverture. C’est Geoffrey Bachelet en personne, le président actuel de l’AFUP qui se charge de l’exercice. Il remercie tout d’abord les bénévoles de l’association ayant aidé à organiser l’évènement ainsi que bien évidemment tous les spectateurs d’avoir fait le déplacement. Il nous présente ensuite les temps forts de cette édition : 2 conférences “Alien” sur des thèmes non PHP ainsi que 6 lightning talks prévus pour le soir même dont les sujets resteront secrets. Les nouveautés, elles, sont au nombre de 3 : une zone de relaxation composée de poufs et de canapés, le stand “Village de l’AFUP” où chaque antenne de l’association assurera une permanence durant l’évènement et enfin la présence de 3 coachs au sein de l’assemblée : Mathieu Napoli, Julien Pauli et Kévin Dunglas. Ces figures bien connues de notre communauté seront accessibles durant l’intégralité de l’événement pour discuter “Open Source”. J’apprends également que chaque conférencier présentera brièvement son sujet au début de chaque demi-journée : ce sera l’occasion pour eux d’essayer de convaincre les derniers spectateurs indécis !

Une fois de sérieux problèmes techniques empêchant la retransmission sur les 2 grands écrans résolus, les choses sérieuses commencent enfin ! Mathieu Napoli est venu pour parler de serverless en PHP, un sujet très intéressant. Le principe est d’exécuter son application entière en tant que service à la demande. Ce service est donc complètement stateless : il démarre au début de son exécution puis il est détruit dès que celle-ci est terminée. En y réfléchissant bien, ceci s’adapte parfaitement au PHP qui fonctionne déjà sous cette forme. Depuis les tout débuts d’Internet, l’infrastructure est gérée sous forme de ressources. Nous payons donc un serveur pour une capacité (de stockage, de puissance CPU et de mémoire) maximum disponible. La plupart du temps, cette solution n’est pas du tout optimisée avec la consommation réelle. C’est le cas par exemple lorsque une application subit des pics de trafic fortement marqués : durant les heures creuses la puissance et donc le coût du serveur n’est absolument pas justifié, de l’argent est jeté par les fenêtres ! Il y a une multitude d’arguments en faveur du serverless : une scalabilité facilitée, la réduction des coûts mais aussi un effort opérationnel réduit (plus besoin de savoir gérer un serveur Web par exemple). Ainsi, le développeur se concentre vraiment sur le bout de code à écrire, et non plus sur comment il sera exécuté. Il est important de noter que parmi les 3 gros fournisseurs de ce type de service (Amazon Web Services, Google Cloud Platform et Microsoft Azure), aucun ne supporte encore l’exécution de PHP nativement. Cependant, sur AWS il est possible de le faire via une Lambda en NodeJS. Cette solution a-t-elle un impact sur les performances ? Oui, mais il est minime (25 millisecondes) grâce au mécanisme de cold start et pour peu que les ressources allouées soient suffisantes. Tout n’est pas rose malgré tout puisque exécuter son application en serverless amène quelques inconvénients : système de fichiers en lecture seule, pas de cache APCu, pas de base de données, etc. J’en profite pour soulever un point : prendre en main la configuration d’un service tel qu’AWS est loin d’être un jeu d’enfant. Mathieu nous présente ensuite 3 cas d’utilisations concrets dont un microservice qui a vu sa facture d’infrastructure passer de 900 à 60 dollars par mois ! Enfin, il conclut en nous affirmant que les technologies serverless sont stables et matures mais que c’est l’écosystème qui ne l’est pas. Si vous souhaitez tenter l’expérience du serverless en PHP, je vous recommande de jeter un oeil à sa librairie open source Bref.

À cause du retard pris par la première conférence, la suivante commence immédiatement. Et son titre est plutôt provocateur : “Vous n’avez pas besoin de ça !”. Charles Desneuf, l’orateur, nous présente d’abord le culte du cargo qui peut se résumer en un question simple : “ne sommes-nous pas parfois conduits à appliquer des méthodes par mimétisme, sans réelle réflexion sur le bien-fondé de nos démarches ?”. Nous n’avons en effet pas besoin d’utiliser les mêmes techniques et outils que les “géants du Web”, concentrons-nous plutôt sur les solutions que nous apportons à nos utilisateurs ! Charles nous décrit ensuite les 3 types de complexité qui impactent nos projets :

  • La complexité essentielle : elle dépend du problème que l’on veut résoudre.
  • La complexité obligatoire : elle permet de mettre en œuvre notre solution.
  • La complexité accidentelle : elle n’est pas nécessaire.

C’est donc cette dernière qu’il faut essayer d’éviter. Chaque nouvelle ligne de code et chaque nouvel outil utilisé augmentant forcément cette complexité, la solution est évidente : faisons simple ! Attention cependant : simple ne veut pas dire facile, la facilité dépendant majoritairement de l’expérience du développeur. Il nous rappelle également les avantages de la simplicité : le projet sort plus vite, les retours des utilisateurs finaux sont plus rapides, le projet est plus facile à modifier et surtout il a bien moins de chance d’échouer. Charles insiste sur le fait qu’il faut toujours penser au contexte de l’application que l’on développe. Il faut peser les pour et les contre et le plus souvent se tourner vers des solutions intermédiaires (entre celles vraiment trop simples pour résoudre le problème et celles trop excessives). Il conclut donc en modérant ses propos initiaux : “Vous n’avez (peut-être) pas besoin de ça (maintenant) !”.

Je me rends ensuite dans la deuxième salle de l’évènement, la plus modeste “Grace Hopper”. Cette dernière est très bien remplie malgré une autre conférence au même moment sur GraphQL. J’assiste pour ma part à celle de Mikaël Paris, contributeur du projet POMM. Il est venu nous présenter ce framework d’accès à la base de données PostgreSQL. POMM est une alternative aux ORMs traditionnels à prendre au sérieux car l’outil amène de nombreux avantages. Il permet notamment de reprendre du plaisir en réécrivant du vrai SQL mais surtout de profiter entièrement de la puissance du SGBD grâce à l’utilisation directe de l’extension pour PostgreSQL de PHP. Là où un ORM est toujours obligé de se limiter par rapport au SGBD supporté proposant le moins de fonctionnalités (principe du plus petit dénominateur commun), POMM est pensé et construit autour d’un seul, ce qui le rend nettement plus performant et complet. Il devient notamment possible d’utiliser l’un des nombreux types natifs de PostgreSQL (hstore, geometric, range, etc.) directement en PHP. POMM est divisé en 3 grands blocs (Foundation, Cli et Model Manager) qui répondent chacun à un besoin spécifique. Attention cependant, si vous êtes habitué à utiliser un ORM comme Doctrine, le passage à ce nouvel outil ne se fera pas sans une phase d’adaptation que Mikaël estime à quelques semaines. L’écosystème de POMM est plutôt bon puisque ce dernier supporte toutes les versions de Symfony ainsi que les fonctionnalités basiques d’API Platform par exemple.

J’assiste en suivant à la conférence de Baptiste Langlade dont le titre a attiré mon attention : “Le temps : la dépendance oubliée”. Le problème soulevé est qu’au sein de nos applications, nous ne traitons jamais les objets DateTime comme de réelles dépendances. Par exemple, en utilisant un new DateTime(‘now’) au lieu d’injecter un objet renvoyant une valeur déterminée, nous cachons la dépendance et nous pouvons ainsi passer à côté de problèmes sur certains cas particuliers (le fameux 29 février). La solution proposée par Baptiste est d’implémenter le pattern de l’horloge. Il consiste à utiliser une classe ayant des méthodes renvoyant des DateTimeImmutable . Une instance de cette classe devient une dépendance clairement exprimée. Son autre gros avantage est la possibilité de rejouer l’état d’une application à un moment particulier, que ce soit dans le passé ou dans le futur. Pour avoir personnellement déjà fait face à ce problème, je recommande fortement l’emploi de la technique proposée. Si vous souhaitez gagner du temps sur son implémentation, vous pouvez utiliser la librairie open source TimeContinuum proposée par l’orateur.

La pause du midi est l’occasion de faire un tour sur les stands des sponsors afin de collecter quelques goodies et de participer à divers concours. À gagner : un Faucon Millenium en Lego, une trottinette électrique et un programme de formation pour la certification Symfony. Côté nourriture, mieux vaut être rapide car les mets proposés sont de qualité et disparaissent à vue d’oeil. En se baladant dans cette grande salle, il devient également possible d’associer certains pseudos GitHub ou avatars à de vrais êtres humains !

Pour la reprise, c’est au tour de Titouan Galopin, qui a accepté de remplacer Anthony Ferrara au dernier moment, de prendre la parole au sujet des nouveautés du framework Symfony 4. La substitution n’a été annoncée que le matin même et en m’installant, j’entends des rumeurs provenant de l’audience. Titouan viendrait juste de finir son support dans l’urgence pendant la pause repas. Sa première question à l’assemblée est simple : “Qui parmi-vous n’a jamais utilisé Symfony ?” : seulement quelques mains se lèvent. Symfony 4 étant sorti depuis bientôt un an, le contenu n’est pas vraiment nouveau et bien moins excitant que le sujet initial prévu sur les microservices. Cependant, il faut reconnaître que la passion ainsi que l’enthousiasme dégagés par l’orateur arrivent sans soucis à maintenir l’attention du public. Il débute son discours en nous rappelant l’objectif principal de Symfony 4 : s’adapter au développement moderne. Plusieurs choses ont été faites dans ce sens. Tout d’abord, la création de Symfony Flex qui automatise certaines tâches de configuration mais qui permet surtout de n’inclure que les dépendances dont le projet a vraiment besoin. Plus besoin d’utiliser le framework en mode “full stack” ! Ensuite, il nous présente le MakerBundle qui est tout simplement un outil qui génère du code adoptant les bonnes pratiques de la communauté. Titouan enchaîne sur la présentation de Webpack Encore, une librairie entièrement JavaScript qui permet d’intégrer Webpack de manière ultra simplifiée dans une application. Puis, il nous parle de l’intégration de Symfony au sein des infrastructures modernes, notamment sur des architectures serverless qui ne proposent que des systèmes de fichiers en lecture seule. C’est pour cela que le framework fait désormais la distinction entre 2 types de caches : le cache système qui peut être généré à l’avance et qui n’évolue pas lors de l’utilisation de l’application et le cache applicatif qui lui, au contraire, évolue, et qui a donc besoin d’être synchronisé sur toutes les instances frontales. Enfin, il conclut sur le composant qui a le plus évolué dans Symfony 4 : le Dependency Injection. Grâce à l’auto discovery, l’autowiring et l’autoconfiguration, la Developer eXperience ainsi que les performances ont pu être grandement améliorées.

La conférence suivante a de nouveau pour trame Symfony. Vladyslav Riabchenko nous présente les fameux 5 principes SOLID à travers le code du framework. Il débute en rappelant succinctement les concepts de composants et de bundles, puis rentre dans le vif du sujet. À travers des extraits de code, pas toujours les plus clairs et les plus judicieusement choisis selon moi, il passe en revue les 5 principes un à un. Vladyslav a un accent prononcé et il a honnêtement du mal à capter l’attention du public. Peut-être aurait-il dû faire cette conférence en anglais ? Le contenu me semble légèrement décousu mais reste néanmoins très intéressant d’un point de vue technique car le fonctionnement interne de Symfony y est abordé. Au menu : l’ AuthorizationChecker, les KernelEvents, la VoterInterface, la RouterInterface, etc. Je pense sincèrement que l’orateur est très qualifié pour parler du sujet mais qu’il n’a peut-être pas trouvé la meilleure façon de l’aborder.

Je ne le sais pas encore mais la conférence qui suit s’avérera être le point culminant de la journée pour moi. Xavier Leune est venu pour parler de sécurité. La salle est bondée, certains spectateurs sont même contraints de rester debout au fond. Il faut croire que le sujet a attiré plus de personnes que prévu ! Xavier commence par nous affirmer, non sans un air de provocation, que “Nous (collectivement) sommes nuls en sécurité”. Puisque les paroles suffisent rarement à convaincre, il nous le démontre à travers une série de scénarios. Le format interactif couplé à un sujet très technique captivent l’audience : on entendrait une mouche voler. Seuls viennent interrompre le silence les applaudissements des spectateurs lorsqu’il réussit à percer de manières totalement inattendues les contrôles de sécurité qu’il met en place lui-même au fur et à mesure sur son application de démonstration. L’utilisation du protocole Gopher, du site xip.io, de DNS Rebinding s’avère être des techniques d’attaques inconnues pour moi, et à la vue des réactions de la salle, pour la majorité du public. Il nous fait ensuite un retour sur la mise en place d’un système de bug bounty au sein de sa société. Selon lui, ce type de système est très efficace pour se prévenir de failles, mais il demande beaucoup de temps (pour traiter les rapports et corriger les failles) et bien évidemment de l’argent pour les récompenses. Xavier termine en nous rappelant que nous sommes développeurs et pas des pentesters : nous devons faire notre maximum pour protéger nos applications mais les attaquants auront toujours une longueur d’avance !

L’avant-dernière conférence de la journée a pour titre “Mentorat & parcours de reconversion : comment faciliter l’apprentissage ?”. Il s’agit de l’une des conférences “Alien”. Le sujet, de loin le moins technique de l’ensemble de l’évènement, est néanmoins intéressant. Anne-Laure de Boissieu (ancienne chef de projet devenue développeuse) et Éric Daspet (ancien développeur désormais CTO) nous font un retour d’expérience chargé d’émotions sur leur collaboration qui dure depuis 18 mois. En effet, depuis 1 an et demi, Éric est le mentor d’Anne-Laure. Ils nous présentent les 3 grandes phases qu’ils ont connu :

  • L’avant : Anne-Laure ne se plaît pas dans sa vie professionnelle et a toujours voulu être développeuse. Elle se lance dans la recherche de la bonne personne pour l’accompagner et grâce à son réseau, elle fait la connaissance d’Éric qui, à ce moment là, est disponible et a envie de prendre quelqu’un sous son aile.
  • La phase de collaboration professeur / élève : la motivation est au cœur de leur relation. Dans un premier temps Anne-Laure continue de travailler. Elle revoit donc les bases de la programmation avec Éric entre midi et 2. Elle donne vraiment du sien. Puis, elle quitte son emploi et se lance dans une formation courte. Éric prend alors le rôle d’un accompagnant qui est disponible pour répondre aux questions qu’elle n’a pas le temps d’aborder en cours.
  • Depuis qu’Anne-Laure a un travail : au quotidien, elle est désormais entourée de ses collègues. Sa relation avec son mentor est donc devenue celle de 2 professionnels.

Éric termine la conférence sur une question très intéressante adressée à l’audience : “Et vous ? Que faites-vous pour rendre à la communauté ?”. N’oublions pas en effet que les jeunes qui sont formés aujourd’hui sont nos collègues de demain !

Pour conclure cette première journée, 6 lightning talks nous sont proposés. L’exercice est difficile puisque le temps de parole est limité à seulement 5 minutes par sujet ! Pas le temps de s’attarder sur des détails !

C’est Michelle Sanver, membre de la CARE team Symfony, qui se lance la première dans ce “sprint” afin de nous parler de sa condition de femme au sein d’une communauté traditionnellement ultra masculine. En anglais, elle débute tout simplement par un “I am different”. Elle nous relate brièvement ses débuts difficiles à travers de très mauvaises expériences qu’elle a été contrainte de subir. Aujourd’hui, elle reconnaît que les choses s’améliorent grandement mais que nous devons continuer à diversifier la communauté en accueillant des personnes les plus différentes possibles afin d’élargir nos idées.

C’est ensuite au tour de Richard Hanna de monter sur scène. Il nous présente la solution qu’il a mis en place au sein d’une application de type “Back Office d’administration” afin de pouvoir la commander au clavier. Le but est d’éviter de nombreux clics et changements de pages pour effectuer certaines actions simples. Le rendu final ressemble très fortement à un autocomplete de moteur de recherche : lorsque l’utilisateur commence une saisie, des liens en rapport avec les caractères saisis lui sont suggérés. Le système se base sur le routing Symfony et un resolver d’entités Doctrine. De mon point de vue, la solution proposée est efficace, ce qui fait d’elle un bon complément au menu traditionnel.

Puis, Thomas Harrand nous parles de cyclotourisme. À travers de nombreuses photos, il nous raconte le périple qu’il a effectué dans notre beau pays l’été dernier. Les conseils qu’il divulgue seront sans aucun doute précieux aux futurs cyclistes présents dans la salle. J’essaie de percer le secret de cette métaphore géante mais les minutes passent et le twist attendu n’arrivera finalement jamais. Il s’agissait bien d’une conférence sur le cyclotourisme !

C’est ensuite Frédéric Bouchery qui prend la parole afin de nous présenter la méthode du Troll. Il propose à l’audience un exercice amusant afin de pimenter les prochaines réunions : désigner un “troll” parmi les participants, puis le noter à la fin en fonction de son niveau : mauvaise note si ça se voyait trop, bonne note si on en vient à se demander s’il est vraiment en train de “troller” ou pas. Un “troll” contenant toujours une part de vérité, l’objectif sous-jacent est évidemment de provoquer le débat. Attention cependant de ne pas en abuser !

Enfin, Frédéric Hardy nous fait un retour sur les réels impact de la RGPD “153 jours après” (la loi étant entrée en vigueur le 25 mai dernier). Il nous présente dans un premier temps certaines méthodes que des sites outre-Atlantique ont mis en place afin de respecter cette nouvelle contrainte (versions text only, bloquer les adresses IP européennes, versions dédiées aux pays européens). Il fait ensuite le bilan des plaintes effectives liées à la loi : elles sont en augmentation et il y en a notamment une commune contre les “géants du Web”. Il conclut par cette excellente phrase : “Traiter les données comme de la matière radioactive : si vous ne savez pas la ramasser, la stocker ou la traiter, ne le faites pas !”.

Il est environ 18h30 et les conférences sont terminées pour la journée. Le temps a filé à une vitesse folle et je suis vraiment heureux d’avoir pu en apprendre sur autant de sujets différents. Pas de doute, assister à une conférence nous fait grandir. Tous les participants sont invités à se rendre dans un bar proche de l’hôtel pour la soirée officielle de l’évènement. Et surprise, L’AFUP paie sa tournée !