Actualités

[19/11/2014] Portails d'entreprise, la nouvelle version du livre blanc Smile

Qu'est-ce qu'un portail d'entreprise ? Quels sont ses fonctionnalités et domaines d'application ? Quelles sont les meilleures solutions du marché ? C'est à découvrir dans le livre blanc Smile !

[16/10/2014] L'édition 2014 du livre blanc de Smile : "Bonnes pratiques du web"

Smile publie une nouvelle version du livre blanc "Bonnes pratiques du web – Toutes les clés pour concevoir son site web". A télécharger gratuitement !

[14/10/2014] Smile vous donne RDV sur les forums de recrutement de 2014-2015 !

Vous aimez le web et les technologies de pointe, vous souhaitez mettre votre expertise au service du meilleur de l’open source ? Venez rencontrer Smile durant les prochains forums écoles de cette année 2014-2015.

Toutes les actualités picto
       

Vous avez besoin de mettre à jour votre Lecteur Flash Flash 7

Guillemet ouvrant l'actualité des solutions
et des technologies open source Guillemet fermant
picto

Retour sur le Symfony Live 2011

Le 3 et 4 Mars dernier a eu lieu la conférence Symfony Live organisée par Sensio, éditeur du framework PHP Symfony. Pour ceux qui ne connaissent pas, Symfony est un framework MVC libre écrit en PHP 5. Il facilite et accélère le développement de sites et d'applications Internet et Intranet.

Cette édition 2011 était structurée en trois parties : Symfony 1, Symfony 2 et Experience Feedback. Vous trouverez ci-dessous, les liens vers l'agenda des conférences :

http://www.symfony-live.com/paris/schedule ( Salle A & B )

http://symfony.com/blog/the-symfony-live-unconference-schedule ( unconference )

Vous trouverez ci-après un résumé des sessions auxquelles nous avons pu assister et que nous avons trouvées particulièrement intéressantes. Bonne lecture !

Jour 1 / Le 3 Mars

Application Security, Dependency Injection, and AOP in Symfony 2

Durant cette session, Johannes Schmitt nous a présenté succinctement, le nouveau modèle de sécurité de Symfony 2, inspiré du composant sécurité du bien connu framework "Spring".

La mise en œuvre de la sécurité des données correspondait à une charge de travail importante sous Symfony 1. Ce n'est plus le cas avec Symfony 2 et c'est une très bonne chose.

Par exemple, nous avons probablement tous eu l'occasion de réinventer un système ACL pour un projet qui ne pouvait se satisfaire des fonctionnalités basiques de Symfony 1 et de sfDoctrineGuard.

Cette page est définitivement tournée. Le modèle de sécurité de Symfony 2 répond désormais à presque tous les besoins. Il est très bien conçu, et surtout, il est extensible.

Notons également que nous avions souvent besoin d'installer sfDoctrineGuard ou un module de login custom pour paralléliser les développements et avoir une session sécurisée pour le développement d’autres modules, ce qui générait une charge de travail inutile.

Avec Symfony 2, il suffit dorénavant de déclarer un provider "memory" et une authentification http basic pour mettre en œuvre un login temporaire en moins de 30 secondes chrono.

Voici un résumé des fonctionnalités majeures sur ce point :

  • ACL avancées avec stockage en base de données
  • Annotations pour faciliter la lecture du code source
  • Système de vote avec politique de voting modifiable (unanime, unitaire, majoritaire)
  • N providers pour obtenir les données liées à un utilisateur
  • N mode d'authentification (Extrait de la documentation : HTTP Basic, HTTP Digest, Form based authentication, X.509 certificates, Anonymous authentication, et d'autres via Bundles tels que CAS)
  • 3 Niveaux de confiance disponibles (sous forme de rôles assignés implicitement : IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY )

C'est donc un module de très bonne qualité que les développeurs auront plaisir à intégrer.

There's a Rabbit on my Symfony - RabbitMQ and Symfony2 Integration

Cette session fut présentée par Alvaro Videla, co-auteur de RabbitMQ in action.

RabbitMQ est un Middleware Orienté Message (MOM) qui utilise le protocole AMQP.
Utiliser AMQP est un réel avantage dans le monde des MOM puisqu'il est standardisé (de nombreuses API sont disponibles).
Durant cette session, Alvaro nous a présenté les avantages des MOM en général, ainsi que quelques exemples d'utilisation mettant en œuvre des traitements batchs scalables: logging distribué, redimensionnement d'images, emailing, etc...
Il a ensuite évoqué les atouts de RabbitMQ : protocole standard (AMQP), codé en Erlang (tout a fait adapté au multithreading et aux créations d'architectures distribuées) ainsi que l'API php AMQP.

Ce fut donc enrichissant. Car il est vrai que bien que nous pensons systématiquement à la scalabilité des frontends, les traitements batchs sont parfois oubliés et dans Symfony2, via le bundle RabbitMQ réalisé par Alvaro, l'intégration en sera facilitée.

Smile a d'ailleurs réalisé un livre blanc sur les MOM disponible ici :

http://www.smile.fr/Livres-blancs/Systeme-et-infrastructure/Middleware-orientes-messages

Les slides de la session (exemples d'intégration de AMQP en PHP dans les slides) :

http://www.slideshare.net/old_sound/theres-a-rabbit-on-my-symfony

Bundle Symfony 2 rabbitMQ :

http://symfony2bundles.org/videlalvaro/RabbitMqBundle

The Lost Art of Simplicity

La journée se poursuit avec une conférence étonnamment stimulante, présentée par Josh Holmes architecte chez Microsoft.

Josh Holmes nous rappelle (avec raison) les causes qui nous poussent (à tord) à livrer des solutions trop complexes “enterprise class” alors que d'autres solutions, plus simples et qui répondraient mieux aux besoins du client, existent.

Parmi ces causes, nous trouvons l'effet « nouveauté des produits ». C'est à dire l'attractivité d'un produit nouveau qui peut pousser, à tord, un chef de projet technique à utiliser telle ou telle solution. A ceci, Josh répond “You need a business reason to jump off the bridge !”, ce qui signifie qu'il faut utiliser un produit parce qu'il répond bien à un besoin métier et non parce qu'il correspond à un effet de mode.

Si nous ne devions retenir qu'une seule phrase, ce serait "I apologize for the length of this letter, but i didn't have time to make it shorter." (Mark Twain), en effet, il faut beaucoup de temps pour rendre simple un développement à périmètre complexe ..., mais "... if you do, it will work without problems for a long time." (F. Andy Seidl)
Slides:http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity

Leveraging Symfony2 Forms

Le composant formulaire de Symfony 2 change radicalement de philosophie par rapport à Symfony 1 :

  • un formulaire est un champ
  • il faut explicitement indiquer les champs à utiliser (dans Symfony 1, nous retirions les champs à ne pas utiliser)

Bien que l'implémentation diffère, le processus d'utilisation reste néanmoins similaire : binding sur la requête, validation, sauvegarde.

Inquiétude principale : le composant de formulaire a été intégralement réécris et livré trois jours avant Symfony Live par Bernhard Schussek ce qui explique que la documentation ne soit pas a jour. Cela reste donc à suivre mais est très prometteur.

Jour 2 / Le 4 Mars

Introducing Assetic: Asset Management for PHP 5.3

Assetic est un gestionnaire d'asset web pour PHP inspiré de Python WebAsset réalisé par Kris Wallsmith. Il est utilisable en dehors de Symfony et, est complètement intégré à Symfony 2 (tâches, helpers, etc..).

D'un point de vue simplifié, un asset représente une ressource accessible en Web, dans Assetic.
Chaque asset est donc géré par une classe PHP, une collection d'asset est un Asset.
Le dédoublonnage des assets est effectué automatiquement.
Sur chaque asset (et donc collection), une liste de filtres peut être appliquée parmi :
CoffeeScriptFilter, CssRewriteFilter, GoogleClosureFilter, LessFilter,StylusFilter, Sass, SprocketsFilter, Yui\CssCompressorFilter, Yui\JsCompressorFilter.

Il s'agit bien entendu de filtres présents par défaut dans Assetic, et cette liste est tout à fait extensible.

Le rendu des assets peut être effectué de trois manières différentes :

  • Rendu direct
  • Rendu direct avec cache Http
  • Rendu d'un fichier statique généré.

Assetic gère également la parallélisation des téléchargements et l'écriture des fichiers statiques dans un CDN tel qu'Akamaï (via les stream wrapper de PHP).

Ce composant est simple à utiliser et comme la plupart des composants de Symfony 2, il est autonome et peut-être utilisé en dehors de Symfony.

Slides de la session :http://www.slideshare.net/kriswallsmith/assetic-symfony-live-paris

Readme sur github avec examples & tutoriels : https://github.com/kriswallsmith/assetic

HTTP Cache

Fabien Potencier nous a rappelé toute la partie liée au cache des spécifications http 1.1.
Il a également rappelé qu'en tant que développeurs web, nous nous devons d'avoir lu au moins une fois la RFC complète.

Au programme :

  • Le protocole HTTP
  • Les stratégies de gestion du cache (expiration / validation)
  • Les bonnes pratiques et cas concrets (proxy partagé, reverse proxy, proxy navigateurs, etc..)

Vous trouverez des slides relativement proches de celles présentées via le lien suivant : http://www.slideshare.net/fabpot/caching-on-the-edge

Symfony 2 en pièces détachées !

Cette session présentée par Hugo Hamon de Sensio Labs, nous a permis de voir comment extraire chaque composant de Symfony 2 afin de le réutiliser.

Nous avons donc survolés :

  • Le chargeur de classes “UniversalClassLoader”
  • HttpFoundation (Session, Request, Response, Cookie, File)
  • Event Dispatcher (Même implémentation que Symfony 1, notify, notifyUntil, filters)
  • Dependency Injection
  • Finder
  • Templating : Nous pouvons noter que l'approche actuelle semble privilégier Twig (« language de template) et c'est pourquoi les fonctionnalités pour le templating en PHP ne sont pas aussi riches (exemple : héritage). Il semble donc sage d'utiliser Twig. Pour plus d'informations consulter également : http://fabien.potencier.org/article/34/templating-engines-in-php
  • Traductions (i18n)
  • Locales (i10n)
  • Console : Permet de réaliser des applications “riches” en console le tout en extrayant un nombre minime de classes du Framework.
  • Process : inutile d'hésiter entre exec, shell_exec, passthru, etc... utilisez plutôt Process.
  • Serializer : permet de convertir (Normalizer) des objets PHP en divers formats (Encoder). L'utilisation de ce composant peut-être envisagé pour diverses tâches : un export quick & dirty; une communication d'objets via Json; etc.
  • Yaml
  • CSS selector : superflu, qui permet aux développeurs peu habitués à Xpath de requêter un document DOM via CSS.
  • Dom Crawler : idem que le CSS selector : superflu.

Slides de la session : http://www.slideshare.net/hhamon/symfony2-en-pices-dtaches

Doctrine in the Real World

Session présentée par Jonathan Wage, créateur de Doctrine, et salarié de OpenSky.

Il s'agit en fait de la présentation d'une partie de l'architecture d'OpenSky : Doctrine ODM et Doctrine ORM qui fonctionnent de concert et hydratent des objets en même temps.

En effet, tous les éléments nécessitant un parfait respect du model ACID sont stockés dans MySQL et exploités via l'ORM. Tandis que les éléments moins sensibles sont stockés dans l'ODM.

Nous avons donc pu voir un exemple de code, un POC qui hydrate un objet “Order” depuis l'ORM et qui contient un produit issu de l'ODM.

Nous avons ensuite discuté de “supervisor” pour daemoniser un script PHP. Jonathan a utilisé cela afin d'avoir un « curseur » en permanence sur le dernier utilisateur pour que les traitements sur celui-ci soient effectués en dehors du processus ayant traité la requête HTTP. Un bundle Symfony 2 est disponible ici : https://github.com/doctrine/doctrine-mongodb-odm-tailable-cursor-bundle

Plus d'informations ainsi que des exemples de codes dans les slides de la session : http://www.slideshare.net/jwage/doctrine-in-the-real-world-sflive2011-paris

Behavior Driven Development for Symfony2

Session présentée par Konstantin Kudryashov, auteur du Framework Behat.

La session commence par un comparatif entre le TDD et le Behavior Driven Development.
Le BDD est présenté comme une évolution des TDD, le paradigme semble plus intuitif pour les développeurs non habitués aux tests, son adoption en sera certainement facilité dans les structures dont la méthodologie n'est pas encore bien en place.

En effet, plutôt que d'indiquer quelle est la fonctionnalité testée, on indique, quels sont les éléments en entrée via Given(), quel est le contexte via When(), et quel est le résultat attendu via Then(), on code ensuite le test qui permet au cas de passer.

Exemple conceptuel :

Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then The result should be 120 on the screen
Un exemple complet est disponible dans le slide 75 de la session.
Un Bundle Behat pour Symfony 2 “BehatBundle” est disponible si vous souhaitez essayer le BDD.

Nous avons ensuite évoqué les tests fonctionnels qui ne sont pas possibles pour le moment avec Behat, mais qui le seront dès lors que Mink sera terminé (Mink est une librairie de Behat, qui peut-être utilisée en Standalone)

Slides : http://www.slideshare.net/everzet/bdd-in-symfony2

There is one more thing

Keynote de la journée et des jours par Fabien Potencier.
Fabien a fait le bilan sur le développement de Symfony 2 et sur l'histoire qui a mené Symfony jusqu'ici.

74 Releases, soit 1 release par mois depuis 2007.
1257 plugins Symfony 1.
170 Bundles Symfony 2.
150 commiters sur github pour Symfony 2.

Fabien a également expliqué que Git et GitHub ont vraiment changé le mode de développement de Symfony 2 : “I'm not the lead developper anymore, i'm the lead merger”, ce qui est plutôt rassurant pour l'avenir du projet.

Conclusion

Symfony 2 est un Framework d'une grande qualité, très prometteur. Il apporte d'ailleurs des changements importants dans la philosophie de Symfony tels que :

  • Faible couplage pour tous les composants
  • Plus de génération de code et moins de magie à l'exécution
  • Explicite plutôt qu'implicite (formulaires, routes embarquées de bundles, etc...)
  • Interfaces et duck-typing plutôt que classes de bases
  • etc..

Tout cela va résoudre de nombreuses problématiques que les développeurs rencontraient en Symfony 1.x.
Le mode de distribution de Symfony change radicalement, on ne télécharge plus le framework, on n'initialise plus le projet, on se contente de télécharger la distribution qui répond le plus à nos besoins.
Exemple : la “Standard Edition” pour un projet standard, la “Kitchen Edition” pour les tests de bundles, etc..

En effet, il était difficile pour un nouveau développeur de trouver comment initialiser un projet Symfony puisqu'il fallait … avoir Symfony pour créer un projet Symfony.
La bonne pratique pouvait d'ailleurs surprendre : créer le dossier lib/vendor/, mettre Symfony en référence externe, puis exécuter php lib/vendor/symfony/data/bin/symfony pour initialiser un projet.

Symfony 2 n'est donc pas une révolution, mais une véritable évolution dans le bon sens.

Les slides des autres sessions sont recensés ici :

https://docs.google.com/document/pub?id=1rXrCNX25JArMq5TEHJOFiJjnmsKjRX4JpUoFxTXqob0

Cyril Quintin
picto

Commentaires

       
informatique yverdon - http://www.cotech.ch
« Il est très bien conçu, et surtout, il est extensible » je veux essayer avant de vous confirmer mon opinion.
lundi 04 juillet 2011 @ 10:20
       

       
On peut dire que c’est une grande évolution de la part de Symfony. Si je comprends bien on ne peut pas faire un téléchargement intégral ?
lundi 04 juillet 2011 @ 10:20
       
Ecrire un nouveau commentaire