The next step of the PHP Tour de France of the conference organized by AFUP, the French PHP-users group, gathering all PHP and Open Source communities, pros and PHP lovers.
09:30 |
Le RGPD expliqué par un développeur
Talk by Frédéric Hardy (40 minutes) Souvent, le métier du développeur est bouleversé par une nouvelle technologie, qu'elle soit un nouveau langage, un nouvel outil ou un nouveau concept. Mais il arrive également qu'il le soit par quelque chose qui n'a rien à voir avec la technologie, et le RGPD est l'un de ces choses. Derrière cet acronyme se cache en effet un texte de loi dont nous allons devoir à l'avenir, et très rapidement, tenir compte à la fois lors de nos développement et dans nos relations avec nos client et nos utilisateurs. À moins d'une dizaine de jours de la fin du délai de mise en conformité, je vous propose de faire le point sur l'impact du RGPD dans notre quotidien de développeur ! |
Tirer le maximum du moteur PHP 7 - l'exemple de Symfony
Talk by Nicolas Grekas (40 minutes) PHP 7.0 est déjà de l'histoire ancienne. Mais savez-vous en tirer partie à fond ? Si le moteur est plus rapide sur toutes les opérations en général, il y en a quelques unes qui sont particulièrement optimisées. Avec PHP 5, vous avez peut-être pris certains réflexes qui ne sont plus d'actualité, pour soi-disant écrire du code plus performant ? Je vous propose de passer en revues les différentes techniques d'optimisation mises en place dans Symfony, qui font de la v4 la plus rapide jamais publiée. Ce sera l'occasion de tordre le coup à quelques idées reçues, et de vous en donner quelques autres pour le jour où vous chercherez à presser les dernières millisecondes hors de cette boucle intensive. Benchmark à l'appui évidement. |
|
10:15 |
Retour sur 5 ans de CLI PHP pour importer le catalogue chez Deezer
Talk by Jean Pasdeloup, Romain Cottard (40 minutes) Le catalogue chez Deezer c’est 43 millions de tracks, en augmentation constante et mis à jour régulièrement. Il y a 5 ans, l'import de ce catalogue consistait en quelques scripts PHP perdus dans le gros GIT monolithique de Deezer. Voyons comment cet import a évolué depuis, tout en restant en PHP : évolutions architecturales et focus sur des problématiques techniques. Au programme : de la vraie ligne de commande, des domaines métiers et des applications, un peu de Symfony et beaucoup de framework agnostic, des daemons parallélisés, des events asynchrones... Un talk par Romain & Jean, les 2 Architectes aux "commands" de la team Catalog. |
Designing Test Architecture That Does Not Suck
Talk by Michael Bodnarchuk (40 minutes) Every PHP application needs its policy about tests. What is important to test, what is not, at which levels should a feature be tested. As we think of application architecture before writing a single line of code, we should think of a test architecture before implementing tests. From this talk you will learn: * how to transform business expectations to tests using ATDD and BDD approaches * how (and why) to incorporate all testing levels (acceptance, functional, integration, unit) * how to prioritize tests * how to write stable tests that won't be the stick in the wheel * how to deal with test data * how to decide, should it be unit or integration test * how to choose the type of a test |
|
11:25 |
Bienvenue dans la matrice !
Talk by Benoit Jacquemont (40 minutes) Un processus PHP qui s'emballe sur un environnement sans debuggeur ? Un webservice qui semble fournir une réponse suspecte ? Un processus tout à coup très lent ? Un programme bloqué avec 0% d'utilisation CPU ? Une application avec un comportement inattendu ? Cela vous est déjà certainement arrivé, avec cette question: comment savoir ce qui se passe dans ces cas là, sans toucher au code PHP ? Des outils systèmes (strace, ltrace, lsof, perf-trace, ...) permettent d'intercepter et d'analyser les échanges entre les procesus et le noyau Linux. Ils peuvent s'appliquer aussi bien sur un processus PHP que sur n'importe quel autre processus s'exécutant sur la machine. Bien utilisés, ils permettent de rentrer à l'intérieur du processus et de comprendre ce qu'il est en train de faire. Le contenu des entrées et sorties, les blocages, les temps passés dans les différentes tâches, etc.... Toutes ses informations sont disponibles avec les bons outils. Alors passez en coulisse des processus et venez déchiffrer la matrice avec moi lors de cette présentation ! |
REX sur 5 ans d'élevage de lapins
Talk by Ulrich (40 minutes) Il y a 5 ans, j'installais ma première instance de RabbitMQ et n'avait qu'un seul broker. Aujourd'hui, j'en suis au stade industriel. Je vais vous raconter tous mes échecs et toutes les solutions apportées par RabbitMQ, ça va parler dlk, cluster, fédération... mais aussi déploiement automatique des configs, librairies PHP. Une connaissance de base de RabbitMQ/AMQP est recommandée. |
|
12:10 |
Tenter de gagner (un peu) sa vie avec un projet open source
Talk by Nicolas Loeillet (20 minutes) Depuis bientôt 5 ans maintenant, nous sommes une petite équipe qui développe une application web open source, wallabag, codée en PHP. Et depuis le début de cette aventure, je me dis que ça serait chouette d'essayer de tenter de gagner un peu sa vie grâce à ce projet qui nous prend du temps. Il y a un peu plus d'un an, j'ai donc lancé un service libre et payant, https://wallabag.it Je vous propose donc mon retour d'expérience sur la naissance du projet, les différentes étapes, les craintes, les doutes et les réussites, comment je gère tout ça au quotidien, etc. |
E-Learning sans Internet, ou presque
Talk by Richard Hanna (20 minutes) Retour d'expérience sur le développement d'une progressive web app en mobile-first et offline-first pour que des étudiants africains puissent accéder à des cours d'université en tenant compte des problématiques de connectivité. On verra des sujets variés comme gérer des contenus offline, client GraphQL + React et serveur GraphQL + Symfony. |
|
14:30 |
100% Asynchrone - 0% Callback en PHP
Talk by Joël Wurtz (40 minutes) PHP et Asynchrone n'ont jamais fais bon ménage. Pourtant depuis plusieurs années de nombreuses librairies s'y sont essayé mais leurs API ont toujours été rempli de callbacks et la complexité associée. Nous verrons comment nous affranchir des callback et transformer nos scripts en asynchrone pour obtenir des meilleurs performances. |
It FIGures
Talk by Sara Golemon (40 minutes) Get to know the Framework Interoperability Group. See how PHP Standards Recommendations are actively shaping the ecosystem and continuing to bring PHP forward. |
|
15:15 |
Sans documentation, la fonctionnalité n'existe pas !
Talk by Sarah Haïm-Lubczanski (40 minutes) La nouvelle fonctionnalité est prête, tout le monde est ravi. Les utilisateurices vont-ils savoir s’en servir ? Si vous pensez que le changelog et la PHPDoc suffisent, je voudrais vous demander : pourquoi priver vos utilisateurices des meilleures parties de votre logiciel ? Je vous propose de définir la qualité minimale attendue pour une documentation et d’examiner l’effort à fournir pour l’atteindre. Nous parlerons des process de documentation et de comment on fait pour documenter avec les moyens et les compétences disponibles. |
Maîtriser le composant Serializer de Symfony
Talk by Kévin Dunglas (40 minutes) Le composant Serializer de Symfony existe depuis la première version de Symfony 2, mais a gagné énormément de fonctionnalités au fil du temps. Au cours de ce talk, je présenterai les fonctionnalités méconnues et pourtant très puissantes de cette bibliothèque. Après un rappel des fondamentaux, nous découvrirons comment le composant permet - de manière transparente - de manipuler tous types d'objets PHP, quelques soient leurs styles : getters / setters, propriétés publiques, proxys.... Nous verrons ensuite les différents formats supportés nativement : JSON, XML, YAML et CSV. Puis nous manipulerons des dates, et évoquerons l'upload de fichiers avec le support des "data: URI". Finalement, nous aborderons quelques cas plus complexes tels que choisir les propriétés à sérialiser / désérialiser grâce aux groupes, gérer les références circulaires, sérialiser des arbres en limitant leur profondeur et mettre à jour des objets déjà existants. |
|
16:25 |
CQRS, Fonctionnel, Event Sourcing & Domain Driven Design
Talk by Arnaud Lemaire (40 minutes) Avec autant de buzzwords dans le titre, explicitons le menu :? – Nous commencerons avec une étude des principes du CQRS et la notion de projection pour construire les modèles de données dédiées à la lecture, le tout avec un datastore traditionnel (relationnel). ? – Nous continuerons avec le concept d’état en programmation fonctionnelle, et comment les gérer au sein d’une application tout en respectant le principe d’immutabilité. Et comment ils ont transformé la gestion d’états pour la construction d’interface utilisateur. ? – Dans un troisième temps, nous nous intéresserons aux évènements du domaine-métier dans le Domain Driven Design et comment ceux-ci s’intègrent dans la mécanique de construction des projections. ?– Enfin, nous assemblerons toutes ces notions pour faire apparaitre l’«?event sourcing?» comme modèle de persistance pour nos données. ? – Pour clôturer, nous verrons les erreurs les plus courantes rencontrées lors de l’implémentation d’un modèle en event sourcing. Take away: ?– Utiliser CQRS (sans event-sourcing) pour simplifier la gestion de la persistance dans son application. ?– Comprendre comment gérer des états dans un contexte fonctionnel ? – Gérer facilement les évènements-métier au sein d’une architecture DDD. ?– Savoir comment implémenter correctement un système basé sur l’event sourcing. |
Un autre regard sur la validation
Talk by Quentin Pautrat (40 minutes) "Persister les données c'est bien, persister les bonnes données c'est mieux". Derrière cet adage se cache, entre autres, la validation, une facette bien connue des développeurs et développeuses. Tellement connue qu'elle en est devenue triviale. À travers les différents frameworks et leurs documentations, nous avons banalisé cet aspect du développement. Il arrive que ces outils ne soient pas toujours adaptés et nous orientent dans de mauvaises directions. Cependant il est de notre responsabilité de voir plus loin et de se poser les bonnes questions. |
|
17:10 |
Étique et macarons
Talk by Laurent Chemla (30 minutes) Cette année l'AFUP et Laurent Chemla vous proposent une conférence d'un type peu ordinaire : une conférence débat. L'idée est simple : Laurent est là pour répondre à vos questions autour de l'éthique et de la vie privée, deux sujets intimement liés qui font couler beaucoup d'encre en ce moment. Deux sujets importants pour Laurent, comme le montre son implication dans des projets comme La Quadrature du Net et Caliopen. Lors de la conférence, vous pourrez poser vos questions et discuter avec Laurent, alors réfléchissez à vos questions dès maintenant. Si vous avez quelque chose à dire mais que vous préférez ne pas prendre la parole vous-même, n'hésitez pas à contacter l'AFUP ([email protected]), nous nous ferons un plaisir de nous faire votre porte-parole. |
17:40 |
Lightning-talks
Talk by à venir (30 minutes) Vous connaissez le principe ! 5 minutes, une présentation par un de nos visiteurs, un speaker invité, un membre de l'équipe... Appel à sujets à venir dans les prochains jours ! |
09:30 |
Génération automatique de services web à partir d'un modèle OpenAPI
Talk by David Sferruzza (40 minutes) OpenAPI est un standard qui permet de décrire des services web, le plus souvent dans le but générer une documentation interactive. Aujourd'hui je vous présente une approche (développée dans le cadre de ma thèse) qui étend OpenAPI 3.0 avec pour objectif de générer également l'application en elle-même ! Une démonstration de mon prototype sera l'occasion de discuter un peu de Model-Driven Engineering et de vous montrer comment le code généré s'intègre dans une base de code Laravel. |
REST ou GraphQL ? Exemples illustrés avec Symfony et API Platform
Talk by Kévin Dunglas (40 minutes) GraphQL est une alternative aux architectures REST pour la réalisation d’API web. Le langage promu par Facebook a des avantages indéniables : récupération des données utiles uniquement, limitation du nombre de requêtes, typage fort, syntaxe puissante et bien pensée… Cependant, il souffre aussi de défauts souvent sous-estimés parmi lesquels l’incompatibilité avec les mécanismes de cache, de log, de sécurité ou d’auth qui forment la base du stack web d’aujourd’hui, ou la nécessité d'un parser spécifique. De plus, les formats hypermedias modernes s’appuyant sur REST disposent de fonctionnalités très similaires tout en restant compatibles avec les fondements du web. Le framework API Platform, basé sur Symfony, permet de créer très facilement des API REST (JSON-LD, JSON API…) et GraphQL. Après avoir énuméré les avantages et inconvénients des différents formats, nous étudierons au travers de différents cas d’usages quand il est préférable d’utiliser GraphQL, REST ou les 2 en complément. |
|
10:15 |
Caching with PSRs
Talk by Hannes Van De Vreken (40 minutes) In this talk you will learn what PSR-6 and PSR-16 are, why they are designed like they are, what the differences are, and how to use them. From the provided interfaces, the virtual package on Packagist.org, to the implementations available. Everything will be explained for both beginners and more experienced developers. We will dive into implementations, cache stampede protection, all using libraries we can find on Packagist.org. We will also show how to start using it today in our current applications by using adapters. The entire talk will be accompanied with code samples and live demos, showing both working and failing caching systems. |
Nommer les choses ? Oui : avec le DNS
Talk by Julien Pauli (40 minutes) On l'utilise tous les jours, il est devenu transparent sauf lors d'attaques de grande ampleur ou d'erreur de config : le DNS est un des premiers services a avoir été crée pour gérer l'Internet. Après un petit historique, nous nous attarderons sur les détails techniques du DNS. Comment ça marche ? Comment le mettre en place chez soi ? En entreprise ? Sur un projet ? Que peut-on faire avec le DNS ? Comment notre langage favori (PHP) intérragit-il avec le DNS ? Basé sur un exemple réel en prod, un petit atelier pratique de mise en place d'une zone DNS avec un maitre, un esclave et quelques resolvers PHP sera de mise pour que tout le monde comprenne bien comment fonctionne ce service indispensable sur Internet. |
|
11:25 |
Un peu d'événement dans un monde linéaire.
Talk by Julien Vinber (40 minutes) Bien connu dans d'autres langues, l'utilisation d'événement peut apporter énormément dans la conception d'application en PHP. Que ce soit des événements synchrone pour améliorer la solidité de notre code ou asynchrone pour ne pas perdre en performance et dépasser certaine limitation que l'on peut avoir avec le langage. Après une présentation des avantages et des principes, nous verrons comment concrètement les mettre en places dans notre code, que ce soit directement ou en utilisant un Framworks. Nous aborderons également rapidement l'utilisation de serveur de message comme RabbitMQ pour mettre en places des événements asynchrones. |
GRAOU : la production ferroviaire collaborative
Talk by Nicolas Wurtz (40 minutes) Les conducteurs et contrôleurs des trains SNCF ont toujours eu leur planning au format papier. En tant que conducteur de trains, j'en avais assez de le saisir tout à la main, et me suis mis en tête de créer un outil simple de synchro entre nos agendas électroniques et nos métiers. Puis en voyant les données passer, et grâce à l'arrivée de l'openData, le champ des possibles est devenu immense : qui est sur quel train, quel matériel, quels statistiques, quand vais-je croiser mes collègues, où manger, qui dort où, etc. et tout ça dans une web-app construite from scratch en PHP/MariaDb, un peu de JS et une grosse réflexion UX (le métier développe pour le métier !). GRAOU est aujourd'hui la première application interne collaborative SNCF, unanimement plébiscitée et massivement utilisée par les agents concernés. C'est l'histoire d'un conducteur de trains qui jongle désormais avec les containers docker et optimise php-fpm pour gérer les 800k vues/jour... |
|
12:10 |
Réussir en tant que communauté
Talk by Edouard Cunibil (20 minutes) "Come for the code, stay for the community". Avec plus d'1 million de membres, il faut croire que Drupal mérite son slogan. Le but de cette conférence est de souligner les multiples facettes de cette communauté et de mettre en valeur les décisions et initiatives qui expliquent sa croissance encore aujourd'hui. Il sera question de valorisation du travail, de protection des personnes, d'inclusion des minorités. |
Traduire efficacement une application Symfony
Talk by Mathieu Santostefano (20 minutes) La traduction d'une application est une étape primordiale dans un projet international. Mais sa mise en place est souvent douloureuse, et ça le reste tout au long de la vie de l'application. Un nouveau type d'intervenant entre en jeu en plus des développeurs, chefs de projets, designers, voici maintenant les traducteurs. Comment faire travailler toutes ces personnes efficacement, et garder l'intégrité des traductions de l'application ? C'est ce que je vous propose d'aborder dans cette conférence. Nous verrons ensemble quels outils externes utiliser pour faciliter la traduction aussi bien pour les développeurs, que les traducteurs, mais aussi pour les intervenants en qualité qui sont chargés de vérifier tout ce travail. Nous verrons également comment brancher ces outils au sein de Symfony pour bénéficier d'un workflow de traduction cohérent et simple d'utilisation d'un environnement local à la production. À la fin de la conférence vous n'aurez qu'une envie, mettre à jour vos projets avec ces outils pour enfin vous épargner de longues journées de mise à jours de traductions ! |
|
14:30 |
It's all about the goto
Talk by Derick Rethans (40 minutes) Don't worry, this is not about the goto keyword. In this presentation, I am showing you some of the inner workings of PHP. We are going to look at how different language keywords and constructs are handled internally. Basically, everything is converted to goto, but the how and why, is not as simple as it seems! This is a very in depth talk, mostly interesting to people that want to know how PHP works internally. Expect lots of wonkyness, a form of assembly, and trees. |
Décryptez votre contrat de travail !
Talk by Hélène Schapira (40 minutes) Grilles de salaires, horaires, avantages et contraintes : je vous propose de décoder ensemble les fonctions de votre contrat de travail, de décrypter les appels aux conventions collectives et de comprendre les boucles de la réforme du Code (du Travail). Osez le "peer review" des pratiques RH de l'entreprise, sachez reconnaître et éviter les pièges du "chez nous, ça marche comme ça". "Nul n'est censé ignorer la loi"... ce serait mieux si tout le monde la comprenait. Je vous promets une conférence trépidante et fun (parce que c'est aussi ça, les RH) ! |
|
15:15 |
Merci de laisser ce code dans l'état dans lequel vous aimeriez le trouver
Talk by Cédric Spalvieri (40 minutes) Il existe un dicton célèbre dans le monde de la programmation informatique : “Code toujours comme si la personne qui va maintenir ton code est un violent psychopathe qui sais où tu habites.” Même si je ne suis pas vraiment d’accord avec l’idée d’avoir peur des gens avec qui l’on travaille, il est de notre devoir de développeur·se de faire en sorte que la maintenance du code que l’on écrit se fasse dans les meilleures conditions possibles. Avec un zeste de psychologie comportementale, nous verrons quelles sont les bonnes pratiques qui peuvent être mises en place pour faire du code un endroit où l’on aime revenir. |
À la decouverte du Workflow
Talk by Grégoire Pineau (40 minutes) Il est courant de gérer des statuts ou états de produits, dans des sites e-commerce ou éditoriaux. Pour ce faire, il est possible d'agir de façon classique, c'est-à-dire manuellement, ou d'avoir recours à des librairies qui proposent déjà des bases de code. Pour cette présentation, nous aborderons la notion de machine à état et sa définition avant d'envisager, son application, en examinant les librairies open sources existantes. Enfin, à la lumière de Symfony, nous étudierons le nouveau composant "Workflow" |
|
16:25 |
La nouvelle API GraphQL chez Allociné
Talk by Jimmy Escrich, Arnaud Lafon (40 minutes) Retours sur un projet de refonte d'envergure d'une API vieille de quasiment 10 ans. Aujourd'hui basée sur Symfony 4, PHP7, Postgres et Elasticsearch (entre autres), nous présenterons bien sur les concepts de base de GraphQL, nos choix techniques et les dépendances du projet avec notamment plusieurs bundles/librairies "maison" comme le bundle d'Overblog (du même groupe qu'Allociné) ou encore la librairie dataloader-php, associé à un sytème de promesses tiré de React. Nous aborderons des sujets aussi bien techniques que "projet" tels que la sécurité, les performances, les problématiques de caches, etc. |
La pire meilleure idée : faire du batch processing avec Doctrine
Talk by Romain Monceau (40 minutes) Doctrine, comme indiqué dans sa documentaion officielle, n'a pas été créé pour être utiliser pour des processus lourds de traitement de données (import/export, édition de masse, etc.). Néanmoins, la réalité des projets amène parfois à devoir réutiliser des briques métiers (validation, subscribers, entités, queries, etc.). Cette présentation est un retour d'expérience présentant de bonnes pratiques sur l'utilisation de Doctrine et des SGBD afin de traiter une grande volumétrie de données. |
|
17:10 |
Jouons tous ensemble à un petit jeu
Talk by Thomas Sieffert (30 minutes) Hey ! Tu as participé au quiz du #SuperApéroPHP ? Tu te demandes : mais comment ont-ils fait ? Ne cherche pas plus loin, je te propose de nous retrouver pour un petit jeu et de découvrir ensemble l'envers du décor ! Au programme : une session interactive avec Laravel / Laravel Echo / Redis et Socket.IO. |