Share Button
CCIh6sjW8AAz9OK

La 9ème édition du Symfony Live s’est déroulée ce jeudi 09 avril à la Cité Universitaire de Paris. Contrairement aux précédentes éditions, les conférences ne se sont déroulées que sur une journée (le jeudi donc) alors que le vendredi était consacré à des sessions de formations, auxquelles nous n’avons pas assisté. De même, des flash talks de 10 minutes avaient lieu dans la salle principale alors qu’ils se déroulent d’habitude dans une salle annexe. C’est plutôt une bonne idée car certains sujet sont intéressants mais n’ont pas forcément suffisamment de contenu pour durer 40 minutes. Retour sur ces conférences.

Symfony, déjà 10 ans

Comme d’habitude, c’est Fabien Potencier qui s’occupe du discours d’ouverture. Cette année, il a profité de sa conférence improvisée (c’est ce qu’il prétend) pour revenir un peu sur l’histoire de Symfony. On retrouve des élements que l’on connait déjà, et d’autres un peu moins. Il s’est notamment expliqué sur les raisons de l’énorme virage opéré entre Symfony 1 et Symfony 2. S’en suit quelques confessions, sur le fait que s’il ne regrette pas la refonte de Symfony (à juste titre), il ne pourrait pas la refaire aujourd’hui, ou sur le fait que sa mère soit presque plus geek que lui (elle lui aurait appris l’intérêt de WhatsApp). De même, il s’explique sur les raisons de sa prise de distance avec le PHP-FIG pour divergence d’opinions. Il répond ensuite à quelques questions posées par des développeurs sur la concurrence de Laravel (basé sur Symfony…) ou l’avenir de Symfony. Fabien annonce également une version 2.8 LTS qui sortira en même temps que la version 3.0 en novembre. Cette 2.8 sera en fait la version 3.0 mais contiendra tout ce qui est déprécié en 3.0, le but étant de faciliter la migration vers la 3.2 pour les entreprises. Une première conférence non technique mais très intéressante. On termine en apprenant que c’est le dernier Symfony Live qui se tient à la Cité Universitaire (victime de son succès), et on apprend également que la Symfony Con, qui promet d’être énorme, se déroulera du 3 au 5 décembre aux Folies Bergères à Paris.

Ce qu’il faut retenir :

  • Symfony 2.8 LTS et 3.0 en novembre (3.2 sera LTS)
  • SymfonyCon aux Folies Bergères du 3 au 5 décembre
  • Les bundles c’est bien. Mais réfléchissez avant de les utiliser.

Le SyliusResourceBundle

On entre dans le vif du sujet avec une des problématiques récurrentes des interfaces d’administration : le CRUD. Il existe plusieurs solutions, EasyAdmin ou SonataAdmin pour les plus connues, et Arnaud Langlade nous livre “sa” (il n’a probablement pas travaillé seul) version : le SyliusResourceBundle. Ce bundle n’est pas un admin generator dans la mesure où il ne va pas générer de formulaires, mais propose une base solide pour gérer ses ressources dans le backend. Il repose sur des grands classiques comme FOSRestBundle, JMSSerializerBundle ou WhiteOctoberPagerfantaBundle. Cette conférence avait bien démarré mais on s’est perdu sur la fin dans les explications trop détaillées de la configuration du bundle qui semble pouvoir faire le café. On peut en effet pousser la configuration assez loin en définissant ses méthodes et critères de tri, ou même la pagination. Et tout ça se fait dans le routing.yml. Je suis pas fan, mais c’est une question de goûts.
Les slides sont ici et vous pouvez retrouver la documentation du bundle ici. C’est l’heure d’une petite pause!

Ce qu’il faut retenir :

  • N’est pas un Admin Generator
  • Est basé sur des APIs

De l’importance du cache HTTP

A chaque Symfony Live sa conférence sur le cache HTTP. Cette année, ce sont Jérôme Vieilledent et David Buchmann qui s’y collent avec une présentation du FOSHttpCacheBundle (ou plutôt de la librairie FOSHttpCache), et notamment de la manière de gérer le Contexte Utilisateur. En effet, si tout le monde ou presque sait maintenant gérer son cache de manière efficace, il reste parfois des petites problématiques sur la gestion des données dynamiques et propres à l’utilisateur connecté. Grâce à des explications claires et un petit jeu de rôle parfaitement joué (si, quand même), on a pu comprendre le fonctionnement du reverse proxy. Les slides de cette présentation sont disponibles ici, je ne sais pas si le petit jeu de rôle a été filmé et/ou diffusé car je n’ai tout simplement pas cherché. Place aux flash talks.

Ce qu’il faut retenir :

  • Le cache c’est génial
  • Mais attention au User Context. Si on se plante, tout le monde pourrait se retrouver connecté avec le compte admin

Bien gérer ses logs

Dans cette (trop) courte présentation, Olivier Dolbeau nous explique comment bien exploiter ses logs grâce à la stack ELK (Elasticsearch, Logstash, Kibana). Le principe est très simple : Logstash se charge de collecter, filtrer et analyser les logs, Elasticsearch les stocke de manière intelligente, et Kibana permet de les exploiter grâce à des statistiques et des interfaces graphiques. Quand je dis que cette conférence est trop courte, ce n’est pas un reproche à Olivier. En 10 minutes, on a déjà appris beaucoup, mais j’aurais personnellement aimé que ça dure plus longtemps. Une prochaine fois?

Ce qu’il faut retenir :

  • ELK!
  • Exploitez vos logs pour connaitre les faiblesses de l’application
  • Et pour connaitre le comportement de vos utilisateurs

Retour d’expérience, comment tout changer?

Bastien Jaillot et Etienne Samson nous parlent maintenant de leur expérience chez Médiapart. En résumé, une application vieillissante avec plein de bugs, perte de confiance du métier, développeurs démotivés, il fallait tout changer. C’est ce qu’ils ont fait. Si le changement technique est une vraie réussite, le facteur humain est plus difficilement maîtrisable, et si le métier a tout de suite été motivé, la surprise est venue de certains développeurs un peu réfractaires. Les conférenciers ont également utilisé une phrase qui m’a plu : “il ne faut pas avoir peur de la dette technique, tant qu’elle est remboursée“. Trop de gens perdent beaucoup de temps et d’argent par peur de la dette technique, alors que maîtrisée, elle est un atout. Les slides sont là.

Ce qu’il faut retenir :

  • Ne pas hésiter à tout refondre si l’application n’est plus satisfaisante et robuste
  • La dette technique, c’est pas grave, mais il faut la maîtriser

Sonata Project chez Canal+

Thomas Rabaix est le principal contributeur au projet Sonata, qui regroupe un nombre assez important de bundles pour faire pas mal de choses. Cette conférence présentait comment ces bundles étaient utilisés chez Canal+ dans le cadre de la refonte de sa plateforme web, une plateforme à l’architecture particulière et aux nombreuses contraintes techniques.
Les slides ont été mises en ligne.

Elasticsearch et Symfony

Un sujet qui nous intéresse particulièrement du fait de notre expérience avec Elasticsearch et Symfony, présenté par Nicolas Badey. Cette conférence a balayé les différentes fonctionnalités d’Elasticsearch et leur utilisation dans un projet Symfony. Une conférence qui reste intéressante même si nous connaissons bien le sujet. Un petit regret : le débit de parole un peu rapide. Mais vu l’étendue du sujet et les 10 petites minutes disponibles, ça reste pardonnable. Les slides sont disponibles ici.

Ce qu’il faut retenir :

  • On peut tout faire avec Elasticsearch

Le pattern View Model

Denière conférence de la matinée par Romain Kuzniak, qui traite du pattern View Model. Ce pattern bien connu (et ses variantes) permet de conserver la séparation des vues et du modèle. En effet, on a trop souvent tendance à retourner directement le modèle à la vue (via le controlleur). Mais si le modèle change, il faut également changer la vue. La solution : rajouter une couche d’abstraction, l’assembleur, qui va se charger d’agréger les données du modèle pour les passer à la vue. Les slides sont en ligne ici.

Ce qu’il faut retenir :

  • Ne couplez pas votre modèle avec vos vues

Maintenant, à taaaaaaaaable!

Même on ne vient pas au Symfony Live pour manger, l’année dernière, j’avais été un peu frustré d’arriver devant un buffet vidé de son contenu (on avait un peu traîné à faire la queue). Cette année, rien de tout ça. Sensio Labs n’aimant probablement pas faire d’erreurs, ils ont tapé très fort avec un buffet gigantesque et bien fourni (la preuve avec une photo faite par Smile).
CCJva5HWEAA69wF
Un flash talk a eu lieu durant le repas dans cette salle bondée. La pause du midi étant sacrée, et comme on entendait de toute façon pas grand chose, on a préféré profiter du beau temps dans le Parc Montsouris.

Modernisation du backend Meetic

Cette conférence fait écho à celle sur la conduite au changement chez Médiapart, mais plus du point de vue technique. Joris Calabrese et Etienne Broutin nous expliquent comment l’énorme volume de code et la croissance de l’application ont conduit les équipes techniques à avoir peur de mettre en production, de corriger des bugs, de refactorer. Cette conférence me parle particulièrement car c’est exactement le but de la mission que je mène actuellement chez un client. La différence est que chez Meetic, la refonte et le changement de stratégie a déjà été opéré, et il reste rassurant de voir que c’est effectivement la bonne chose à faire. Vous pouvez voir la présentation ici, et comme l’a souligné un “poseur de question” après la conférence, elle est plutôt jolie.

Ce qu’il faut retenir :

  • Vos développeurs ne sont plus maîtres de la technique?
  • Les mises en production sont hasardeuses?
  • Refaites tout!

Et maintenant place à Grégoi… Ah ben non. Nouveauté de cette année, et pour le coup c’est plutôt une mauvaise idée, nous avons droit à une page de publicité. Un peu comme quand on regarde la télé chez soi. Un des sponsors gold nous fait un petit speech sur sa boite, ce qu’ils font, combien ils sont, qu’ils recrutent (tout le monde recrute), … Bref, du blabla commercial qui ne m’intéresse pas. J’en ai profité pour aller marcher un peu.

Logger la prod

Et maintenant, place à Grégoire Pineau (et son chat) pour nous parler des logs. C’est un peu le préquel de la conférence d’Olivier. Rien de bien nouveau ici si vous avez déjà utilisé Monolog et ses channels, mais la conférence était néanmoins très intéressante, et on a découvert quelques petits tips assez utiles (comme l’utilisation du NullLogger pour éviter les if ($sdebug) {} ou même l’utilisation du contexte pour pouvoir agréger efficacement ses logs). Les slides sont ici.
Ce qu’il faut retenir :

  • Loguez encore et encore
  • Exploitez les canaux de Monolog et utilisez le contexte pour pleinement tirer parti d’un log
  • Une notice EST une erreur, n’en laissez pas

Débugger comme un pro avec VarDumper

Dans une conférence similaire à celle de l’année dernière, Nicolas Grekas nous parle des nouveautés introduites dans la dernière version des composants Debug et VarDumper. S’en suit une petite démo en live où on voit que l’on pourra bientôt vraiment débugger de manière efficace en PHP. Plutôt convaincant, et il faudra bientôt perdre le réflexe d’utiliser var_dump(). Les slides sont disponibles ici.

Ce qu’il faut retenir :

  • Plus de var_dump, utilisez le VarDumper
  • La DebugBar va devenir encore plus utile

Des applications API-centric avec Symfony

Kévin Dunglas nous parle maintenant du développement d’API modernes et des nouveaux standards qui commencent à prendre forme, notamment JSON-LD poussé par le W3C et schema.org. Après une présentation des APIs, il parle maintenant des bundles réalisés pour faciliter le développement d’applications basées sur des APIs, notamment le JsonLdApiBundle qui devrait sortir en même temps que Symfony 2.7.
Les slides de cette conférence très intéressante sont disponibles ici.

Ce qu’il faut retenir :

  • Les APIs, c’est la vie
  • JSON-LD, Hydra, schema.org sont l’avenir des APIs

La puissance du DIC

Après une “petite” page de publicité que j’ai préféré ne pas regarder, Adrien Brault nous parle du DIC, Conteneur d’Injection de Dépendances, qui est au centre du framework Symfony puisqu’il permet aux services d’interagir. Cette conférence m’a un peu déçu car j’aurais voulu pousser les explications beaucoup plus loin, comprendre comment fonctionne le DIC en interne, apprendre comment l’optimiser etc. Au lieu de cela, la présentation est resté très basique, ce qui est une excellente chose pour les débutants, mais moins intéressant pour tous ceux qui ont déjà travaillé avec les services.
Les slides sont disponibles ici.

Ce qu’il faut retenir :

  • Il faut maîtriser le DIC

La virtualisation avec Docker

Un petit soucis technique a retardé le début de cette excellente conférence sur l’utilisation de Docker pour développer, pour lancer les tests, pour envoyer des mails, bref…. pour tout faire. Jérémy Derussé nous fait part de sa fascination pour la virtualisation. Que ce soit pour démarrer un projet Oracle en 15minutes, ou travailler sur 5 projets en parallèle et sur des technos différentes, Docker est un précieux allié. Cette conférence très technique, et peut être difficile à suivre pour qui n’a jamais fait de Docker, a permis de démontrer les nombreux avantages et points forts de Docker.
Les slides sont consultables ici.

Ce qu’il faut retenir :

  • Une VM c’est gourmand, Docker c’est léger
  • Virtualisez tout ce que vous pouvez pour isoler
  • Un besoin? Il y a un conteneur pour ça

La fast API

Après une page de pub (ou c’était avant?), Jonathan Petitcolas prend son courage à deux mains pour un dangereux exercice de live coding. Son objectif? Réaliser une API (certes simple) en moins de 10 minutes grâce au NgAdminGeneratorBundle (basé sur AngularJs comme son nom l’indique). Une petite conférence vraiment convaincante tant il semble facile et rapide de réaliser des APIs (et les interfaces CRUD).
Comme Jonathan a fait la démo en live, il n’y a pas de slides. Néanmoins, il existe un tutoriel qui explique la même chose.

Ce qu’il faut retenir :

  • Très très rapide pour faire un CRUD à base d’API
  • Peu de code, mais beaucoup de configuration (une commande l’écrit pour vous)

Malheureusement, c’est la dernière conférence à laquelle j’ai assisté. La chaleur et les trop nombreuses présentations commerciales qui ont eu lieu entre chaque talk ont eu raison de moi. Ces présentations de pub ont aussi eu pour effet de décaler le planning de précieuses minutes (voire dizaines de minutes) et nous n’avons pas pu rester pour assister à la dernière conférence et à la session de clôture (le TGV n’attend pas).

Pour conclure ce Symfony Live

En conclusion, il s’agissait d’une version un peu réduite du Symfony Live. Je ne sais pas encore si je préfère un ou deux jours de conférences. Globalement, l’événement est plutôt réussi malgré quelques conférences au niveau technique insuffisant (à mon gout) et malgré les trop nombreuses présentations commerciales non planifiées des sponsors Gold. J’espère que sur ce point, la Symfony Con ne s’inspirera pas du Symfony Live. Sur un plan plus anecdotique, les goodies étaient également un peu décevants.
Mais on ne peut que féliciter, à nouveau, Sensio Labs pour l’organisation bien rodée (dédicace aux “vigiles”) et on a hâte d’être en décembre pour la Symfony Con.

Share Button

Share Button

Lire la version française

Elasticsearch is able to index huge sets of data, documents as well as numeric data.
In the versions before the v1.0.0, facets allowed to calculate statistics for a list of indexed documents (tag distribution, mean, standard deviation, …)
Over time, the use of facets evolved. The developers wished to use them to do more and more complex statistics.

To fit this need, the great Elasticsearch team added the implementation of aggregations.
- Metric: sum, minimum, maximum, mean, …
- Buckets : term, date or value distributions (and many others) aggregations can contain sub aggregations. So, we can calculate statistics inside a term distribution, how crazy is that?

The goal of this post is to describe one of the many uses of aggregations : statistics.

Continue reading

Share Button

Share Button

Read the English version

Dans cet article, nous allons trier et paginer notre liste d’articles avec Elasticsearch, Symfony et le WhiteOctoberPageFantaBundle.
C’est la suite de l’article recherche simple avec Elasticsearch, que nous vous recommandons de lire. Cet article part du principe que la recherche est déjà implémentée, et tout le code ne sera pas repris ici.
Paginer avec Symfony est très facile et consiste juste à ajouter des propriétés à notre modèle Search et ajouter le WhiteOctoberPageFantaBundle pour prendre en charge la pagination.

Mettre à jour le modèle

Premièrement, mettons à jour le modèle Search pour ajouter les propriétés qui vont gérer le tri et la pagination (comme dit précédemment, nous ne montrons pas tout le code mais uniquement ce qui change par rapport à l’article précédent. Comme d’habitude, vous pouvez trouver le projet complet sur Github.
Continue reading

Share Button

Share Button

Read the English version

Il y a quelques temps, j’ai rencontré un “problème” en utilisant des variables numériques comme clés dans un tableau Twig.
C’est un problème très spécifique qui est dû à l’utilisation de fonction php array_merge. La documentation spécifie que “les clés numériques des tableaux d’entrées seront renumérotées”. Mon but n’est donc pas d’expliquer les raisons de ce comportement, mais plutôt de proposer une solution.
Continue reading

Share Button

Share Button

Lire la version française

In this post, we’re going to sort and paginate our articles list with Symfon Elasticsearch and the WhiteOctoberPageFantaBundle. This post follows the post about Indexing and simple search with Elasticsearch and Symfony that you should read. We suppose you have already implemented the search system and all the code will not be shown here.
Paginate with Symfony is as easy as adding some properties to our Search model and ask the WhiteOctoberPageFantaBundle to handle the pagination.

Updating the model

First, let’s update the search model to add some properties to handle the sorting and the pagination (as we said before, we’ll not show the whole code but only the one which has been changed since we wrote the previous post). And as usually, you can find the full project on Github.
Continue reading

Share Button

Share Button

Lire la version française

Today, I encountered an “issue” when using numeric variable as key in a Twig array.
This is a very specific problem which is due to the use of the array_merge php function. The documentation tells that “values in the input array with numeric keys will be renumbered”. So my goal here is not to explain the reasons of this behaviour but rather explaining my problem, and propose a solution.
Continue reading

Share Button

Share Button

Lire la version française

The XML configuration for FOSElasticaBundle is powerful, but in some cases this is not enough.
In order to solve this, FOS allows you to override the transformation from Doctrine Object to an ElasticSearch Document : ModelToElasticSearchTransformer.

Continue reading

Share Button

Share Button

Lire la version française

When and why hydrating objects thanks to Transformers?

When you use Elasticsearch and the FosElasticaBundle Finders, the responses received from Elasticsearch are automatically transformed into Doctrine objects.

In some cases, you will need to display some information that come from a join : a photo, a category translation, …
Unfortunately, the hydratation is only done on the objects : FosElasticaBundle transforms the ids that match your search into objects via a select * in (:ids).
The consequence is that, for each entry in your results list, Doctrine will make a query for the join object (for example a Category). For 100 results in 100 different categories, 100 simple queries will be done. You understand what can happen with a complex model and several joins.

Fortunately, you can avoid that by overriding the Transformer.
Continue reading

Share Button

Share Button

Read the English version

La configuration XML du FOSElasticaBundle est très performante. Il existe quelques rares cas ou cela ne s’avère pas suffisant.

Pour résoudre ce problème, FOS permet de surcharger la transformation entre un Objet Doctrine (ORM ou ODM) et un Document ElasticSearch : le ModelToElasticaTransformer.

Continue reading

Share Button

Share Button

Read the English version

Dans un système de données non relationnel, ce qui peut manquer ce sont les jointures.
Heureusement, Elasticsearch propose des solutions pour répondre à différents besoins :

Array Type

Lire l’article sur elasticsearch.org

Comme son nom l’indique : ce peut être un tableau de types natifs (string, int, …) mais aussi d’objets (c’est la base utilisée pour les “objects” et les “nested”).
Continue reading

Share Button