Retour au blog

Novaway au Symfony Live Paris 2017

Cette année Florent et Jérémy étaient présents au SymfonyLive qui s'est déroulé dans la Cité internationale universitaire à Paris les 30 et 31 mars 2017. Ce fut l'occasion d'assister à de nombreuses conférences de qualité, de suivre les évolutions du framework et d'échanger avec la communauté PHP / Symfony. Voici donc notre retours de ces deux jours intenses.

Jour 1

Keynote d’ouverture - Symfony 4

Comme lors de chaque édition, Fabien Potencier nous fait l’honneur d’ouvrir le SymfonyLive. Après un rapide rappel du processus de release du framework, Fabien nous a présenté les principales fonctionnalités qui seront présentes dans la prochaine version majeure de Symfony (la version 4) prévu pour la fin de cette année (Novembre 2017).

Ce dernier sera alors compatible uniquement avec les versions 7 de PHP. La principale nouveauté de cette version sera sans aucun doute le nouveau mode de distribution du framework. Dorénavant ce dernier sera fourni un minimum de dépendances et l’application principale sera bundleless. Le processus de configuration sera simplifié avec l'introduction de Flex, un composant qui permet la configuration et l'intégration automatique de bundle tiers dans le code du projet.

Pour avoir plus de détails sur Symfony 4 et ses concepts, Fabien Potencier va publier une série de 8 billets sur son blog détaillant les nouveautés à venir.

A la découverte du composant Serializer

Lors de cette présentation, Grégoire Pineau, connu dans la communauté pour ses nombreux travaux effectués sur Symfony, nous a présenté le méconnu composant Serializer du framework.

Commençant par rappeler pourquoi la sérialisation de données est importante pour nos applications et en quoi consiste une telle opération, Grégoire nous a présenté le fonctionnement global du composant. Il a expliqué les différents choix de conception et pourquoi il a été décidé d'en faire un composant autonome alors que PHP fourni de base des fonctions permettant de sérialiser des données.

Il a ensuite, au travers d'un exemple, détaillé les opérations de normalisation et dénormalisation ainsi que les notions de sérialisation et désérialisation. La présentation s'est conclue sur un ensemble de bonnes pratiques pouvant être utilisées au quotidien.

Les slides de la présentation sont disponibles sur Speakerdeck.

Grâce aux tags Varnish, j’ai switché ma prod sur RaspberryPi

Jérémy Derussé nous a fait une démonstration du serveur de cache Varnish qui, déployé en tant que reverse-proxy permet d'améliorer drastiquement les performances de nos projets Web.  Pour cela, il a installé son projet sur un Raspberry afin de démontrer les performances de Varnish malgré le peu de ressource de la machine utilisée.

Tout au long de la mise en place de son environnement, Jérémy a partagé les différents problèmes que l'on rencontre lorsque l'on souhaite gérer de la mise en cache de données. Il a ainsi donné des pistes pour travailler efficacement avec l'invalidation de cache et pour gérer les ressources privées ne devant pas être partagées entre les différents utilisateurs.

Au travers de sa présentation et grâce à la mise en place de données pratiques, il a été capable d'automatiser la gestion du cache en se reposant sur des tags transmis via des en-têtes HTTP. Il a également prouvé que Varnish était un serveur de cache, qui bien configuré, peut-être très performant.

Principalement focalisé sur la gestion de Varnish, Jérémy a ajouté que la gestion du cache dans Symfony pouvait être très simple, notamment via l'utilisation de FOSHttpCacheBundle.

Les slides de la présentation sont disponibles sur Speakerdeck.

JWT - Sécurisez vos API

Les JSON Web Tokens (JWT) sont un standard (RFC 7519) permettant d’échanger de l’information de manière sécurisée sur le Web. Présenté par André Tapia qui, après une introduction sur les API Web et les dangers de ne pas les sécuriser, nous a parlé de la solution qui serait idéale pour limiter les risques : une API stateless, gérée via un token ayant une durée de vie limitée dans le temps et étant autoporteuse des informations permettant de s’identifier.

Les JWT répondent ainsi au cahier des charges précédemment définis. André a ensuite poursuivi sa présentation par une démonstration sur la mise en place d'une API sécurisée dans une application Symfony via l'utilisation du composant "Guard authentication".

Il a conclu en listant de nombreux composants et bundle facilitant la mise en place de JWT tout en gardant un oeil critique sur les avantages et inconvénients de chacun, tous n’étant pas compatibles avec les mêmes protocoles de sécurités.

Les slides de la présentation sont disponibles sur Speakerdeck.

Micro-Services Symfony chez Meetic : retour d’expériences après 2 ans de refonte

Habitué des SymfonyLive, puisqu'il était venu présenter le projet de migration de l'architecture de Meetic en 2015, Etienne Broutin, architecte logiciel revient cette année pour nous faire son retour d'expérience 2 ans après le début de la mise en place de la nouvelle architecture orientée micro-services chez Meetic. L'occasion de revenir sur les choix techniques adoptés et faire le point sur les succès et les échecs de cette migration.

La plateforme Meetic est aujourd'hui architecturée autour de 25 micro-services dont les deux tiers sont complètement autonomes et n’ont besoin d’aucun autre pour fonctionner. Le principal succès de cette nouvelle architecture réside dans le fait que chaque service isole les données qu’il manipule verrouillant également par la même occasion son périmètre fonctionnel. L’architecture est également conçue afin d’être tolérante aux pannes. L’indisponibilité d’un service ne provoque pas l’arrêt de la plateforme et une gestion minutieuse des logs est effectuée.

D’un point de vue opérationnel, tous les micro-services sont basés sur un socle technique commun facilitant la création d'un nouveau micro-service, mais également sa prise en main ainsi que son déploiement. Etienne explique également que pour simplifier la gestion des déploiements et éviter de gérer des problèmes de localisation des services sur les différents serveurs, ce sont tous les micro-services qui sont systématiquement déployés sur un serveur (même s'ils ne sont pas tout utilisés).

Au final, cette nouvelle architecture a permis de simplifier les développements et l’intégration de nouveaux développeurs en facilitant la mise en place de briques modulables et indépendantes. Meetic supporte actuellement 1 million d’appels par jour sur leur plateforme, déployé sur une centaine de serveur avec un délai moyen de réponse de 25ms par service.

Les slides de la présentation sont disponibles sur Speakerdeck.

Utiliser Webpack dans une application Symfony

Lead developer front chez Sensiolabs, Alain Hippolyte nous explique comment intégrer Webpack dans une application Symfony. Commençant par rappeler les défauts du composant Assetic et pourquoi ce dernier n'est plus distribué "nativement" avec Symfony, principalement à cause de la mauvaise expérience développeur qu'il introduit.

Partant de ce constat, Alain nous propose d'utilisation  Webpack, un “module bundler” dont l'objectif est d'organiser le code Javascript sous la forme de modules. Pour en démontrer les avantages et expliquer le fonctionnement de cet outil, Alain nous a fait une démonstration de la mise en place de cette brique dans un projet Symfony.

Les slides de la présentation sont disponibles sur Speakerdeck.

Introduction to CQRS and Event Sourcing

Le pattern CQRS (Command Query Responsability Segregation) est très en vogue actuellement. Samuel Roze a ainsi souhaité partager son expérience sur la mise en place de ce dernier au travers d'un projet sur lequel il est en train de travailler.

Commençant par introduire les bases et les concepts sous jaçant au CQRS tel que le Domain Driven Design (DDD), l'EventStorming et l'EventSourcing, nous sommes vite rentré dans le vif du sujet en créant étape par étape une application de gestion des déploiements en utilisant tous les patterns vus précédemment. Ce fut également l'occasion de voir comment mettre en place une architecture d'application basée sur les événements via la mise en place d'un EventStore et d'un CommandBus.

Les slides de la présentation sont disponibles sur Speakerdeck.

Quoi de neuf dans Symfony depuis un an ?

Symfony évolue rapidement et est en constante amélioration. Sarah Khalil a souhaité faire un tour des nombreuses nouveautés ajoutées dans la framework depuis un an. Il s’agissait de résumer les 71 blogs posts publiés et de faire un point rapide sur les 1300 pull requests mergées dans cette période.

Cette présentation était très riche en contenant et énormément de choses ont été expliqués. Il est difficile d'en faire un résumé et nous ne pouvons vous conseiller autre chose que de parcourir les slides, vous y apprendrez ou (re-)découvrirez de nombreuses choses intéressantes et utiles au quotidien.

Les slides de la présentation sont disponibles sur Speakerdeck.

Ainsi c'est conclu ce premier de SymfonyLive, s'en est suivi un concert du groupe Kickban à la suite du quel nous avons pu échanger avec la communauté lors d'un apéritif communautaire.

Jour 2

Qui veut gagner une carriere de développeur ?

Pour commencer le second jour de conférence, les fondateurs de CommitStrip, Thomas et Etienne nous ont présenté sous la forme d'un jeu de rôles basé sur l'émission "Qui veut gagner des millions" les différentes étapes d'évolution d'un développeur ne souhaitant pas devenir chef de projet.

Partant du stade de stagiaire pour arriver jusqu’au niveau ultime de membre de la « Core Team Symfony » (en passant par la case de développeur senior, Lead Dev ou encore CTO), ils ont réussi à partager sous forme humoristique et critique les différentes étapes de la vie de développeur.

Architecture inutile ?

Cette présentation de Jérôme Vieilledent est l'occasion de revenir sur les fondements de l'architecture logicielle.

En faisant un parallèle avec l'architecture (au sens maçonnerie du terme), Jérôme explique l'importance d'une bonne architecture logicielle et la mise en place de fondations solides. Au travers d'un exemple, il nous a parlé de l'importance de concepts (et "buzzwords") tel que :

  • SOLID : les 5 principes de base de la programmation orienté objet
  • Keep It Simple Stupid (KISS) : garder votre code aussi simple que possible
  • Don't Repeat Yourself (DRY) : éviter la redondance de votre code
  • Domain Driven Design (DDD) : votre code doit être centré sur le domaine métier

Les slides de la présentation sont disponibles sur Speakerdeck.

Déployer une app Symfony dans un PaaS

Les infrastructures de type "Platform as a Service" sont de plus en plus utilisées pour faciliter le déploiement et la gestion des applications Web. C’est ainsi que Tristan Darricau, DevOps chez SensioCloud, a souhaité faire un retour d’expérience sur la mise en place de ce type d’architecture de déploiement.

Tristan revient tout d'abord sur les différentes solutions existantes dans le cloud tel que l'"Infrastructure as a Service" (IaaS), les "Container as a Service" (CaaS), les "Platform as a Service" (PaaS) et enfin les "Software as a Service" (Saas) en expliquant pour chacun de quoi il s'agit pour ensuite se focaliser les PaaS.

Il a ainsi fait un tour d'horizon des promesses et difficultés qui peuvent être rencontrées lors de la construction de projets Web au sein d'une telle architecture à chaque étape de conception : la construction de l'infrastructure, la gestion des secrets, les modifications de structures de bases de données ou encore les problèmes de mise à l'échelle (scalabilité) des applications.

Les slides de la présentation sont disponibles sur Speakerdeck.

Sécurité web : et si on continuait à tout casser ?

Sur le même principe que son intervention lors de l'édition 2016, Alain Tiemblo, Ingénieur sécurité chez Blablacar est venu présenter les problèmes récurrents concernant la sécurité des applications Web.

Principalement accès sur la gestion de mots de passe et leurs sécurisations, Alain a tout d'abord évoqué comment les applications pouvaient mettre en place des solutions afin de protéger leurs utilisateurs en :

  • utilisant une authentification multi-facteur
  • mettant en place un captcha pour empêcher l’attaque via robot
  • forçant le changement du mot de passe de l’utilisateur une fois afin de s'assurer que ce dernier soit différent des autres plateformes
  • déléguant la phase d’authentification à un service spécialisé

Il a ensuite rappelé, que c'est à chaque utilisateur de veiller à la sécurité de son compte :

  • En ayant des mots de passe différents pour les sites que nous consultons
  • En s’assurant que ce dernier soit solide ou en utilisant des passe-phrase
  • Avec la possibilité d’utiliser un gestionnaire de mot de passe

Il a terminé sa présentation en revenant sur quelques conseils de base concernant le fishing, le crackin de captcha, les injections SQL, les attaques de type "Man in the middle". Il a également indiqué quelques conseils et bibliothèques à utiliser pour protéger les templates Twig pour remplacer par exemple l'utilisation du filtre "raw" par "Purifier".

Les slides de la présentation sont disponibles sur Github.

Créer des webapps modernes avec Symfony, ReactJS et API Platform

Pour la sortie très prochainement d'API Platform 2, Kevin Dunglas, principale contributeur au projet nous a fait un état des lieux des nouveautés du projet et de l'utilisation de ReactJS pour construire des interfaces intelligentes.

Si vous ne connaissez pas API Platform, il s’agit d’un framework basé sur Symfony vous permettant de créer rapidement des API en utilisant des standards éprouvés tels que Hydra, HAL, JSON-LD, Swagger. Cela permet de construire des API riches et pouvant être utilisant de manière intelligente via l’utilisation de liens hypermédia.

Le développement de projet complet se trouve simplifié par la mise en place d’un environnement Docker automatiquement fourni avec le framework. Kevin nous explique qu'il existe une multitude de solution pour créer et interagir avec des API riches côtés serveur, mais qu'il n'existe aucune solution pour cela côté client. C'est pour cela qu'avec la version 2 d'API Platform, un client Javascript permettant de naviguer de manière autonome dans une API hypermédia a été créé. Ce dernier est fonctionnel puisque déjà utilisé au sein d'un générateur de CRUD généré par le framework lui-même.

Le principal problème est que s’il existe de nombreux standard côté serveur, il n’existe pas grand chose côté client. Un client Javascript permettant de naviguer de manière autonome a ainsi été construit. Celui-ci est déjà fonctionnel puisque utilisé dans une UI permettant de gérer un CRUD généré par API Platform.

Encore en version alpha, ce composant devrait être prochainement publié le un dépôt Github du projet.

Accédez aux slides de la présentation.

Tout ce qu'un dev devrait savoir à propos d'Unicode

Tout le monde connaît le format Unicode, mais qui sait réellement ce qui se cache derrière ? C'est pour répondre à cette question que Nicolas Grekas, CTO chez Balckfire.io a décidé de nous présenter les différentes notions et connaissances à avoir concernant cette norme d'encodage.

C'est ainsi nous avons découvert la table des caractères et découvert les notions de mapping qu'il y avait derrière. Ce fut l'occasion de découvrir comment il est possible de représenter tous les caractères de toutes les langues de la planète (et bien plus encore).

Nous avons aussi découvert les opérations qui se cachent derrière la gestion de la norme telle que les formes composées et décomposées qui sont utilisées pour comparer les caractères entre eux. Comment sont gérées les majuscules, minuscules, les compositions, les ligatures.

Nicolas nous a également présenté les problèmes de sécurité qui pouvait exister avec les "confusables", ces caractères très ressemblants les uns aux autres et pouvant être que difficilement différencié, très utile pour des opérations de fishing par exemple.

Les slides de la présentation sont disponibles sur Speakerdeck.

Optimisations de performances avec PHP7

Contributeur et release manager de PHP, Julien Pauli, nous parle des performances de la dernière version majeure de PHP. Il revient notamment sur les nouvelles fonctionnalités qui ont été introduites ainsi que sur les changements internes effectués au sein du moteur afin d'en améliorer son fonctionnement.

Le moteur de compilation de PHP a été entrièrement réécrit afin de permettre à ce dernier pour pouvoir gérer ce que l'on appelle un Abstract Syntax Tree (AST). Il s'agit d'une structure de données qui permet au compilateur d'optimiser plus facilement la version compilée d'un programme. En plus de cette réécriture, un gros travail d'optimisation de la mémoire a été effectué par les équipes en réécrivant notamment les structures de données internes du moteur. A cela s'ajoute également le travail d'optimisation du moteur sur la gestion du cache CPU pour le stockage des variables qui lui permettent ainsi d'être plus réactif.

Si vous souhaitez avoir plus de détail sur les différentes optimisations ert fonctionnement du moteur interne de PHP, Julien publie égulièrement sur son blog des articles détaillant le fonctionnement de ce dernier.

C'est sur cette présentation aussi technique qu'intéressante que c'est terminé le SymfonyLive 2017. Cette année encore de très belles conférences, on attend avec impatience les vidéos des conférences qui nous feront patienter jusqu'à l'édition de l'année prochaine !

On se donne rendez-vous l'année prochaine !