<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Jérémy Lecour</title>
	<atom:link href="http://jeremy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeremy.wordpress.com</link>
	<description>Concepteur et développeur d'applications web</description>
	<lastBuildDate>Fri, 13 Nov 2009 14:35:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='jeremy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ad97d4717fc4440de4c1e629116be113?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Jérémy Lecour</title>
		<link>http://jeremy.wordpress.com</link>
	</image>
			<item>
		<title>Monter dans le train de Ruby et Rails</title>
		<link>http://jeremy.wordpress.com/2009/11/13/monter-dans-le-train-de-ruby-et-rails/</link>
		<comments>http://jeremy.wordpress.com/2009/11/13/monter-dans-le-train-de-ruby-et-rails/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:58:45 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[PLUG]]></category>
		<category><![CDATA[Personnel]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=169</guid>
		<description><![CDATA[Pour aider à débuter dans Ruby et Rails, je propose quelques conseils pour aborder le langage Ruby, le framework Ruby on Rails, les ressources d'apprentissage et d'informations, les meilleurs blogs, screencasts, …<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=169&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Lorsque j’ai plongé dans la communauté <strong>Rails</strong> il y a 3 ans, elle n’était pas aussi riche qu’aujourd’hui : moins de monde, de livres, de blogs, de documentation, … Ça rendait les choses plus faciles car on trouvait assez rapidement les sources valables, mais en même temps il y avait beaucoup moins d’information disponible qu’aujourd’hui.</p>
<p>Je me suis dit que rassembler un peu mes sources et donner quelques conseils pouvait probablement aider des nouveaux venus.</p>
<h2>Alors par où commencer ?</h2>
<p>Contrairement à ce que j’ai fait, je pense qu’il faut commencer par aborder Ruby, en tant que langage.<br />
Dans mon précédent <a href="http://jeremy.wordpress.com/2009/11/03/ruby-et-rails-ou-bien-php-et-symfony/">article sur la comparaison de PHP/Symfony et Ruby/Rails</a>, je disais qu’à mon avis, <strong>la principale force de Rails, c’est Ruby</strong>.</p>
<p><strong>Ruby</strong> est un langage qui emprunte des concepts et tout un tas de mécanismes à d’autres langages, mais c’est aussi un langage qui étonne et surprend au début, par sa syntaxe et ses idiomes particuliers.<br />
Pour éviter d’écrire du PHP ou du Java en Ruby, il est important de bien comprendre et intégrer le style Ruby ; la manière d’itérer dans un tableau, l’enchaînement des appels de méthodes, les blocks, l’absence de primitives, l’arborescence des types d’objets, …</p>
<p style="padding-left:30px;"><strong>Mise à jour :</strong> En tout premier lieu, jetez vous sur l&#8217;excellent <a href="http://tryruby.sophrinix.com/">Try Ruby! (in your browser</a>) qui vous permettra en une quinzaine de minutes de voir différents aspects du langage. Merci à NiKo qui m&#8217;a rappelé cet oubli impardonnable, ou plutôt cette disparition entre mon brouillon et la version finale de l&#8217;article.</p>
<p>Pour cela, je conseille de <strong>parcourir la documentation de Ruby</strong>. N’ayez pas peur, c’est beaucoup plus concis que celle de PHP ou Java.<br />
Ruby est composé d’une partie “Core” et d’un ensemble de “Standard Libraries”.<br />
Chaque type d’objet dispose de méthodes, documentées de manière très lisible, avec des exemples d’utilisation.<br />
On peut donc “lire” ces fichiers de doc et comprendre par exemple tout ce dont est capable la classe Array, le fait qu’elle partage des comportements avec Hash, via le module Enumerable, …<br />
Les notions de manipulation/création d’objets personnalisés et d’instance de ces objets, l’héritage et la modularisation, la méta-programmation, l’introspection, … sont des concepts majeurs, qui seront mieux expliqués dans des livres et/ou articles de blog.</p>
<p>Le livre <a href="http://www.manning.com/black2/">The Well-Grounded Rubyist</a> (par David A. Black aux éditions Manning) est probablement le meilleur pour accompagner le novice en Ruby, y compris sur les terres de Ruby 1.9</p>
<p>Être capable d’écrire des bouts de programmes ou algorithmes simples, du genre de ceux qu’on apprend en cours à la fac est l’histoire de quelques jours où ont doit s’efforcer de rester un peu à l’écart de Rails.<br />
Un bon petit exercice peut être de prendre un script shell et de le re-coder en Ruby, comme par exemple lister des fichiers dans des répertoires, renommer/déplacer certains qui seraient passés dans des filtres, …</p>
<p>Au mieux on aura assimilé Ruby, le plus vite on comprendra Rails.</p>
<h2>Aborder Ruby on Rails, le framework de développement web</h2>
<p>Pour commencer, je conseille la lecture de quelques articles :</p>
<ul>
<li><a href="http://guides.rubyonrails.org/getting_started.html">le guide “Getting Started”</a></li>
<li>la <a href="http://rubyonrails.org/documentation">page officielle “Get Better”</a> et ses ressources liées</li>
</ul>
<p>En parallèle, plonger dans 1 ou 2 livres est une très bonne chose car on y est accompagné par des experts particulièrement pédagogues :</p>
<ul>
<li><a href="http://www.amazon.com/Rails-Way-Obie-Fernandez/dp/0321445619">The Rails Way</a> par Obie Fernandez, aux éditions Addison-Wesley, disponible en anglais seulement</li>
<li>et aussi le très officiel <a href="http://pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition">Agile Web Development with Rails</a> (3ème édition) par Sam Ruby, Dave Thomas et David Heinemeier Hansson, aux éditions The Pragmatic Bookshelf. Il est disponible en français et en anglais</li>
</ul>
<p>On ne peut pas passer à côté des screencasts de Ryan Bates (<a href="http://railscasts.com">Railscasts.com</a>) et ceux de Geoffrey Grosenbach / Topfunky (<a href="http://peepcode.com">Peepcode.com</a>).</p>
<ul>
<li>les <strong>Railscasts</strong> sont gratuits. Un nouveau sort quasiment chaque semaine , il y a déjà plus de 180 épisodes, entre 5 et 20 minutes environ.</li>
<li>les <strong>Peepcode</strong> sont payants et plus rares, mais la qualité du fond et de la forme en fond une ressource fondamentale. Je conseille l’abonnement  illimité pendant 1 an, ça vaut vraiment le coup.</li>
</ul>
<p>L’idéal est probablement de <strong>les regarder en diagonale une 1ère fois</strong>, en partant des plus anciens, sans trop s’attarder sur les détails car Rails évolue très vite et certains épisodes sont totalement obsolètes au niveau de l’implémentation. Par contre les passer en revue permet de se rendre compte des tendances et des techniques clés. Personnellement, je les ai tous en permanence sur mon disque dur et j’y reviens souvent.</p>
<p>Pour suivre les publications de tous les producteurs de screencasts, il y a <a href="http://learnivore.com">Learnivore</a> (par Thibaut Barrère &#8211; <a href="http://twitter.com/tbarrere">@tbarrere</a>) qui les recense tous.</p>
<h2>Le bon dosage théorie/pratique</h2>
<p>Le risque à partir bille en tête dans un projet concret après avoir lu quelques articles et synthèses de livres, c’est qu’on va se limiter à la surface des choses, on va mal utiliser les outils à disposition ou utiliser le mauvais outil pour le boulot.</p>
<p>Je ne préconise pas non plus de passer 6 mois à lire tous les livres, sans toucher au clavier, car on apprend énormément en faisant soi-même, en confrontant ses idées à la réalité des fonctionnalités qu’on veut mettre en œuvre.</p>
<p>C’est pourquoi je pense qu’il faut conserver <strong>une bonne part de son temps à l’apprentissage</strong> pur. Revenir à la doc du langage et tester des méthodes qu’on connaît mal ou dont on avait oublié l’existence, lire et essayer de mettre en œuvre les bonnes pratiques décortiquées par les experts, …</p>
<p>Personnellement, je passe beaucoup de temps personnel à mon métier, mais c’est rare que je continue à la maison mon boulot de la journée. Je préfère utiliser ce temps pour mes lectures, mes recherches et tests, … Ça me permet de prendre du recul et avoir une perspective plus large. Au final, c’est ma compétence et ma productivité qui croissent, même si je ne passe pas plus de temps à pisser des lignes de code.</p>
<p>Sur ces points, je conseille vivement la lecture de la série d’article de Jamis Buck intitulée <a href="http://weblog.jamisbuck.org/2009/9/17/there-is-no-magic-there-is-only-awesome-part-1">There is no magic, there is only awesome</a> où il livre ses clés de la compétence : <strong>connaître ses outils, son langage, ses librairies et sa communauté</strong>. (NB : le début de la 1ère partie est assez particulière, ne bloquez pas dessus, le reste est passionant).</p>
<h2>Intégrer les tests dans son apprentissage</h2>
<p>Je ne vais pas faire l’article du Test-Driven Development (ni du Behavior Driven Development), mais j’insiste énormément sur le fait qu’il ne faut absolument pas négliger cet aspect là. Il ne faut surtout pas sauter les chapitres où les auteur parlent des tests, en se disant qu’on y reviendra plus tard, quand on on maîtrisera mieux le langage et le framework, et ce pour 3 raisons.</p>
<ol>
<li>c’est très dur de revenir là dessus plus tard. On est vite pris dans la “production” et on a l’impression que c’est du temps perdu, ce qui est archi-indéniablement-faux.</li>
<li>ça aide énormément pour apprendre car on est en permanence à décrire ce dont on a besoin et implémenter ce qui satisfait ces besoins. On décortique systématiquement ce qu’on écrit lors des phases de refactorisation, …</li>
<li>c’est un pan entier de la culture Ruby et des avantages qui sont à porté de main. Le négliger serait comme ne jamais utiliser les tableaux ; on peut s’en sortir sans, mais quelle difficulté et quel dommage.</li>
</ol>
<p>Sur la question des tests, je conseille le superbe livre <a href="http://www.pragprog.com/titles/achbd/the-rspec-book">The RSpec Book</a>” (toujours en version bêta, en cours d’écriture), par un collectif d’auteurs (dont David Chemlinski) aux éditions The Pragmatic Bookshelf.</p>
<h2>Lire du code, encore et encore</h2>
<p>Une fois qu’on a compris le langage qu’on va manipuler, il n’y a rien de mieux que de lire du code<br />
NB : regardez la <a href="http://mwrc2009.confreaks.com/13-mar-2009-10-30-littlebigruby-james-edward-grey-ii.html">vidéo de la conférence de JEG2</a> sur ce sujet</p>
<p>On préfèrera lire du code brillant, mais il faut aussi lire du code commun, voir sale, ça permet de mettre en perspective ce qu’est un code beau, efficace, lisible. Et d’ailleurs, plus on en lit, plus on sait faire soi-même la différence. Ruby encourage tellement l’écriture de code lisible et concis que lorsque ça ne l’est pas, c’est mauvais signe.</p>
<p>Les librairies standard sont un bon point de départ. Le code est principalement de très bonne qualité (à quelques exceptions près) mais n’est pas non plus sur-compressé et sur-intelligent (ça n’est pas son but).<br />
Le code interne de Rails (ou plutôt ses librairies principales, comme ActiveRecord, ActiveSupport, …) est également une très bonne matière, mais comme tout bon framework, son code doit être le plus optimisé possible, le plus malléable et générique possible, au détriment de la clarté et de la transparence. On aura donc des fois du mal à démêler le fonctionnement de portion de code ou la méta-programmation et l’abstraction sont utilisés à plein régime.<br />
Enfin, les librairies tierces les plus connues et utilisées sont de bonnes choses à lire. Leur succès au sein de la communauté est souvent signe de qualité du code.</p>
<p>Jamis Buck conseille de toujours lire le code d’une gem ou d’un plugin avant de l’installer et l’utiliser. Au mieux on aura parfaitement compris ce qu’il fait et comment l’utiliser à fond. Au pire on sera dégoûté de son fonctionnement et on le jettera aussitôt. Et souvent on se dira que ça vaut pas le coup de l’installer car on n’a besoin que de 10% de son code et qu’on ferai mieux de le recoder soi-même de manière plus adaptée à ses besoins.</p>
<h2>Se tenir au courant de la vie de l’écosystème</h2>
<p>Une fois qu’on a mise les pieds dedans et qu’on se dit qu’on n’a pas envie d’en sortir en courant, il faut bien se tenir à jour et continuer d’apprendre.</p>
<p>Pour ça je n’ai rien trouvé de mieux que de m’abonner à tout un tas de blogs et suivre pas mal de gens sur Twitter.</p>
<p>Avec un peu d’habitude on sait rapidement faire le tri entre ceux sur qui il faut se jeter sans attendre à chaque post et ceux qu’il faut garder dans un coin du radar car ils sortent de temps en temps un truc fort valable.</p>
<p>Je vous glisse ma liste de recommandations, à toutes fins utiles.</p>
<p>Les podcasts <a href="http://railsenvy.com">Rails Envy</a> et <a href="http://ruby5.envylabs.com/">Ruby5</a> permettent de suivre l’activité de la communauté Rails depuis de nombreux mois. À chaque épisode il y a les “show notes” pour retrouver ce qui a été évoqué.</p>
<p>Avec l’arrivée des listes sur Twitter, le mieux est de farfouiller dans les listes suivantes (dont la mienne).<br />
En faisant des recoupements entre les personnes suivies, on se retrouve rapidement avec la crème de la communauté.</p>
<ul>
<li><a href="http://www.twitter.com/jlecour/ruby-rails">@jlecour/ruby-rails</a></li>
<li><a href="http://www.twitter.com/rails/core">@rails/core</a></li>
<li><a href="http://www.twitter.com/joshpeek/rubyists">@joshpeek/rubyists</a></li>
<li><a href="http://www.twitter.com/jamis/rubyists">@jamis/rubyists</a></li>
<li><a href="http://www.twitter.com/bigfleet/rubyists">@bigfleet/rubyists</a></li>
<li><a href="http://www.twitter.com/bitsweat/railed">@bitsweat/railed</a></li>
<li><a href="http://www.twitter.com/bitsweat/rubyists">@bitsweat/rubyists</a></li>
<li><a href="http://www.twitter.com/hashrocket/developers">@hashrocket/developers</a></li>
<li><a href="http://www.twitter.com/rmanalan/ruby">@rmanalan/ruby</a></li>
</ul>
<p>Voici ma liste de blogs et sites suivis via RSS. Ils ne sont pas tous très actifs (heureusement) mais contiennent tous des articles très intéressants.</p>
<p>Quelques mentions particulières :</p>
<ul>
<li><a href="http://ryandaigle.com/">Ryan’s Scraps</a> ; Il décortique à l’avance les nouvelles fonctionnalités</li>
<li><a href="http://afreshcup.com">A Fresh Cup</a> ; Les trouvailles quotidiennes d’un développeur Ruby/Rails fameux</li>
<li><a href="http://robots.thoughtbot.com/">Giant Robots</a> ; De très bons conseils et tutoriaux de la part d’une team qui produit beaucoup de très bons plugins/gems. Ils sont l’éditeur de Hoptoad (notifications d’exceptions)</li>
<li><a href="http://blog.rubybestpractices.com/">Ruby Best Practices</a> ; Les meilleurs pratiques en Ruby, très avancé.</li>
<li><a href="http://blog.grayproductions.net/">Le blog de James Edward Gray 2nd</a> ; Un développeur de très haut niveau qui poste des article très poussés sur les meilleures pratiques et des analyses de “produits”</li>
<li><a href="http://www.therailsway.com/">The Rails Way</a> ; Les bonnes pratiques Ruby et Rails par KOZ (Mickael Koziarski)</li>
<li><a href="http://weblog.jamisbuck.org/">the { buckblogs :here}</a> ; Le blog de développeur de Jamis Buck (état d’esprit, bonnes pratiques, analyses, …)</li>
<li><a href="http://programmingtour.blogspot.com/">The Journeyman Software Craftsman</a> ; Le blog de Corey Haines sur son expérience de développeur itinérant. Beaucoup de réflexions et analyses sur l’attitude du développeur et les bonnes pratiques</li>
</ul>
<p>Autres blogs et sites :</p>
<ul>
<li>2dconcept &#8211; Ruby on Rails : <a href="http://www.2dconcept.com">http://www.2dconcept.com</a></li>
<li>Brainspl.at : <a href="http://brainspl.at/">http://brainspl.at/</a></li>
<li>code : <a href="http://norbauer.com/notebooks/code">http://norbauer.com/notebooks/code</a></li>
<li>Code Snippets: rails code : <a href="http://snippets.dzone.com/posts">http://snippets.dzone.com/posts</a></li>
<li>Code Snippets: rubyonrails code : <a href="http://snippets.dzone.com/posts">http://snippets.dzone.com/posts</a></li>
<li>Delicious/popular/rails : <a href="http://delicious.com/popular/rails">http://delicious.com/popular/rails</a></li>
<li>devpals &#8211; ruby : <a href="http://www.devpals.com">http://www.devpals.com</a></li>
<li>Envy Labs : <a href="http://blog.envylabs.com">http://blog.envylabs.com</a></li>
<li>err.the_blog : <a href="http://errtheblog.com/">http://errtheblog.com/</a></li>
<li>Frailers.net: Articles : <a href="http://www.frailers.net/articles.rss">http://www.frailers.net/articles.rss</a></li>
<li>Frailers.net: News : <a href="http://frailers.net/posts.rss">http://frailers.net/posts.rss</a></li>
<li>GitCasts Screencasts &#8211; HighRes : <a href="http://www.gitcasts.com/posts.html">http://www.gitcasts.com/posts.html</a></li>
<li>Gluttonous : <a href="http://glu.ttono.us/">http://glu.ttono.us/</a></li>
<li>Hashrocket : <a href="http://www.hashrocket.com/blog/rss">http://www.hashrocket.com/blog/rss</a></li>
<li>has_many :through : <a href="http://blog.hasmanythrough.com">http://blog.hasmanythrough.com</a></li>
<li>igvita.com : <a href="http://www.igvita.com">http://www.igvita.com</a></li>
<li>J B. Rains : <a href="http://www.jbrains.ca/">http://www.jbrains.ca/</a></li>
<li>Join The Conversation : <a href="http://feeds.feedburner.com/JoinTheConversation">http://feeds.feedburner.com/JoinTheConversation</a></li>
<li>JSBlogger : <a href="http://jumpstartlab.com/resources/rails-jumpstart/jsblogger/">http://jumpstartlab.com/resources/rails-jumpstart/jsblogger/</a></li>
<li>Labnotes : <a href="http://blog.labnotes.org">http://blog.labnotes.org</a></li>
<li>Litany Against Fear : <a href="http://litanyagainstfear.com/">http://litanyagainstfear.com/</a></li>
<li>Loud Thinking : <a href="http://loudthinking.com/">http://loudthinking.com/</a></li>
<li>Lucky Sneaks &#8211; Blog : <a href="http://feeds.feedburner.com/luckysneaks">http://feeds.feedburner.com/luckysneaks</a></li>
<li>Nuby on Rails : <a href="http://nubyonrails.com">http://nubyonrails.com</a></li>
<li>overstimulate the feed : <a href="http://overstimulate.com">http://overstimulate.com</a></li>
<li>Phusion Corporate Blog : <a href="http://blog.phusion.nl/">http://blog.phusion.nl/</a></li>
<li>PJ Hyett : <a href="http://www.pjhyett.com/">http://www.pjhyett.com/</a></li>
<li>pmade inc. Articles : <a href="http://www.contextualdevelopment.com">http://www.contextualdevelopment.com</a></li>
<li>Rails Jedi : <a href="http://www.railsjedi.com">http://www.railsjedi.com</a></li>
<li>Rails Magazine : <a href="http://railsmagazine.com">http://railsmagazine.com</a></li>
<li>Rails Prescriptions 24 Hour Window Blog : <a href="http://blog.railsprescriptions.com/posts">http://blog.railsprescriptions.com/posts</a></li>
<li>RailsLab : <a href="http://railslab.newrelic.com/articles.rss">http://railslab.newrelic.com/articles.rss</a></li>
<li>RailsTips : <a href="http://railstips.org/">http://railstips.org/</a></li>
<li>Riding Rails (blog officiel de Rails) : <a href="http://weblog.rubyonrails.org/">http://weblog.rubyonrails.org/</a></li>
<li>rpheath.com : <a href="http://rpheath.com">http://rpheath.com</a></li>
<li>Ruby Best Practices : <a href="http://blog.rubybestpractices.com/">http://blog.rubybestpractices.com/</a></li>
<li>Ruby Discoveries and Idioms : <a href="http://redcorundum.blogspot.com/">http://redcorundum.blogspot.com/</a></li>
<li>Ruby Inside : <a href="http://www.rubyinside.com">http://www.rubyinside.com</a></li>
<li>Ruby Lang (site officiel de Ruby) : <a href="http://www.ruby-lang.org/">http://www.ruby-lang.org/</a></li>
<li>Ruby on Rails Plugins : <a href="http://agilewebdevelopment.com/plugins/recent/">http://agilewebdevelopment.com/plugins/recent/</a></li>
<li>Ruby on Rails Resources : <a href="http://agilewebdevelopment.com/resources">http://agilewebdevelopment.com/resources</a></li>
<li>Ruby Plus : <a href="http://www.rubyplus.org">http://www.rubyplus.org</a></li>
<li>RubyFrance : <a href="http://rubyfrance.org/rss/">http://rubyfrance.org/rss/</a></li>
<li>RubyTu.be : <a href="http://rubytu.be/">http://rubytu.be/</a></li>
<li>sd.rb podcast : <a href="http://sdruby.org">http://sdruby.org</a></li>
<li>Segment7 : <a href="http://blog.segment7.net">http://blog.segment7.net</a></li>
<li>SoliSoft.net : <a href="http://solisoft.net">http://solisoft.net</a></li>
<li>The Budding Rubyist : <a href="http://buddingrubyist.wordpress.com">http://buddingrubyist.wordpress.com</a></li>
<li>The GitHub Blog : <a href="http://github.com/blog">http://github.com/blog</a></li>
<li>The Pug Automatic : <a href="http://henrik.nyh.se/">http://henrik.nyh.se/</a></li>
<li>Trek : <a href="http://wonderfullyflawed.com">http://wonderfullyflawed.com</a></li>
<li>Viget Extend : <a href="http://www.viget.com/extend/">http://www.viget.com/extend/</a></li>
</ul>
<p>J&#8217;espère vraiment que cet article sera utile. Il ne reflète que mon avis et mon expérience.</p>
<p>Si vous avez des avis et des suggestions, n&#8217;hésitez pas à utiliser les commentaires pour ça.</p>
 Tagged: rails, ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/169/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=169&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/11/13/monter-dans-le-train-de-ruby-et-rails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>mysqlctl pour vous servir</title>
		<link>http://jeremy.wordpress.com/2009/11/09/mysqlctl-pour-vous-servir/</link>
		<comments>http://jeremy.wordpress.com/2009/11/09/mysqlctl-pour-vous-servir/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 08:33:36 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=160</guid>
		<description><![CDATA[J&#8217;ai suivi les conseils de Dan Benjamin et sur mon Mac, j&#8217;ai installé (entre autres) MySQL depuis les sources et non pas depuis un paquet préparé par MySQL Sun Oracle.
La procédure est très simple, pas de soucis de ce côté là.
Par contre on se retrouve avec un serveur qui est géré par launchd. C&#8217;est parfait [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=160&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>J&#8217;ai suivi les <a href="http://hivelogic.com/articles/compiling-mysql-on-snow-leopard/">conseils de Dan Benjamin</a> et sur mon Mac, j&#8217;ai installé (entre autres) MySQL depuis les sources et non pas depuis un paquet préparé par <del datetime="2009-11-09T08:16:55+00:00">MySQL</del> <del datetime="2009-11-09T08:16:55+00:00">Sun</del> Oracle.<br />
La procédure est très simple, pas de soucis de ce côté là.</p>
<p>Par contre on se retrouve avec un serveur qui est géré par launchd. C&#8217;est parfait à beaucoup d&#8217;égard (je ne vais pas faire l&#8217;article de ce superbe &#8220;logiciel&#8221;, vous trouverez tout chez <a href="http://developer.apple.com/macosx/launchd.html">Apple</a> et <a href="http://en.wikipedia.org/wiki/Launchd">Wikipedia</a>) sauf lorsqu&#8217;on veut démarrer/arrêter le serveur MySQL manuellement, comme après un changement de config, …</p>
<p>Pour cela il faut lancer ceci via le terminal :<br />
<code>sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist</code><br />
Pour le démarrage, c&#8217;est bien sûr <code>load</code> à la place de <code>unload</code></p>
<p>C&#8217;est pas si simple à mémoriser si on s&#8217;en sert très rarement, et c&#8217;est un peu casse-pieds si on s&#8217;(en sert souvent. Alors comme en plus je ne suis pas très fort en shell, je me suis dit que je pouvais écrire un petit script pour le faire à ma place.</p>
<p>Remarquez, j&#8217;aurai pu faire un alias dans mon environnement Bash, mais j&#8217;ai préféré partir sur le script autonome.</p>
<p>J&#8217;ai choisi le nom <code>mysqlctl</code> pour ressembler à divers commandes existantes, comme <code>apachectl</code>, et comme me l&#8217;a fait remarqué <a href="http://twitter.com/colinux">Colinux</a>, ça n&#8217;est pas  le nom d&#8217;un binaire/script &#8220;officiel&#8221; de MySQL, donc pas de risque de confusion.</p>
<p>Vous trouverez ce script (et le fichier de config de MySQL pour launchd) sur <a href="http://github.com/jlecour/mysqlctl-osx">GitHub</a>. Vous pouvez librement le télécharger et l&#8217;utiliser, mais aussi faire un fork et proposer des corrections et/ou améliorations.</p>
 Tagged: mac os x, mysql <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/160/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/160/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/160/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=160&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/11/09/mysqlctl-pour-vous-servir/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>RSpec : let() it be</title>
		<link>http://jeremy.wordpress.com/2009/11/05/rspec-let-it-be/</link>
		<comments>http://jeremy.wordpress.com/2009/11/05/rspec-let-it-be/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 22:26:15 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[PLUG]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=148</guid>
		<description><![CDATA[What I&#8217;ve found
A few minutes ago, I was watching a great screencast of Corey Haines doing a kata.
I stopped when he was refactoring a few similar assigments. There was something I&#8217;ve never seen elsewhere, particularly in the also great RSpec book ; he used the let() method.
Going back and forth a few times, I understood [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=148&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>What I&#8217;ve found</h2>
<p>A few minutes ago, I was watching a great <a href="http://katas.softwarecraftsmanship.org/?p=27">screencast of Corey Haines doing a kata</a>.<br />
I stopped when he was refactoring a few similar assigments. There was something I&#8217;ve never seen elsewhere, particularly in the also great <a href="http://pragprog.com/titles/achbd">RSpec book</a> ; he used the <code>let()</code> method.</p>
<p>Going back and forth a few times, I understood the the method was assigning the result of the given block to an object named after the argument of <code>let()</code>.</p>
<p>I googled to see if there was an explanation ; is it a custom helper he wrote, is it built-in RSpec, … ? but &#8220;RSpec let()&#8221; is returning a lot of results, and none was close to the answer I was looking for.</p>
<p>I then looked at the Rdoc for the RSpec gem ; no luck either.</p>
<p>Finally, I open the whole gem in Textmate and looked for &#8220;let&#8221; as a word.</p>
<p>I&#8217;ve found a use of the method in a spec (RSpec is speced with itself, how great is it?) with a similar scenario. I&#8217;ve also found the method declaration, and I have to say that it&#8217;s pretty self-explanatory :</p>
<pre class="brush: ruby;">
  def let(name, &amp;block)
    define_method name do
      @assignments ||= {}
      @assignments[name] ||= instance_eval(&amp;block)
    end
  end
</pre>
<p>You have to pass a name and a block. It defines a new method (named after what&#8217;s in &#8216;name&#8217;). This new method returns the result of the block (whatever it returns) but is memoizes it in a global hash.</p>
<p>You can use the <code>let()</code> method in a <code>describe</code> block, if you want to create a method that is always returning the same value, determined by the result of the passed block. It is something you can do with a traditional <code>before</code> block with a simple variable assignment, but it&#8217;d be evaluated each time, though it&#8217;s not necessary. A simple variable is also subject to change if it&#8217;s not frozen or a constant.<br />
Here, it&#8217;s just what it is and only what it needs to be.</p>
<h2>What I like</h2>
<p>First, I like that some very simple but usefull tools are available. I really sounds like something build after hundreds of times of repeating the same calls, … It&#8217;s very concise and DRY.</p>
<p>But I also like very much the way the hash is created if it doesn&#8217;t already exist, and the value is set only once,even on subsequent calls of the new method.</p>
<p>The dynamically created method could have been defined this way :</p>
<pre class="brush: ruby;">
  define_method name do
    @assignments = {} if @assignments.nil?
    if @assignments[name].nil?
      @assignments[name] = instance_eval(&amp;block)
    else
      @assignments[name]
    end
  end
</pre>
<p>but it&#8217;s boringly verbose and repetitive. The first way is way more readable and elegant.</p>
<p>If I have remember just a thing from Corey&#8217;s screencast, it&#8217;s the existence and the use of this beautiful <code>let()</code> method and how well it is written.</p>
<h2>About Corey Haines</h2>
<p>Corey is a great guy, one of the few that I really admire.</p>
<p>Amongst the thing that I like about him, he&#8217;s doing something that I&#8217;d really like to do : he&#8217;s traveling all over the USA and is offering to share some working (and fun) times for hospitality and friendship. </p>
<p>You can find about what he does on <a href="http://www.coreyhaines.com/">his profile page</a>.</p>
<p>Thanks Corey !</p>
<hr />
<p><strong>Update 1</strong> : The entire <a href="http://github.com/coreyhaines/kata-codebreaker-marker">Kata is available on GitHub</a>. There are 3 branches : the first is the start of the kata, with only the setup and the cucumber expectations. The second and third are implementations.</p>
<p>It&#8217;s very useful to read the initial state of the Kata and see where it ends, with all the tests and the implementation code.</p>
 Tagged: rspec, ruby, tdd <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=148&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/11/05/rspec-let-it-be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby et Rails ou bien PHP et Symfony ?</title>
		<link>http://jeremy.wordpress.com/2009/11/03/ruby-et-rails-ou-bien-php-et-symfony/</link>
		<comments>http://jeremy.wordpress.com/2009/11/03/ruby-et-rails-ou-bien-php-et-symfony/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 08:00:02 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Autrement]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[PLUG]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=137</guid>
		<description><![CDATA[Dans le cadre de mon travail chez Autrement, je bosse principalement sur du développement web en Ruby, avec l&#8217;aide du framework Ruby on Rails.
Je suis focalisé sur le développement d&#8217;une appli web (encore un eu secrète pour le moment), mais là, Autrement édite par ailleurs le site web chambresapart.fr
Le développement de ce site a commencé [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=137&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Dans le cadre de mon travail chez <a href="http://autrementleblog.com/" target="_blank"><strong>Autrement</strong></a>, je bosse principalement sur du développement web en Ruby, avec l&#8217;aide du framework <strong>Ruby on Rails</strong>.</p>
<p>Je suis focalisé sur le développement d&#8217;une appli web (encore un eu secrète pour le moment), mais là, Autrement édite par ailleurs le site web <a href="http://chambresapart.fr/" target="_blank">chambresapart.fr</a><br />
Le développement de ce site a commencé bien avant que je rejoigne l&#8217;équipe et il s&#8217;appuie sur le framework <strong>Symfony</strong>, basé sur <strong>PHP</strong>.</p>
<p>Actuellement l&#8217;équipe <strong>Chambres à Part</strong> se compose de 2,5 personnes qui sont toutes les 3 des développeurs confirmés, spécialisés sur <strong>PHP</strong> / <strong>Symfony</strong>.</p>
<p>Avant le lancement de la &#8220;version 1&#8243; de Chambres à Part, j&#8217;ai participé au développement de certaines fonctionnalités, mais principalement sur des aspects HTML, CSS, Javascript, cartographie Google + <a href="http://maptimize.com" target="_blank">Maptimize</a>, …<br />
La dernière semaine a été uniquement consacrée à du debuggage et pour ça j&#8217;ai mis un peu plus mon nez dans le code source du site et donc dans la partie &#8220;vue&#8221; (le V de <abbr title="Model-View-Controller">MVC</abbr>).</p>
<p>Je ne peux surtout pas prétendre connaître Symfony dans ce qu&#8217;il a de particulier par rapport à d&#8217;autres framework web (et MVC en particulier), mais je peux comparer ce que j&#8217;ai vu et ce que l&#8217;équipe raconte au quotidien avec ce que je connais et vis au quotidien depuis 3 ans avec Ruby et Rails.</p>
<p>De plus, j&#8217;ai développé quasi-exclusivement en PHP depuis les premiers temps du PHP3 jusqu&#8217;à PHP5, donc même si j&#8217;ai passablement oublié certains réflexes de manipulation du langage et la plupart de noms de méthodes, je pense avoir un avis assez circonstancié sur PHP.</p>
<h2>La question</h2>
<p>Pour le développement de la partie visible du projet sur lequel je suis mobilisé, d&#8217;autres personnes de l&#8217;équipe vont participer activement et durablement. Une question se pose donc inévitablement : <strong>Ruby on Rails ou bien Symfony ?</strong></p>
<p>Notre boss comprend bien quand on lui parle de technique, avec des arguments clairs, mais il ne se sent pas (à raison) en mesure de décider lui-même d&#8217;un framework ou d&#8217;un langage plutôt qu&#8217;un autre. Il nous a donc demandé de préparer une discussion sur cette question, en apportant surtout des faits et des remarques objectives afin de tout mettre sur la table et tenter en équipe de prendre la bonne décision.</p>
<p>Je suis convaincu qu&#8217;il ne s&#8217;agit pas de valider ou invalider les choix des uns et des autres, mais plutôt de faire un état des lieux et s&#8217;orienter dans la meilleure décision.</p>
<p>Comme je suis quelqu&#8217;un de passionné, et qui ne se lance dans les choses qu&#8217;avec une forte conviction, j&#8217;ai quand même envie de convaincre que mon choix de quitter le développement en PHP pour le faire en Ruby n&#8217;est pas juste &#8220;mon choix&#8221; mais un choix lucide et cohérent.</p>
<p>Alors j&#8217;ai sorti un bout de papier et un crayon (ou plutôt un document &#8220;untitled.txt&#8221; et mon beau clavier) pour pondre une liste d&#8217;arguments.</p>
<p>Et puis je me suis dit que garder tout ça pour nous, en interne, était un peu égoïste. Pourquoi ne pas partager mes observations et mon analyse. Je ne pense pas que quiconque (au delà de notre équipe et mes copains geeks) s&#8217;intéresse à <em>mon</em> avis sur la question, mais <em>un</em> avis, ça peut donner des idées, participer à une réflexion, …</p>
<h2>Présentation factuelle de Ruby et Rails</h2>
<p>Ici je ne présente que des points clés, du moins ceux auxquels j&#8217;ai pensé.<br />
Je ne détaillerai pas ces points, d&#8217;autres l&#8217;ont fait bien mieux que moi.</p>
<h3>Ruby</h3>
<ul>
<li>100% objet, pas de primitives</li>
<li>langage concis et lisible : moins de code, moins de bugs</li>
<li>langage dynamique, <a href="http://en.wikipedia.org/wiki/Strongly_typed_programming_language" target="_blank">fortement typé</a></li>
<li>imprégné des méthodes de tests <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"><abbr title="Test-Driven Development">TDD</abbr></a> et <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank"><abbr title="Behavior-Driven Development">BDD</abbr></a> (nombreux frameworks disponibles)</li>
<li>synergie avec les méthodes agiles</li>
<li>Ruby en ligne de commande (IRB), pratique pour des essais, …</li>
<li><a href="http://en.wikipedia.org/wiki/Rubygems" target="_blank">Rubygems</a> : gestionnaire de paquets additionnels</li>
<li>vitesse d&#8217;apprentissage</li>
<li>syntaxe et idiomes riches et avancés</li>
<li>meta-programmation</li>
<li>inspiré des meilleurs langages reconnus : Smalltalk, Lisp, Python, Perl, …</li>
<li>forte implication et marques de confiance des ténors : IBM, Sun, Apple, Microsoft, SAP, …</li>
<li>de nombreux frameworks de premier plan : Rails, Sinatra, …</li>
</ul>
<p>J&#8217;invite à la lecture de la <a href="http://en.wikipedia.org/wiki/Ruby_(programming_language)" target="_blank">page de Ruby sur Wikipedia</a>, que je trouve assez complète et claire.</p>
<h3>Rails</h3>
<ul>
<li>dédié au développement d&#8217;appli web</li>
<li>architecture <a href="http://en.wikipedia.org/wiki/Model–view–controller" target="_blank"><abbr title="Model-View-Controller">MVC</abbr></a></li>
<li>naturellement <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank"><abbr title="REpresentational State Transfer">REST</abbr></a></li>
<li>forte incitation à <a href="http://en.wikipedia.org/wiki/DRY" target="_blank"><abbr title="Don't Repeat Yourself">DRY</abbr></a></li>
<li>convention plutôt que configuration</li>
<li>grand variété de helpers</li>
<li>des outils annexes très utiles : débuggage, déploiement, monitoring, …</li>
<li>des environnements d&#8217;exécution bien définis et cloisonnés</li>
<li>WebServices-friendly</li>
<li>système strict de migration des bases de données</li>
<li>framework complet accessible en ligne de commande</li>
<li>variété de backend pour le cache et les sessions : mémoire, fichiers, BDD, memcached, …</li>
<li>I18n</li>
<li>communauté très active</li>
<li>documentation riche (en ligne, livres, …)</li>
<li><a href="http://en.wikipedia.org/wiki/Rack_(web_server_interface)" target="_blank">Rack</a> middlewares =&gt; empilement de briques fonctionnelles dédiées et modulaires : cache, debug, auth, …</li>
<li>logging avancé et personnalisable</li>
<li>fortes opinions, mais autres choix possibles : ORM, templates, framework JS, …</li>
</ul>
<p>Pour une introduction à Rails, je vous renvoie vers le <a href="http://guides.rubyonrails.org/getting_started.html" target="_blank">le guide de démarrage pour Rails</a> ou <a href="http://rails-nutshell.labs.oreilly.com/" target="_blank">Rails in a Nutshell</a> (qui est encore en beta).</p>
<h2>Analyse subjective (mais convaincue) de Ruby &amp; Rails vs. PHP &amp; Symfony</h2>
<p>Là, je sors un peu des faits indéniables pour m&#8217;aventurer dans ma propre analyse des différences entre ces 2 frameworks (et leur langage sous-jacent respectif). Cette analyse est forcément subjective et je serai ravi d&#8217;entendre des avis contraires ou complémentaires.</p>
<h3>PHP vs. Ruby</h3>
<p>Prenons la métaphore de la caisse à outils.</p>
<p><strong>PHP</strong> est une énorme caisse, dans laquelle il y a des outils pour presque tout, tellement que ça devient difficile de tout connaître. Il n&#8217;y a qu&#8217;à voir le site de la documentation officielle où le nombre de méthodes est impressionnant, sans parler de celles des librairies standards.</p>
<p>Il y a souvent plusieurs outils ou variantes pour faire presque la même chose. C&#8217;est pas forcément facile de savoir lequel choisir.</p>
<p>Cette boîte grandi très vite, il y a régulièrement de nouveaux outils, d&#8217;autres évoluent et certains disparaissent.</p>
<p><strong>Ruby</strong> est une caisse beaucoup plus modeste, qui permet de faire tout autant de chose, mais il y a très peu de doublons ou recoupements.</p>
<p>Les outils sont robustes, stables et surtout cohérents entre eux. Le contenu de la boîte évolue peu, rarement et uniquement en cas de forte nécessité. Même entre les versions majeures (1.8 et 1.9) il y a très forte compatibilité. Au sein de la branche 1.8 il n&#8217;y a eu presqu&#8217;aucune perte de compatibilité importante depuis plus de 3 ans (sortie de la 1.8.5 en août 2006).</p>
<p>Les mises à jour de <strong>Ruby</strong>, en tant que langage, sont rares (12 à 18 mois entre chaque version stable) car il n&#8217;y a pas ou extrêmement peu de bugs, elles ne concernent que des nouveautés ou améliorations de fond. La raison de ce très faible nombre de bugs et failles de sécurité sont simples : le code est soumis à des tests systématiques et poussés (c&#8217;est dans la culture de la communauté Ruby) et le code étant simple lisible et clair, il est facile de l&#8217;auditer et le comprendre et donc d&#8217;en débusquer les failles.</p>
<p>À l&#8217;inverse, <strong>PHP</strong> est mis à jour beaucoup plus souvent (plusieurs fois par an) et contient de nombreux correctifs de bugs en plus de nouvelles fonctionnalités. Il est reconnu que les failles de sécurité importantes ou critiques sont relativement fréquentes.</p>
<p>La raison d&#8217;être de PHP n&#8217;était pas d&#8217;apporter une approche nouvelle du développement mais de répondre à un besoin simple et bien identifié : traiter les données issues d&#8217;un formulaire web. La simplicité et les fonctionnalités de ce nouveau langage l&#8217;ont rendu rapidement populaire chez les développeurs web car il n&#8217;y avait plus besoin de faire des CGI en Perl pour rendre des sites dynamiques.</p>
<p>Face à ce gain de popularité, le langage a grandi et permis de faire de plus en plus de choses assez facilement, mais rapidement on a constaté le manque de fondations solides, en particulier sur l&#8217;aspect Objet.</p>
<p>PHP rivalise alors, en terme de popularité et d&#8217;audience, avec Perl, Java, … et cherche alors à combler les manques et répondre aux critiques. Le résultat est plutôt efficace, mais les outils du début restent là et les mauvaises pratiques qui vont avec aussi.</p>
<p>Au final on a un langage riche, mais brouillon, fourre-tout, qui évolue par stratification et pas par transformation. Les fondations manquent de rigueur et de profondeur.</p>
<p>Ruby est un langage qui a été conçu avec une approche plus scientifique et globale. Son créateur voulait un langage moderne, plus proche des attentes de l&#8217;humain que de celles de la machine, mais qui reconnaisse et embrasse l&#8217;état de l&#8217;art, ce qui s&#8217;est fait de mieux. Il s&#8217;est donc contenté (si on peut dire) d&#8217;appliquer la parole des vieux sages dans un contexte moderne.</p>
<p>Ruby adopte le principe de la moindre surprise (au sens de la cohérence maximale) selon lequel le langage doit se comporter de manière à minimiser la confusion. Lorsqu&#8217;on découvre Ruby, qu&#8217;on vienne de Java, PHP ou Python, on est forcément surpris par la syntaxe, les idiomes, … mais avec le temps on adopte la &#8220;manière Ruby&#8221; et plus rien n&#8217;étonne. Dans d&#8217;autres langages, même après plusieurs années d&#8217;utilisation, on est parfois étonné ou dérouté par certains fonctionnements.</p>
<p>La syntaxe du langage est au service de son utilisateur, en favorisant la lisibilité et la concision. La simplicité des outils de base permet d&#8217;apprendre vite et de savoir rapidement lequel utiliser.</p>
<p>Ruby est bâti sur des fondations robustes et très strictes ; celles du tout Objet (il n&#8217;y a pas de primitives), de la meta-programmation, du typage dynamique mais fort, …</p>
<h3>Symfony vs. Rails</h3>
<p><strong>Ruby on Rails</strong> est issu du développement d&#8217;une application web (Basecamp). Son créateur voulait se lancer dans le développement web et a cherché le langage avec lequel il se sentait le plus à l&#8217;aise et il s&#8217;est arrêté sur Ruby. Il a ensuite échafaudé un framework dédié au web en tirant réellement parti de ce que permet Ruby.</p>
<p>La démarche partait d&#8217;un objectif/besoin connu, il fallait trouver l&#8217;outil adapté pour l&#8217;atteindre.</p>
<p><strong>Rails ne serait pas ce qu&#8217;il est sans Ruby</strong>. On ne peut pas recréer Rails sur un autre langage sans faire des tours de passe-passe et en perdre l&#8217;essence.</p>
<p><strong>Symfony</strong> est issu du manque de bon framework web en PHP. Son créateur a voulu reprendre les bonnes idées d&#8217;autres frameworks (surtout Rails) sur d&#8217;autres langages pour les adapter sur PHP.</p>
<p>La démarche semble différente et partir d&#8217;un langage connu sur lequel construire en s&#8217;inspirant de références.</p>
<p>Pour ce que j&#8217;ai pu en voir et pour que Symfony ait le succès qu&#8217;il a, son développeur principal et la communauté qu&#8217;il a agrégée ont forcément accompli quelque chose de remarquable.</p>
<p>Pour autant, j&#8217;ai le sentiment que <strong>le plus grand handicap de Symfony, c&#8217;est PHP</strong>.</p>
<h2>Conclusion</h2>
<p>Au final, on sent que j&#8217;ai les idées bien arrêtées. J&#8217;espère ne pas avoir faire preuve de mauvaise foi ni avoir dit trop de bêtises.</p>
<p>Il m&#8217;arrive de dire que telle techno ou tel produit sont nuls. Mais pour le cas de PHP (et donc de Symfony), je ne dis pas que c&#8217;est nul et bon aux orties, au contraire.</p>
<p>Je dois certainement mon parcours de développeur web à PHP et à ce que j&#8217;ai pu faire avec. J&#8217;ai juste l&#8217;intime conviction d&#8217;avoir trouvé une évolution, une suite, qui me permet d&#8217;aller plus vite, plus loin, avec plus de plaisir/passion.</p>
<p>C&#8217;est un peu comme de passer de CVS ou Subversion à Git ou Mercurial. Vu de loin c&#8217;est la même chose, mais de près, ce sont 2 générations d&#8217;outils sui marquent un véritable progrès.</p>
<p>&nbsp;</p>
<hr />
<p>&nbsp;</p>
<p><strong>Mise à jour 1</strong> : Au terme d&#8217;une longue réunion d&#8217;équipe, nous avons choisi une approche à 2 têtes. Le premier projet (<a href="http://www.chambresapart.fr/">Chambres à Part</a>) reste évidemment développé avec Symfony (donc en PHP) mais le second sera entièrement développé avec Ruby on Rails.</p>
<p>Évidemment, je pense que c&#8217;est le bon choix. Pour moi, c&#8217;est surtout le bon choix technologique, pour toutes les raisons que j&#8217;ai déjà développées plus haut.</p>
<p>Du point de vue de la stratégie d&#8217;entreprise, je trouve que la prise de risque est modérée et ça va nous mettre dans une situation de réelle fusion et enrichissement des compétences.</p>
<p>Pendant les prochains mois, ceux parmi nous qui &#8220;viennent de Symfony&#8221; vont devoir apprendre de nouvelles choses en mettant à profit leurs années d&#8217;expérience en développement et particulièrement avec un framework MVC, … Le challenge sera de tirer le plus profit de cette expérience proche tout en &#8220;embrassant&#8221; les particularités de Ruby et de Rails.</p>
<p>Quelque part, ça va me mettre en situation de formateur, ce qui est très excitant mais aussi une responsabilité forte. Mais comme je suis absolument passionné par ce que je fais et connais, je vais me régaler dans cette partie de mon boulot.</p>
<p>Par ailleurs, cette juxtaposition d&#8217;outils va me permettre de voir plus en détail l&#8217;univers de Symfony et les évolutions de PHP (depuis que je l&#8217;ai laissé de côté). Même si je ne vois pas mon avenir de ce côté là, ça me forcera à être un peu moins monocorde.</p>
<p>Enfin bon, je suis bien content que la balance ait penché, non pas de <em>mon côté</em> (ça serait une marque d&#8217;égo) mais du <em>côté que j&#8217;ai choisi.</em></p>
<p><em><strong><span style="font-style:normal;">Mise à jour 2</span></strong><span style="font-style:normal;"> : Vous trouverez sur </span><a href="http://www.ruby-lang.org/fr/documentation/ruby-from-other-languages/to-ruby-from-php/"><span style="font-style:normal;">le site de Ruby</span></a><span style="font-style:normal;"> une courte liste des similitudes et différences à quoi s&#8217;attendre en passant de PHP à Ruby.</span></em></p>
 Tagged: php, rails, ruby, symfony <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=137&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/11/03/ruby-et-rails-ou-bien-php-et-symfony/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Rester à jour : la responsabilité du développeur (traduction)</title>
		<link>http://jeremy.wordpress.com/2009/08/25/rester-a-jour-la-responsabilite-du-developpeur/</link>
		<comments>http://jeremy.wordpress.com/2009/08/25/rester-a-jour-la-responsabilite-du-developpeur/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 19:46:51 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Personnel]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=127</guid>
		<description><![CDATA[Je suis récemment tombé sur le blog de Jay Fields et j&#8217;y ai lu cet article intitulé &#8220;Staying Current: A Software Developer&#8217;s Responsibility&#8221; avec lequel je suis complètement en accord.
Avec sa permission, je l&#8217;ai traduit en français, malheureusement de manière trop littérale.
Le contenu (au format Markdown) est disponible et modifiable sur http://gist.github.com/174953. Si vous proposez [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=127&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Je suis récemment tombé sur le <a href="http://blog.jayfields.com/">blog de Jay Fields</a> et j&#8217;y ai lu cet article intitulé &#8220;<a href="http://blog.jayfields.com/2009/08/staying-current-software-developers.html" target="_blank">Staying Current: A Software Developer&#8217;s Responsibility</a>&#8221; avec lequel je suis complètement en accord.</p>
<p>Avec sa permission, je l&#8217;ai traduit en français, malheureusement de manière trop littérale.<br />
Le contenu (au format <a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">Markdown</a>) est disponible et modifiable sur <a href="http://gist.github.com/174953" target="_self">http://gist.github.com/174953</a>. Si vous proposez des améliorations de traduction, je les prendrai certainement en compte.</p>
<blockquote><p>J&#8217;ai un dégoût personnel pour les conférences le week-end *. Pour moi, une conférence le week-end garanti que je vais &#8220;bosser&#8221; 12 jours d&#8217;affilée.</p>
<p>J&#8217;ai bien conscience que cette opinion n&#8217;est pas universelle.</p>
<p>Certaines personnes ont des difficultés pour &#8220;décrocher&#8221; pour aller à des conférences. Ces situations ont bien l&#8217;air d&#8217;une mécompréhension des responsabilités d&#8217;un développeur logiciel. Une partie de votre boulot (de développeur logiciel) est de rester à jour technologiquement. Ça signifie passer du temps de recherche durant votre journée.</p>
<p>(à peu près piqué directement à Ward sur le <a href="http://c2.com/cgi/wiki?WardExplainsDebtMetaphor" target="_blank">déficit technique</a>)<br />
Si vous passez toute votre journée à coder, sans jamais regarder du coté des nouvelles choses, vous accroissez votre déficit technique. À court terme (disons la dernière semaine avant une release), ça a du sens de prendre un peu de déficit. Par contre, à long terme, sans un minimum d&#8217;investissement, l&#8217;intérêt (où l&#8217;intérêt est égal à la distance entre vos compétences et les solutions actuelles) vous rendra NZPP (Net-Zero Producing Programmer). Dans une organisation type, vous pouvez peser en tant que NZPP pour environ 6 mois and doucement glisser vers un <a href="http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html" target="_blank">NNPP</a> (Net-Negative Producing Programmer).</p>
<p>C&#8217;est de votre responsabilité de ne pas devenir un NZPP (ou un NNPP). Les développeurs les plus talentueux refusent de travailler avec des NZPP. Lorsque vous devenez un NZPP, vous devez habituellement déclarer faillite (au regard du développement logiciel). Vous avez généralement deux choix : prendre un travail moins payé où vous pouvez apprendre de nouvelles choses ou bien passer à un nouveau rôle. Si vous voulez être un développeur logiciel, aucune de ces issues n&#8217;est désirable.</p>
<p>Par chance, vous avez la force de ne pas devenir un NZPP. La plupart des employeurs seront ravis de vous acheter des livres techniques et de vous envoyer à des conférences techniques. À mon avis, que vous tiriez ou pas de ces avantages devrait être dans votre revue de performance. Ne pas rester à jour en tant que développeur logiciel, en lorsque l&#8217;opportunité vous en est offerte, est une mauvaise pratique logicielle.</p>
<p>Une fois, j&#8217;ai créé une liste de choses que je recherchais chez des collaborateurs potentiels.</p>
<ul>
<li>Avez-vous déjà testé le Test Driven Development ? Pouvez-vous citer quelque chose que vous aimez et que vous n&#8217;aimez pas ?</li>
<li>Dans quel(s) langage(s) qui gagne(nt) en popularité, mais qui ne sont pas encore de pleine notoriété, avez-vous écrit un &#8220;Hello World&#8221; ?</li>
<li>Lisez vous des livres ou des blogs à la recherche de nouvelles idées au moins une fois toutes les deux semaines (en moyenne) ?</li>
<li>Essayez vous d&#8217;appendre au moins un nouveau langage tous les ans ?</li>
<li>Avez vous déjà utilisé un outil de recherche de couverture de code ou de complexité cyclomatique sur du code que vous avez écrit ?</li>
</ul>
<p>Quelqu&#8217;un a un jour commenté à peu près ceci :<br />
Tout le monde n&#8217;a pas le temps personnel pour faire ce genre de choses<br />
Et c&#8217;est là une faille fondamentale. Les employés (et même les employeurs) semblent penser que ce sont des activités qui doivent être conduites hors du temps de travail. Je ne peux être moins en désaccord. Ce sont des choses qu&#8217;un développeur responsable doit faire dans le cadre de leur travail, et donc dans les heures de travail.</p>
<p>20% du temps, ça n&#8217;est pas quelque chose que Google a inventé, c&#8217;est juste quelque chose qu&#8217;ils ont nommé, formalisé et rendu populaire. Cette activité en soi est quelque chose que les bons développeurs logiciel font depuis des années. J&#8217;applaudi Google pour en avoir fait un standard et ainsi d&#8217;assurer que ses employés aient l&#8217;opportunité de rester à jour. Cependant, votre entreprise n&#8217;a pas besoin de standardiser les 20% de temps pour que vous restiez à jour.</p>
<p>C&#8217;est votre responsabilité de prendre le temps dans votre journée de lire un livre ou un blog.</p>
<p>Vous devriez aussi tirer profit d&#8217;un déplacement (sponsorisé par votre entreprise) à une conférence. Si vous vous êtes déjà rendu à une conférence et que vous en avez tiré qu&#8217;un faible profit, je suggère grandement les conférences <a href="http://qcon.infoq.com/" target="_blank">QCon</a> et <a href="http://jaoo.dk/" target="_blank">JAOO</a>.</p>
<p>Une fois que vous avez commencé à faire vos recherches dans vos heures de travail, vous trouverez que ces conférences sont juste du travail, sauf que vous êtes focalisés à 100% sur la recherche. Et c&#8217;est pas quelque chose que vous souhaitez (ou devez) prendre sur votre temps personnel, c&#8217;est juste une autre journée productive à faire ce que vous avez la responsabilité de faire.</p>
<p>* C&#8217;est pourquoi Josh et moi organisons SpeakerConf mardi-jeudi. Vous pouvez y aller, participer et rentrer sans avoir à rater un jour de week-end.</p></blockquote>
<p>Il y a juste un point sur lequel, je ne suis pas 100% d&#8217;accord, c&#8217;est la frontière entre temps perso et pro.<br />
Je suis tellement passionné par ce que je fais que je passe <strong>aussi</strong> du temps perso sur des sujets de boulot. Mais il est clair que je le fait par passion, et en plus de ma journée normale de travail qui contient déjà du temps de recherche, lecture, …</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=127&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/08/25/rester-a-jour-la-responsabilite-du-developpeur/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Autrement cherche un développeur web</title>
		<link>http://jeremy.wordpress.com/2009/08/04/autrement-cherche-un-developpeur-web/</link>
		<comments>http://jeremy.wordpress.com/2009/08/04/autrement-cherche-un-developpeur-web/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 14:11:38 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=123</guid>
		<description><![CDATA[La société Autrement (pour laquelle je travaille avec un immense bonheur depuis quelques mois) recherche un développeur web (indépendant ou pas) pour bosser sur du PHP/Symfony + HTML/CSS/JS pendant quelques mois (si possible à plein temps ou presque).
Idéalement c&#8217;est quelqu&#8217;un :

qui connaisse bien le framework Symfony, sinon un framework MVC &#8220;mature&#8221;
qui ait déjà travaillé concrètement [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=123&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La société <strong>Autrement</strong> (pour laquelle je travaille avec un immense bonheur depuis quelques mois) recherche un développeur web (indépendant ou pas) pour bosser sur du <strong>PHP/Symfony + HTML/CSS/JS</strong> pendant quelques mois (si possible à plein temps ou presque).</p>
<p>Idéalement c&#8217;est quelqu&#8217;un :</p>
<ul>
<li>qui connaisse bien le framework Symfony, sinon un framework MVC &#8220;mature&#8221;</li>
<li>qui ait déjà travaillé concrètement sur des sites web ayant des fonctionnalités &#8220;modernes&#8221;</li>
<li>qui puisse intervenir sur toute la chaîne ; du PHP au JS en passant par HTML/CSS</li>
<li>qui soit rôdé au travail en équipe</li>
<li>qui travaille sur Mac et/ou un OS libre</li>
<li>qui ait son propre ordi</li>
<li>qui soit geek et drôle</li>
<li>qui apporte des croissants le matin et/ou qui sache faire des gâteaux ou toute autre sorte de bonne chose qui se mange (pas obligé de le faire tous les jours)</li>
<li>qui aime les pâtes (on va souvent chez Delouss)</li>
<li>…</li>
</ul>
<p>Pour l&#8217;état d&#8217;esprit général de la boîte, il suffit de lire le blog : <a href="http://autrementleblog.com/">http://autrementleblog.com/</a></p>
<p>Si vous pensez pouvoir faire l&#8217;affaire, envoyez un petit mail à job [a] autrementlemail.com ou déposez un commentaire à ce post.</p>
<p>NB : ça se passe au 27 rue Fongate à Marseille (plein centre ville).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=123&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/08/04/autrement-cherche-un-developpeur-web/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>&#8220;Mais Moins Cher&#8221;, mais pas mieux pour autant</title>
		<link>http://jeremy.wordpress.com/2009/06/26/mais-moins-cher-mais-pas-mieux-pour-autant/</link>
		<comments>http://jeremy.wordpress.com/2009/06/26/mais-moins-cher-mais-pas-mieux-pour-autant/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 08:57:07 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Personnel]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=116</guid>
		<description><![CDATA[Mise à jour du 4 juillet : tout se termine parfaitement bien, les détails en fin de post.
C&#8217;est pas souvent que je pousse ma gueulante, mais là, j&#8217;ai vraiment envie.
En quête d&#8217;un appareil pour ma cuisine, je compare les produits dans une gamme de prix, je trouve celui que je veux et je cherche ensuite [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=116&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote><p><strong><em>Mise à jour du 4 juillet</em></strong><em> : tout se termine parfaitement bien, les détails en fin de post.</em></p></blockquote>
<p>C&#8217;est pas souvent que je pousse ma gueulante, mais là, j&#8217;ai vraiment envie.</p>
<p>En quête d&#8217;un appareil pour ma cuisine, je compare les produits dans une gamme de prix, je trouve celui que je veux et je cherche ensuite le moins cher. Merci internet, ça facilite vraiment la vie.</p>
<p>Le moins cher de la liste, donc, c&#8217;est &#8220;Mais Moins Cher&#8221; (<a href="http://maismoinscher.com/">http://maismoinscher.com/</a>).</p>
<p>Moi qui ne suis pas un acheteur très régulier, je ne connais pas cette enseigne.</p>
<p>Bon, le design du site est moche, mais c&#8217;est pas ça que j&#8217;achète.</p>
<p>Je cherche un peu à savoir si il appartient à un grand groupe ; ça n&#8217;a pas l&#8217;air. La société est basée à Gaillac.</p>
<p>Ils ont l&#8217;air certifiés FIA-NET, … c&#8217;est rassurant. Je me dit que je vais tenter le coup, de toute façon les concurrents connus ne sont pas forcément au top non plus, donc va pour <strong>Mais Moins Cher</strong>.</p>
<p>Le processus de commande se passe bien, j&#8217;ai même la possibilité de payer avec une carte bleue Crédit Mutuel, je n&#8217;ai même pas à saisir mon numéro de carte, juste à m&#8217;authentifier sur le site de ma banque. C&#8217;est très pratique et je me dis que la sécurisation doit être plus importante, autant pour moi que pour le commerçant.</p>
<p>Vu que j&#8217;ai commandé assez tard, l&#8217;interface de suivi de commande (très bien foutue) m&#8217;indique que mon paiement n&#8217;a pas encore été autorisé.</p>
<p>Le lendemain matin, le paiement a l&#8217;air OK, et je reçois un mail de <strong>Mais Moins Cher</strong> me demandant un justificatif de domicile. C&#8217;est assez étonnant vu le montant de la commande (une centaine d&#8217;euros), mais pour une première commande en VPC, ce genre de demande n&#8217;est pas rare.</p>
<p>C&#8217;est là que ça se gâte.</p>
<p>En fait ils me demandent un <strong>original</strong> de facture EDF, FT, … en précisant que <strong>les copies ne sont pas acceptées</strong>. Pardon ??? un original ??? et je fais comment moi après ça, quand je l&#8217;ai plus mon original ?</p>
<p>Passons ce détail, j&#8217;envoie une facture Free en PDF. Il ne devrait pas y avoir de soucis, vu que la préfecture l&#8217;a acceptée pour un passeport.</p>
<p>La réponse ne se fait pas attendre :</p>
<blockquote><p>&#8220;Merci de nous envoyer ce justificatif par courrier.&#8221;</p></blockquote>
<p>Tiens, c&#8217;est étonnant, pourquoi ils veulent du papier ?</p>
<p>Il y a un mois de ça, j&#8217;ai <strong>créé mon entreprise en ne donnant aucun papier</strong>.</p>
<p>Ne sont-ils pas sensibles à l&#8217;économie de papier, d&#8217;encre, de temps, de place, … admettons que non. Ben ils n&#8217;ont qu&#8217;à l&#8217;imprimer eux-même, ou me donner leur numéro de fax.</p>
<p>Les réponses successives que j&#8217;ai eues tout au long de la journée ont toutes été du genre :</p>
<blockquote><p>&#8220;je suis désollée, mais c&#8217;est la procédure.&#8221;</p></blockquote>
<p>Je veux bien changer d&#8217;avis, mais il me faut des arguments. Le seul que j&#8217;ai eu est celui-ci (les fautes sont d&#8217;origine) :</p>
<blockquote><p>&#8220;Pour le papier par la poste je n&#8217;ai pas le choix car n&#8217;importe qui peut scanné un papier sur l&#8217;ordinateur. Merci de nosu l&#8217;envoyer par courrier.&#8221;</p></blockquote>
<p>Ah bon ! Mais mon document est un PDF dès l&#8217;origine ! La version papier n&#8217;est qu&#8217;une copie. Et en plus, falsifier une facture en papier est très facile, ça ne prouve donc rien de plus qu&#8217;un PDF.</p>
<p>J&#8217;ai essayé d&#8217;argumenter en retour, mais rien de concret n&#8217;en est sorti, que des</p>
<blockquote><p>&#8220;c&#8217;est notre procédure&#8221;</p></blockquote>
<p>Si j&#8217;avais voulu les arnaquer, j&#8217;aurai effectivement payé avec une CB volée ou autre et j&#8217;aurai envoyé par la Poste, sans rechigner, une très belle fausse facture ayant tout l&#8217;air d&#8217;un original.</p>
<p>J&#8217;ai fini par envoyer ma facture PDF imprimée, par la Poste, car je tiens plus à recevoir ma commande qu&#8217;à changer le monde.</p>
<p>Au final, personne n&#8217;a rien gagné.</p>
<p>De mon côté, <strong>j&#8217;ai perdu 1 ou 2 jours</strong> pour le traitement de ma commande à cause des délais postaux et de ces 12 mails échangés.</p>
<p>Du côté de Mais Moins Cher, <strong>ils ont perdu un client</strong> qui avait un fort a priori positif sur la marque et en plus ils n&#8217;ont <strong>même pas gagné en sécurité</strong> pour la transaction.</p>
<p>Je suis complètement abasourdi par ce genre de comportement et de rigidité.</p>
<p>J&#8217;ai tendance que c&#8217;est plus le manque de compréhension des réalités &#8220;techniques&#8221; qui les pousse à agir comme ça que la volonté de rendre les choses compliquées, mais bon …</p>
<p>Je ne sais pas si ce coup de gueule leur fera prendre conscience de l&#8217;inutilité de ce genre de chose. En attendant, ils ne me reverront plus sur leur site.</p>
<hr /><strong><em>Mise à jour du 4 juillet</em></strong></p>
<p>La commande est bien là, en bon état et dans les temps.</p>
<p>Par contre, ce matin, j&#8217;ai trouvé dans ma boîte, une lettre envoyée par Mais Moins Cher, avec mon adresse écrite à la main. À l&#8217;intérieur … ma facture Free ! Ils m&#8217;ont renvoyé l&#8217;impression de mon PDF ! Trois choses me sont rapidement venues à l&#8217;esprit :</p>
<p>1) ils pensent réellement qu&#8217;un PDF imprimé à la maison a une quelconque valeur. Ça n&#8217;est pas à leur avantage, car ça confirme leur faible culture technico-informatique.</p>
<p>2) ils renvoient la facture après s&#8217;en être servi. Là c&#8217;est tout à leur avantage car ils réclament un &#8220;original&#8221; mais ils le renvoient car ils ont conscience que ça a de la valeur. Par contre ils feraient bien de le signaler, on aurait moins peur de le leur envoyer en premier lieu.</p>
<p>3) Ce ne sont pas de gens malhonnêtes ni des emmerdeurs. Ils sont de bonne volonté et finalement précis (délais, engagements, …), contrairement à ce que j&#8217;ai pu lire ça et là. Ils ont juste un gros problème de procédures qu&#8217;ils ne comprennent pas (en tous cas, qu&#8217;ils n&#8217;expliquent pas), ce qui donne beaucoup de temps perdu au client et aux services qui s&#8217;en chargent chez eux. Il faudrait certainement peu de chose pour améliorer ça.</p>
<p>En fin de compte, je ne suis plus aussi mécontent. Je vais leur envoyer un lien vers ce post, au cas où ils ne l&#8217;auraient pas déjà vu et leur proposer de discuter de tout ça s&#8217;ils en ont envie.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=116&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/06/26/mais-moins-cher-mais-pas-mieux-pour-autant/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Soirée PLUG le 5 juin &#8216;09</title>
		<link>http://jeremy.wordpress.com/2009/05/24/soiree-plug-le-5-juin-09/</link>
		<comments>http://jeremy.wordpress.com/2009/05/24/soiree-plug-le-5-juin-09/#comments</comments>
		<pubDate>Sun, 24 May 2009 10:48:17 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[PLUG]]></category>
		<category><![CDATA[laboate]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=114</guid>
		<description><![CDATA[Comme tous les mois depuis bien longtemps, le PLUG organise sa soirée mensuelle.
Ouverte à tous les fans de technologie, informatique, logiciels libres, … c&#8217;est la bonne occasion pour discuter de ses passions, rencontrer du monde, discuter de sujets connus ou pas et dans un endroit particulièrement sympa et confortable (La Bo[a]te).
Au programme de juin :

quelques [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=114&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Comme tous les mois depuis bien longtemps, le PLUG organise sa soirée mensuelle.</p>
<p>Ouverte à tous les fans de technologie, informatique, logiciels libres, … c&#8217;est la bonne occasion pour discuter de ses passions, rencontrer du monde, discuter de sujets connus ou pas et dans un endroit particulièrement sympa et confortable (<a href="http://laboate.com/">La Bo[a]te</a>).</p>
<p>Au programme de juin :</p>
<ul>
<li>quelques sujets courts et libres inspirés de l&#8217;actualité et/ou de découvertes (l&#8217;improvisation est encouragée)</li>
<li>introduction pour la série sur le &#8220;Contrôle de version&#8221; ; c&#8217;est quoi ? pour quoi faire ? …</li>
</ul>
<p>Et comme à chaque fois :</p>
<ul>
<li>convivialité</li>
<li>apéro, pizza, …</li>
<li>rencontres, découvertes, …</li>
</ul>
<p>Tous les détails sont dispo sur le site du PLUG : <a href="http://plugfr.org/spip/article.php3?id_article=154">http://plugfr.org/</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=114&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/05/24/soiree-plug-le-5-juin-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>VHost et DNS local sous Mac OS X</title>
		<link>http://jeremy.wordpress.com/2009/04/28/vhost-et-dns-local-sous-mac-os-x/</link>
		<comments>http://jeremy.wordpress.com/2009/04/28/vhost-et-dns-local-sous-mac-os-x/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 10:47:35 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[dscl]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=101</guid>
		<description><![CDATA[Lorsque je travaille sur des applis web, j&#8217;aime bien avoir un environnement de développement local et lorsque tout est OK, j&#8217;envoie ça en production. C&#8217;est un processus classique et devenu très facile avec les outils de versioning et de déploiement. C&#8217;est encore plus vrai dans l&#8217;écosystème de Ruby on Rails où tout est pensé pour [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=101&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Lorsque je travaille sur des applis web, j&#8217;aime bien avoir un environnement de développement local et lorsque tout est OK, j&#8217;envoie ça en production. C&#8217;est un processus classique et devenu très facile avec les outils de versioning et de déploiement. C&#8217;est encore plus vrai dans l&#8217;écosystème de Ruby on Rails où tout est pensé pour facilité cette séparation des environnements d&#8217;exécution tout en ayant des procédures de déploiement fiables et simples.</p>
<p>Je travaille actuellement sur un site basé sur WordPress (en PHP donc). Le site n&#8217;est pas encore en production, sur un sous-domaine temporaire, pour autant je n&#8217;aime pas travailler avec un client FTP et ouvrir les fichiers un par un, … et surtout être dépendant de la connexion internet pour avancer.</p>
<p>J&#8217;ai souhaité avoir un environnement pour ça aussi facile qu&#8217;avec des applis Rails. Le principal soucis était la gestion d&#8217;un domaine local et d&#8217;un Virtual Host pour Apache car pour les applis Rails il existe un outil accessible dans les Préférences Système qui s&#8217;appelle Passenger Prefpane [<a id="link1" href="#note1">1</a>] et qui configure en 3 clics le DNS local et Apache pour servir une application Rails via Apache + Phusion Passenger.</p>
<p>Les purs *nixiens me crieront dessus qu&#8217;il suffit d&#8217;éditer le fichier <em>/etc/hosts</em> + créer un bout de conf pour le VHost. Je sais parfaitement faire ce genre de manipulations, mais j&#8217;ai aussi un goût prononcé pour la <strong>stratégie du moindre effort</strong>.</p>
<p>De plus, sous Mac OS X il y a mieux qu&#8217;éditer le fichier Hosts : <strong>dscl</strong> <em>&#8211; Directory Service command line utility</em> [<a id="link2" href="#note2">2</a>]</p>
<p>Un amateur de toute cette facilité, qui comme moi ne trouvait pas son plaisir avec la gestion générale (hors applis Rails) des domaines+VHost a écrit un script en ruby [<a id="link3" href="#note3">3</a>] qui permet de créer facilement une entrée DNS et un virtual Host.</p>
<pre>$ sudo apacherb create my_app.local /path/to/my_app/</pre>
<p>Je suis donc ravi car je peux très facilement ajouter des domaines + VHost locaux, en une seule ligne.</p>
<ul>
<li>[<a id="note1" href="#link1">1</a>] <a href="http://www.fngtps.com/passenger-preference-pane" target="_blank">http://www.fngtps.com/passenger-preference-pane</a></li>
<li>[<a id="note2" href="#link2">2</a>] <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/dscl.1.html" target="_blank">http://developer.apple.com/(&#8230;)/dscl.1.html</a></li>
<li>[<a id="note3" href="#link3">3</a>] <a href="http://chrisroos.co.uk/blog/2008-12-15-a-utility-to-manage-apache-virtual-hosts-on-a-mac-like-the-passenger-pref-pane-but-for-simple-static-sites" target="_blank">http://chrisroos.co.uk/(&#8230;)</a></li>
</ul>
<h3>Mise à jour</h3>
<p>Apacherb devient <strong>Hostess</strong> : <a href="http://chrisroos.co.uk/blog/2009-06-23-apacherb-is-now-hostess" target="_blank">http://chrisroos.co.uk/blog/2009-06-23-apacherb-is-now-hostess</a></p>
 Tagged: apache, dscl, Mac, passenger, php, rails <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=101&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/04/28/vhost-et-dns-local-sous-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
		<item>
		<title>Migration vers Passenger</title>
		<link>http://jeremy.wordpress.com/2009/01/28/migration-vers-passenger/</link>
		<comments>http://jeremy.wordpress.com/2009/01/28/migration-vers-passenger/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 20:53:37 +0000</pubDate>
		<dc:creator>Jérémy Lecour</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[PLUG]]></category>
		<category><![CDATA[neomarco]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jeremy.wordpress.com/?p=94</guid>
		<description><![CDATA[Je viens de terminer et (assez longuement) raconter la migration que j&#8217;ai effectuée au boulot.
J&#8217;ai transformé le fonctionnement de plusieurs sites web à base de Nginx/Mongrel/Rails et Nginx/PHP-FCGI en Apache/Passenger et Apache/mod_php.
Tout est là :
- préambule
- Ruby Entreprise Edition
- VirtualHosts
- épilogue
Je me suis régalé à faire ça tranquillement, mais avec tout de même une bonne [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=94&subd=jeremy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Je viens de terminer et (assez longuement) raconter la migration que j&#8217;ai effectuée au boulot.</p>
<p>J&#8217;ai transformé le fonctionnement de plusieurs sites web à base de Nginx/Mongrel/Rails et Nginx/PHP-FCGI en Apache/Passenger et Apache/mod_php.</p>
<p>Tout est là :<br />
- <a href="http://insiders.neomarco.com/2009/01/25/migration-vers-passenger/">préambule</a><br />
- <a href="http://insiders.neomarco.com/2009/01/25/migration-vers-passenger-ruby-entreprise-edition/">Ruby Entreprise Edition</a><br />
- <a href="http://insiders.neomarco.com/2009/01/25/migration-vers-passenger-virtualhosts/">VirtualHosts</a><br />
- <a href="http://insiders.neomarco.com/2009/01/28/migration-vers-passenger-epilogue/">épilogue</a></p>
<p>Je me suis régalé à faire ça tranquillement, mais avec tout de même une bonne pression, car c&#8217;est sur un serveur de prod et c&#8217;était une première dans le genre pour moi.</p>
 Tagged: apache, debian, mongrel, nginx, passenger, php <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeremy.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeremy.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeremy.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeremy.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeremy.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeremy.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeremy.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeremy.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeremy.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeremy.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeremy.wordpress.com&blog=430&post=94&subd=jeremy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jeremy.wordpress.com/2009/01/28/migration-vers-passenger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d1caf9df777b3b2cf474ff743494335?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">jeremy</media:title>
		</media:content>
	</item>
	</channel>
</rss>