L’AFUP, qui fête ses 10 ans, organisait cette année encore le Forum PHP. Deux jours de conférences et d’échanges incontournables sur tout ce qui fait la richesse de l’écosystème de PHP. Clever Age y était (en tant que partenaire, mais surtout par passion) et vous livre son ressenti.
Près de 500 personnes était présentes à la Cité des Sciences cette année.
Nous n’allons pas pouvoir vous parler de toutes les conférences car il nous était impossible d’être présents dans toutes les salles. Mais celles auxquelles nous avons assisté étaient excellentes et voici donc nos résumés :
PHP, son ecosystème : passé, présent et futur
Damien : Cette première conférence, par Rasmus “Papa” Lerdorf, ouvrait parfaitement cette journée consacrée à PHP. Non sans humour et photos compromettantes, l’inventeur du langage le plus répandu sur le web nous a présenté sa version de l’histoire. De son enfance au Groenland jusqu’à Moutain View et l’arrivée de Mosaic, en citant quelques uns des nombreux contributeurs et partageant des anecdotes sur le langage.
Il nous a aussi gratifié de quelques phrases déjà cultes :
– « the parser sucks ! Let’s do PHP n+1 »,
– « PHP is just a stupid tool »,
– et un petit troll : « if you are a code purist you are in the wrong room ! »
Alors évidement, c’est sorti du contexte. Mais c’est intéressant dans le sens où l’on voit que Rasmus n’est pas ébloui par le succès de son bébé : le langage PHP a ses défauts, on ne se le cache pas.
Concernant PHP 6, la perte de certains développeurs clés a rendu obligatoire l’abandon du projet en l’état. Mais PHP 5.4 devrait sortir courant 2011. On parle de JIT, Traits, array deferencing et d’amélioration des performances, mais rien de sûr pour l’instant.
Martin : Quoi de plus pertinent qu’une entrée en matière par le créateur du langage, qui retrace tout l’historique de cet outil de “templating” qui ne servait à l’origine qu’à afficher des informations, gérer une authentification ou construire des formulaires.
Rasmus conclut que finalement PHP n’est « pas cool », puisque maintenant tout le monde sait en faire !
Les revues de code, ou comment faire fructifier son capital humain
(Voir le support de la conférence en ligne sur slideshare)
Damien : [Jean-Marc Fontaine->http://twitter.com/jmfontaine], d’Alter Way, nous présentait le concept de revue de code (plus connu sous le petit nom de Peer Code Review). Le principe est de faire des réunions dans lesquelles les développeurs d’un projet lisent et interprètent le code prêt à commiter / prêt à mettre en production d’un autre développeur.
Ce mode de fonctionnement permet beaucoup de choses :
- un meilleur partage de la connaissance de l’applicatif
- une formation pratique pour les développeurs juniors
- une amélioration globale de la qualité du projet
- et surtout, l’élimination d’une bonne quantité de bugs avant même la mise en recette du code
Si c’est si bien, pourquoi ne l’utilisons nous pas plus ? Pourquoi n’en entendons nous jamais parler ? Pour plusieurs raisons. La première est financière. Il faut convaincre les managers, alors qu’ils n’y voient qu’une perte de temps (au début tout du moins). Ensuite vient le facteur humain, il peut être délicat au sein d’une équipe de développement de ne pas se sentir “attaqué” quand vient notre tour d’être critiqué. Bien que cette pression soit extrêmement positive (on code mieux quand on sait qu’on va être relu par les copains) elle peut être mal perçue ou supportée par certains.
Si le sujet vous intéresse, il existe un ouvrage (gratuit) chez Smartbear.com nommé “Best kept Secrets of Peer Code Review”, et l’outil ReviewBoard qui comble les besoins d’organisation d’une revue de code.
Martin : L’erreur est humaine, alors vaut-il mieux la trouver au moment du développement ou en production ? Plus un bug est détecté tôt et moins il coûte cher !
Le but est donc de :
– Ne pas regarder son code mais celui des autres
– Chercher les bugs, mais aussi les défauts de conception
L’automatisation n’est qu’un outil, non exhaustif, mais évidemment bien utile. La revue de code permet de compléter les moyens mis à notre disposition pour améliorer la qualité du code.
Allez lire les slides pour en savoir plus sur l’organisation des revues de codes, car Jean-Marc Fontaine explique bien que la méthodologie est primordiale pour un résultat concret !
A noter que l’auteur co-écrit également un blog à propos de l’industrialisation de PHP
Propel : un ORM qui aime les développeurs
(Voir le support de la conférence en ligne sur Prezi)
Damien : Présenté par Arlo Borras d’eTF1, cette conférence a fait salle comble, mais j’ai été un peu déçu. Elle s’adresse aux gens qui n’auraient pas encore manipulé d’ORM.
Cette présentation part vraiment de zéro sur la manipulation d’une base de données en PHP, afin de mettre en valeur les avantages certains d’un ORM. Bonne présentation, mais si vous utilisez déjà un Propel / Doctrine ou autre, vous n’y apprendrez rien.
Quelques mots sur Propel 1.6 tout de même, les migrations devraient être gérées par le produit, ainsi que la sérialisation native (XML, JSON et d’autres).
Ligne de commande sous Linux : effrayant ? Non : indispensable !
(Voir le support de la conférence (pdf))
Martin : Un petit cours sur la ligne de commande par Pascal Martin, les bonnes pratiques, un rapide résumé, simpliste pour les gourous de VI, mais un bon rappel pour les autres. Les slides sont une bonne cheat sheet, à garder sous la main avec de très bons exemples. Un cours didactique qui donne envie d’aller plus loin !
TAS : Terrible Audit de Sécurité
(Voir le support de la conférence en ligne sur slideshare)
Damien : Présenté par Damien Seguy, cette conférence (au style très Kaamelott !) avait comme fil rouge l’audit de sécurité de Pimcore, un CMS open-source basé sur le Zend Framework.
ZF (comme tout framework fullstack) se charge de gérer de nombreuses sécurités automatiquement (
CSRF dans les formulaires par exemple), mais ses protections deviennent caduques en cas de mauvaise utilisation par le développeur.
On a donc parlé de référentiel de sécurité, de Tokenizer (utilisé pour retrouver des instructions PHP) et de bonnes pratiques. Un bon exemple est le cas du salt sur les identifiant de session : lors du vol du cookie de session (chose qui va devenir TRÈS courante avec Firesheep), l’attaquant ne se retrouve pas identifié comme un utilisateur. Le salt peut être une adrese IP, un User-Agent, ou toute autre variable d’environnement susceptible de changer d’un utilisateur à un autre.
Une présentation très intéressante que je recommande.
Martin : Damien Seguy est expert PHP et co-auteur d’un livre intitulé “Sécurité PHP5 et MySQL”. C’est un sujet qu’il traite régulièrement, et dont il convient de maitriser les bases ! Sa démarche est simple : il nous invite à faire un référentiel de sécurité !
– Une liste des risques
– Une liste des vecteurs de risque
Vous avez maintenant une matrice de sécurité. Vous pouvez donc analyser votre code à la recherche de failles potentielles. Il ne restera plus qu’à implémenter une parade pour chaque faille découverte. Si la méthodologie est simple, la mise en place peut être plus complexe, et je vous invite à lire la prose de l’auteur pour en savoir plus.
Les frameworks, essentiels dans l’écosystème php
(Voir le support de la conférence en ligne sur slideshare)
Martin : Présentée par Xavier Lacot et Bastien Jaillot (de Clever Age), cette conférence avait pour but de présenter les points clés liés à la sélection d’un framework en PHP. Ils sont nombreux, mais quels sont les critères de choix ? Après une présentation générale pour poser les bases du débat, la première question à se poser est : ai-je besoin d’une solution intégrée ou d’un framework pour ce projet ? Les éléments essentiels sont ensuite abordés, à savoir :
– Les fonctionnalités de base suffisent-elles ?
– Devra-t-on réinventer la roue et tout re-développer ?
– Le client a-t-il des besoins spécifiques ?
– Quelle liberté d’action aura-t-on ?
Tout cela résumé dans une phrase : « Avec un framework, on adapte l’outil au besoin du client, alors qu’avec une solution intégrée, on adapte les besoins du client à l’outil. »
On passe ensuite en revue les points importants dans le choix d’un framework, ainsi qu’un historique et un comparatif des frameworks PHP.
Voilà ! Vous avez toutes les bases dans leurs slides pour faire votre choix !
Optimisation des performances LAMP
(Voir le support de la conférence en ligne sur slideshare)
Damien : Cyril Pierre de Geyer et Guillaume Plessis ont eu 45 min pour nous parler des optimisations réalisables sur la plateforme LAMP (Linux, Apache, MySQL et PHP). Massivement utilisées dans le monde de PHP, les idées d’optimisations sont connues, mais pas suffisamment appliquées — par manque de temps ou de compétences.
La performance, avant de s’optimiser, ça se mesure. Les outils cités sont toujours les mêmes : ab (Apache Bench), Siege, Funkload et JMeter. Ce dernier étant le plus complet, il permet la mise en place de scénarios complets. Bien plus symptomatique qu’un benchmark sur une homepage.
Je retiens tout de même la recommandation qui consiste à soulager Apache de la livraison des ressources statiques (images, css et compagnie) en utilisant par exemple Nginx. C’est terriblement efficace, aussi bien pour la charge serveur (moins de hits, moins de processus Apache) que pour le client (placer Nginx sur un sous domaine pour que le navigateur fasse du téléchargement parallèle).
On regrette un peu de ne pas avoir entendu parler de mod_pagespeed, le module Apache développé par Google qui automatise de nombreuses tâches d’optimisations.
Martin : Cyril Pierre de Geyer et Guillaume Plessis présentent la méthodologie à appliquer pour améliorer ses performances sur le classique LAMP :
– savoir ce qui se passe,
– analyser la situation,
– simuler pour reproduire,
– améliorer.
Quelques conseils pratiques et une petite liste d’outils indispensables étayaient cette excellente conférence. Vous retrouverez tout cela dans leurs slides.
Jeux sociaux & Cloud Computing : une histoire de scalabilité
(Voir le support de la conférence (pptx))
Damien : Laurent Letourmy, le directeur Technique de Weka Entertainment, a partagé avec nous l’histoire d’une application Facebook qui, victime de son succès, les a fait passer sur le cloud.
Is Cool (c’est son petit nom) est une application qui permet de donner des points à ses amis. Martin est cool, je lui donne un point. Tiens, hier j’ai reçu 4 point, je vais en donner à Xavier, etc. Le jeu à été mis en ligne en octobre 2008 sur des serveurs Ubuntu LAMP. Dès novembre 2008, les premiers problèmes se sont fait sentir et Weka a eu le bon réflexe : passer sur le Cloud !
En seulement 7 mois, Is Cool était servi à plus de 800 000 visiteurs uniques par jour.
L’architecture choisie est intéressante. Par exemple, les bases de données. Elles sont distribués horizontalement, via plusieurs instances, mais aussi verticalement, en limitant le nombre de ligne par table (et multipliant ainsi le nombre de table).
La conférence a ensuite beaucoup parlé des outils utilisés par Weka, notamment Git, qui leur permet de faire des mises en production tous les jours, et les outils de monitoring, dont Pinba. Pinba permet de mesurer les performances d’une application PHP en temps réel, avec de nombreux marqueurs par défaut, qu’il est possible d’étendre.
On retient aussi le choix de Redis en base de donnée No-SQL, choix motivé par les excellentes performances de l’outil.
Introduction au monde No-SQL
Martin : Le No-SQL, c’est à la mode depuis quelque temps, certains ont testé, mais pas la majorité. Les offres sont multiples et il n’est pas évident de s’y retrouver, de tout tester, tout comparer pour trouver son bonheur.
Damien Tournoud nous épargne cela en faisant un retour d’expérience complet sur les solutions existantes. Il prend le temps d’expliquer et de mettre une solution en face de chaque besoin.
Il distingue 5 catégories de produits et les outils correspondants :
– les données temporaires (Memcached),
– les données simples (Redis),
– les données structurées (MongoDB),
– les files d’attente (Beanstalkd),
– les index Full-text (Apache Solr ou Sphinx).
Plus besoin de chercher, l’essentiel est là ! Pour l’argumentaire, je vous laisse lire ses sildes.
Déboguer son code – Xdebug
(Voir le support de la conférence (pdf))
Damien : La seconde journée commence par une présentation de Xdebug par son auteur, Derick Rethans. De nombreux développeurs PHP ne l’utilisent pas encore, alors que c’est d’une aide très importante dans le débogage.
Entre l’affichage des stracktraces, des var_dump
formatés, du profiling et l’analyse pas à pas, Xdebug est l’outil ultime du développeur.
Au cours de sa présentation, Derick nous a présenté de nombreux paramètres de configuration (en appuyant sur le fait que TOUT est configurable dans Xdebug), dont celui-ci que je suis ravi d’avoir découvert :
xdebug.scream = 1
La variable n’a pas un nom très parlant : elle désactive l’opérateur de contrôle d’erreur “@”. Ce signe peut parfois cacher des erreurs importantes, l’option est donc très utile sur un poste de développeur.
La démonstration de l’analyse de script pas à pas était aussi intéressante. Derick n’aime pas trop les IDE, alors il a développé son propre logiciel de débogage, spécialement pour PHP.
Martin : Tout le monde connait XDebug, quelques uns l’utilisent, mais qui le connait aussi bien que son auteur ? C’est tout l’intérêt de cette conférence, le partage des connaissances autours de cet outil bien plus complet qu’on ne l’imagine.
XDebug existe depuis 8 ans, et je l’utilise depuis au moins 6 ans. Pourtant, je n’en connaissais pas la moitié des fonctionnalités et paramétrages et je l’utilisais de manière très basique.
Avec XDebug, on peut donc voir la liste des appels de fonctions, mais aussi paramétrer l’ouverture automatique de l’éditeur avec le bon fichier et la ligne correspondant à l’erreur. Utiliser des outils de visualisation, comme KCacheGrind ou ses dérivés, enfin ça c’est pour l’essentiel ! Pour le détail, lisez la doc de XDebug !
Un site web performant, tout est dans le réseau et le navigateur
(Voir le support de la conférence (pptx))
Damien : Éric Daspet nous fait revenir sur terre après la conférence sur l’optimisation LAMP. Optimiser son PHP, accélérer son MySQL, c’est bien, mais si on y regarde de plus près, la majorité du temps d’attente d’un utilisateur se passe dans son navigateur.
Le téléchargement des images, des CSS, Javascripts et le temps de rendu du navigateur représenteraient plus de la moitié du temps d’attente (son exemple parlait d’un ratio de 90 %, mais je pense qu’il s’agit là d’un cas extrême).
Les optimisations possibles, on les connait déjà :
- concaténer les CSS et JavaScripts
- utiliser des sprites pour les images
- configurer le keep alive d’Apache de façon à garder une connexion TCP ouverte entre deux téléchargements (on peut mettre entre 2 et 3 secondes, mais attention, la charge serveur augmente…)
- utiliser gzip et compresser correctement les binaires
- placer les javascripts à la fin de la balise body
Plein de bons conseils de développement front qu’il était bon de rappeler à une audience développant principalement côté serveur.
Martin : J’avais déjà eu l’occasion de voir Éric Daspet à l’œuvre, et je connaissais donc bien la problématique, et les moyens d’arriver à un résultat intéressant. C’est un sujet passionnant, et si vous ne le connaissez pas, ne ratez pas sa prochaine conférence ou son livre en préparation quand il sortira !
L’essentiel dans la performance, est de limiter le nombre d’appels HTTP, et de réduire leur poids. Les techniques sont variées, éprouvées maintenant, et quand on connait le sujet, l’implémentation de bonnes pratiques est simple à mettre en œuvre pour un résultat saisissant.
Les techniques évoluent, s’affinent et parallèlement les besoins augmentent, c’est un domaine à connaitre absolument, alors initiez-vous avec les slides ! A mon avis, c’est en train de devenir un métier à part entière.
Le Cloud Computing pour PHP
(Voir le support de la conférence (pdf))
Martin : Une présentation des différentes formes de Cloud Computing :
– IaaS : Interface As A Service, un serveur scalable avec facturation à la consommation
– PaaS : Plateform As A Service, un serveur d’application clé en main
– SaaS : Software As A Service, un logiciel en ligne
Avantages et inconvénients du cloud, la scalabilité et le paiement des ressources réellement utilisées est un plus incontestable, qu’en est-il de la dépendance à l’infrastructure ou de la propriété des données dans le cas de IaaS ? De la sécurité ? De l’interopérabilité ? Du support ? Des performances ?
Le Cloud trouve sa voie, il a du potentiel, utilisez le à bon escient !
Suivi de qualité – PIC, Plate-forme d’Intégration Continue
(Voir le support de la conférence (pdf))
Martin : Le projet PIC présenté l’année dernière déjà au forum PHP revient en la personne de Gabriele Santini pour un retour d’expérience et une invitation à suivre l’exemple.
Le but de l’intégration continue est :
– Exécution de tests automatisés
– Analyse de la qualité
– Remontée d’informations
La mise en place des outils adaptés (PhpUnderControl, PHPUnit, PHPDocumentor, PHP_codeSniffer, Xdebug, PHPMD, PHP_CodeBrowser, PHP_Depend, Sélénium) s’est révélée un peu laborieuse, mais son utilisation à tenu ses promesses.
C’est pourquoi ils ont procédé à la “Débianisation” afin de faciliter la prise en main de la plateforme.
Il est temps de tester tout cela, la suite est prévue avec l’intégration de Sonar ou Hudson.
Gabriele insiste cependant sur un point : « Installer l’outil ne suffit pas, il faut aussi un accompagnement au changement ! »
Zend Framework 2
(Voir le support de la conférence (pdf))
Martin : Mickael Perraud assisté de Julien Pauli, tous deux contributeurs du ZF, nous présentent les nouveautés de la prochaine version du framework.
Au programme :
– Amélioration de l’extensibilité
– Amélioration des performances
– Amélioration de la courbe d’apprentissage
Le travail avance, mais il est considérable. Certaines fonctionnalités récentes de la branche 1 sont déjà au point pour la 2, mais beaucoup de choses restent à faire, le projet est annoncé pour 2011, mais les volontaires sont les bienvenus !
APC & Memcached the High Performance Duo
(Voir le support de la conférence (pdf))
Damien : Tous le monde connait APC, le module qui permet de mettre en cache l’OPcode généré par PHP de façon transparente. Mais peu de gens savent en exploiter toute la richesse.
Il est par exemple possible d’utiliser APC comme stockage de donnée. Le protip APC du jour : il est plus rapide de vider entièrement le cache d’APC que de vider une seule et unique valeur.
Alors qu’APC est (devrait être) toujours installé sur un serveur LAMP, ce n’est pas le cas de Memcached (notez le “d”, memcache n’est pas memcached !). Contrairement à APC, son installation ne suffit pas à accélérer les performances d’un site web : c’est un outil pour le développeur.
Il est utilisé couramment pour stocker les sessions utilisateur (plus rapide que le système de fichiers par défaut de PHP). Il peut être distribué entre plusieurs serveurs et s’installe facilement. Il est aussi segmentable et il est donc possible de viser un serveur en particulier dans une ferme de Memcached.
On nous a aussi parlé de igbinary_serialize, une méthode implémentée et utilisée dans Memcached pour remplacer le serializer de PHP, plus lent et générant des chaînes plus longues.
Martin : A force d’optimiser côté client j’en avais presque oublié que finalement, on peut aussi gagner énormément côté serveur. Une bonne piqure de rappel, des conseils avisés, pour avoir mis en place APC et Memcached à la suite du Forum PHP sur un serveur, je peux dire que les mesures de performance avant/après sont hallucinantes ! Quand au temps de mise en place des logiciels, des outils de monitoring et au paramétrage, pas plus d’une heure tout compris pour les deux !
Incontournable donc pour ceux qui ne connaissent pas ou n’ont jamais pris le temps de s’y intéresser de plus près. Encore une fois, lisez les slides !
State of the MySQL Ecosystem
Damien : Kaj Arnö et Rasmus Johansson nous présentaient l’état actuel de MySQL. Depuis le rachat par Oracle, la situation entre la communauté et le produit semble s’être reffroidie, et de cette peur du méchant capitaliste un projet est né : MariaDb.
Sous licence GPL, MariaDb reprend le code de MySQL et y ajoute de nombreuses fonctionnalités :
– moteurs de stockages divers (Aria, XtraDb, PBXT, FederatedX…),
– statistiques étendues sur les slow_queries,
– améliorations de performances,
– Virtual Columns !
– etc.
C’est parfaitement compatible avec MySQL, jusqu’aux numéros de version qui se suivent : MySQL 5.1 = MariaDB 5.1.
Le projet est vraiment prometteur et mérite toute notre attention, certaines sociétés commencent même à vendre du support pour MariaDb en plus de MySQL. À la fin de la conférence, et comme le veut la tradition, Kaj et Rasmus nous ont chanté une petite chanson en buvant de l’alcool sur scène. MySQL, c’est cool !
Martin : MariaDB ca marche, c’est plus rapide que MySQL, ça plus de fonctionnalités, et ça évolue très vite. Il va maintenant falloir migrer en douceur, pas que la migration soit compliquée, tout est compatible, mais c’est un produit jeune qui doit maintenant s’imposer en communiquant notamment sur ses valeurs, celles de la core-team originelle de MySQL qui oeuvre désormais au sein de SkySQL. Je migre très bientôt, et je vous donne mon ressenti !
Au final, un très bon cru, rendez-vous l’année prochaine pour le Forum PHP 2011 :-)
En savoir plus
Les photos de l’évènement sont disponibles sur Flickr.