Un ch’ti récap de l’AFUP Day 2023 à Lille
Si vous nous lisez régulièrement ici, vous le savez, nous ne ratons quasiment jamais une conférence AFUP. Ce printemps ne déroge pas à la règle, nous étions à Lille pour l’AFUP Day 2023 dans un lieu aux allures de château anglais dans lequel on enseignerait la magie. Et c’était presque ça, puisque nous avons assisté, entre autres, à une démonstration de code PHP exécuté directement dans le navigateur ! 🧙♂️ Voici donc un résumé des conférences qui nous ont marquées.
Section intitulée doctrine-objet-type-et-colonne-json-gregoire-pineauDoctrine, objet typé, et colonne JSON – Grégoire PINEAU
La journée de conférences a démarré avec une présentation de Grégoire dans laquelle il explique comment stocker des données JSON dans une base de données SQL tout en conservant du typage côté PHP.
Son but était de stocker en base de données un système de bloc CMS, sans avoir recours à de l’héritage Doctrine et les nombreux problèmes qui vont avec (nombreux JOIN, nombreuses colonnes, etc). Le tout en gardant une DX optimale et en facilitant la création de nouveaux blocs.
Grégoire a évoqué plusieurs solutions potentielles pour répondre à la problématique en expliquant pourquoi chacune de ces solutions n’était pas optimale. Il a fini par détailler la solution qu’il a retenue et que nous utilisons sur plusieurs projets : créer directement un type custom Doctrine, étendant le type natif json. Plusieurs pièges sont à éviter, comme par exemple faire comprendre à l’Unit Of Work de Doctrine qu’un objet a bien été modifié.
Mais une fois tout en place, l’ajout d’un nouveau type bloc ne nécessite d’ajouter que la classe PHP correspondante, et aucune autre configuration ni migration. Cerise sur le gâteau, Grégoire nous a parlé d’autres contextes où cette solution peut s’avérer utile (préférences de notifications d’un utilisateur, configuration d’un produit, données de souscription Stripe, etc).
Section intitulée tester-du-legacy-grace-a-l-approval-testing-charles-desneufTester du legacy grâce à l’Approval testing – Charles DESNEUF
Il arrive parfois que dans nos métiers nous soyons amenés à intervenir sur des projets legacy non couverts par des tests, quels qu’ils soient. Lorsque se pose la question de la modernisation du code, ou de sa réécriture, nous devons nous assurer de ne pas casser les fonctionnalités existantes même en l’absence de tests.
C’est là qu’intervient l’Approval Testing. Charles nous a donc présenté cette technique de test qui consiste à comparer une sortie de référence (souvent un fichier texte pouvant contenir du texte brut, du JSON ou autre) avec ce que produit notre application legacy. La démonstration en live reposait sur une application permettant de participer au tirage au sort organisé par un hôtel afin de faire gagner des lots aux vacanciers selon plusieurs critères (jour, heure de la journée, âge du participant, etc). Dans les cas où certaines fonctionnalités ne produisent pas ou pas assez de contenu en sortie, Charles nous a montré comment tester astucieusement le contenu des logs de notre application.
Couplé avec un outil donnant un retour visuel du code couvert dans un fichier, cette technique permet de garantir les comportements d’une application que l’on ne maîtrise pas (encore) et qu’il faut pourtant faire évoluer.
Bien sûr, ce n’est pas magique, le monitoring et toutes les autres techniques permettant de garantir la qualité d’une application sont à utiliser conjointement avec l’Approval Testing.
Section intitulée du-vrai-serverless-ou-comment-faire-tourner-php-dans-le-navigateur-pour-documenter-api-platform-antoine-bluchetDu vrai serverless ou comment faire tourner PHP dans le navigateur pour documenter API Platform – Antoine BLUCHET
Antoine a réussi à intriguer une très grande partie du public avec sa présentation qui nous promettait de faire tourner PHP dans un navigateur. Après un petit rappel des technologies web qui tournent (ou ont tourné, RIP Flash) dans nos navigateurs web, jusqu’à la plus récente d’entre elles : WebAssembly.
Concrètement, WebAssembly tourne dans une machine virtuelle isolée (sandboxed) dans un navigateur, et nous pouvons interagir avec ce code WASM (diminutif de WebAssembly) via une couche JavaScript nommée WASI (WebAssembly System Interface).
À l’aide de docker pour isoler et fixer les versions des dépendances nécessaires, Antoine nous a montré comment compiler le code source de PHP (écrit en C) à destination de la machine virtuelle WASM !
Une fois PHP compilé, le défi était de faire tourner Symfony, voire API Platform ! Et pourquoi pas avec une base de données ?!
C’est ce qu’Antoine a fait, avec une compilation de SQLite dédiée aux navigateurs, pour parvenir enfin à une démo finale dans laquelle il a fait tourner une application API Platform liée à une base de données dans son navigateur !
Nous avons trouvé la démonstration impressionnante, elle nous a donné des idées pour le futur, même si nous restons réaliste quant à la rareté de la mise en place d’une telle stack en production chez un client.
Section intitulée symfony-messenger-et-ses-messages-a-la-queuleuleu-et-s-il-etait-temps-de-grouper-allison-guilhemSymfony Messenger et ses Messages: à la queuleuleu…. Et s’il était temps de grouper? – Allison GUILHEM
Après un bref rappel de ce qu’est le composant Messenger et de son vocabulaire, Allison nous a présenté l’intérêt du batch processing avec ce composant, une feature disponible depuis Symfony 5.4. Une conférence très intéressante pour bien comprendre comment et quand utiliser le batch processing avec le composant Messenger. Nous avions déjà évoqué ce sujet sur le blog, dans un article écrit par Baptiste.
Section intitulée protegez-vous-des-attaques-de-la-chaine-logistique-grace-a-composer-kevin-dunglasProtégez-vous des attaques de la chaîne logistique grâce à Composer – Kévin DUNGLAS
A travers sa conférence, Kévin nous a présenté ce qu’était la chaîne logistique d’un projet informatique et comment la protéger.
La chaîne logistique, c’est l’ensemble des outils utilisés sur un projet, son code, des binaires, le hardware et les softwares, bref, tout ce qui permet à votre projet d’exister. Et chaque composant de cette chaîne a ses vulnérabilités ! Les dépendances du projet en sont un bon exemple, ou mieux : les dépendances transitives, c’est-à-dire les dépendances des dépendances, qui peuvent changer dans le temps.
Une des solutions : tout faire soi-même, du hardware au software. 🤓 C’est malheureusement assez cher et long, et nécessite pas mal de connaissances assez pointues. Mais afin de nous éviter cela, Kévin nous a présenté quelques types d’attaques afin que nous puissions mieux nous en protéger.
Le premier type d’attaque c’est le paquet malicieux. Il s’agit d’un paquet qui fait effectivement des trucs utiles, mais qui cache une attaque. La solution ici est de ne pas faire confiance à n’importe qui. Des études montrent qu’installer un simple paquet, c’est faire confiance à une quarantaine de personnes en moyenne, en PHP en tout cas ! (On vous laisse imaginer en JS :trollface:)
Le second type d’attaque s’intitule le typosquatting. Qui n’a jamais dérapé sur le T du clavier en voulant taper un Y ? C’est cette erreur humaine qu’a exploité l’auteur du paquet symfont/process
! La solution ici est donc de bien faire ses copiés-collés. (Ou de changer le layout de son clavier, vous n’écrivez pas en BEPO vous ?)
Le troisième type d’attaque présenté était la prise de contrôle d’un package existant, en y contribuant beaucoup et en récupérant les droits de commit par exemple. C’est ce qui est arrivé avec event-stream en js. D’ailleurs ici, la cible des attaquants étaient les développeurs qui installent ce paquet et non les utilisateurs finaux de l’application ! Ici, il n’y a malheureusement pas de solution magique.
Le dernier grand type dont nous a parlé Kévin était le ProtestWare, qui n’est pas le produit d’un attaquant extérieur au paquet, mais bien de son auteur ! Ces attaques sont motivées par des convictions politiques. Récemment, des attaques de ce type ont eu lieu suite à la guerre en Ukraine : un développeur a fait en sorte que, si l’IP de la personne qui télécharge le logiciel provenait de Russie ou de Biélorussie, alors son disque dur soit supprimé !
Mais il existe plein de types d’attaques sur la chaîne logistique, celles présentées ici n’en sont qu’une courte liste pour vous donner une idée.
Les plus gros risques sont encourus par les logiciels qui ne sont pas mis à jour. 85% des vulnérabilités sont révélées avec un patch déjà disponible. On peut aussi régulièrement monitorer l’état de nos dépendances : les commandes composer audit
ou npm audit
sont là pour ça. Des options sont disponibles dans Composer pour autoriser ou non des paquets (cf la discussion sur cette Pull Request de Kévin). Certains frameworks livrent leur code accompagné d’un composer.lock
afin d’avoir une liste de versions de paquet et de dépendances auxquelles nous pouvons faire confiance.
Sponsoriser un mainteneur est également une bonne solution : ce n’est pas juste éthique, c’est aussi une manière de s’assurer une promesse de sécurité et de confiance. D’ailleurs chez JoliCode, nous sponsorisons de nombreux projets, et nous vous invitons à le faire aussi à la hauteur de vos moyens :)
Section intitulée ou-sont-passees-les-femmes-de-l-histoire-de-la-tech-laura-durieuxOù sont passées les femmes de l’Histoire de la tech ? – Laura DURIEUX
Avec beaucoup d’humour, Laura nous a proposé de revenir sur les femmes ayant laissé une forte empreinte sur le monde de la tech. En effet, trop peu d’entre elles profitent de la réputation qu’elles méritent, bien qu’elles aient réalisé de véritables accomplissements techniques et qu’elles aient permis des avancées technologiques majeures. Ce talk a donc été d’une part l’occasion de leur rendre un hommage bien mérité, mais aussi de rappeler la légitimité des femmes dans le monde du développement, monde duquel elles sont souvent exclues. Laura a également incité les femmes à éviter de s’auto-exclure en se sous-estimant ou bien en n’osant pas se lancer, et les hommes à les encourager. Beaucoup d’humour, des découvertes sur l’histoire de notre métier et une incitation à davantage d’inclusivité, il s’agit d’un talk que nous avons fortement apprécié. Il s’agissait de plus du premier talk de Laura et il était très réussi, bravo Laura ! 👏
Section intitulée pour-conclurePour conclure
Cette édition de l’Afup Day à Lille était encore une fois une réussite, avec des talks variés et intéressants. Le lieu de la conférence, dans l’Université Catholique de Lille, offrait un cadre idéal et surprenant.
Le seul point négatif que nous retenons, c’est que la journée passe vite avec tous ces sujets présentés. Le PHPTour nous manque… 😇 #BringBackPHPTour
Commentaires et discussions
Nous étions à l’AFUP Day 2021 Online Rennes / Lille
Situation sanitaire oblige, nous avons assisté une fois de plus à une conférence en ligne. Mais l’AFUP avait prévu pas mal de petites choses pour rendre ce mode « à distance » plus convivial ! Retour sur une journée de conférences en ligne pas tout à fait comme les autres…
Lire la suite de l’article Nous étions à l’AFUP Day 2021 Online Rennes / Lille
Nos articles sur le même sujet
Ces clients ont profité de notre expertise
Nous avons développé une plateforme de site génériques autour de l’API Phraseanet. À l’aide de Silex de composants Symfony2, nous avons accompagné Alchemy dans la réalisation d’un site déclinable pour leurs clients. Le produit est intégralement configurable et supporte de nombreux systèmes d’authentification (Ldap, OAuth2, Doctrine ou anonyme).
En tant que joaillier 100 % numérique, l’équipe de Courbet Paris a souhaité se doter d’une plateforme eCommerce, capable d’offrir une expérience moderne qui revalorise l’acte d’achat de produits de joaillerie sur internet. JoliCode a accompagné leur équipe en développant une plateforme robuste, mais aussi évolutive, afin de répondre aux enjeux business…
Armadillo édite un moteur de base de données spécialisé dans la gestion de données multimédias et des métadonnées associées. Depuis de nombreuses années, cette plateforme est accessible par le biais d’un connecteur PDO pour PHP, dont nous avons facilité l’intégration en développant une librairie PSR-0 ainsi qu’un bundle Symfony. Notre mission a principalement…