Retour sur la Symfony Live 2015

Un retour sur la Symfony Live de 2015.
Un retour sur cette Symfony Live 2015 à Paris qui s’est caractérisée par son nombre impressionnant de participants et de conférences.

Toutes présentaient des approches pragmatiques afin de répondre à la qualité finale d’un projet, aussi bien lors de son développement que lors de sa mise en production.

La conférence a commencé par une présentation de Fabien Potencier dont les points à retenir sont les suivants :

  • Symfony 2.8 sortira en même temps que Symfony 3, et ça sera une LTS, tout comme le 2.7
  • PSR-7 est trop restrictif pour être réellement interopérable
  • Laravel est une force pour Symfony, car il se base sur ses composants

Améliorer la qualité des projets existants

La dette technique… grand fléau du développement ! Deux conférences l’ont abordée, aussi bien d’un point de vue humain que technique.

Retour d’expérience : attention chérie, ça va trancher

https://speakerdeck.com/mediaparttech/attention-cherie-ca-va-trancher

Bastien Jaillot (JoliCode) / Etienne Samson (MediaPart)

L’histoire est intéressante car elle porte surtout sur l’aspect humain suite à la prise de conscience de la nécessité d’un électrochoc au sein de l'équipe technique, tout en maintenant l'existant (aka. “le legacy").

En résumé :

  • Une équipe de dev constamment soudoyée pour des problèmes informatiques tiers
  • Et donc des développements inefficaces
  • Et donc une décrédibilisation de l'équipe

La solution ? Enlever les “bruits” paralysant l’équipe, en embauchant quelqu’un pour les “problèmes informatiques”. L’équipe peut se recentrer sur son coeur de métier et retrouver sa crédibilité du fait de la réponse aux attentes sur les “problèmes informatiques”.

Concernant la réduction de la dette, un accompagnement des utilisateurs sur l’existant en attendant les refontes, la création d’API afin de normaliser les données, et de la communication. En conclusion : prendre du recul et ne pas se laisser emporter par son quotidien.

Meetic backend mutation with Symfony

http://fr.slideshare.net/meeticTech/meetic-backend-mutation-with-symfony

Joris Calabrese / Etienne Broutin (Meetic)

Une présentation très bien léchée ! Où l’on découvre la marmite à spaghettis de chez Meetic et de la peur de la moindre modification sans tout casser.

Comment résoudre ça ?

  • Des microservices totalement indépendants des autres
  • Une API (“l’exposure layer”) qui se positionne au-dessus de ces microservices afin d’aggréger les données. Tout ça avec systèmes de cache et en utilisant Guzzle (appels aux microservices) et FOSRestBundle
  • Docker pour lancer les tests en parallèle, avec différents contextes
  • Mise en place massive de tests unitaires
  • Outils utilisés en interne :
    • Gitlab (très bon choix ;) )
    • Jenkins (avec dashboard)
  • Au niveau de l’équipe :
    • Service TMA dédié
    • Equipe dédiée à la migration
    • Formations internes

Bien gérer sa production

Repousser les limites : HTTP cache et utilisateurs connectés

http://lolautruche.github.io/ez/going-crazy-with-caching.html#/

Jérôme Vieilledent (eZ) / David Buchmann (Liip)

Une présentation très intéressante sur le cache HTTP avec un reverse proxy du type Varnish. Le cache HTTP pour des pages anonymes (type site web front en mode non-connecté), c’est simple et tout le monde connaît.

David et Jérôme se sont donc penchés sur son utilisation pour des pages en mode connecté.

En résumé :

  • Utilisation de l’entête Vary pour indiquer ce sur quoi doit varier le cache retourné par le proxy (pas seulement l’URI donc)
  • Implémentation dans le FOSHttpCacheBundle d’un système performant de calcul de hash correspondant au profil utilisateur (et non à l’utilisateur)
  • Ce hash sera injecté dans les entêtes HTTP faites au serveur par le reverse proxy.
  • Et ce hash est utilisé dans l’entête Vary. Le cache sera donc bien spécifique au profil utilisateur.

C'est assez magique et très efficace !

Faites plaisir à vos utilisateurs : surveillez votre prod

https://speakerdeck.com/lyrixx/symfony-live-2015-paris-monitorer-sa-prod

Grégoire Pineau (SensioLabs)

De nombreuses astuces sur l’utilisation de Monolog, librairie de logs intégrée à Symfony.

En résumé :

  • Ne pas hésiter à injecter le logger partout (si on ne veut finalement pas logger, on utilisera la NullHandler)
  • Utilisation des contextes associés aux messages de logs : bannir les sprintf pour les messages !!! Ca sera bien plus simple à parser par la suite !
  • Utilisation des canaux (channels)
  • Utilisation des Processors
    • Permet de formatter automatiquement les données de contexte
    • Possibilité d’indiquer dans chaque ligne de log l’utilisateur connecté (excellente idée !), en implémentant un UserProcessor
    • Ajout d’autres informations utiles (données de la requête, etc.)
    • On injecte le Service Container en entier afin de privilégier le lazy loading

Laisse pas traîner ton log !

https://speakerdeck.com/odolbeau/laisse-pas-trainer-ton-log

Olivier Dolbeau (BlaBlaCar)

Présentation rapide du trio Elasticsearch / Logstash / Kibana.

En résumé (hors détails techniques) :

  • Enrichir ses logs et les formatter
  • Filtrer les logs avec logstash afin d’avoir un joli JSON à envoyé à Elasticsearch
  • Visualiser les données dans Kibana
  • Apparemment, Kibana 4 est un peu rude par rapport au 3.

Les outils du développement

Docker dans le développement web et l'intégration continue

http://j.mp/sflive-docker

Jérémy DERUSSÉ (SensioLabs)

Très bons conseils sur l’utilisation de Docker dans un environnement de développement.

En résumé :

  • Tout peut être mis dans un conteneur
  • Il existe déjà un conteneur pour tout (très pratique pour les outils difficiles à installer, du type base de donnée Oracle)
  • Un conteneur pour MailCatcher : permet de simuler l’envoi de mail et de faire des tests unitaires dessus (exemple : "j’ai reçu 3 emails contenant le mot “test”) !
  • Docker compose (ex FIG) est désormais intégré à Docker et permet de gérer ses conteneurs très facilement
  • Ne pas hésiter à persévérer dans l’utilisation de Docker, au début un peu difficile, on ne le regrette pas par la suite.
  • La redirection de port peut se gérer facilement avec docker-gen + Dnsmasq
  • Des outils pour les environnements non-Linux : boot2docker + docker-machine + Kinematic (interface graphique de gestion des conteneurs sur OS X)

Le pattern View Model avec Symfony2

http://fr.slideshare.net/RomainKuzniak/le-pattern-view-model-avec-symfony2

Kuzniak Romain (OpenClassrooms)

Une présentation sur l’utilisation d’une couche légère située entre le contrôleur et la vue (le ViewModel), avec différents avantages à la clé :

  • La vue (template Twig) n’a accès que à ce dont elle a besoin
  • Simplification des vues (calculs / libellés déterminés en amont dans le ViewModel) et des contrôleurs
  • Réutilisabilité des données

Symfony Debug et VarDumper, ou comment debugger comfortablement

http://www.slideshare.net/nicolas.grekas/symfony-debug-vardumper

Nicolas Grekas (Blackfire.io)

Tout sur l’utilisation de l’excellent outil de Dump intégré à Symfony 2.6+ et pourquoi c’est beaucoup mieux que le vieux var_dump de PHP. Je connaissais déjà, mais c’est vrai que cet outil paraît bête mais est impressionnant et fait gagner beaucoup de temps lors des développements).

Création d’API REST simplement

Plusieurs solutions présentées pour la création d'API REST avec Symfony.

Développer avec le SyliusResourceBundle

http://fr.slideshare.net/ArnaudLanglade/dvelopper-avec-le-sylius-resourcebundle

Arnaud Langlade (Clever Age)

Le SyliusResourceBundle est issu du projet Sylius, utilisable indépendamment et facilitant grandement l’exposition des données :

  • Ce n’est pas un admin generator (pas de templates / formulaires créés)
  • Fonctionne avec Doctrine ORM / ODM
  • Par défaut, même pas besoin de contrôleur pour présenter les données : les routes et les actions (génériques) sont créées pour chacune des entités que l’on souhaite exposer
  • Sérialisation des données via le JMSSerializerBundle + BazingaHateoasBundle pour les relations entre données
  • Personnalisation des paramètres et des requêtes possible

Un bundle que je vais très certainement utiliser dans mes projets, pour des cas relativement simples.

Construire des applications API-centric avec Symfony

http://dunglas.fr/slides/sf-live-2015/#/

Kévin Dunglas (Les Tilleuls)

Une présentation très intéressante qui m’a fait découvrir plusieurs standards que je ne connaissais pas :

  • JSON-LD standardisé par le W3 : liaison de données en JSON (type HAL donc)
  • Hydra (en cours de standardisation par le W3): standard de description d’une API en JSON-LD. Le plugin Hydra Console de Chrome permet de tester les services décrits avec Hydra très facilement.
  • schema.org : définition standardisée d’un grand nombre de types de données courants (personnes, produits, …)

Kévin nous a présenté les bundles Symfony qu’il a créés pour gérer ces standards (création d’entité basée sur schema.org, gestion de JSON-LD, support d'Hydra) et surtout simplifier la création d’API REST avec Symfony.

J’ai trouvé ça très impressionnant et ça donne un peu de fraîcheur dans la gestion des API avec Symfony. Bravo donc !

J'espère en tout cas essayer rapidement cette solution.

Liens vers le bundle de Kévin : https://github.com/dunglas/DunglasJsonLdApiBundle

Elasticsearch dans une infrastructure Symfony2

https://speakerdeck.com/nicolasbadey/elasticsearch-with-elastica-in-symfony2-architecture

Nicolas Badey (Expertissim)

Je connais déjà bien Elasticsearch, mais la présentation est intéressante et rappelle les fonctionnalités qui font la force d’Elasticsearch :

  • Highlighting des résultats
  • Suggester (pour l’autocompletion)
  • Multimatch avec système de boost sur certains champs

Une API et une admin en moins de 10 minutes ? Challenge accepted!

http://marmelab.com/blog/2015/02/24/ngadmingeneratorbundle-create-javascript-admin-panel-rest-api-symfony2-in-minutes.html

Jonathan Petitcolas (Marmelab)

Une démo impressionnate de la création d'une application Symfony "from scratch" avec des entités, une API REST sur ces entités avec le LemonRestBundle, de son interface CRUD avec ng-admin et NgAdminGeneratorBundle, tout cela en 10 minutes et 10 lignes de code.