The 3rd edition of our multi-destinations conference, organized by our local PHP users groups and led by AFUP, the French PHP users group.

Friday 28th May 2021

09:20 Réconcilier le Back et le Front dans un projet Symfony
Talk by Quentin Machard in Rennes (20 minutes)

Qu'est-ce que le pattern Atomic Design et comment l'adapter sur un projet Symfony avec Twig ? Ce talk a pour but de "réconcilier" le Front et le Back au travers du pattern Atomic Design. Sommaire : Présentation du pattern Atomic Design En quoi est-il une solution aux "conflits" Front et Back dans un contexte PHP / Symfony Comment l'appliquer efficacement sur Symfony, avec les outils en notre possession

09:25 Un service, kézako ?
Talk by Romaric Drigon in Lille (40 minutes)

Dans de nombreux frameworks PHP la notion de service s'est imposée. Nous avons tous dû déclarer de telles classes, et pourtant, la notion n'est pas évidente. Au jour le jour, on se demande ce que l'on met dedans, comment structure, comment diviser. Souvent, on cherche à les nommer et on ne trouve pas. Et parfois, on peste qu'ils sont difficiles à tester... Mais au fond, c'est quoi un service ? Est-ce qu'on ne bourrerait pas trop de choses dans cette notion ? Ou au contraire, est-ce qu'on n'oublierait pas l'essentiel ? Ensemble, nous allons chercher et découvrir des réponses concrètes. Parfois via des patterns à redécouvrir, parfois via des best practices, et avec beaucoup de retours d'expériences bonnes ou mauvaises.

09:45 Tests fonctionnels : quoi, quand, comment, pour qui
Talk by Ulric Renaud in Rennes (20 minutes)

Présentation de 20 minutes sur les tests fonctionnels, nous suivrons ensemble un cheminement simple et rapide sur : ce qu'est un test fonctionnel, à quel moment il se situe dans la chaine de développement du produit, comment les mettre en place (principes génériques / outils), en quoi ils sont importants / nécessaires, pour qui ils sont faits, et enfin, pour quoi !

10:10 Arrêt du support de Server Push par Chrome : qu'est-ce que ça change pour l'écosystème PHP ?
Talk by Kévin Dunglas in Lille (40 minutes)

Google a récemment annoncé qu’il allait retirer le support de Server Push de son navigateur vedette. Server Push est une technologie faisant partie des standards HTTP/2 et HTTP/3 qui permet d’améliorer les performances des sites et applications web. Server Push est largement implémenté dans l’écosystème PHP : il est supporté nativement par la plupart des serveurs web ainsi que par des outils populaires tels que Symfony et API Platform. C’est aussi le cœur de la spécification Vulcain qui permet de créer des API web très performantes et facile à mettre en cache. Les ingénieurs de chez Google proposent d’utiliser trois technologies pour remplacer Server Push, qui seraient d’après-eux plus simple d’utilisation comme d’implémentation et permettrait des gains de performance quasi-similaires à ceux de Server Push. Ces technologies sont les liens de type Preload, le code de retour HTTP « 103 Early Hints » et l’API JavaScript WebTransport. L’écosystème PHP ainsi que Vulcain supportent déjà les deux premières. La troisième pourrait permettre à terme - si elle est adoptée par les navigateurs et serveurs web - de proposer une alternative moderne (bien que bas niveau) à WebSocket. Au cours de cette présentation, nous découvrirons les cas d’usage de chacune de ces technologies, nous les comparerons avec Server Push, et nous verrons comment les utiliser en PHP (côté client comme côté serveur). Nous verrons ensuite comment Vulcain en tire parti.

Retex : Du code (legacy|moderne) dans une stack (moderne|legacy)
Talk by Jean-françois Lépine in Rennes (40 minutes)

Notre code date de 2013, sans tests, avec 63 000 commits, 400 000 lignes de code, déployé à la main... Difficile d'imaginer qu'on puisse y intégrer un framework moderne, l'utiliser dans une architecture hexagonale en faisant du Domain Driven Design, le tout en déploiement continu... C'est pourtant ce qu'on a fait en 2 ans, et on va vous expliquer comment, vous présenter ce qu'on a réussi mais aussi nos échecs et fausses pistes, et aussi comment on voit les choses pour la suite. Si vous connaissez l'enfer du code legacy, il est temps de retrouver le sourire !

11:20
2
Migration vers K8S, commençons les travaux !
Talk by Quentin BARLOY in Lille (40 minutes)

Sortez vos casques, nous allons faire un tour sur ce chantier en cours qu'est la migration des applications Arte vers Kubernetes. Avant d'avoir des applications scalables et résilientes, un chantier d'infrastructure est nécessaire. Cependant, pour sortir d'un hébergement classique et entrer dans l'univers Kubernetes, nous devons nous poser les bonnes questions : quels en seront les avantages et inconvénients ? Est-ce que ce changement est vraiment nécessaire ? Quelles sont les étapes à suivre afin d'y parvenir ? Ce sont ces questions auxquelles nous avons tenté de répondre, afin de nous préparer au mieux à cette migration.

1
Communication inter micro services avec GRPC
Talk by Danielle KAYUMBI BONKOTO in Rennes (40 minutes)

Avec la popularité de REST, nous pouvons parfois oublier qu'il s'agit simplement d'une solution parmi de nombreuses autres. REST est une très bonne solution architecturale pour un nombre varié d'APIs mais il existe d'autres solutions pour des scénarios plus nuancés tels que GRPC (Google Remote Procedure Protocol). RPC est un mécanisme client serveur permettant à une machine sur un serveur d'exécuter un programme distant sur un autre serveur. gRPC créé en 2015 par google est basé sur RPC mais permet de traiter des milliards de requête par seconde grâce notamment au multiplexing de requêtes et de réponses, ainsi qu'à son mécanisme de sérialisation binaire Protocol Buffers. GRPC est particluièrement adapté pour les communications inter micro services, permettant de réduire la latence et d'augmenter ainsi les performances. Très peu d'applications PHP actuellement implémentent GRPC, pourtant très puissant. Nous verrons donc comment des cas réels d'utilisation avec des exemples en live au cours de la conférence !

12:05
1
Recruter des femmes dans l'IT, du POC à la MEP
Talk by Myriam EL KANSOULI in Lille (20 minutes)

La majorité d’entre vous connaît ce constat, il suffit d’ouvrir les yeux sur l’open space : on dénombre peu de femmes en informatique… Et moi, en tant que femme, je souhaitais juste faire de l’info sans me laisser pousser la barbe. Si je pouvais tout recommencer, quels conseils me donnerais-je pour faciliter mon parcours ? Des études à la vie active, du POC à la MEP, comment lever les points de blocage qui viennent se mettre dans le parcours d'une femme ?

2
Montez à bord d'une équipe autonome !
Talk by David LAIZÉ in Rennes (20 minutes)

En agilité, on travaille en équipe auto organisée. OK, ça c'est la théorie. Dans la pratique, j'en ai pas vu beaucoup des vraies équipes autonomes... Ce lightning talk de 20 min est un REX d'une équipe qui envoie, vu de l'intérieur par un membre de l'équipe. Des pratiques, des outils et surtout un témoignage : à quel point le travail en équipe et l'agilité c'est incroyable quand tout le monde est aligné et que les gens ont envie d'avancer ensemble.

14:00
1
Du social à la tech : retour sur 2 ans de transition
Talk by Magali Milbergue in Rennes (20 minutes)

Retour d'expérience sur les deux premières années d'une développeuse web au profil atypique. Durant cette conférence j'aimerais raconter mon parcours de reconversion du social à la tech en pointant du doigt les challenges (la formation en accéléré, s'adapter à un métier technique...), les problèmes (le gatekeeping, le sexisme, ...) mais aussi les choses positives (les rencontres, l'accueil de certaines personnes, le soutien...) que j'ai rencontrés durant ces deux ans pleins de rebondissements. En partageant mon parcours et échangeant avec le public, j'espère que des pistes de réflexions sur comment rendre notre industrie plus inclusive pourront émerger.

14:05
3
Retour d’expérience: CQRS à la rescousse de PrestaShop pour migrer vers Symfony
Talk by Mathieu FERMENT in Lille (40 minutes)

Migrer une application d'un framework maison vers Symfony est devenu un classique dans le monde PHP. L'équipe PrestaShop a commencé une telle migration en 2016 avec la difficulté supplémentaire que l'application est un CMS open source PHP fondé en 2007. Le chantier est immense, et nous procédons donc par étapes. C'est ici que l'introduction de CQRS dans notre architecture nous a grandement aidé à mettre en place une communication efficace entre les composants migrés et les composants legacy. Cette frontière est flexible et permet de remplacer un à un les composants legacy par des composants modernes avec une grande facilité. Plutôt que de présenter CQRS qui a déjà été introduit, étudié et décrit par de nombreuses autre conférences, je propose d'aborder "le vif du sujet": les difficultés, les pièges, les erreurs que nous avons commises ... et (heureusement) les résultats positifs amenés par l'usage de CQRS.

14:25
2
Le rocher de Sisyphe
Talk by Pascal Le Merrer in Rennes (20 minutes)

Être développeuse ou développeur implique de suivre l'évolution de technologies, de méthodes et d'outils qui évoluent à une vitesse telle qu'il est difficile de rester à jour. Comment faire pour ne pas se laisser dépasser par cet afflux constant de nouveautés ? Comment concilier un apprentissage permanent avec les projets et la vie privée ?

14:50 Lock et Semaphore
Talk by Gregoire Pineau in Lille (20 minutes)

Les situations de compétition ("race condition" en Anglais) sont un problème récurrent en informatique. Elles existent à tous les niveaux, depuis le noyau linux, jusqu'a votre application en passant par la base de données. Elles se caractérisent par un résultat différent selon l'ordre dans lequel agissent les acteurs du système. Une situation de compétition peut survenir dès que plusieurs acteurs tentent d'accéder au même moment à une ressource partagée (fichier, ligne dans une base de données, etc.) et qu'au moins l'un d'entre eux est susceptible de modifier son état. Des solutions existent depuis très longtemps pour pallier ces problèmes. Symfony a introduit le composant Lock dans sa version 3.4, puis le composant Semaphore dans sa version 5.2. Cette conférence a pour objectif de vous fournir les bons outils pour éviter toutes race condition, en utilisant le composant Lock ou Semaphore en fonction des situations rencontrées.

2
Dessiner, c'est gagner !
Talk by Toy DUBREIL in Rennes (20 minutes)

Comment aider les équipes à concevoir et communiquer sur l'architecture du logiciel, tant lors des sessions de conception initiales que lors de la documentation rétrospective d'une base de code existante ? Nous allons découvrir ensemble comment nous pouvons en équipe partager nos connaissances sur un logiciel par des diagrammes simples et clairs adaptés à son audience. Nous parlerons également des avantages de la "Documention as Code" pour décrire nos diagrammes sous forme de code.

15:15 Connaissez-vous vraiment JWT ?
Talk by Karim PINCHON in Lille (40 minutes)

Depuis quelques années déjà, beaucoup d'entre nous avons vu passer ou utiliser des jetons un peu spéciaux : les JSON Web Tokens ou JWT. Ce standard de jeton est très pratique pour faire transiter de l'information de manière fiable. Ces jetons sont souvent utilisés pour assurer l'authentication auprès de web services, de micro-services ou de SSO dans le cadre d'OpenID Connect. De plus, on voit beaucoup de JWS (des jetons signés), mais ce n'est pas la seule implémentation qui existe. En réalité, la spécification JWT est nettement plus vaste que ce que l'on peut penser. Je vous propose de découvrir des aspects de JWT moins connus que l'utilisation classique.

4
Le monde merveilleux des conteneurs d'injection de dépendances
Talk by Lior CHAMLA in Rennes (40 minutes)

Quand on se lance dans la programmation orientée objet et que l’on souhaite respecter le principe de responsabilité unique et d’inversion de contrôle, on peut se retrouver rapidement en difficulté avec le nombre croissant de classes et de dépendances, et construire un objet peut devenir assez complexe. Pour ce sortir de cet enfer des dépendances, nous avons recours aux conteneurs d’injection. Le but de la conférence est donc d'expliquer les fondements du Conteneur d'Injection de Dépendances avec ses avantages et ses inconvénients, tout en égrainant des conseils sur les bonnes pratiques de programmation orientée objets.

16:25
0
RDF: Qu'est-ce que c'est?
Talk by Samuel ROZÉ in Lille (40 minutes)

Vous avez peut-être déjà entendu parlé de RDF: Resource Description Framework. C'était peut-être en implémentant les "rich snippets" pour Google, ou bien en cherchant de détails sur cette bête étrange qu'est JSON-LD qui est exposé par ApiPlatform? Dans cette présentation vous allez comprendre d'où ce framework vient, ces différents formats (RDFa, Turtle, JSON-LD), ces différences fondamentales avec la majorité des structures de données d'aujourd'hui, ces usages anciens et nouveaux et comment l'utiliser en pratique.

0
Gérer une architecture technique dans un environnement agile
Talk by Vincent OGLOBLINSKY in Rennes (20 minutes)

Dans notre industrie, la seule chose qui est inévitable c’est le changement. Ce que nous utilisons ou créons à un instant T peut vite devenir obsolète pour diverses raisons (techniques, sectorielles, …), et sera remplacé par quelques chose de nouveau. La nécessité de livrer de la valeur rapidement dans un contexte agile a bousculé la manière de concevoir des architectures techniques. Entre la philosophie DevOps, et la création d’équipe de plus en plus autonome et indépendante, l'architecture technique doit s'adapter à cette nécessité croissante d’aller et de grandir vite. Comment planifier et concevoir un système en sachant que les problèmes d’aujourd’hui sont complètement différents des problèmes de demain ? Quelles bases poser de manière pérenne mais en étant flexible ? Pourquoi de temps à autre les architectures deviennent un frein au lieu de proposer un terreau pour amener de la valeur au produit ? L’architecture technique idéale n’existe pas, à l'inverse le dogme « pas d’architecture » également. Nous allons voir dans ce talk quels sont les principes de design et les méthodes que les devs ont à leur disposition aujourd’hui pour accueillir le changement facilement et délivrer de la valeur rapidement.

16:50
1
Le régime anti-statiques
Talk by Damien SEGUY in Rennes (20 minutes)

En bref : les statiques devraient être évitées autant que possible. Méthodes, variables ou propriétés, elles introduisent une dose de programmation procédurable en programmation objet : avec ce fonctionnement hybride, c’est le pire des deux mondes qui s’assemble : statut global, hyperstatismes d’application, tests difficile. Et en plus, ‘static’ est un mot clé PHP avec de nombreux usages, qui eux, sont à la fois bons et méconnus. Alors, passont au régime anti-statiques : on va garder les static dont nos applications ont besoin pour se maintenir saines et pour fonctionner correctement. Et on va éliminer les mauvaises statiques.

17:10 Lazy Collection
Talk by Pol in Lille (40 minutes)

PHP Collection est une bibliothèque utilitaire fonctionnelle pour PHP supérieure à 7.1.3. C'est similaire à d'autres bibliothèques de collections basées sur des tableaux PHP classiques, mais avec un mécanisme "lazy" (paresseux) sous le capot qui s'efforce de faire le moins de travail possible tout en étant aussi flexible que possible. Des fonctions comme array_map (), array_filter () et array_reduce () sont excellentes, mais elles créent de nouveaux tableaux et tout est executé directement avant de passer à l'étape suivante. La librarie PHP Collection exploite les générateurs, les itérateurs et les "yield" PHP pour vous permettre de travailler avec de très grands ensembles de données tout en maintenant l'utilisation de la mémoire aussi faible que possible. Par exemple, imaginez que votre application a besoin de traiter un fichier journal de plusieurs gigaoctets tout en tirant parti des méthodes de cette bibliothèque pour analyser le fichier. Au lieu de lire et de stocker le fichier entier en mémoire à la fois, cette bibliothèque peut être utilisée pour ne conserver qu'une petite partie du fichier en mémoire à un moment donné et executer des opérations sur l'ensemble des données. Vous pouvez trouver le lien de cette librairie ici: https://github.com/loophp/collection