Retour sur l'AFUP Day Lille 2019

Le 17 mai dernier, nous étions à la première édition de l’AFUP Day, le nouveau cycle de conférences de l’AFUP porté par ses antennes. Plus de 300 personnes toutes villes confondues ont répondu “présentes” à cet événement. En plus d’être parmi les sponsors nationaux de l’événement, deux de nos coopérateurs ont eu la chance d’être sélectionnés parmi les speakers de l’édition lilloise. Retour sur cette journée intense où PHP et son écosystème furent célébrés.

Composer et le fonctionnement de l'exécuteur étaient à l’ordre du jour

C’est ainsi que nous avons effectué une incursion dans le fonctionnement interne de PHP, accompagnés de Julien Pauli, contributeur régulier de l’exécuteur, qui nous a présenté en détails les quatre étapes essentielles de l’exécution de tout script PHP : analyse lexicale, compilation, optimisation à l’aide d’OPCache et, enfin, exécution. Il en a profité pour rappeler que PHP était un langage conçu avant tout pour le Web, et qu’il n’était donc pas optimisé pour l’exécution de scripts dans d’autres contextes — ce qui explique que la mémoire ne soit libérée qu’à la fin de l’exécution.

Gaël Cryspin, de son côté, a proposé un tour d’horizon de Composer, « cet ami que l’on connaît si peu ». Après avoir rappelé l’histoire de ce gestionnaire de dépendances et ses fonctionnalités de base (autoloading, scripts, implémentation des PSR 0 et 4), Gaël nous a montré quelques fonctionnalités avancées comme le authoritative class map, qui permettent d’optimiser les performances en production. Nous nous sommes également attardés sur les fichiers de Composer, composer.json et composer.lock. Le premier servant à définir les dépendances, construit par la commande composer require, tandis que le second permet de verrouiller les versions. Afin de détecter les changements, le fichier verrou contient également un hash MD5 correspondant à l’ensemble des paquets verrouillés. Enfin, Composer peut être étendu avec des plugins, comme Prestissimo ou Symfony Flex.

Des conférences orientées framework…

Symfony, le framework français, était bien représenté. Samuel Rozé nous a proposé de jouer un peu avec Twig, Messenger et Mercure en réalisant une application en temps réel. Nous utilisons ainsi le moteur de rendu Twig avec des fonctions écrites pour l’occasion afin de tirer profit de la norme ESI, puis nous mettons en place Mercure, le concentrateur créé par Kévin Dunglas permettant de rendre une page Web dynamique grâce aux Server-Sent Events du protocole HTTP2.

Kévin, de son côté, nous a proposé une démonstration de Panther, le nouveau composant de Symfony permettant de tester une application Web avec de vrais navigateurs. Après avoir créé un blog sans écrire une ligne de code grâce notamment au MakerBundle, Kévin s’est proposé d’écrire des tests pour assurer son bon fonctionnement. Dans Symfony, nous avons coutume d’écrire les tests unitaires avec PHPUnit et les tests fonctionnels avec BrowserKit, un script PHP permettant d’émuler un navigateur Web basique, mais qui ne gère pas JavaScript. Panther, quant à lui, permet de réaliser des tests de bout-en-bout. Presque intégralement compatible avec l’API de BrowserKit, il utilise un véritable navigateur (Chrome, Firefox, Edge…) et n’impose aucun prérequis, sinon d’avoir installé un ou plusieurs navigateurs dans le cadre d’une utilisation sur un environnement local, puisqu’il est livré avec les webdrivers nécessaires.

Enfin, Kevin Verschaeve nous a fait profiter d’un retour d’expérience d’une mission récente, durant laquelle il a migré l’application de son client, MorningCroissant, de Zend Framework 1 à Symfony 4. Après avoir mis en pause le développement du projet le temps de la migration, un nettoyage de la base de données et des fonctionnalités peu utiles a été réalisé pour éviter de perdre du temps dessus lors de la migration. Puis, les fonctionnalités ont été migrées, à commencer par la plus importante de toutes, celle de réservation. Enfin, l’équipe a écrit une batterie de tests afin d’assurer la non-régression de l’application. Le travail de migration, du début à la mise en production, a duré un peu plus d’un an. Dans ces conditions, une confiance entière doit être accordée par le client, ce qui a été le cas pour ce projet, cependant, la mise en pause des développements a créé un retard de cinq mois des développements initialement prévus. C’est peu comparé au temps de pause, mais cela reste un retard à combler.

Symfony n’est pas le seul framework généraliste à avoir été représenté, puisque nous avons eu également une présentation de Laravel Horizon avec Freek Van der Herten. Nous aimons recevoir des réponses rapides de nos applications, mais parfois, ces réponses nécessitent la réalisation de tâches complexes qui ne peuvent être réalisées dans un temps raisonnablement court. Il est donc nécessaire de déporter ces tâches afin de rendre la main le plus vite possible à l’utilisateur en lui précisant que sa tâche sera réalisée, mais qu’elle prendra du temps. À travers la démonstration, on constate qu’il est facile de brancher Laravel au système de queues de Redis. De plus, il est possible grâce à une ligne de configuration d’activer ou de désactiver le mode asynchrone, ou de régler le nombre d’essais en cas d’échec de la tâche. Afin de mieux comprendre dans quelles situations ce type de fonctionnalité peut être nécessaire, Freek propose l’exemple d’un système de type YouTube : à la réception d’une vidéo, cette dernière est envoyée dans une queue chargée de la convertir, puis dans une autre queue chargée de l’optimiser. Horizon fournit enfin toute une panoplie d’outils visuels permettant de gérer les queues sous Redis, comme voir en temps réel la charge des queues ou mettre en attente les tâches et les reprendre. Enfin, Horizon peut être branché à des drivers afin de l’intégrer à des systèmes de notification à l’instar les mails, les SMS, Slack et bien d’autres.

… d’autres sans framework

Si la plupart des applications de l’écosystème PHP sont réalisées à l’aide d’un framework, il peut paraître pertinent de se séparer du cadre rigide que proposent ces derniers. C’est le choix qu’a fait Rodrigue Villetard qui, au travers de son retour d’expérience, nous a expliqué les raisons qui peuvent pousser à ce choix audacieux, comme la tentation de faire du « bidouillage » lorsqu’un framework ne semble pas proposer de solution élégante — ou parce qu’on ne la connaît pas. Il pointe également la problématique de l’évolution rapide des frameworks, peu adaptée aux projets à faible vélocité. Travailler sans framework peut donc être un bon moyen de favoriser la stabilité plutôt que le confort. Développer from scratch ne signifie pas pour autant qu’il ne faut écrire du code sale, c’est pourquoi Rodrigue insiste sur l’usage des patrons de conception pour éviter l’écueil du code spaghetti. De plus, il faut résister à la tentation d’écrire un code à la manière d’un framework. Pour autant, lorsque le besoin s’en fait ressentir, il ne faut pas hésiter à utiliser des librairies externes. Typiquement, tous les composants de Symfony peuvent être utilisés sans le framework lui-même, et il serait dommage de s’en priver.

De l’intelligence artificielle

Si vous avez toujours rêvé d’avoir un animal de compagnie — disons un poisson rouge — mais que vous n’avez pas envie de vous en occuper, peut-être voudriez-vous le créer à votre image afin de le rendre aussi indépendant que possible, et aussi qu’il sache se nourrir seul ? C’est le défi que s’est lancé Grégoire Hébert. Durant sa conférence, il nous a montré comment il a créé son clone de Tamagotchi augmenté d’une intelligence artificielle afin qu’il sache s’occuper de lui-même. Il existe différents types d’IA, en fonction de leur perception de leur environnement et d’eux-même, de la reactive machine (réagit en fonction de scénarii) à la self aware (a une conscience propre). Grégoire s’est concentré la première, plus simple, à laquelle il a associé un algorithme d’apprentissage automatique supervisé. Ceci repose sur l’idée que l’on connaît l’information de départ et le résultat attendu, et qu’il faut déterminer ce qui permet la transformation entre les deux. L’ensemble (entrée → calcul → sortie) est appelée perceptron. Un exemple d’entrée peut être "j’ai faim", la sortie pouvant être "je mange". Nous ainsi découvert comment apprendre à notre Tamagotchi à réagir correctement à la sensation de faim, sans jamais lui donner explicitement l’information, grâce à des méthodes de calcul bien connues des experts en IA comme la descente de gradient ou le réseau de neurones.

Du e-commerce

La journée s'est conclue par la création d'un site de revente de jeux vidéo, que Maxime Huran a réalisé à l'aide de Sylius. Il est revenu sur les fondamentaux du framework e-commerce, de la création du projet à l’ajout de fixtures, en passant par la machine à états pour avoir un environnement de développement prêt au combat. Maxime en a profité pour nous montrer à quel point il est facile de personnaliser la génération des fixtures afin qu’ils correspondent davantage aux produits que l’on souhaite vendre. À cet effet, on notera qu’il est conseillé d’utiliser le paquet Composer sylius/fixture-bundle, plus adapté que les paquets habituels dans le cadre de Sylius. Puisque Sylius est conçu sur une architecture hexagonale, il y a une véritable séparation de ses composants et de son cœur. L’avantage pour nous, en dehors de l’extensibilité et la maintenabilité du framework, est notre capacité à ajouter notre code et étendre le fonctionnement original de Sylius. En effet, tout est prévu de façon à pouvoir se brancher sur les services et entités pour les étendre, et avoir nos propres entités, liées donc à nos besoins métiers. 

 

Durant cette journée, nous avons eu droit à des conférences sur des sujets très diversifiés et très intéressants. Du fonctionnement interne de PHP (très bas niveau) à Sylius (bien plus haut niveau), cet événement nous a offert un beau panorama de ce qu’il se fait aujourd’hui dans l’écosystème PHP, et même de mieux comprendre les fondations de celui-ci. À titre personnel, j’ai trouvé les retours d’expérience (migration de Zend à Symfony, développement sans framework) vraiment utiles, car elles permettent de se faire une première impression sur des sujets auxquels on ne pense pas au premier abord. La conférence sur l’intelligence artificielle est une bonne surprise, puisqu’elle touche à un sujet qui ne concerne habituellement pas les développeurs PHP et qui, pourtant, est aujourd’hui dans toutes les bouches. L'AFUP Day était organisée par une équipe bénévole chevronnée, qui a tout fait pour que cette journée se passe le mieux possible, et ça se voit. La mise en place d’une charte de bonne conduite a permis de donner les bases à toutes et à tous pour permettre de passer une bonne journée. Petite nouveauté de cette année, nous avons tous activement participé à réduire au maximum nos déchets : entre les trocs de goodies et l'aide de notre traiteur qui a maximisé l’usage de vaisselle réutilisable, nous n’avons utilisé qu’un unique sac à ordures — qui n’était pas plein. Défi réussi !