<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Amicalement Web - Astuces et Bons plans dans le développement web &#187; Tim</title>
	<atom:link href="http://www.amicalement-web.net/author/tim/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.amicalement-web.net</link>
	<description>Astuces et bons plans d&#039;un web developpeur</description>
	<lastBuildDate>Wed, 04 Jan 2012 14:54:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>de PHP / symfony à Ruby / Rails : un an après</title>
		<link>http://www.amicalement-web.net/php-symfony-ruby-rails-un-an-apres/2011/06/28/</link>
		<comments>http://www.amicalement-web.net/php-symfony-ruby-rails-un-an-apres/2011/06/28/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 09:00:43 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Réflexion]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[switch]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1815</guid>
		<description><![CDATA[J&#8217;ai toujours très peu de temps dispo, d&#8217;où la fréquence de publication proche du néant depuis pas mal de mois. La faute à un bureau toujours trop sommaire à la maison, les travaux s&#8217;éternisant, et le peu de temps libre qui me reste est consacré à quelques projets pour l&#8217;instant un peu &#171;&#160;top secret&#160;&#187; ;) [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/?attachment_id=1819"><img src="http://www.amicalement-web.net/wp-content/uploads/switch.png" alt="" title="switch" width="614" height="100" class="alignnone size-full wp-image-1819" /></a><br />
J&#8217;ai toujours très peu de temps dispo, d&#8217;où la fréquence de publication proche du néant depuis pas mal de mois. La faute à un bureau toujours trop sommaire à la maison, les travaux s&#8217;éternisant, et le peu de temps libre qui me reste est consacré à quelques projets pour l&#8217;instant un peu &laquo;&nbsp;top secret&nbsp;&raquo; ;)</p>
<p>On pourra remercier Vince au passage qui lui trouve du temps à consacrer à ce modeste blog !</p>
<p>Mais je viens de réaliser que cela allait faire quasi un an que j&#8217;avais attaqué Ruby / Rails de manière plutôt intensive et qu&#8217;un petit bilan s&#8217;imposait donc ! Alors je me lance !<br />
<span id="more-1815"></span></p>
<h3>Contexte</h3>
<p>Un petit coup de contexte, notre startup <a  href="http://autrementleblog.fr" rel="external">Autrement</a> édite 2 sites web, <a  href="http://www.chambresapart.fr">Chambres à part</a> et <a  href="http://hotelhotel.com">HotelHotel</a>. Le premier est en symfony1.4 et le 2e est en Rails3 suite à une décision prise fin 2009. Pour ceux que ça intéresse, Jérémy <a  href="http://jeremy.wordpress.com/2009/11/03/ruby-et-rails-ou-bien-php-et-symfony/">avait écrit un billet à l&#8217;époque sur ce choix</a>.</p>
<p>A l&#8217;époque je m&#8217;étais retrouvé un peu seul à tenter vainement de défendre symfony mais j&#8217;avais du me résoudre à me lancer dans le grand bain pour la conception d&#8217;HotelHotel à laquelle il fallait bien que je participe (bah oué on est un peu que 3 côté techos :p), c&#8217;était il y a quasi 1 an !</p>
<p>Je vous préviens, ceux qui me côtoient un peu s&#8217;y attendent surement ;), je n&#8217;ai pas vraiment changé d&#8217;avis : Ruby / Rails j&#8217;accroche pas, et de depuis quasi les premières lignes écrites. Et je vais essayer de retranscrire un peu mon ressenti et retour d&#8217;expérience.</p>
<h3>No révolution</h3>
<p>Déjà, aucune révolution, il faut le savoir. Les différences fondamentales sont assez &laquo;&nbsp;mineures&nbsp;&raquo; dans le sens où ca n&#8217;a pas changé grand chose dans ma manière de bosser. En fait, si vous avez fait du PHP et du symfony, vous saurez faire du Ruby et du Rails, mais vous (re)passerez par la case documentation les 6 premiers mois pour trouver les équivalents à vos connaissances PHP/symfony. </p>
<p>Et ça commence du coup mal. Apprendre un langage et un outil en essayant de tenir des &laquo;&nbsp;cadences&nbsp;&raquo; de production honorables pour son égo, c&#8217;est pas simple. C&#8217;est même assez compliqué et ça frustre !</p>
<p>Côté bilan, le langage il n&#8217;y a pas grand chose à redire si ce n&#8217;est ce côté implicite avec lequel j&#8217;ai encore maintenant beaucoup de mal, question de goût j&#8217;imagine. J&#8217;ai croisé un jour un gist avec 2 &laquo;&nbsp;versions&nbsp;&raquo; d&#8217;un même code, l&#8217;un en version totalement implicite, l&#8217;autre en version totalement explicite (je remets pas la main sur le lien) : pas photo pour moi, le 2e était clairement plus compréhensible sans même connaître Ruby !<br />
Mais les Rubyistes ont choisi le premier&#8230; ;)</p>
<p>Après, il est plutôt bien construit, l&#8217;api est clairement plus aboutie que PHP, et permet de faire tout autant de chose, et plutôt vite et bien une fois qu&#8217;on s&#8217;est habitué à sa syntaxe. Il faut être honnête Ruby n&#8217;a rien a envier à PHP en tant que langage pur. Mais la réciproque est pas loin d&#8217;être vrai. PHP se traine beaucoup de boulet, mais personne nous oblige à les utiliser.</p>
<h3>Pas de switch en vue</h3>
<p>Du coup pas vraiment de changement suffisant pour me dire que cela vaut le coup de &laquo;&nbsp;switcher&nbsp;&raquo;. Au contraire même, le problème (oui c&#8217;est un problème pour moi) de l&#8217;implicite rend toute lecture de code un vrai cauchemar ce qui m&#8217;a certainement ralenti et un peu découragé de me plonger à 110% dans le code comme j&#8217;aime tant faire. Parcourir des lignes de code que j&#8217;ai encore du mal à déchiffrer me décourage un peu. (Et oui désolé, mais moi, j&#8217;aime voir mes fins de lignes avec des points virgules !!!)</p>
<p>Pour le framework c&#8217;est une autre histoire. A vrai dire, je ne lui trouve pas grand chose pour lui. Attention, il vaut bien symfony 1 qui était ma référence lors de mon lancement dans Rails. Il permet de faire (quasi) tout autant de chose.<br />
Je précise quasi, parce que moi j&#8217;ai toujours la vague impression que je suis bridé, certainement parce que je suis encore loin de maitriser les rouages que j&#8217;avais pris le temps de décortiquer sur symfony.<br />
Et pourtant c&#8217;est déjà sa version3 (qui va avoir un an aussi d&#8217;ailleurs). Quand on voit le gap franchi avec symfony1 et Symfony2, la comparaison avec le second ne serait certainement pas à son avantage :p (:troll:)</p>
<p>Et c&#8217;est sans doute là que le bas blesse, je me suis retrouvé à repartir de zéro, en me disant que ça je saurais le faire de suite sur symfony, que Rails doit le faire aussi, mais qu&#8217;il fallait repasser par la case google. Et au final il le fait mais il ne fait guère plus. Donc peu de vrai &laquo;&nbsp;découvertes&nbsp;&raquo; et forcément, une petite déception&#8230;<br />
Je me retrouve avec 2 couteaux, pas la même forme/couleur, mais le rendu est bien le même, j&#8217;arrive à couper mon saucisson sans problème (j&#8217;étais à l&#8217;apéro au moment d&#8217;écrire ces lignes&#8230;).<br />
J&#8217;aurais préféré me retrouver avec un nouvel outil un peu différent, genre des ciseaux.</p>
<p>Bien sûr, je peux sans doute m&#8217;en prendre en grande partie à moi même, je n&#8217;ai jamais remis la même énergie que pendant mes 3 années passées sur symfony. Peut-être que je passe à côté de quelque chose ! Jémémy me dirait (et me dira ;)) certainement que oui&#8230; </p>
<p>Et puis la communauté me manque ! Je suivais (suit encore en fait ;)) l&#8217;actualité, blog, twitter qui tournent autour de symfony. Celle de Rails et même de Ruby est beaucoup plus petite en France et j&#8217;ai finalement très vite lâché l&#8217;affaire une fois de plus, un peu découragé.</p>
<p>Rajouter à cela, les gems, qui sont très sexy sur le papier mais qui compliquent un peu le côté, je vais mater dans le code comment c&#8217;est foutu de ce petit plugin qui rox, bien sûr le fameux RVM qui ne m&#8217;aime définitivement pas. On ne parlera pas de Passenger qui a lui aussi ses petits caprices de temps en temps, ou bien le fait qu&#8217;il faille redémarrer l&#8217;appli pour qu&#8217;un changement dans une lib soit pris en compte (mais apparemment que sur ma machine :( )</p>
<p>Des détails me direz vous ! Oui c&#8217;est clair, des broutilles auquel on est confronté tous les jours dans notre métier de développeur. Et le changement forcé de mes petites habitudes de bidouilleur PHP n&#8217;a pas du arranger les choses.</p>
<p>Je ne rentre volontairement pas dans le côté technique à comparer deux outils qui font leur job. Parce que pour le coup, la différence ne se fait pas là pour moi à mon avis.</p>
<h3>Bilan</h3>
<p>Au final on peut dire que c&#8217;est plus un mauvais feeling et le fait que je sois ravi de symfony et PHP qui font que j&#8217;accroche pas. J&#8217;ai passé et donné beaucoup de mon temps sur symfony et PHP et je n&#8217;ai pas été déçu, finalement je me dis que quelque part, je les trompe un peu &#8230; ;)</p>
<p>Et puis Symfony2 est arrivé&#8230; J&#8217;ai décortiqué les bétas, testé et retesté, lu le code. Et l&#8217;excitation de m&#8217;en servir grandit chaque jour ! Définitivement, une question de feeling donc. Et aussi parce que j&#8217;ai eu l&#8217;impression de progresser dans mon métier avec symfony1, et cette même sensation m&#8217;envahit quand je vois Symfony2. Ruby / Rails ne m&#8217;ont permis que de me diversifier&#8230;</p>
<p>Attention, je reste quand même ravi d&#8217;avoir pu goûter à ce changement. Ça aura au moins eu le mérite me confronter à autre chose justement, un environnement quasi entier qui diffère ! Je rajoute aussi une corde à mon arc, sait-on jamais hein&#8230;</p>
<p>Et ça m&#8217;aura permis aussi de me conforter, malgré toute la mauvaise presse qu&#8217;il se traine, dans l&#8217;idée que moi je l&#8217;aime bien mon PHP :p</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/php-symfony-ruby-rails-un-an-apres/2011/06/28/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2011 : Compte rendu des 2 jours</title>
		<link>http://www.amicalement-web.net/symfony-live-2011-compte-rendu-des-2-jours/2011/03/09/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2011-compte-rendu-des-2-jours/2011/03/09/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 10:00:49 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[twig]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1725</guid>
		<description><![CDATA[Nous voilà donc rentrés du 3e Symfony Live, toujours à la Cité Universitaire de Paris, et cette année les 2 jours sous le soleil! Bon le froid était quand même là hein, ça reste Paris :D Voici donc un petit compte rendu des 2 jours pour ceux qui n&#8217;étaient pas présents. A noter que cette [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2011-compte-rendu-des-2-jours/2011/03/09/"><img src="http://www.amicalement-web.net/wp-content/uploads/sflive20111.jpg" alt="" title="sflive2011" width="614" height="100" class="alignnone size-full wp-image-1739" /></a><br />
Nous voilà donc rentrés du 3e Symfony Live, toujours à la Cité Universitaire de Paris, et cette année les 2 jours sous le soleil! Bon le froid était quand même là hein, ça reste Paris :D Voici donc un petit compte rendu des 2 jours pour ceux qui n&#8217;étaient pas présents. A noter que cette année, on avait le droit à 2 salles, donc 2 interventions en même temps, il a fallut faire des choix!<br />
<span id="more-1725"></span></p>
<p>La conf tombait bien vu que la première Release Candidate de Symfony2 approche à très grand pas, c&#8217;était l&#8217;occasion d&#8217;aborder abondamment ce nouveau framework pour ceux qui n&#8217;avaient pas eu encore l&#8217;occasion (ou le courage ^^) de se jeter dedans. Les différentes interventions étaient donc principalement orientées autour de 2 axes, Symfony2 en tant que tel, et le passage de symfony 1 à Symfony2 forcément.</p>
<h3>Première journée</h3>
<h4>The lost art of Simplicity</h4>
<p>Josh Holmes, un employé de Microsoft, est venu nous parler de la simplicité dans le développement. C&#8217;est un bon orateur, la conf n&#8217;était pas technique du tout, &laquo;&nbsp;juste&nbsp;&raquo; de l&#8217;ouverture d&#8217;esprit. Même si je n&#8217;ai globalement pas appris grand chose de nouveau, cette conf Microsoft était bien mieux que celle de l&#8217;an dernier, et pas cruciale pour ceux qui sont arrivés en retard (suivez mon regard :D). Un bon début donc.<br />
<a  href="http://www.slideshare.net/joshholmes/the-lost-art-of-simplicity" rel="extern">Voir les slides</a></p>
<h4>Application Security</h4>
<p>Un gros morceau du code Symfony2 et une partie toujours très critique d&#8217;un framework. C&#8217;est Johannes Schmitt qui a reprit le flambeau après la première version du composant par Fabien. On a vu voir un très gros refactoring depuis les premières versions, ca a l&#8217;air bien fichu mais mon dieu que c&#8217;est devenu énorme comme brique!</p>
<p>Malheureusement on ne peut pas vraiment dire que Johannes est un grand showman comme on a pu en croiser, et il s&#8217;est &laquo;&nbsp;contenté&nbsp;&raquo; consciencieusement de faire une revue des différents mécanismes du composant. Un peu de regrets donc, sur ce gros morceau, peu d&#8217;exclu pour ceux qui ont déjà parcouru la doc et le code source.</p>
<h4>State of the CMF Project</h4>
<p>Lukas, le &laquo;&nbsp;lead&nbsp;&raquo; du projet est venu nous présenter quels étaient les buts du projet, quelles entreprises étaient impliqués et ce qui avait déjà été fait. L&#8217;idée est bonne : axer le développement sur la résolution des problèmes des développeurs (d&#8217;où le CMF : Content Management Framework) et réaliser ensuite un CMS complet avec les briques du CMF. Un petit hic : le moteur de stockage des données est basé sur une spec et un soft Java (Jackrabbit), et un backend PHP ne verra probablement pas le jour. Voir <a  href="http://www.devorigin.fr/articles/to-jcr-or-not-choosing-the-right-persistence-solution-for-the-symfony-cmf">mon post</a> sur ce sujet.</p>
<p>Il y aura à mon avis une place pour une alternative plus &laquo;&nbsp;conventionnelle&nbsp;&raquo;, ie. que les gens normaux et les petites entreprises pourront utiliser.<br />
Vous trouverez <a  href="https://github.com/symfony-cmf/symfony-cmf/blob/master/docs/slides.html">les slides sur GitHub</a>.</p>
<h4>Apostrophe: a Symfony Powered CMS</h4>
<p>Aucun de nous n&#8217;était présent, je vous laisse jeter un œil <a  href="http://www.slideshare.net/tompunk/apostrophe-improved-paris-edition" rel="extern">aux slides</a> du coup.</p>
<h4>RESTful avec symfony et Symfony</h4>
<p>Xavier Lacot et Damien Alexandre de chez Cleverage ont débarqué avec leur Poney pour nous présenter l&#8217;implémentation à faire dans les 2 versions de symfony pour faire du vrai bon REST. Présentation complète vu qu&#8217;ils sont allés jusqu&#8217;à faire quelques benchmarks et nous ont gratinés de quelques slides bien fun ;)<br />
Toute leur présentation sur : <a  href="http://symfpony-project.org/" rel="etern">http://symfpony-project.org/</a></p>
<h4>Contributing with GIT</h4>
<p>GIT était encore là, et c&#8217;était encore Scott Chacon qui s&#8217;est collé à la lourde tâche de le présenter. Et encore une fois, ce fut avec classe! Scott est vraiment un très bon conférencier (ca se dit? :x) et il est, cette fois, allé plus loin que la simple présentation du SCM, la présentation a également englobé les modes de contributions à GIT. Très complet là dessus et introduisant également le workflow de contribution de github!</p>
<h4>Speedy App</h4>
<p>Encore un choix à faire, on y était pas. <a  href="http://www.slideshare.net/caillou/speedy-app-frontend-performance-considerations">Les slides</a></p>
<h4>Embed sf1 in SF2</h4>
<p>Explication d&#8217;un cas réel, l&#8217;express.fr. Présentation du pourquoi ce choix technique. Le code source reste le plus parlant pour voir l’intérêt. Au final peu de lignes de code à rajouter dans l&#8217;appli sf1 pour transformer les réponses en object Response pour sf2 et ainsi bénéficier de la couche Cache de Symfony2.</p>
<p>Un moindre mal pour les applis encore en symfony mais qui voudrait tirer parti de quelques avantages de Sf2.<br />
<a  href="http://www.slideshare.net/futurecat/nice-performance-using-sf2-cache-wrapping-sf1-application-paris">Voir les slides</a></p>
<h4>Symfony2 : 30 astuces</h4>
<p>Noël s&#8217;est attaqué à passer en revue, les bonnes pratiques et astuces à garder en mémoire pour les futurs dev Symfony2.<br />
<a  href="http://www.slideshare.net/noelguilbert/symfony2-30-astuces-et-bonnes-pratiques">Voir les slides</a></p>
<h4>phpBB4</h4>
<p>Sympathique présentation par le lead développeur de phpbb, il y a 10ans déjà. Rétrospective de l&#8217;évolution du système de plugins pour aboutir finalement au choix de baser la prochaine version sur Symfony2:<br />
<a  href="http://prezi.com/3qkzfgmhrajd/symfony-live-2011-paris-phpbb4-building-end-user-applications-with-symfony2/">Voir les slides</a></p>
<h4>Forms in sf2</h4>
<p>Bernhard qui est à l&#8217;origine du composent Form, a pris un peu tout le monde a contre pied en présentant la dernière mouture du composant, qui n&#8217;est pas encore mergé dans le master. L&#8217;optique ici est de passer les configurations de formulaire via le DIC pour pouvoir tester les contrôleurs sans les forms.<br />
Autre avantage, la partie render est maintenant séparée également. Pour avoir plus de détails sur le pourquoi du comment, hésitez pas à jeter un oeil sur la discussion qu&#8217;il a lancé sur <a  href="http://groups.google.com/group/symfony-devs/browse_thread/thread/58789255fae7a3be/ea756826ba286f6c?hl=fr#ea756826ba286f6c" rel="extern">la mailing list</a>.</p>
<p>Bon il assure que tout le process d&#8217;embed form est plus au point que dans symfony 1, comme beaucoup, tellement traumatisé, je vais attendre de le voir pour le croire :D</p>
<p><a  href="http://www.slideshare.net/bschussek/leveraging-symfony2-forms">Voir les slides</a></p>
<h4>Keynote</h4>
<p>Voilà Fabien sur la scène, sans slides prêt à présenter en live Symfony2. Quelques modifications de son installation un peu tardives ont provoquées 15min de debug en live! Quelques sueurs froides, on a même cru qu&#8217;il allait renoncer! Mais finalement, c&#8217;était tout simplement un vhost mal configuré :)<br />
Sur le contenu, il a voulu montrer que Symfony2 était vraiment simple à appréhender et que le système d&#8217;annotation présent via le FrameworkExtraBundle était vraiment &laquo;&nbsp;cool&nbsp;&raquo;. Donc rien de nouveau en soit, pour tout ceux qui ont déjà eu l&#8217;occasion de manipuler la bête.</p>
<p>Perso, j&#8217;avoue avoir quelques réticences avec tout ces systèmes d&#8217;annotations, très à la mode en ce moment. Peut-être parce que c&#8217;est pas natif, ou peut-être parce que j&#8217;aime bien avoir les choses à leur place, et pas tout au même endroit. Différente vision certainement!</p>
<h3>Deuxième jour</h3>
<h4>Adopt devops philosophy</h4>
<p>Les croissants ont été les plus forts, on y était donc pas:<br />
<a  href="http://www.slideshare.net/fabrice.bernhard/adopt-devops-philosophy-on-your-symfony-projects">Voir les slides</a></p>
<h4>Symfony2 from the trenches</h4>
<p>Du coup celle là non plus:<br />
<a  href="https://docs.google.com/present/view?id=dfzg6stg_8fp9jksfw">Voir les slides</a></p>
<h4>Assetic</h4>
<p>L&#8217;occasion de découvrir le dernière né des bundles intégré de base dans Symfony2. J&#8217;ai suivi de loin la conf pour commencer à mettre au propre ce billet. Mais les slides parlent d&#8217;elles mêmes! Assetic, c&#8217;est vraiment orienté pour faciliter la vie des developpeurs.<br />
<a  href="http://www.slideshare.net/kriswallsmith/assetic-symfony-live-paris">Voir les slides</a></p>
<h4>Application Gruyere</h4>
<p>Une nouvelle conf qu&#8217;on a pas pu suivre.</p>
<h4>HTTP Cache</h4>
<p>Fabien revient pour nous parler certainement d&#8217;une des features vraiment &laquo;&nbsp;militante&nbsp;&raquo; (entendre par là, que peu de framework l’utilisent actuellement). Pour lui, le meilleur système de cache est donc de passer par la spécification HTTP qui définit tout un tas de convention pour faire du cache.</p>
<p>Il a donc passé en revue les différents mécanismes de cache via HTTP mais trop de choses à dire donc pas assez de temps pour rentrer dans le code plus en profondeur. Ça promet en tout cas pas mal de prise de tête car du coup la méthode de cache à utiliser revient au développeur! Et même si je reste convaincu déjà depuis pas mal de temps que le cache HTTP c&#8217;est bien, être au pied du mur, ça fait un peu peur :p</p>
<h4>Solr</h4>
<p>J&#8217;aurais bien aimé voir la conf, mais finalement faut faire des choix encore et toujours! Une présentation que vous pouvez <a  href="http://www.slideshare.net/th0masr/integrating-the-solr-search-engine" rel="extern">retrouver ici</a></p>
<h4>Varnish</h4>
<p>Un bon tour du propriétaire, fait par un orateur très fun, très blagueur qui m&#8217;a donné envie d&#8217;aller plus loin! En tout cas Varnish ca a l&#8217;air cool, mais surtout si on en a l&#8217;utilité en fait&#8230;</p>
<h4>Quid de mes applications sf1</h4>
<p>Marc Hugon a du se contenter de la petite salle pour parler pourtant d&#8217;un sujet qui intéressait à mon avis beaucoup de monde. La migrations des applis sf1 vers Sf2. J&#8217;ai pas pu rentrer donc faut matter <a  href="http://www.slideshare.net/marchugon/quid-de-vos-applications-symfony-1">les slides</a>.</p>
<h4>Twig</h4>
<p><a  href="http://www.slideshare.net/weaverryan/being-dangerous-with-twig-symfony-live-paris">Voir les slides</a></p>
<h4>Symfony2 en pièces détachés</h4>
<p>Une grande revue des différents composants présent dans le core de Symfony2 et qui sont utilisables de façon indépendante. Rien de neuf en soit, mais un bon rappel qu&#8217;avant de faire son propre composant, ça vaut le coup de jeter un œil à ces composants là!<br />
<a  href="http://www.slideshare.net/hhamon/symfony2-en-pices-dtaches">Voir les slides</a></p>
<h4>Doctrine</h4>
<p><a  href="http://www.slideshare.net/mobile/jwage/doctrine-intherealworldsf-live2011sanfran#1">Voir les slides</a></p>
<h4>Javascript, Event and Scopes</h4>
<p>Une présentation très sympa qui met en lumière les bonnes pratiques à utiliser pour développer à base d&#8217;event. Comme l&#8217;utilisation du preventDefault() ou encore la différence entre le bubbling et la capture. Suivi ensuite d&#8217;un gros rappel sur la portée des variables et les pièges à éviter dans leur nommage. </p>
<p>Sachant que pour de développeurs web, le javascript a toujours été de la &laquo;&nbsp;bidouille&nbsp;&raquo; c&#8217;est toujours bon d&#8217;avoir des rappels de bonne pratique, même si encore une fois, rien de neuf sous le soleil.<br />
<a  href="http://slides.seld.be/?file=2011-03-04+JavaScript+Events+and+Scopes.html#1">Voir les slides</a></p>
<h4>BDD : Behavior Driven Development</h4>
<p>Voilà une des confs qui a vraiment abordé un sujet trop souvent mis de côté et de très belle façon. Konstantin (plus connu sous le pseudo everzet) a expliquer très simplement en quoi consistait la méthodologie BDD qui n&#8217;est finalement qu&#8217;une extension du célèbre TDD. Puis a mis en lumières les outils qu&#8217;il a développé pour faciliter le travail de chacun.<br />
Clairement une très bonne surprise et une nouvelle étape pour faciliter cette partie du métier de développeur.<br />
<a  href="http://www.slideshare.net/everzet/bdd-in-symfony2">Voir les slides</a></p>
<h4>Jeux sociaux et Cloud</h4>
<p>Weka qu&#8217;on a vu pas mal en tant que sponsor de l&#8217;évènement a pu exposer un peu son domaine de prédilection. On attend les slides!</p>
<h4>Don&#8217;t use a screw when you need a nail</h4>
<p>Derrière ce titre, se cachait en fait, Stefan (Skoop) qui a parfaitement résumé ce que tout développeur devrait faire : Chercher les solutions les plus pertinentes en fonction de vos besoins. En faisant un rapide tour des technos non PHP qui répondent à des besoins communs, comme le search, un bug tracker, etc &#8230; il a montré que le développement c&#8217;est une grande famille et qu&#8217;il y a parfois la solution à votre problème pas si loin que ça ;)<br />
<a  href="http://www.slideshare.net/skoop/dont-use-a-screw-when-you-need-a-nail-symfony-live-paris-2011">Voir les slides</a></p>
<h4>Iscool Story</h4>
<p>On attend les slides!</p>
<h4>Keynote : one more thing</h4>
<p>Musique, effet de lumière, vidéo, Fabien a le mérite de jouer l&#8217;auto dérision parfaitement en commençant la keynote par l&#8217;annonce de la &#8230; Symfony Tablet! Finalement, pour ceux qui ont pas vu la conf retransmise en live apparemment, 3 grandes annonces:</p>
<ul>
<li>Symfony2 aura un système d&#8217;installer à la wordpress. Il semble aussi simple d&#8217;utilisation!</li>
<li>Symfony2 aura un système de distributions qui embarquera une conf par défaut différente en fonction des cas d&#8217;utilisation</li>
<li>Nouvelle marque! Symfony se dote d&#8217;un nouveau ndd, un nouveau site et un nouveau logo : <a  href="http://symfony.com">Voir le nouveau site</a></li>
</ul>
<p>Rien de révolutionnaire, mais on peut noter l&#8217;effort sur le site web, beaucoup plus clair, simple et actuel niveau graphique. Et surtout l&#8217;accent mis sur la simplification de Symfony2 auprès des débutants. Fabien a semble-t-il l&#8217;intention de &laquo;&nbsp;banaliser&nbsp;&raquo; au maximum Symfony2 pour montrer qu&#8217;on peut faire beaucoup de choses assez simplement avec. Et si c&#8217;est pour faire reculer des choses comme joomla, on ne peut qu&#8217;espérer que ca fonctionne un peu ;)</p>
<h3>Unconférence</h3>
<p>Vendredi, Skoop a également mis en place un partie &laquo;&nbsp;unconférence&nbsp;&raquo;, entendre par là, une conférence un peu informelle. L&#8217;idée est super, mais encore une fois, ce ne faisait que compliquer les choix :p </p>
<p>Vous pouvez retrouver le détails des présentations sur le <a  href="https://docs.google.com/document/pub?id=1rXrCNX25JArMq5TEHJOFiJjnmsKjRX4JpUoFxTXqob0&#038;pli=1">récap de Jonathan</a></p>
<h3>Bilan</h3>
<p>Bah c&#8217;était cool! Forcément ;)</p>
<ul>
<li>Toujours un peu déçu quand on tombe sur une conf qui finalement ne pas plus loin de ce qu&#8217;on est déjà allé. Mais fallait bien que les gens qui n&#8217;ont pas encore touché le nouveau joujou puissent suivre j&#8217;imagine!</li>
<li>Assez bluffé par l&#8217;équipe de traduction en langage de signes. Deux dames pour 4 malentendants (je crois). J&#8217;imagine pas le bagage technique qu&#8217;il faut pour réussir à traduire ce genre de conférence, chapeau!</li>
<li>Un peu déçu de pas avoir eu un badge avec un joli tour de cou :x Réduction de coût pour les invités?</li>
<li>Toujours aussi charmé par l&#8217;endroit, si j&#8217;avais pu faire mes études dans le coin!</li>
<li>Merci pour le soleil!</li>
<li>Le gros point noir, reste finalement le wifi. Une vrai galère pour arriver à la page de login. D&#8217;où la publication tardive de ce billet et un niveau de tweet en dessous de ce qui était prévu!</li>
</ul>
<p>Ravi d&#8217;avoir pu rencontrer (ou revu) pas mal de gens, et surtout l&#8217;équipe <a  href="http://www.knplabs.com">knplabs</a> qui m&#8217;a gentiment permis de squatter avec eux :p Bon ya pas mal de tête que j&#8217;ai même pas vu voir de loin! Mais ce n&#8217;est que partie remise!</p>
<p><small>Crédit photo : http://www.flickr.com/photos/xavierbriand/5494245376</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2011-compte-rendu-des-2-jours/2011/03/09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery : Rendez vos lignes cliquables!</title>
		<link>http://www.amicalement-web.net/jquery-rendez-vos-lignes-cliquables/2011/02/11/</link>
		<comments>http://www.amicalement-web.net/jquery-rendez-vos-lignes-cliquables/2011/02/11/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 10:00:28 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1692</guid>
		<description><![CDATA[Petit billet rapide pour une petite astuce jQuery, ca faisait longtemps! Le but ici est simplement de donner la possibilité de cliquer sur un élément parent d&#8217;un lien pour l&#8217;activer. Et comme j&#8217;ai un peu galéré je me suis dit que ca valait le coup de partager le code. Que se soit dans une liste [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/jquery-rendez-vos-lignes-cliquables/2011/02/11/line/" rel="attachment wp-att-1698"><img src="http://www.amicalement-web.net/wp-content/uploads/line.png" alt="" title="line" width="614" height="100" class="alignnone size-full wp-image-1698" /></a><br />
Petit billet rapide pour une petite astuce jQuery, ca faisait longtemps! Le but ici est simplement de donner la possibilité de cliquer sur un élément parent d&#8217;un lien pour l&#8217;activer. Et comme j&#8217;ai un peu galéré je me suis dit que ca valait le coup de partager le code.<br />
<span id="more-1692"></span><br />
Que se soit dans une liste ou dans un tableau, il y a parfois qu&#8217;un seul lien, et je trouve assez pratique souvent de donner la possibilité à l&#8217;utilisateur de cliquer sur toute la ligne pour l&#8217;activer sans pour autant dégrader mon code html. Et comme je suis du genre à aimer ouvrir des liens dans un nouvel onglet, je comptais bien reproduire ce comportement.</p>
<p>Voici donc le code, résultat de cette réflexion, ou un clic avec ctrl (ou cmd pour les mac) ou le bouton du milieu de la souris devrait ouvrir le lien dans un nouvel onglet, comme le ferait un lien normal :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.line-click'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">live</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  e.<span style="color: #660066;">stopPropagation</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  href <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a:first'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">ctrlKey</span> <span style="color: #339933;">||</span> e.<span style="color: #660066;">metaKey</span> <span style="color: #339933;">||</span> e.<span style="color: #660066;">which</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    window.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>href<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    window.<span style="color: #660066;">location</span> <span style="color: #339933;">=</span> href<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'cursor'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'pointer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>A utiliser avec le code html suivant par exemple:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;line-click&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;monimage.jpg&quot;</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">&quot;youpi&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 10/02/11 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;monlien.html&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Titre de mon billet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;line-click&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;monimage2.jpg&quot;</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">&quot;youpi&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 07/02/11 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;monlien2.html&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Titre de mon 2e billet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;line-click&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;monimage3.jpg&quot;</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">&quot;youpi&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 21/01/11 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;monlien3.html&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Titre de mon 3e billet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>A adapter selon vos envies. Ici c&#8217;est le premier lien trouvé dans l&#8217;élément avec la class <code>line-click</code> qui sera déclenché. Voilà, en attendant que j&#8217;arrive à finir un billet plus consistent!</p>
<p><small>Crédit photo : http://www.flickr.com/photos/flyingturtle/837938254</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/jquery-rendez-vos-lignes-cliquables/2011/02/11/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Symfony2 : créer un admin sécurisé</title>
		<link>http://www.amicalement-web.net/symfony2-creer-un-admin-securise/2010/12/23/</link>
		<comments>http://www.amicalement-web.net/symfony2-creer-un-admin-securise/2010/12/23/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 10:00:25 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1603</guid>
		<description><![CDATA[Non je ne suis pas mort ! Une grosse année qui arrive à son terme et qui m&#8217;aura un peu éloigné du blog ces derniers mois, mais me voilà de retour aux affaires avec la sortie imminente de Symfony2. J&#8217;ai donc décidé de monter un petit site pour tester en conditions réelles ce nouveau framework. [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony2-creer-un-admin-securise/2010/12/22/"><img src="http://www.amicalement-web.net/wp-content/uploads/Sans-titre-3.png" alt="" title="Sans-titre-3" width="614" height="100" class="alignnone size-full wp-image-1617" /></a><br />
Non je ne suis pas mort ! Une grosse année qui arrive à son terme et qui m&#8217;aura un peu éloigné du blog ces derniers mois, mais me voilà de retour aux affaires avec la sortie imminente de Symfony2. J&#8217;ai donc décidé de monter un petit site pour tester en conditions réelles ce nouveau framework. Et tant qu&#8217;à débroussailler le terrain, autant faire partager mes difficultés.</p>
<p>L&#8217;idée dans le tuto d&#8217;aujourd&#8217;hui est de faire un petit point sur la partie &laquo;&nbsp;security&nbsp;&raquo; très bien documentée sur le site officiel mais qui change assez des habitudes de symfony 1 et donc semble un peu déroutante au début.<br />
<span id="more-1603"></span></p>
<blockquote><p>
Ce billet est issu de ma propre et récente expérience sur le sujet et sur la branche master de fabien. Les choses peuvent changer ou être inexactes. Dans ce dernier cas, n&#8217;hésitez pas à me reprendre via les commentaires ;)
</p></blockquote>
<h3>Contexte</h3>
<p>Pour l&#8217;illustration, je vais simplement partir de la sandbox officielle d&#8217;origine configurée sur l&#8217;url suivante en local chez moi :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local</pre></div></div>

<p> et où je vais vous montrer comment y intégrer votre admin avec un formulaire d&#8217;identification sur l&#8217;url suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local<span style="color: #000000; font-weight: bold;">/</span>admin<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>L&#8217;utilisateur sera géré directement via la config, pas de bdd, on veut quelque chose de très simple et rapide à mettre en place.</p>
<p>Première chose à comprendre dans une application Symfony2, il n&#8217;y a plus qu&#8217;une application&#8230; Oui hein, ça parait fou dis comme ça :D Toute la séparation se situe au niveau des bundles, chacun d&#8217;eux pouvant embarquer des modèles, controllers, vues différentes, tout en pouvant communiquer avec les autres bundles. Fini les galères pour faire des liens entre un backend et un frontend !</p>
<p>Pour notre admin, nous allons donc générer un nouveau bundle dans notre application via la commande :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">php app<span style="color: #000000; font-weight: bold;">/</span>console init:bundle Application<span style="color: #000000; font-weight: bold;">/</span>AdminBundle</pre></div></div>

<p>On se retrouve donc avec un controller basique dans ce bundle qui sera la base de notre admin. Première chose à faire, l&#8217;activer dans le fichier <code>app/AppKernel.php</code> via la méthode <code>registerBundles</code>.</p>
<h3>Mise en place url admin</h3>
<p>On va maintenant tenter d&#8217;y accéder via l&#8217;url <code>/admin/</code></p>
<p>Pour ça, c&#8217;est très simple ! On va modifier notre fichier routing.yml (ou xml ou php hein, mais moi j&#8217;aime bien le yml ! ) comme ceci :</p>

<div class="wp_syntax"><div class="code"><pre class="json" style="font-family:monospace;">#path:app/config/routing.yml
&nbsp;
homepage:
    pattern:  /
    defaults: { _controller: FrameworkBundle:Default:index }
&nbsp;
hello:
    resource: HelloBundle/Resources/config/routing.yml
&nbsp;
admin:
   resource: AdminBundle/Resources/config/routing.yml
   prefix: /admin</pre></div></div>

<p>et du coup créer le fichier de routing de notre nouveau AdminBundle. Pour ça, on va faire quelque chose de très simple aussi:</p>

<div class="wp_syntax"><div class="code"><pre class="yaml" style="font-family:monospace;">#src/Application/AdminBundle/Resources/config/routing.yml
admin_homepage:
  pattern:  /
  defaults: { _controller: AdminBundle:Default:index }</pre></div></div>

<p>Et par magie, maintenant, si vous accédez à l&#8217;url :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local<span style="color: #000000; font-weight: bold;">/</span>admin<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Vous obtenez le mot &laquo;&nbsp;Hello&nbsp;&raquo; qui n&#8217;est d&#8217;autre que la vue par défaut qui a été générée par la commande <code>init:bundle</code><br />
Pour pas se perdre, on va modifier la vue, pour y indiquer le mot admin, ca sera plus clair.</p>
<h3>Sécuriser l&#8217;url d&#8217;admin</h3>
<p>2e étape, comment sécuriser tout ça pour ne pas laisser tout le monde accéder à votre admin. Pour ça il y a en fait plusieurs solutions.</p>
<ul>
<li>Sécuriser toutes les urls de votre application, en autorisant les connexions anonymes partout, sauf dans votre admin</li>
<li>Sécuriser toutes les urls de votre admin seulement</li>
</ul>
<p>La 1ere a l&#8217;avantage de faire écrire très peu de ligne de config, mais honnêtement, je ne sais pas s&#8217;il y en a une de meilleure que l&#8217;autre, donc je présente la première dans ce tuto, mais je vous met le code de la deuxième à la fin. Elles font sensiblement la même chose.</p>
<p>On va donc se lancer dans la config du component security. Pour ça, on se retrouve dans notre <code>config.yml</code> pour y ajouter un provider, qui sera en fait le compte utilisateur de notre admin.</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    admin:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN }</pre></div></div>

<p>Nous voici avec un compte &laquo;&nbsp;monadmin&nbsp;&raquo; identifié grâce au mot de passe &laquo;&nbsp;monpass&nbsp;&raquo; qui sera crédité de l&#8217;autorisation &laquo;&nbsp;ROLE_ADMIN&nbsp;&raquo; (pour pourriez mettre TOTO à la place de ADMIN, ca changerait rien, par contrel mot ROLE est apparemment obligatoire) </p>
<p>Pour l&#8217;instant, ca ne change rien. Définissons maintenant une règle firewall ! Le mot utilisé pour définir ce nouveau service fait sourire j&#8217;avoue, en fait il s&#8217;agit de définir des règles de sécurité pour des motifs d&#8217;urls.</p>
<p>On reste dans notre config.yml qu&#8217;on enrichit comme ceci:</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN  }
&nbsp;
  firewalls:
    admin:
      pattern: .*
      http_basic: true</pre></div></div>

<p>Et là, vous obtenez normalement une demande d&#8217;authentification HTTP sur tout votre site. Ok! Maintenant, on va autoriser des connexions anonymes, c&#8217;est à dire qu&#8217;on ne va pas forcer les gens à se connecter:</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN }
&nbsp;
  firewalls:
    admin:
      pattern: .*
      http_basic: true
      anonymous: true</pre></div></div>

<p>Maintenant, voyons voir pour mettre en place un formulaire plus conventionnel (et il me semble plus secure si bien fait, mais à confirmer).</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN }
&nbsp;
  firewalls:
    admin:
      pattern: .*
      form_login: true
      anonymous: true</pre></div></div>

<p>Ici on a changé le mode d&#8217;authentification pour celui d&#8217;un formulaire classique, grâce à l&#8217;option <code>form-login</code></p>
<p>Maintenant, on va verrouiller l&#8217;accès à notre admin. Pour ce faire, on va demander une autorisation pour notre url <code>/admin</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN }
&nbsp;
  firewalls:
    admin:
      pattern: .*
      form_login: true
      anonymous: true
&nbsp;
  access_control:
      - { path: /admin/.*, role: ROLE_ADMIN }</pre></div></div>

<p>Et maintenant, si vous essayez d&#8217;accéder à l&#8217;url :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local<span style="color: #000000; font-weight: bold;">/</span>admin<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Vous êtes redirigés vers l&#8217;url:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local<span style="color: #000000; font-weight: bold;">/</span>login<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>qui se termine en 404! Jusqu&#8217;ici c&#8217;est normal.</p>
<p>Symfony2 par défaut, utilise 3 urls pour la gestion de l&#8217;authentification :</p>
<ul>
<li>login</li>
<li>login_check</li>
<li>logout</li>
</ul>
<p>Nous allons donc les rajouter dans notre routing.yml tout simplement. Attention de bien les mettre au début, histoire d&#8217;éviter tout conflit avec une autre de vos règles.</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">_security_login:
  pattern: /login
  defaults: { _controller: AdminBundle:Default:login }
&nbsp;
_security_check:
  pattern: /login_check
&nbsp;
_security_logout:
    pattern: /logout</pre></div></div>

<p>Le login a besoin de nous pour constituer le formulaire d&#8217;identification, les 2 autres doivent seulement exister ! Les patterns des urls peuvent varier, mais il faut alors donner les nouveaux paths dans le config.yml, nous verrons ça plus tard.</p>
<p>Maintenant, si nous accédons à notre admin nous avons bien sûr l&#8217;exception suivante:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Method <span style="color: #0000ff;">&quot;Application\AdminBundle\Controller\DefaultController::loginAction&quot;</span> does not exist<span style="color: #339933;">.</span></pre></div></div>

<p>On la crée donc:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// src/Application/AdminBundle/Controller/DefaultController.php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">namespace</span> Application\AdminBundle\Controller<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> Symfony\Bundle\FrameworkBundle\Controller\Controller<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Symfony\Component\Security\SecurityContext<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// à rajouter</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DefaultController <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> indexAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'AdminBundle:Default:index.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> loginAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
       <span style="color: #666666; font-style: italic;">// get the error if any (works with forward and redirect -- see below)</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">attributes</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">has</span><span style="color: #009900;">&#40;</span>SecurityContext<span style="color: #339933;">::</span><span style="color: #004000;">AUTHENTICATION_ERROR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">attributes</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>SecurityContext<span style="color: #339933;">::</span><span style="color: #004000;">AUTHENTICATION_ERROR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>SecurityContext<span style="color: #339933;">::</span><span style="color: #004000;">AUTHENTICATION_ERROR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'AdminBundle:Default:login.twig'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
          <span style="color: #666666; font-style: italic;">// last username entered by the user</span>
          <span style="color: #0000ff;">'last_username'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>SecurityContext<span style="color: #339933;">::</span><span style="color: #004000;">LAST_USERNAME</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'error'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$error</span><span style="color: #339933;">,</span>
      <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Donc là, j&#8217;ai simplement récupéré le code fourni dans la doc officielle, pas de mystère non plus. Et voici la vue correspondante :</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;form</span> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">&quot;{% path &quot;</span>_security_check<span style="color: #ff0000;">&quot; %}&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;post&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
  {% if error %}
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;notification error png_bg&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			{{ error }}
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  {% endif %}
&nbsp;
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;label<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Username<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/label<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;text-input&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;_username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;{{ last_username }}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;label<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Password<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/label<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;text-input&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;_password&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;remember-password&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;checkbox&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>Remember me
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;login&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Sign In&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/form<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Là aussi, très basique mais ça vous donne l&#8217;occasion d&#8217;essayer twig ;) Ce qui compte pour le coup, c&#8217;est surtout les attributs name des input (_username et _password), et de rediriger vers <code>/login_check</code></p>
<blockquote><p>
A noter que l&#8217;utilisation du tag path dans la dernière version de twig n&#8217;est plus d&#8217;actualité. C&#8217;est désormais une fonction, donc à utiliser comme ceci {{ path(&#8216;_security_check&#8217;) }}
</p></blockquote>
<p>Alors oui, il faudrait un layout et tout, mais bon, on va aller droit à l&#8217;essentiel.</p>
<p>On retrouve bien notre formulaire de login maintenant, si on essaye d&#8217;accéder à notre admin ! Encore mieux, si on essaye de s&#8217;authentifier, avec le couple login/password défini au début, on obtient notre page &laquo;&nbsp;admin!&nbsp;&raquo; Et il suffit d&#8217;ajouter une dernière ligne à notre config, pour ajouter le listener manquant sur le <code>/logout</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">#app/config/config.yml
security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_ADMIN }
&nbsp;
  firewalls:
    admin:
      pattern: .*
      form_login: true
      anonymous: true
      logout: true
&nbsp;
  access_control:
      - { path: /admin/.*, role: ROLE_ADMIN }</pre></div></div>

<p>Et maintenant, vous pouvez vous déloguer sur l&#8217;url :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>sandbox.local<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">logout</span></pre></div></div>

<p>Histoire d&#8217;illustrer un peu plus, voici une autre config qui fonctionne aussi et qui permet de ne sécuriser que l&#8217;admin:</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">security.config:
  providers:
    main:
      users:
        monadmin: { password: monpass, roles: ROLE_TOTO }
&nbsp;
  firewalls:
    admin: { pattern: /admin/.*, form_login: true }
    login: { pattern: /login, anonymous: true, form_login: true }
    login_check: { pattern: /login_check, anonymous: true, form_login: true }
    logout: { pattern: /logout, form_login: true, logout: true }
&nbsp;
  access_control:
       - { path: /admin/.*, role: ROLE_TOTO }</pre></div></div>

<p>Il y a bien sûr, beaucoup de tuning possible, pour encoder le password par exemple, mais maintenant qu&#8217;on a la base, je vous laisse <a  href="http://docs.symfony-reloaded.org/guides/security/index.html" rel="extern">lire vraiment la doc</a> entière cette fois-ci ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony2-creer-un-admin-securise/2010/12/23/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : Les coulisses</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:00:38 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[cafe]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1225</guid>
		<description><![CDATA[Pour les retardataires, la semaine dernière se tenait le Symfony Live 2010 à Paris, auquel, Vince et moi avons assisté pendant 2 jours. Malheureusement, ce genre d&#8217;évènement n&#8217;est pas toujours à la portée de tous. Après, vous avoir résumé à notre façon, les 2 jours, il nous semblait pertinent de vous faire un petit topo [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/"><img class="alignnone size-full wp-image-1338" title="elephant-php" src="http://www.amicalement-web.net/wp-content/uploads/elephant-php.jpg" alt="" width="614" height="100" /></a> Pour les retardataires, la semaine dernière se tenait le Symfony Live 2010 à Paris, auquel, <a  href="http://twitter.com/vjousse">Vince</a> et moi <a  href="/symfony-live-2010-1ere-journee/2010/02/17/">avons assisté</a> pendant <a  href="/symfony-live-2010-2eme-journee/2010/02/19/">2 jours</a>. Malheureusement, ce genre d&#8217;évènement n&#8217;est pas toujours à la portée de tous.</p>
<p>Après, vous avoir résumé à notre façon, les 2 jours, il nous semblait pertinent de vous faire un petit topo des coulisses, histoire de vous mettre encore plus dans l&#8217;ambiance et vous donner envie (ou pas) de nous y retrouver la prochaine fois!<br />
<span id="more-1225"></span></p>
<h3>L&#8217;endroit</h3>
<p>La conférence, était à Paris, <strong>à la Cité Internationale</strong> (côté porte d&#8217;Orléans donc), facilement accessible en transport en commun &#8211; métro, tram et rer pas loin &#8211; comme la précédente session en 2009. Seule différence, la salle.</p>
<p>À l&#8217;arrivée le premier jour, vous montrez patte blanche et on vous remet votre badge, votre joli tour de cou et un petit sac de pub, stickers, tshirt et autre tournevis (sisi, un tournevis yahoo :p). Il ne reste plus qu&#8217;à pousser la porte de l&#8217;arène. Juste derrière, on retrouve les stands des livres de Sensio, des éléphants PHP en peluche et autre goodies.</p>
<p>Pour le coup, on était à l&#8217;espace Adenauer (pour ceux qui connaissent l&#8217;endroit). Donc une grande salle avec gradin entouré d&#8217;un U, avec tables, chaises et quelques prises électriques. Prises qui ont du coup chauffées énormément, et ce fut un peu <strong>la guerre pour recharger son notebook</strong> chéri &#8211; heureusement que la majorité était des macs avec des autonomies digne de ce nom, mais je m&#8217;égare.</p>
<p>Du coup, il était possible d&#8217;aller se détendre sur les côtés si une conférence ne vous emballait pas, ou si vous aviez une urgence à traiter, un billet de blog à écrire et j&#8217;en passe. C&#8217;est toujours sympa. Bon du coup, les conférences avec peu de succès étaient en direct concurrence avec le bruit environnant, mais rien de dramatique.</p>
<h3>Le ravitaillement</h3>
<p>Mais le principal, derrière l&#8217;écran de projection, le ravitaillement ! Mini croissants, pains au chocolat, truc aux raisins pas bon, jus d&#8217;orange, café, thé,<strong> le tout à volonté</strong> :p Bon forcément,<strong> le café ne fait pas long feu</strong>, donc mieux vaut ne pas arriver trop tard.<br />
C&#8217;est d&#8217;ailleurs le point qui aura marqué beaucoup de monde à voir les tweets passer sur le sujet. Moralité, les geeks boivent du café, étonnant non ?</p>
<p>A midi, branle-bas de combat: Les lunchs bags arrivent ! En général, vous pouvez aller vous détendre 10min, en laissant la première vague se battre pour les premiers, de toute façon, il y en toujours plus que pas assez :p On se demande quand même, comment Fabien faisait pour être le premier servi, mais on va dire qu&#8217;on a rien vu ;)</p>
<p>Donc le minimum syndical, pour le repas &#8211; offert donc, enfin offert, compris dans le prix dirons nous ;) -, <strong>un sandwich &#8211; au choix parmi 4 ou 5 différent tout de même -</strong>, du saumon, au jambon, en passant par les classiques poulet, fromage, accompagné d&#8217;une bouteille d&#8217;eau et d&#8217;une part de tarte.<br />
A noter, que la tarte aux poires de Mercredi m&#8217;aura beaucoup plus emballé que celle aux pommes de Mardi, mais question de goût :p</p>
<h3>Le confort</h3>
<p>En tant que geek, en temps normal, on n&#8217;est pas difficile, pourvu qu&#8217;on puisse <strong>se connecter en wifi</strong>. C&#8217;était le cas, et après une petite frayeur en arrivant Mardi, il s&#8217;est avéré qu&#8217;il a plus ou moins tenu le coup ensuite.</p>
<p>Pour s&#8217;asseoir, on avait le choix des chaises devant l&#8217;estrade ou les fauteuils des gradins, genre petit cinéma de quartier. Malheureusement, même si on trouve ça sympa au début, la mousse des sièges datant certainement, elle fini par se tasser &#8211; en y restant plus de 3h d&#8217;affilée, forcément &#8211; et donnait l&#8217;impression d&#8217;être <strong>assis sur une planche de bois</strong>.</p>
<p>Certes on venait pas pour le confort, mais rajouté à l&#8217;<strong>espace assez étriqué pour chaque fauteuil</strong>, c&#8217;était pas le luxe non plus :p<br />
Heureusement la conférence a tenu ses promesses, ce qui nous permettait de se focaliser sur autre chose &#8211; peut-être était-ce prémédité.</p>
<h3>Les orateurs</h3>
<p>On a eu le droit à une belle brochette d&#8217;orateurs, tous avec des présentations en général <strong>rondement menées</strong> et bien calés sur leur sujet. Évidemment, pas simple pour les pays latins de rivaliser avec les accents américains de John ou Dustin, mais dans l&#8217;ensemble, je pense que tous ont été compris. Alors certes certains puristes ont critiqué l&#8217;accent de <a  href="http://twitter.com/ubermuda">ubermuda</a>, c&#8217;était juste un moyen d&#8217;apporter un peu de French touch à cette conférence ;)</p>
<p>On a pu apprécier, pour beaucoup, <strong>leur capacité à captiver leur auditoire</strong>, entre les slides joke, les effets musicaux ou les petites phrases échappées entre 2 slides, c&#8217;est resté très cool et dans une bonne ambiance.</p>
<p>Pour ce qui est de l&#8217;organisation, <a  href="http://twitter/hhamon">Hugo</a> s&#8217;est occupé du passage de micro et d&#8217;écourter les sessions qui commençaient à dépasser, permettant un planning presque respecté.</p>
<p>Niveau transition, on avait 5min de break entre chaque intervention, pas de quoi aller fumer une clope, et 1 pause de 15min toutes les 2 heures. Un bon rythme, même si ca représente un gros effort de concentration, c&#8217;est toujours plus simple quand on est intéressé par le sujet.</p>
<h3>Rencontres</h3>
<p>Pas simple de ce côté, car énormément de monde et un planning assez serré, pas la possibilité de rester tard dans la soirée. En rajoutant à ça, la volonté de couvrir l&#8217;évènement sur le blog. J&#8217;ai pas été super dispo.</p>
<p>Bon on a réussi à accrocher <a  href="http://twitter.com/ubermuda">ubermuda</a>, toujours mieux que rien :p</p>
<h3>Photos</h3>
<p>Forcément, on a la chance d&#8217;avoir des photographes amateurs dans ce genre de réunion, je vous laisse jeter un oeil <a  href="http://www.flickr.com/photos/tags/sflive2010/">aux photos tagguées sflive2010 sur flickr</a>.</p>
<h3>Conclusion</h3>
<p>Finalement seul détail qui m&#8217;aura marqué, c&#8217;est surtout <strong>le manque de poubelles</strong> ! Il me semble que j&#8217;en ai aperçu 2, dans la zone de ravitaillement, pas forcément très grandes. Ce qui fait &#8211; à tort ou à raison &#8211; que le sol près des sièges a été annexé parfois par les gobelets en plastique. Bon on reste des geeks me direz vous.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : 2eme journée</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 10:00:15 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1237</guid>
		<description><![CDATA[Après une première journée, un peu éprouvante &#8211; levé 5h30, couché 2h &#8211; on est reparti au front, avec dans la ligne de mire la preview de Symfony 2. Forcément, ca motive. Matinée Okapi Bon, on avoue, on a un peu zappé cette conférence, histoire de gagner un peu plus de temps de sommeil pour [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19"><img src="http://www.amicalement-web.net/wp-content/uploads/estrade.jpg" alt="" title="estrade" width="614" height="100" class="alignnone size-full wp-image-1312" /></a> Après <a  href="/symfony-live-2010-1ere-journee/2010/02/17/">une première journée</a>, un peu éprouvante &#8211; levé 5h30, couché 2h &#8211; on est reparti au front, avec dans la ligne de mire la preview de Symfony 2. Forcément, ca motive.<br />
<span id="more-1237"></span></p>
<h3>Matinée</h3>
<h4>Okapi</h4>
<p>Bon, on avoue, on a un peu zappé cette conférence, histoire de gagner un peu plus de temps de sommeil pour tenir sur la durée, et en profiter pour mettre au propre le billet d&#8217;hier. On a juste retenu qu&#8217;ils utilisaient le <a  href="http://components.symfony-project.org/dependency-injection/">Dependency Injection Container</a> des components symfony.</p>
<p>Mais vous pouvez <a  href="http://www.slideshare.net/lsmith77/okapi-meet-symfony-symfony-meet-okapi">retrouver les slides</a>.</p>
<h4>Optimisation PHP</h4>
<p>Un tour complet à coup d&#8217;exemple de opcode, intéressant même si au final ce sont toujours les mêmes choses qui sont redites, très génériques. Je me tends à croire qu&#8217;un jour on aura un vrai cas concret dans ce genre d&#8217;intervention.</p>
<p>Et puis surtout, quand on utilise un framework, on a plus à gagner, <strong>à bien utiliser le framework</strong> qu&#8217;à optimiser une boucle. </p>
<p>Mais on a réussi à avoir quelques tips supplémentaires pendant la séance de questions :</p>
<ul>
<li>La pré incrémentation est plus rapide que la post incrémentation</li>
<li>Toujours privilégier la boucle while à une boucle for</li>
<li>Bannir les relations parent/enfant &#8211; L&#8217;enfant pointe sur le parent et inversement. Pas bon pour la mémoire</li>
</ul>
<p><a  href="http://www.slideshare.net/xdecock/php-performance-sflive-2010">Voir les slides</a><br />
Et pour aller plus loin dans le sujet, une <a  href="http://www.slideshare.net/fabianlange/full-stack-web-application-performance-tuning-presentation">ancienne présentation de Fabian Lange</a>.</p>
<h4>Git introduction</h4>
<p>Une des premières sessions Show Time, où Scott Chacon y est allé franco pour présenter Git, à une assistance majoritairement SVN.<br />
Une petite autopromo : rapidité, travail offline (sauf pull et push) et <strong>puissance du système de branches</strong> ont suffit à mettre le doute dans la tête de beaucoup, à ce qu&#8217;on pouvait lire sur twitter après coup.</p>
<p>Il a ensuite donné le lien d&#8217;une librairie pour <a  href="http://redotheoffice.com/?p=130">contrôler git depuis PHP (glib)</a> et a su répondre à la principale question:</p>
<dl>
<dt>Un équivalent de SVN externals?</dt>
<dd>Bien sûr, git uses submodules, mais il faut les mettre à jour à la main (donc 2 commandes au lieu d&#8217;une pour mettre à jour, ça reste raisonnable)</dd>
</dl>
<p><a  href="http://www.slideshare.net/chacon/git-101-presentation">Voir les slides</a></p>
<h4>Zend Framework</h4>
<p>Est arrivé, celui qui s&#8217;est présenté comme &laquo;&nbsp;N&#8217;est pas l&#8217;ennemi&nbsp;&raquo;, le lead developer du Zend Framework.<br />
Il a rappelé combien étaient nombreuses les librairies et composants développés et combien <strong>il était facile de les inclure dans symfony</strong>. Ca m&#8217;a d&#8217;ailleurs fait penser, que je ne regarde sans doute pas assez chez eux, quand j&#8217;ai besoin d&#8217;une librairie externe.</p>
<p><a  href="http://www.slideshare.net/weierophinney/using-zend-framework-with-symfony">Voir les slides</a><br />
Et Matthew a ensuite fait un debriefing son intervention <a  href="http://weierophinney.net/matthew/archives/232-Symfony-Live-2010.html">sur son blog</a>.</p>
<h3>Aprem</h3>
<h4>Implementing Symfony CMS</h4>
<p>La première touche hispanique de la conférence, qui nous a rappelé combien <strong>symfony était vraiment international</strong>. Marcos, nous a donc expliqué pourquoi avoir choisi symfony pour développer les CMS de leur client et l&#8217;approche qu&#8217;ils ont eu pour le réaliser.</p>
<p>Pas de gros scoop, ni d&#8217;exemple super concret mais une approche intéressante et surtout, t<strong>irée d&#8217;une vrai expérience dans le domaine</strong>.</p>
<p><a  href="http://www.slideshare.net/esmiz/implementing-a-symfony-based-cms-in-a-publishing-company">Voir les slides</a></p>
<h4>Event System</h4>
<p>Deuxième intervention de Dennis sur un des mécanismes sans doute le moins utilisé dans la panoplie Symfony, les events. Après avoir repris, ce qu&#8217;on peut trouver sur Symfony-Project, il a démontré pourquoi <strong>le couplage trop fort, c&#8217;était le mal </strong>- et donc <strong>les events le bien</strong> (ou le mal aussi, voir ci-dessous).</p>
<p>Un petit sondage fait sur twitter, a montré combien les possibilités étaient larges. Mais aussi qu&#8217;on pouvait en faire tout et n&#8217;importe quoi &#8211; Merci <a  href="http://twitter.com/ubermuda">ubermuda</a> pour la démonstration :p.<br />
Ce qui nous a valu l&#8217;expression &laquo;&nbsp;Events, No silver bullet!&nbsp;&raquo; &#8211; Entendre par là, que ce n&#8217;est pas la solution à tout.</p>
<p>En résumé, <strong>un event s&#8217;utilise pour du &laquo;&nbsp;couplage optionnel&nbsp;&raquo;</strong>, sinon ça revient à avoir un couplage fort également.</p>
<p>Des questions assez peu pertinentes dans l&#8217;ensemble, comme quoi, c&#8217;était pas clair pour tout le monde les events, la conf était donc nécessaire contrairement à ce qu&#8217;on pouvait lire sur twitter.</p>
<p><a  href="http://www.slideshare.net/denderello/symfony-live-2010-using-symfony-events-to-create-clean-class-interfaces">Voir les slides</a></p>
<h4>Symfony in the cloud</h4>
<p>Kris, de la core team, avec cette présentation aura remporté le prix des meilleurs transitions et de <strong>la slide la plus Hollywoodienne</strong>, avec une démo en temps réel de la création d&#8217;un nuage &#8211; musique de circonstance pour l&#8217;occasion &#8211; où il a réussi un tour de force en rajoutant un nuage en arrière plan de son nuage!<br />
Le public était conquis.</p>
<p>Plus sérieusement, il a pris comme support son site nebul.us, pour montrer comment <strong>interconnecter Symfony avec différents environnement à base de nuage</strong>, 3 serveurs Mysql &#8211; 1 Master, 2 Slaves &#8211; n apache, S3 pour le stockage.</p>
<p>De très belles démo de code pour bénéficier <strong>des nouvelles possibilités d&#8217;extension de Doctrine 1.2</strong> &#8211; à voir dans les slides &#8211; entre autres mais aussi d&#8217;<strong>utilisation de composant Zend</strong>.</p>
<p>L&#8217;effet démo ne l&#8217;aura au final pas épargné lui aussi, une tentative de release en direct de son plugin pour gérer les couples Master/Slave et un beau fail quand il est revenu sur la page d&#8217;accueil après qu&#8217;il se soit reloggué suite à l&#8217;expiration de sa session sur symfony-project :D</p>
<p>À noter que cette présentation aurait pu ne pas avoir lieu si <a  href="http://twitter.com/vjousse">Vince</a> n&#8217;avait pas sauvé la mise, en sortant un adaptateur dvi ancienne génération pour le prêter à Kris :p</p>
<p><a  href="http://www.slideshare.net/kriswallsmith/symfony-in-the-cloud">Voir les slides</a></p>
<h4>Debug Symfony</h4>
<p>Une vrai démonstration de l&#8217;approche à avoir pour <strong>vraiment optimiser son application</strong>. Plutôt que de se demander si echo sera plus rapide avec une virgule ou un point.</p>
<p>Il encourage de<strong> logguer en base</strong>, pour y avoir accès plus facilement et ajouter des notions de filtrage aisément et insiste sur<strong> les avantages du profiling</strong>, même s&#8217;il a oublié qu&#8217;<a  href="http://www.symfony-project.org/plugins/elXHProfPlugin">un plugin Symfony était dispo</a> pour ça .</p>
<p>On a pu noter les outils utilisés pour le benchmark et les metrics, <a  href="http://tsung.erlang-projects.org/">Tsung</a> et Graphite, que je ne connaissais pas. Toujours ça de bon à prendre aussi !</p>
<p>Une présentation très complète mais rien d&#8217;inédit que vous trouverez <a  href="http://www.slideshare.net/old_sound/debugging-and-profiling-symfony-apps">dans les slides</a>.</p>
<h4>Yahoooo</h4>
<p>Comme d&#8217;habitude, Dustin, membre de la core team, et Yahoo man est venu présenter un peu le boulot de Yahoo autour de symfony. Pourquoi symfony, leurs contributions, leurs modifications.<br />
Un petit tour des sites actuels développés sur le framework, avec un slide où on a pu apercevoir Shopgenie \o/ &#8211; la version anglaise de MonsieurPrix, développée par moi même ;) ca fait toujours plaisir!</p>
<p>Il a ensuite abordé le développement d&#8217;application web plus généralement et les bonnes questions à se poser concernant les choix à faire dans le design d&#8217;une architecture. Avec en guise de conclusion, une transition toute trouvée : &laquo;&nbsp;<strong>Symfony 2 is the right direction</strong>&nbsp;&raquo; !</p>
<p>On notera au passage un petit sondage de l&#8217;assistance sur les framework js, que<strong> jQuery a remporté</strong> avec une écrasante majorité.</p>
<p><a  href="http://www.slideshare.net/dustin.whittle/building-a-platform-from-open-source-at-yahoo-3209565">Voir les slides</a></p>
<h4>Symfony 2 preview</h4>
<p>Est arrivée, la présentation que tout le monde attendait, Symfony 2 ! Il faudrait un billet dédié à lui même, et on va beaucoup en parler dans les prochaines semaines, donc je vais pas m&#8217;attarder longtemps.</p>
<p>On peut retenir, que <strong>Symfony 2 sera orienté configuration</strong> &#8211; tout est configurable &#8211; et <strong>couplage faible</strong> avec un passage sur PHP 5.3. Il ne sera plus question également de développer des choses annexes, comme le logger ou le système de cache, mais d&#8217;<strong>utiliser des librairies reconnues</strong> pour ça (dont celles du Zend Framework justement).</p>
<p>Il a bien insisté sur le fait, que Symfony 2 pourra faire exactement les mêmes choses que la version 1, mais <strong>plus simplement et surtout plus rapidement</strong>. Avec par exemple, le lazy load &#8211; on charge seulement ce dont le framework a besoin.</p>
<p>Avec une conclusion &laquo;&nbsp;Faster as hell! &laquo;&nbsp;.</p>
<p>Bon il n&#8217;aura pas échappé à l&#8217;effet démo, avec une tentative de commit de la preview release en direct, qui s&#8217;est soldée également par un échec. Le compte Wifi de la Cité Universitaire était expiré ;-) Mais vous pouvez désormais récupérer le code source de cette première version et faire joujou avec sur <a  href="http://www.symfony-reloaded.org">le site dédié à Symfony 2</a> !</p>
<p><a  href="http://www.slideshare.net/fabpot/symfony-20-revealed">Voir les slides</a></p>
<p>Il ne restait plus qu&#8217;à faire le chemin inverse, Direction Marseille. En espérant avoir l&#8217;occasion de revenir ;)</p>
<p class="alignright">
<em>Vos envoyés spéciaux pour l&#8217;évènement: Vince et Tim</em>
</p>
<p style="clear: both">
<small>Crédit photo: http://www.flickr.com/photos/xavierbriand/4368850785/in/set-72157623335239339/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : 1ere journée</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 13:16:34 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1217</guid>
		<description><![CDATA[Pour ceux qui suivent un peu l&#8217;actu Symfony, vous n&#8217;êtes pas sans savoir que se tient aujourd&#8217;hui et demain, le Symfony Live, un des évènements majeur du monde Symfony. Peut-être même que vous y êtes :D Et bien ça tombe bien car Vince et moi même avons la chance d&#8217;y être également ! Se rendre [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17"><img src="http://www.amicalement-web.net/wp-content/uploads/cite-internationale.jpg" alt="" title="cite-internationale" width="614" height="100" class="alignnone size-full wp-image-1246" /></a> Pour ceux qui suivent un peu l&#8217;actu Symfony, vous n&#8217;êtes pas sans savoir que se tient aujourd&#8217;hui et demain, le <a  href="http://www.symfony-live.com/">Symfony Live</a>, un des évènements majeur du monde Symfony. Peut-être même que vous y êtes :D</p>
<p>Et bien ça tombe bien car Vince et moi même avons la chance d&#8217;y être également !<br />
<span id="more-1217"></span></p>
<h3>Se rendre au Symfony Live</h3>
<p>Bon ce fut tout un marathon pour moi, levé 5h30 (et ceux qui me connaissent savent que c&#8217;est déjà un exploit :D), tram puis métro pour attraper mon TGV Marseille-Paris de 6h30.<br />
Arrivé à la gare de Lyon à 9h30, on repart pour une session métro, pour enchainer sur à nouveau un peu de tram avant d&#8217;arriver devant la Cité Internationale, endroit de Paris que je ne connaissais pas !</p>
<p>C&#8217;est déjà une belle surprise, l&#8217;endroit est fort sympathique, très joli, mais très graaand. Et j&#8217;ai pas trouvé les grandes affiches que j&#8217;attendais &laquo;&nbsp;Symfony C&#8217;est par là&nbsp;&raquo;. Bon finalement je débarque sur les coups de 10h30, badge, tour de cou et petit sac de goodies pour m&#8217;accueillir et me voilà dans l&#8217;arène.</p>
<p>Heureusement, il restait quelques croissants, parce que forcément j&#8217;avais fait l&#8217;impasse sur le petit déjeuner et je vais pas vous rappeler les tarifs prohibitifs de la SNCF. Juste de quoi me réveiller un peu et commencer à mettre en route mon cerveau qui jusque là ne voulait qu&#8217;une chose, se coucher.</p>
<h3>la matinée</h3>
<h4>Internationalisation</h4>
<p>On commence la journée par la présentation de <a  href="http://rabaix.net/">Thomas Rabaix</a> concernant l&#8217;internationalisation et Symfony. </p>
<p>Quelques rappels sur ce qu&#8217;est l&#8217;internationalisation, <strong>des astuces sympa comme comment traduire vos routes</strong>, mais aussi et surtout la présentation du plugin qu&#8217;il a réalisé pour <a  href="http://www.menugourmet.com/">Menu Gourmet</a> : <a  href="http://www.symfony-project.org/plugins/mgI18nPlugin">mgI18nPlugin</a>. Il permet de <strong>traduire à la volée</strong> toutes les chaînes statiques de votre page en utilisant une petit interface qui se place au dessus du site, à essayer d&#8217;urgence !<br />
Bref très bonne première présentation.</p>
<p>Vous pourrez trouver les slides de sa présentation <a  href="http://rabaix.net/en/articles/2010/02/16/symfony-live-2010-internationalization">sur son site</a>.</p>
<h4>Admin generator en détail</h4>
<p>John Cleveley nous a fait une petite piqure de rappel des nouveautés de l&#8217;admin generator depuis la version 1.0. Il a aussi été l&#8217;auteur du slide le plus classe de la journée concernant l&#8217;administration &laquo;&nbsp;backend&nbsp;&raquo; : un éléphant se soulageant le derrière dans un seau &#8230; ;-)</p>
<p>Il a rappelé que l&#8217;admin generator c&#8217;était bien, mais pas forcément pour tout. <strong>Qu&#8217;il fallait réfléchir au besoin avant de l&#8217;utiliser</strong>, plutôt que de partir avec tête baissée et se rendre compte plus tard qu&#8217;on passe plus de temps à galérer avec par rapport à ce qu&#8217;on veut faire qu&#8217;autre chose (sa remarque est d&#8217;ailleurs valable pour tout développement : c&#8217;est généralement une bonne idée de réfléchir avant de se lancer ! ).</p>
<p>Si vous voulez créer votre propre thème, vous pouvez vous inspirer de <a  href="http://www.symfony-project.org/plugins/sfAdminDashPlugin">sfAdminDashPlugin</a> et de <a  href="http://www.symfony-project.org/plugins/sfAdminThemejRollerPlugin">sfAdminThemejRollerPlugin</a>.</p>
<p>Il a aussi re-précisé que sfContext::getInstance c&#8217;était le mal (même si lui l&#8217;utilisait dans ses slides) et a fini par parler de la facilité de modifier/étendre les filtres grâce au form framework. En ce qui concerne les form, il est préférable d&#8217;en <strong>créer un nouveau pour chaque form du backend</strong>, histoire de pas confondre les forms front et back. </p>
<p>Il a conseillé d&#8217;utiliser <strong>le moins possible le generator pour les label, help etc des forms</strong>, mais de tout laisser dans le form : beaucoup plus facile à maintenir.</p>
<h4>Windows plaide coupable</h4>
<p>Surement parce qu&#8217;ils sont sponsor, on a retrouvé une équipe de Microsoft qui a plaidé pendant 50 longues minutes que Microsoft c&#8217;était aussi (et presque surtout) de l&#8217;open source et que développer dessus, c&#8217;était bien. Apparemment pas assez pour donner envie de poser des questions à l&#8217;auditoire.</p>
<p>Bon, ok sur windows, tu peux développer sur Visual Studio 2010 <strong>Ultimate</strong>, what else?</p>
<p>Du coup <a  href="http://answers.polldaddy.com/poll/2712522/">un petit sondage</a> a été lancé sur la répartition des OS pour les devs symfony</p>
<h3>L&#8217;aprèm</h3>
<h4>Symfony Internals</h4>
<p>Pas de nouveautés pour tous les développeurs qui ont pu travailler un peu en profondeur sur ce framework. <strong>Une belle revue de tout le fonctionnement interne </strong>de Symfony par Geoffrey Bachelet, et avec un accent so french ;)</p>
<p><a  href="http://www.slideshare.net/ubermuda/symfony-internals">Voir les slides</a></p>
<h4>Doctrine migration</h4>
<p>Un bon rappel sur l&#8217;enjeu des migrations et que maintenant (depuis sf 1.3) <strong>cela consiste en 3 opérations</strong> :</p>
<ul>
<li>Modifier son schema.yml pour inclure nos modifications</li>
<li>Lancer la task de diff:<br /> <code>symfony doctrine:generate-migrations-diff</code></li>
<li>Regénérer ces classes model/form/filter et lancer la migration:<br /> <code>symfony doctrine:build --all-classes --and-migrate</code></li>
</ul>
<p>Alors pourquoi s&#8217;en priver?</p>
<p><a  href="http://www.slideshare.net/denderello/symfony-live-2010-using-doctrine-migrations">Voir les slides</a></p>
<h4>Doctrine 2</h4>
<p>Est arrivé le tour de chauffe des gros sujets de la conférence. En l&#8217;occurrence Doctrine 2. Les grandes idées que Jonathan nous a montré:</p>
<ul>
<li><strong>100% réécrit</strong>, donc plus de compatibilité descendante</li>
<li><strong>~ 3 fois plus rapide</strong> que Doctrine 1.2</li>
<li>Principalement <strong>concentré sur la perf</strong>, et donc <strong>adieu la magie</strong> des findByMaColonne et consor. A l&#8217;image de Propel, les getteur et setteur seront générés dans la class model vu que les modèles justement n&#8217;hériteront plus d&#8217;une class de type Record, permettant ainsi d&#8217;alléger la charge mémoire</li>
<li>Intégration d&#8217;une classe qui s&#8217;occupera, à l&#8217;image du monde java, de <strong>gérer les flush et clear</strong>. Ca ne sera plus l&#8217;objet en lui même qu&#8217;il faudra &laquo;&nbsp;save&nbsp;&raquo; mais demander à cette nouvelle classe de le faire.</li>
</ul>
<p>Forcément, ca fait un peu peur, car au delà, d&#8217;une réécriture, ce sont des gros changements. Mais dans un souci de performance (aussi bien en terme de temps d&#8217;exécution que de charge mémoire), on prend le bon chemin. Même si la magie va disparaître&#8230;</p>
<p><a  href="http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm">Voir les slides</a></p>
<h4>Offline admin generator</h4>
<p>Sur cette partie, on a retrouvé Thomat Parizot, de chez clever-age (vous savez ceux qui ont annoncé un plugin de gestion de media au dernier symfony live, mais qu&#8217;on attend toujours :p).<br />
On découvre <strong>un concept plutôt innovant</strong> dans le monde symfony, l&#8217;idée de permettre l&#8217;accès et <strong>le travail sur un backoffice sans connexion Internet</strong> semble une bonne idée. Il suffit de synchroniser, après coup, son travail.</p>
<p>Bon ok la démo n&#8217;a pas été parfaite &#8211; ahh l&#8217;effet démo &#8211; mais ya quand même un gros boulot derrière même si malheureusement c&#8217;est un concept très (trop?) <strong>dépendant de la technologie</strong>, vu qu&#8217;après Gears, il se base maintenant sur HTML5 et toutes ces nouvelles fonctionnalités. Donc très limité, mais à garder sous le coude.</p>
<h4>Help the community</h4>
<p>Skoop a redonner toutes les clés pour aider la communauté. Et que<strong> même les petites actions</strong>, comme les ouvertures de bug, sont très appréciées. </p>
<p><a  href="http://www.slideshare.net/skoop/the-symfony-community-how-to-get-help">Voir les slides</a></p>
<h4>Table ronde avec la core team</h4>
<p>Pas mal de questions sur les sujets classiques, hello world application, et consor. Voici un petit recap des questions que j&#8217;ai comprises et trouvées intéressantes:</p>
<dl>
<dt>Q: Compatibilité descendante avec la fin du support de la 1.0</dt>
<dd>R: Gros effort sur la facilité de passer à une version supérieure</dd>
<dt>Q: Documentation du système de form un peu en retrait?</dt>
<dd>R: Ne pas hésiter à aider!</dd>
<dt>Q: Symfony enseigné à l&#8217;école? Support de cours disponibles?</dt>
<dd>R: PHP déjà peut enseigné de base. Pas plus d&#8217;info à ce sujet mais ne pas hésiter à les contacter sur ce sujet</dd>
<dt>Q: Développement ne va pas trop vite?</dt>
<dd>R: La 1.4 aura bien 3 ans de support, ce qui est en soi, très long. Et puis le web évolue vite, donc il faut suivre</dd>
<dt>Q: Performance? Quid?</dt>
<dd>R: Le problème vient rarement du framework&#8230; :D </dd>
<dt>Q: Difficulté à faire adopter Symfony par leur client</dt>
<dd>R: C&#8217;est ensemble et en fournissant des cas d&#8217;utilisation précis de Symfony, qu&#8217;on pourra faire évoluer les mentalités</dd>
<dt>Q: Sismo? Bientôt dans les bacs?</dt>
<dd>R: Fabien n&#8217;a plus le temps pour l&#8217;instant. Projet en standby et clairement pas prioritaire. Et de toute façon Sismo ne fera jamais tout ce que fait Hudson et consor. Il n&#8217;a pas écarté la possibilité de ne jamais le release&#8230;</dd>
<dt>Q: Quid de la construction d&#8217;un vrai CMS Symfony une bonne foi pour toute?</dt>
<dd>R: Déjà 3 CMS existant très solides, avec 3 approches différentes. Il faut en débattre.</dd>
<dt>Q: Pourquoi reprendre plein de projets, comme Swift?</dt>
<dd>R: Une volonté de ne pas réinventer la roue et de récupérer et adapter les meilleurs pratiques et idées en PHP</dd>
<dt>Q: Et Propel dans tout ça?</dt>
<dd>R: Gros boulot de François, mais peut-être un peu trop tard?  Jamais dire jamais, mais pour l&#8217;instant après le gros switch vers Doctrine, difficile de faire machine arrière. Surtout que le futur de Propel avec sa 2.0 n&#8217;est pas du tout assuré pour l&#8217;instant</dd>
</dl>
<p>Et du coup, quelques annonces sont sorties:</p>
<ul>
<li><strong>phpbb4 sera codé en Symfony 2</strong>, ce qui en ferait le premier gros projet open source php entièrement en Symfony si je ne m&#8217;abuse</li>
<li>Symfony2 n&#8217;a plus de plugin mais des bundles&#8230;</li>
<li>Symfony2 n&#8217;utilisera plus que le meilleur des autres framework, comme le logger et le cache de Zend, <strong>au lieu de le recoder de leur côté</strong>.</li>
</ul>
<p>Voilà un petit compte rendu, les slides des différentes interventions sont disponible sur le <a  href="http://www.symfony-project.org/blog/2010/02/17/symfony-live-day-1">blog de Symfony</a>.</p>
<p class="alignright">
<em>Vos envoyés spéciaux pour l&#8217;évènement: Vince et Tim</em>
</p>
<p style="clear: both">
<small>crédit photo: http://www.flickr.com/photos/iph4n70m/4338366087/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Développement Web: les bons plans de la semaine #31</title>
		<link>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-31/2010/02/08/</link>
		<comments>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-31/2010/02/08/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:00:09 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Bons plans]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[label]]></category>
		<category><![CDATA[richedit]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1210</guid>
		<description><![CDATA[Allez on garde le rythme, et on repart pour une nouvelle semaine qui s&#8217;annonce d&#8217;ors et déjà très difficile vu l&#8217;heure qu&#8217;il est au moment où j&#8217;écris :D Une belle petite semaine en tout cas, avec des bons plans plutôt variés, mais je vous laisse juger: Widget jQuery ui pour la sélection multiple Encore un [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-31/2010/02/08/"><img src="http://www.amicalement-web.net/wp-content/uploads/palmier.jpg" alt="" title="palmier" width="614" height="100" class="alignnone size-full wp-image-1212" /></a> Allez on garde le rythme, et on repart pour une nouvelle semaine qui s&#8217;annonce d&#8217;ors et déjà très difficile vu l&#8217;heure qu&#8217;il est au moment où j&#8217;écris :D<br />
<span id="more-1210"></span><br />
Une belle petite semaine en tout cas, avec des bons plans plutôt variés, mais je vous laisse juger:</p>
<ul>
<li><a  href="http://www.erichynds.com/jquery/jquery-multiselect-plugin-with-themeroller-support/">Widget jQuery ui pour la sélection multiple</a><br />
Encore un widget bien sympa qui combine la liste déroulante et la liste de checkboxes, le tout avec un support des thèmes de jquery ui</li>
<li><a  href="http://www.athomedia.com/blog/2009/11/16/comment-integrer-onglet-accueil-page-facebook/">Intégrer un onglet à vos pages fan facebook</a><br />
On peut pas dire que je porte facebook dans mon coeur, et leur pages fans sans saveur n&#8217;aident pas vraiment. Mais voilà, il est possible de les customiser un peu plus qu&#8217;on ne le pense, encore faut-il le savoir.</li>
<li><a  href="http://css-tricks.com/one-pixel-shift-buttons/">Donner à vos lien une impression de clic</a><br />
Petit tip css très sympa qui donne vraiment l&#8217;impression que vous avez bien cliqué sur un lien.</li>
<li><a  href="http://demo.tutorialzine.com/2010/02/photo-shoot-css-jquery/demo.html">Crop version photo</a><br />
Voilà une idée et un concept pour permettre un crop à taille fixe sur une image. Le résultat est très réussi!</li>
<li><a  href="http://everzet.com/blog/new-symfony-doctrine-php-bundles-in-sfmate">Bundles textmate pour dev Symfony</a> (via <a  href="http://twitter.com/n1k0">n1k0</a>)<br />
Je me suis lancé tout récemment sur textmate, et forcément ce kit de 3 bundle (php, symfony et doctrine) tombe pile poil. C&#8217;est pas encore un IDE mais on commence à vraiment avoir quelque chose de productif</li>
<li><a  href="http://trentrichardson.com/2010/02/04/using-impromptu-for-spell-check-yui-dojo-nicedit-editors/">Ajouter des correcteurs d&#8217;orthographe à vos richedit</a><br />
Tout est dit. C&#8217;est la dernière fonction qui manque parfois à ces petits éditeurs de texte en ligne</li>
<li><a  href="http://www.plupload.com/">Une solution d&#8217;upload complète</a><br />
Voici un kit comprenant toute les possibilités d&#8217;upload avec queue, progression et tout la panoplie, disponible via flash, gears, html, &#8230;</li>
<li><a  href="http://aext.net/2010/02/css-text-indent-style-your-html-form/">Nice tip pour vos labels</a><br />
Voilà encore un petit tips CSS, qui donne un rendu assez sympa à vos labels</li>
<li><a  href="http://www.csskarma.com/blog/sliding-labels/">Des labels qui slide</a><br />
C&#8217;est la mode en ce moment, on fait tout slider, alors pourquoi pas nos labels?</li>
</ul>
<p>Allez la semaine prochaine, promis, je vous trouve du PHP ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-31/2010/02/08/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Développement Web: les bons plans de la semaine #30</title>
		<link>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-30/2010/02/01/</link>
		<comments>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-30/2010/02/01/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 10:00:21 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Bons plans]]></category>
		<category><![CDATA[analytic]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1142</guid>
		<description><![CDATA[Allez, après avoir déballé mes RSS qui trainaient, je reprend enfin ma rubrique hebdomadaire des bons plans, avec la ferme intention de reprendre le bon rythme après des dernières semaines bien chargées. Du coup forcément, difficile de faire du tri parmi tant d&#8217;info, mais j&#8217;ai fait de mon mieux hein. Dessiner vos pages HTML Etonné [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-30/2010/02/01"><img src="http://www.amicalement-web.net/wp-content/uploads/railroad.jpg" alt="" title="railroad" width="614" height="100" class="alignnone size-full wp-image-1203" /></a> Allez, après avoir déballé mes RSS qui trainaient, je reprend enfin ma rubrique hebdomadaire des bons plans, avec la ferme intention de reprendre le bon rythme après des dernières semaines bien chargées.<br />
<span id="more-1142"></span><br />
Du coup forcément, difficile de faire du tri parmi tant d&#8217;info, mais j&#8217;ai fait de mon mieux hein.</p>
<ul>
<li><a  href="http://drawter.com/">Dessiner vos pages HTML</a><br />
Etonné de n&#8217;être jamais tombé dessus, cette application web est pourtant très sympa. Elle permet facilement de dessiner votre gararit html et de récupérer le code html et css associé.</li>
<li><a  href="http://www.mayzes.org/googlemaps.jquery.html">Contrôler vos google map avec jQuery</a><br />
Sans doute le plugin qu&#8217;il me manquait. Aujourd&#8217;hui on demande toujours plus aux google map, voici donc de quoi faciliter leur dynamisme avec un contrôle 100% jquery</li>
<li><a  href="http://www.nealgrosskopf.com/tech/thread.php?pid=62">Apprenez à taguer vos photos comme sur facebook</a><br />
Même si je suis pas fan de facebook, ils ont des idées et le tagging des photos en ait une. Voici donc de quoi le reproduire.</li>
<li><a  href="http://www.inspiredm.com/2010/01/12/build-web-apps/">Témoignagne sur la création d&#8217;une application web</a><br />
Des ensembles concrets, des conseils de développeurs qui ont franchi le pas de créer leur propre application</li>
<li><a  href="http://sixrevisions.com/usabilityaccessibility/unleashing-the-power-of-website-analytics/">Des stats c&#8217;est bien, les analyser c&#8217;est mieux</a><br />
Très bon billet qui donne des pistes sur ce qu&#8217;il faut tirer des stats analytics pour améliorer votre site web</li>
<li><a  href="http://www.capitaine-commerce.com/2010/01/26/24887-comment-parler-aux-developpeurs/">Comment parler aux développeurs</a> (fr)<br />
Sur le ton de l&#8217;humour, mais avec de vrais choses dedans. A lire si ce n&#8217;est pas encore fait.</li>
<li><a  href="http://www.labsmedia.fr/clickheat/index.html">Voir les zones de clic</a><br />
Voici une application à installer sur votre serveur pour obtenir les zones de clics de vos visiteurs et ainsi en améliorer la transformation</li>
<li><a  href="http://push2check.com">Toutes les stats de votre site</a><br />
Un service très sobre mais qui permet de récupérer toutes les stats possibles et imaginables sur votre site web</li>
</ul>
<p><small>Crédit photo: http://www.flickr.com/photos/wiking66/1225021381/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-30/2010/02/01/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nous avons un gagnant&#8230;</title>
		<link>http://www.amicalement-web.net/nous-avons-un-gagnant/2010/02/01/</link>
		<comments>http://www.amicalement-web.net/nous-avons-un-gagnant/2010/02/01/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 07:00:33 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Amicalement Web]]></category>
		<category><![CDATA[concours]]></category>
		<category><![CDATA[livre]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1192</guid>
		<description><![CDATA[Voilà, le concours pour les 1 ans du blog à pris fin Vendredi. Il n&#8217;y a pas eu trop de rush donc j&#8217;espère que le cadeau va à un lecteur régulier! Et sous contrôle d&#8217;huissier corrompu, le dieu du random a fait son choix: mysql&#62; select * from wp_comments where comment_post_ID = 1152 and comment_content [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/nous-avons-un-gagnant/2010/02/01/"><img src="http://www.amicalement-web.net/wp-content/uploads/allin.jpg" alt="" title="allin" width="614" height="100" class="alignnone size-full wp-image-1194" /></a> Voilà, <a  href="/et-une-bougie-et-un-cadeau-a-gagner/2010/01/25">le concours pour les 1 ans du blog</a> à pris fin Vendredi. Il n&#8217;y a pas eu trop de rush donc j&#8217;espère que le cadeau va à un lecteur régulier!<br />
<span id="more-1192"></span><br />
Et sous contrôle d&#8217;huissier corrompu, le dieu du random a fait son choix:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">select</span> <span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">from</span> wp_comments <span style="color: #990099; font-weight: bold;">where</span> comment_post_ID <span style="color: #CC0099;">=</span> <span style="color: #008080;">1152</span> <span style="color: #CC0099; font-weight: bold;">and</span> comment_content <span style="color: #CC0099; font-weight: bold;">like</span> <span style="color: #008000;">'<span style="color: #008080; font-weight: bold;">%</span>anniversaire<span style="color: #008080; font-weight: bold;">%</span>'</span> <span style="color: #990099; font-weight: bold;">order by</span> <span style="color: #000099;">RAND</span><span style="color: #FF00FF;">&#40;</span><span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">limit</span> <span style="color: #008080;">1</span> \G
<span style="color: #CC0099;">***************************</span> <span style="color: #008080;">1</span>. row <span style="color: #CC0099;">***************************</span>
          comment_ID: <span style="color: #008080;">3262</span>
     comment_post_ID: <span style="color: #008080;">1152</span>
      comment_author: Vincent C</pre></div></div>

<p>C&#8217;est donc Vincent C avec son commentaire:</p>
<blockquote><p>
Bon anniversaire !! ^^
</p></blockquote>
<p>Sobre mais efficace vu qu&#8217;il gagne le livre :p</p>
<p>Pas de souci pour les autres, on essaiera de renouveler une fois de plus l&#8217;expérience.</p>
<p>Merci à tous et à très vite pour les bons plans! (sisi je vous assure!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/nous-avons-un-gagnant/2010/02/01/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
