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

Read the English version

Elasticsearch est capable d’indexer d’énormes volumes de données, aussi bien des documents que des chiffres.
Dans les versions inférieures à la v1.0.0, les facettes permettaient de récupérer des statistiques pour une liste de documents indexés (répartition par tag, moyenne, écart-type,…)
Au fil du temps, l’utilisation de ces facettes a évolué. Les développeurs ont souhaité s’en servir pour réaliser des statistiques de plus en plus poussées.
En réponse à cela, la géniale équipe Elasticsearch a ajouté l’implémentation des agrégations :
- Métriques : Somme, minimum, maximum, moyenne, ….
- “Buckets” : Répartition par terme, par date, par valeur, … Ces agrégations peuvent contenir des sous-agrégations. On peut donc calculer des statistiques dans une répartition par terme, un truc de malade!

Le but de cet article est de décrire une des utilisations qui peuvent être faites de ces agrégations : des statistiques.

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

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

Share Button

Read the English version

Elasticsearch vous permet de réaliser des recherches avancées.
Certains utilisateurs souhaiteront extraire le résultat de leurs recherches sous excel (ou LibreOffice Calc…) pour retraiter les données.

Comme nous l’avons expliqué lors de notre article Exporter des données dans un fichier csv, le but d’un export (réussi) est de limiter l’impact sur le serveur.

Dans Elasticsearch, nous pouvons utiliser les fonctions scan et scroll pour réaliser nos itérations.

Continue reading

Share Button

Share Button

Read the English version

Quand et pourquoi hydrater son objet avec les Transformers?

Quand on utilise Elasticsearch et les Finders du FOSElasticaBundle, les réponses reçues d’Elasticsearch sont automatiquement transformées en objets Doctrine. 

Dans certains cas, vous aurez besoin d’afficher une information issue d’une jointure : la photo, la traduction d’une catégorie, …
Malheureusement, l’hydratation est faite uniquement sur les objets en question : FOSElasticaBundle transforme les ids correspondant à la recherche en objets via un select * in (:ids).
Conséquence : pour chaque entrée dans votre liste de résultats, Doctrine ira chercher la Category associée. Pour 100 enregistrements dans 100 catégories différentes, 100 requêtes simples seront ajoutées. On se rend compte de ce qui peut arriver avec un modèle de données compliqué et plusieurs jointures.

Heureusement, pour éviter cela, vous pouvez surcharger le Transformer.
Continue reading

Share Button

Share Button

Read the English version

Cet article présente comment configurer et rechercher avec Elasticsearch sur un projet Symfony :

Continue reading

Share Button

Share Button

Read the English version

Cet article est le deuxième d’une série consacrée à Elasticsearch.
Il n’a pas pour but de présenter ce qu’est Elasticsearch, vous pourrez en lire plus par exemple sur ce blog : http://blog.zenika.com/index.php?post/2012/11/14/Premiers-pas-avec-ElasticSearch-Partie-1. Mais il vous permettra de mettre les mains dans le moteur, et de comprendre les articles qui suivront.
Continue reading

Share Button