<?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>Tom&#039;s Quest</title>
	<atom:link href="http://www.tomsquest.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tomsquest.com/blog</link>
	<description>Blog sur Java et Ruby par Thomas Queste</description>
	<lastBuildDate>Sun, 29 Aug 2010 15:13:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Notes sur Rework de 37signals</title>
		<link>http://www.tomsquest.com/blog/notes-sur-rework-de-37signals/</link>
		<comments>http://www.tomsquest.com/blog/notes-sur-rework-de-37signals/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 15:07:57 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[livre]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=811</guid>
		<description><![CDATA[Mes notes sur le deuxième livre de la société 37signals, Rework. Il fait suite à Getting Real. J&#8217;ai avalé rapidement le livre car les idées sont tranchantes,  inspirantes et quelque fois révoltantes. Mais le but est là : réaliser  qu&#8217;il y a d&#8217;autres façons de faire du business. de concevoir son  entreprise [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-815" title="rework cover" src="http://www.tomsquest.com/blog/wp-content/uploads/rework_cover.jpg" alt="" width="100" height="152" />Mes notes sur le deuxième livre de la société 37signals, <a title="Site du livre Rework" href="http://37signals.com/rework/">Rework</a>. Il fait suite à Getting Real. J&#8217;ai avalé rapidement le livre car les idées sont tranchantes,  inspirantes et quelque fois révoltantes. Mais le but est là : réaliser  qu&#8217;il y a d&#8217;autres façons de faire du business. de concevoir son  entreprise et de travailler.</p>
<p>Oui, il est possible de concevoir des applications avec moins de fonctionnalités que la concurrence. Non, l&#8217;argent des investisseurs n&#8217;est pas toujours bon à prendre.</p>
<p>Le livre est composé d&#8217;un ensemble de courts chapitres et décrit les recettes qu’applique 37Signals pour ces produits et sa façon d’être en tant que business.</p>
<p><span id="more-811"></span></p>
<h2>Learning form mistakes is overrated</h2>
<p>Apprendre de ses erreurs est surévalué, il vaut mieux apprendre de ses succès. L&#8217;échec n&#8217;est pas un pré requis du succès. Quelqu&#8217;un qui a déjà eu un succès a plus de chance de l&#8217;être à nouveau. Ceux qui ont eu un échec n&#8217;ont pas plus de chance d&#8217;avoir un succès que les nouveau.</p>
<p>[Voir <a title="Article sur la réussite et l'échec de Leslie Berlin &quot;Try, try again, or maybe not&quot; " href="http://www.nytimes.com/2009/03/22/business/22proto.html">l'article de Leslie Berlin "Try, try again, or maybe not"</a> qui montre que l'échec ne garantit pas le succès mais que le succès participe au succès].</p>
<h2>Why Grow ?</h2>
<p>Une entreprise avec beaucoup d’employé n’est pas forcément saine. Avec la taille viennent de nouveaux problèmes et une plus grande complexité. Chacun doit trouver la bonne taille pour son business en commençant petit et en voyant comment il grandit.</p>
<h2>Start making something</h2>
<p>Une idée ne vaut rien tant que vous n&#8217;en avez rien fait. La vraie question est de quelle bonne façon on la réalise.</p>
<h2>No time is no excuse</h2>
<p>Il est toujours possible de prendre quelques heures dans son planning pour travailler sur nos projets. Pas de temps, n&#8217;est pas une excuse !</p>
<h2>Outside Money is plan Z</h2>
<p>Prendre l’argent d’investisseurs peut ne pas en valoir le coût, car :</p>
<ul>
<li>il fait perdre une partie du contrôle : devoir prendre en compte les ordres d&#8217;autres personnes par exemple ;</li>
<li>il occasionne une baisse de qualité au détriment du retour sur investissement rapide ;</li>
<li>Dépenser l&#8217;argent des autres est addictif ;</li>
<li>C&#8217;est souvent un mauvais coup financier (au début, on n&#8217;a aucun levier pour gérer mieux le deal) ;</li>
<li>Le client ne devient plus le premier objectif, mais les objectifs des investisseurs le deviennent ;</li>
<li>Obtenir de l&#8217;argent prend beaucoup d&#8217;énergie et de temps.</li>
</ul>
<h2>Start a business, not a startup</h2>
<p>Le mot Startup signifie être dispendieux, ne pas affronter les réalités du marché, être dans une bulle. Or la réalité est là. Mieux vaut créer un business qu’une Startup.</p>
<h2>Embrace constraint</h2>
<p>Moins (de temps, d&#8217;argent, de personne, d&#8217;expérience) est une vraie bonne chose. Cela force à être créatif et à éviter le gâchis.</p>
<h2>Illusions of agreement</h2>
<p>Essayer de supprimer les niveaux d&#8217;abstractions (docs, plans, rapports). Chacun peut imaginer une chose différente de chaque niveau. Seul le résultat (le produit) met tout le monde d&#8217;accord.</p>
<h2>Reasons to quit</h2>
<p>Questions à se poser pour s&#8217;assurer que l&#8217;on travaille sur des choses qui importent :</p>
<ul>
<li>Pourquoi faites-vous cela ? A qui cela bénéficie, quelle est la motivation&#8230;</li>
<li>Quel problème résolvez-vous ?</li>
<li>Est-ce utile finalement ? Faire quelque chose ou quelque chose d&#8217;utile ?</li>
<li>Ajoutez vous de la valeur ?</li>
<li>Est-ce que cela changera quelque chose ?</li>
<li>Que pourriez-vous faire à la place ? Priorité…</li>
</ul>
<p>Ne pas hésiter à abandonner ce que l&#8217;on est en train de faire. Des fois, c&#8217;est la bonne chose à faire.</p>
<h2>Make tiny decisions</h2>
<p>Mieux vaut faire un ensemble de petites décisions qu&#8217;une grosse décision. Grosse décision égale de grosses erreurs. Cela n&#8217;est pas vrai pour de petites décisions qui seront réparables. Cela n&#8217;empêche pas d&#8217;avoir de grosses idées et de grands plans, juste que la meilleure façon de les réaliser, c&#8217;est par petite décision.</p>
<p>Les meilleurs buts sont ceux que l&#8217;on peut atteindre, puisqu&#8217;une fois réalisés, on peut construire dessus.</p>
<h2>Underdo your competition</h2>
<p>Pour battre un compétiteur, pas besoin de faire plus. Viser à moins faire que ses concurrents, mais faire mieux. [Philosophie à la base des produits de 37Sgnals]</p>
<h2>Emulate Chefs</h2>
<p>Apprendre aux autres ce que l&#8217;on connait de son business, ne veut pas dire que les autres pourront nous copier plus facilement (image des chefs cuistot qui donnent leur recette).</p>
<h2>Drug dealers get it right</h2>
<p>Pouvoir faire essayer un produit (une dose) car s’il est bon les clients reviendront pour se le payer.</p>
<h2>Résumés are ridiculous</h2>
<p>Un CV est toujours exagéré mais aussi toujours vague. Embauchez sur la base du CV est dangereux. Une lettre de motivation est déjà mieux car il n&#8217;est pas possible que le candidat ait envoyé une lettre personnalisée à 100 entreprises.</p>
<h2>Years of irrelevance</h2>
<p>Les années d&#8217;expérience ne veulent pas dire grand chose. Connaitre combien de temps une personne a fait une chose ne vaut pas savoir avec quelle qualité et comment elle l&#8217;a fait.</p>
<h2>Hire great writers</h2>
<p>Le talent pour l&#8217;écriture est un critère de choix entre candidats. Savoir bien écrire signifie savoir penser correctement, communiquer et savoir expliquer.</p>
<h2>Take a deep breath</h2>
<p>Les gens sont des créatures ave des habitudes, c&#8217;est pour cela que le changement est souvent vu comme négatif. Une réaction négative est presque toujours plus forte et plus passionnée qu&#8217;une réaction positive.</p>
<p>Quand on réalise en changement, il y aura toujours de mécontents. Il faut les écouter, attendre un peu, montrer que l&#8217;on est conscient du problème. Souvent les gens s&#8217;adapteront.</p>
<h2>Decisions are temporary</h2>
<p>Une décision n&#8217;est pas définitive. Il faut se laisser la possibilité d&#8217;y revenir. Décider pour maintenant et s&#8217;inquiéter pour le futur plus tard.</p>
<h2>Liens annexes</h2>
<ul>
<li>Le site du livre : <a href="http://37signals.com/rework/">http://37signals.com/rework/</a></li>
<li>Les notes d&#8217;<a title="Blog d'Ulrich Vachon" href="http://ulrichinaction.blogspot.com">Ulrich Vachon</a> sur le livre : <a href="http://ulrichinaction.blogspot.com/2010/08/retour-sur-rework.html">http://ulrichinaction.blogspot.com/2010/08/retour-sur-rework.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/notes-sur-rework-de-37signals/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construire la nouvelle génération de leaders techniques</title>
		<link>http://www.tomsquest.com/blog/construire-la-nouvelle-generation-de-leaders-techniques/</link>
		<comments>http://www.tomsquest.com/blog/construire-la-nouvelle-generation-de-leaders-techniques/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 20:05:15 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[transcript]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=800</guid>
		<description><![CDATA[Transcription de la session de Patrick KUA à l&#8217;USI 2010 : Building the next génération of technical leaders.

Définition
Un leader technique est un développeur qui passe 30% de son temps à coder avec l’équipe et 70% en activités de leader. Il a donc deux types de compétences : le développement et le leadership.
Un leader technique ne [...]]]></description>
			<content:encoded><![CDATA[<p>Transcription de la session de Patrick KUA à l&#8217;USI 2010 : <a title="Session à l'USI : Construire la nouvelle génération de leaders techniques" href="http://www.universite-du-si.com/en/conferences/6-paris-usi-2010/sessions/912-construire-la-nouvelle-generation-de-leaders-techniques">Building the next génération of technical leaders</a>.</p>
<p><span id="more-800"></span></p>
<h2>Définition</h2>
<p>Un leader technique est un développeur qui passe 30% de son temps à coder avec l’équipe et 70% en activités de leader. Il a donc deux types de compétences : le développement et le leadership.</p>
<p>Un leader technique ne doit pas être déconnecté de ce qu’il prône, sinon il risque de se baser sur ses opinions plutôt que sur des faits.</p>
<p>Un leader est facteur important pour la réussite d’une équipe.</p>
<h2>De mauvais Leaders Techniques</h2>
<p>Différents types de mauvais leader technique :</p>
<ul>
<li>&#8220;Benevolent Dictator&#8221; : il dicte ce qu’il fait en étant soutenu par ses opinions plutôt que par du concret</li>
<li>&#8220;Do it yourself&#8221; : ne sait pas déléguer</li>
<li>&#8220;Hard Problems are mine&#8221; : ne prends que les sujets difficiles (intéressants)</li>
</ul>
<p>Il existe des développeurs dont la valeur produite est négative (leur impact nette est négative). Il en est de même pour les leaders techniques.  Ceux-ci peuvent provoquer une perte d’enthousiasme de l’équipe, de l’apathie ou encore de la déresponsabilisation.</p>
<h2>Former de bons leader techniques</h2>
<p>Nos systèmes ne savent pas produire de bons tech leads.  Le principe de Peter est souvent de rigueur. Ce principe stipule que dans une hiérarchie, un employé tend à s’élever jusque son niveau d’incompétence.</p>
<p>Patrick raconte une anecdote sur des chercheurs italiens qui ont démontré qu’une société est plus efficace si elle fait monter en grade les personnes aléatoirement plutôt qu’en se basant sur le mérite.</p>
<p>Un bon développeur ne fera pas forcément un bon leader technique. Les compétences de ces deux métiers ne sont tout simplement pas les mêmes.</p>
<h2>Des compétences différentes</h2>
<p>Compétences du développeur :</p>
<ul>
<li>Implémenter une fonctionnalité</li>
<li>Changer un comportement existant</li>
<li>Ecrire des tests</li>
<li>Coder proprement</li>
<li>Challenger les choses établies</li>
<li>Proposer des solutions annexes</li>
</ul>
<p>Compétence du leader technique :</p>
<ul>
<li>Aligner chacun sur une même vision</li>
<li>Résoudre les conflits</li>
<li>Prendre la responsabilité de la livraison</li>
<li>Raconter une histoire</li>
<li>Faire croitre les talents</li>
<li>Faire en sorte que chacun puisse décider</li>
<li>Créer un environnement d’équipe sain</li>
</ul>
<h2>Solutions</h2>
<p>Pour avoir de meilleurs leaders techniques, Patrick recommande de :</p>
<ul>
<li>Reconnaître officiellement les différences entre un développeur et un leader technique : expliquer ce qu’est un leader technique, quelles sont les compétences à acquérir ;</li>
<li>Développer les compétences : un apprenti tech lead peut travailler avec un tech lead expert (pairing, one-on-one), donner le droit explicitement à l’apprenti de faire des erreurs et sans conséquence pour lui  (cela maximise sa progression).</li>
</ul>
<h2>Liens</h2>
<p><a title="Blog de Patrick KUA" href="http://www.thekua.com/atwork/">Blog de Patrick KUA</a></p>
<p><a href="http://qconlondon.com/london-2010/file?path=/qcon-london-2010/slides/PatrickKua_BuildingTheNextGenerationOfTechnicalLeaders.pdf">Slides de la présentation faire à la QCon London (PDF)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/construire-la-nouvelle-generation-de-leaders-techniques/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JPA : les illusions sur les NamedQueries</title>
		<link>http://www.tomsquest.com/blog/jpa-les-illusions-sur-les-namedqueries/</link>
		<comments>http://www.tomsquest.com/blog/jpa-les-illusions-sur-les-namedqueries/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 09:34:48 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=774</guid>
		<description><![CDATA[Les NamedQueries (annotation @NamedQuery) de JPA sont entourées d'illusions : elles seraient plus performantes, elles seraient validées au chargement. Etudions ces points et regardons quels sont les réels avantages.]]></description>
			<content:encoded><![CDATA[<p>Un certain nombre d&#8217;idées reçues existent sur les NamedQueries. On les dit plus performantes car mises en cache, on les dit plus sûres car validées au chargement. Etudions ces points et regardons quels sont les réels avantages des NamedQueries.</p>
<p><span id="more-774"></span></p>
<h2>Rappel sur les NamedQueries</h2>
<p>Une NamedQuery est une requête nommée. Ce n&#8217;est pas une nouveauté de la norme JPA car elles existaient dans Hibernate bien avant. Une namedQuery est un moyen de donner un non à une requête JPQL et de la rappeler par ce nom par la suite.</p>
<p>Création :</p>
<pre>
<pre class="brush: java">
@Entity
@NamedQuery(name = &quot;findAllCustomers&quot;, query = &quot;Select c From Customers c&quot;)
public class Client {
        ...
}
</pre>
</pre>
<p>Utilisation :</p>
<pre>
<pre class="brush: java">
public List findAll() {
        return entityManager.createNamedQuery(&quot;findAllCustomers&quot;).getResultList();
}
</pre>
</pre>
<h2>Une NamedQuery est plus performante</h2>
<p>La rumeur dit qu&#8217;une NamedQuery est plus performante car elle est mise en cache.</p>
<p>Techniquement, au démarrage, le moteur JPA va compiler la NamedQuery puis la mettre en cache dans le statementCache des Connections. Cela rappelle fortement les PreparedStatement, non ? Or, Hibernate utilise de toute façon des PreparedStatements si le driver Jdbc le permet. Une NamedQuery ne fait donc pas mieux qu&#8217;une requête dynamique, même s&#8217;il y a le coût de parsing de la requête si celle-ci est dynamique.</p>
<p>Je n&#8217;ai pas trouvé de benchmark entre les deux approches (NamedQuery versus requête dynamique). La principale variable en jeu est le driver Jdbc et donc la base de données utilisée.</p>
<h2>Une NamedQuery est validée</h2>
<p>Une NamedQuery est validée au lancement de l&#8217;application avant d&#8217;être soit placée dans le statementCache. Cela permet théoriquement de contrôler la syntaxe JPQL, que le mapping est correct, que les entités utilisées sont annotées et que les colonnes ont bien un attribut (ou un getter/setter) dans les entités.</p>
<p>Dans les faits, cette phase de validation est très limitée (testée avec Hibernate 3.3 et mysql) :</p>
<ul>
<li>Pour une entité inexistante (&#8220;From EntiteInexistante&#8221;), une erreur est remontée</li>
<li>Pour une colonne inexistante (&#8220;From Client where colonneInexistante is null&#8221;), aucune erreur n&#8217;est soulevée</li>
</ul>
<p>Aujourd&#8217;hui, je ne vois donc pas en quoi cette phase de validation apporte de la valeur. Si la conversion JPQL vers SQL n&#8217;est pas complète, elle n&#8217;empêche pas de valider les requêtes sur <a title="Base de données embarquée ou non" href="http://www.tomsquest.com/blog/tests-dintegration-quid-de-la-base-de-donnees/">la base de données cible</a>.</p>
<h2>NamedQuery, alors pourquoi ?</h2>
<p>Une fois éliminées ces illusions, il ne reste pas grand-chose d&#8217;attrayant aux NamedQueries. On sait qu&#8217;elles ne sont pas systématiquement pas plus performantes et que la validation n&#8217;est pas complète. Il leur reste cependant trois petits avantages :</p>
<ul>
<li>Les NamedQueries sont réutilisables en plusieurs endroits. Ce cas est principalement utile quand  l&#8217;entityManager est injecté dans la couche de service (et donc qu&#8217;il n&#8217;y a pas de couche de DAO) ;</li>
<li>Elles sont chargées au démarrage ce qui permet de diminuer la réponse de l&#8217;application au premier accès, mais c&#8217;est au détriment du temps de chargement de l&#8217;application ;</li>
<li>Les requêtes sont regroupées avec le mapping (@Column&#8230;), ce qui permet de faciliter leur écriture.</li>
</ul>
<p>Pour conclure, je pense que les NamedQueries résultent plus d&#8217;une question de goût et de convention d&#8217;écriture que d&#8217;un réel intérêt technique et factuel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/jpa-les-illusions-sur-les-namedqueries/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>8 raisons d’aimer Ruby</title>
		<link>http://www.tomsquest.com/blog/8-raisons-d%e2%80%99aimer-ruby/</link>
		<comments>http://www.tomsquest.com/blog/8-raisons-d%e2%80%99aimer-ruby/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 12:04:13 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=761</guid>
		<description><![CDATA[Huits points qui font de Ruby une plateforme intéressante : productivité améliorée, meta-programming, duck typing, closures, JRuby, frameworks, Gems, communauté.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-767" title="ruby_logo" src="http://www.tomsquest.com/blog/wp-content/uploads/ruby_logo.gif" alt="ruby_logo" width="331" height="119" />Ruby est un langage qui évolue vite, qui monte fortement et qui est utilisé pour faire de vraies choses (même en prod !). Cet article contient 8 points qui font de Ruby un très bon langage et une plateforme de choix pour réaliser ses futurs projets.</p>
<p><span id="more-761"></span></p>
<h2>Plus productif</h2>
<p>Martin Fowler a fait une synthèse de l’utilisation de Ruby chez ThoughtWorks.</p>
<p>La conclusion est une impression très forte d’une meilleure productivité. La majorité des projets ont ressenti un doublement de leur productivité (une impression car la productivité n’est pas mesurable).</p>
<p>Je vous encourage à lire l’article sur le site de Martin Fowler : &#8220;<a href="http://martinfowler.com/articles/rubyAtThoughtWorks.html">Ruby at ThoughtWorks</a>&#8221;</p>
<h2>Meta-Programming</h2>
<p>Le meta-programming c’est la génération de code par le code. Cela permet par exemple d’écrire des DSL et de simplifier son code. C’est aussi une arme puissante à utiliser modérément.</p>
<p>L’équivalent de la génération d’une méthode au Runtime en Java donnerait :</p>
<pre>
<pre class="brush: java">void genereUneMethode() {
	/* cette méthode sera ajouté à la classe appelante */
	void nouvelleMethode() {
		// Les commentaires de Chuck Norris sont compilés
	}
}</pre>
</pre>
<h2>Duck Typing</h2>
<p>Le static typing s’oppose au duck typing. En Ruby, il n’y a pas de notion de type vérifié à la compilation.</p>
<p>Cela veut dire, qu’il est possible d’appeler une méthode avec un Array à la place d’une String. Tant que l’autre objet répond aux méthodes de l’objet attendu, le code est valide.</p>
<p>Le Duck Typing permet d’avoir du code beaucoup plus souple. La forte orientation vers les tests de Ruby en est la conséquence.</p>
<p>Il y a eu beaucoup de débats sur au sujet de « Static typing » contre « Duck typing ». Les auteurs de « Programming Ruby 1.9 » expliquent que le typage statique ne rend pas forcément un code plus fiable et peut diminuer la productivité. (Non, pas de Troll)</p>
<p>Plus d’info sur le <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typing sur Wikipedia</a>.</p>
<h2>Closures</h2>
<p>Les Closures ont fortement animé les débats autour de leur inclusion (ou pas) dans Java.</p>
<p>Elles font partie de la syntaxe de base de Ruby.</p>
<p>Les Closures sont des méthodes dont l’exécution peut être retardée tout en retenant le contexte quand elles ont été créées. Elles ont plein d’usages mais ne sont pas pourtant pas évidentes à appréhender.</p>
<h2>JRuby</h2>
<p><a href="http://jruby.org">JRuby</a> est une implémentation de Ruby pour la JVM. Avantages : un super garbage collector (merci Java), des threads efficaces, multi-plateformes… Il fait tourner des projets Rails sans problème.</p>
<p>L’avantage est également de pouvoir faire du Ruby sur nos serveurs d’app Java, comme Glassfish 3 qui supporte JRuby.</p>
<h2>Frameworks novateurs</h2>
<p>Rails, Capistrano ou encore Cucumber sont les fers de lance de Ruby et montrent ce que le langage permet de construire.</p>
<ul>
<li><a href="http://rubyonrails.org/">Rails</a> : c’est le Framework Web qui a donné de la visibilité à Ruby. Rails permet de produire des sites Web très rapidement et de manière simple</li>
<li><a href="http://www.capify.org/">Capistrano</a> simplifie fortement le déploiement de projets Ruby et permet par exemple de se brancher sur un SVN pour faire de la mise en production en continue</li>
<li><a href="http://cukes.info/">Cucumber</a> est un framework de BDD simple à prendre en main. Le Meta-Programming apporte beaucoup aux frameworks de tests en permettant l’écriture de DSL de tests</li>
</ul>
<h2>GEM : le packaging facile</h2>
<p>Les <a href="http://www.rubyfrance.org/documentations/rubygem---introduction/">GEM</a> sont des archives de projet Ruby. Un peu comme nos JAR/WAR/EAR mais en mieux. Une Gem permet de packager son code, ses tests et ses scripts selon un format normé.</p>
<p>On installe une Gem en ligne de commande, idem pour la mettre à jour ou en rechercher d’autres.</p>
<p>Il est également très simple de pousser une Gem sur les repos (voir par exemple l’impressionnant de simplicité <a href="http://gemcutter.org/">Gemcutter</a>)</p>
<h2>Une communauté riche (et aussi en France)</h2>
<p>Ruby bouge beaucoup et sa communauté est importante. Comme avec Java, il y a des sites de news, des podcasts, des screencasts…</p>
<ul>
<li>Des news : <a href="http://www.rubyinside.com/">RubyInside</a>, <a href="http://ruby.about.com/">About Ruby</a></li>
<li>Des podcasts : <a href="http://railsenvy.com/">RailsEnvy</a></li>
<li>Des screencasts : <a href="http://www.learnivore.com">Learnivore</a></li>
<li>Des challenges de programmation : <a href="http://rubylearning.com/blog/">RubyLearning </a></li>
</ul>
<p>Les <a href="http://www.rubyfrance.org/">Apéros Ruby</a> ressemblent à nos JUGs. Le prochain a lieu ce jeudi 12. Ils sont moins cadrés que les JUGs mais tout aussi intéressants : Coding Dojo, Lightning talk…</p>
<h2>Conclusion</h2>
<p>Ruby dispose de nombreux atouts pour plaire, même face à ses concurrents dynamiques ou statiques (Scala par exemple).</p>
<p>Une des principales qualités de Ruby est sa communauté vivante et innovante. Découvrir une plateforme comme Ruby donne un nouvel élan et permet de faire fonctionner ses neurones sur d’autres paradigmes.</p>
<p>J’ai choisi Ruby pour toutes ces bonnes raisons et il y en a encore bien d’autres à découvrir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/8-raisons-d%e2%80%99aimer-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tests d&#8217;intégration : quid de la base de données ?</title>
		<link>http://www.tomsquest.com/blog/tests-dintegration-quid-de-la-base-de-donnees/</link>
		<comments>http://www.tomsquest.com/blog/tests-dintegration-quid-de-la-base-de-donnees/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 12:29:23 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=737</guid>
		<description><![CDATA[La base de données est un élément important des tests d&#8217;intégration. Les deux questions à se poser sont :

Puis-je utiliser une base de données embarquée ?
Puis-je désactiver les contraintes d&#8217;intégrité ?


Base de données embarquée ou non ?
C&#8217;est Rod Johnson qui en parlait sur InfoQ : &#8220;System Integration Testing using Spring&#8221; : une base de données [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-753" title="serveur" src="http://www.tomsquest.com/blog/wp-content/uploads/serveur.jpg" alt="serveur" width="87" height="110" />La base de données est un élément important des tests d&#8217;intégration. Les deux questions à se poser sont :</p>
<ul>
<li>Puis-je utiliser une base de données embarquée ?</li>
<li>Puis-je désactiver les contraintes d&#8217;intégrité ?</li>
</ul>
<p><span id="more-737"></span></p>
<h3>Base de données embarquée ou non ?</h3>
<p>C&#8217;est Rod Johnson qui en parlait sur InfoQ : &#8220;<a title="System Integration Testing with Spring" href="http://www.infoq.com/presentations/system-integration-testing-with-spring">System Integration Testing using Spring</a>&#8221; : une base de données embarquée est inutile dans la plupart des cas.</p>
<p>L&#8217;argument majeur en faveur d&#8217;une base embarquée est le travail en mode déconnecté. Dans une équipe disséminée (télétravail, multiples bureaux, déplacement fréquent), ce type de base fait l&#8217;affaire.</p>
<p>Mais il y a certains inconvénients importants :</p>
<ul>
<li>Moteur SQL différent de la cible : il est possible de certaines requêtes s&#8217;exécutent sur la base embarquée mais pas sur le type de base utilisée en Prod  (différences d&#8217;implémentation SQL par exemple, expérience vécue avec SQL Server) ;</li>
<li>Debugage difficile : si la base meurt à la fin des tests, il devient difficile d&#8217;étudier les opérations faites et d&#8217;étudier pourquoi une requête ne fonctionne pas.</li>
</ul>
<p>Je vois peu d&#8217;intérêt aujourd&#8217;hui à utiliser une base de données embarquées si c&#8217;est pour se rendre compte qu&#8217;on ne valide pas un comportement similaire à celui de production. Créer une base par développeur sur Oracle ou autre, n&#8217;est pas si difficile.</p>
<p>Un  inconvénient d&#8217;une base standard est qu&#8217;elle nécessite d&#8217;être maintenue (passage des scripts), mais cela est automatisable grâce à des outils comme DBMaintain ou LiquiBase.</p>
<h3>Contraintes d&#8217;intégrité actives ou non ?</h3>
<p>Filip Neven, le créateur d&#8217;Unitils et de DbMaintain, pointe le problème sur son blog (traduction libre) :</p>
<blockquote><p>&#8220;Les gens pensent que la désactivation des contraintes produit une sérieuse dévaluation des tests, car le code qui a été validé avec succès par les tests unitaires pourrait ne pas fonctionner avec une base de données normales&#8221; &#8211; <a title="Article de Filip Neven sur la désactivation des contraintes" href="http://filipneven.blogspot.com/2008/02/disable-constraints-on-your-test.html">Filip Neven</a></p></blockquote>
<p>La chose à retenir  est : &#8220;il faut limiter au maximum les données de test&#8221;.</p>
<p>Autrement dit : le moins de données de test il y a, le plus maintenable sont les  tests.</p>
<p>Filip Neven résume parfaitement la situation :</p>
<ul>
<li>Les tests doivent valider un fonctionnement et non vérifier l&#8217;intégrité de la base</li>
<li>Les tests unitaires ne sont pas le bon outil pour découvrir des problèmes de contraintes</li>
<li>Dans la plupart des cas, d&#8217;autres tests, comme les tests fonctionnels, permettront de découvrir les problèmes de contraintes</li>
<li>Désactiver les contraintes est un gain de temps important pour l&#8217;écriture des tests</li>
</ul>
<p>En effet, les jeux de données ne font généralement que croitre. Une fois qu&#8217;une donnée est ajoutée à un jeu de tests, il devient laborieux de savoir si cette donnée est utilisée d&#8217;une manière ou d&#8217;une autre et donc de la retirer.</p>
<p>En désactivant les contraintes d&#8217;intégrité, il devient possible que les jeux de données ne contiennent que les données utilisées dans les Where et dans les jointures ; c&#8217;est-à-dire les données <strong>réellement utiles</strong>. Cette façon de voir les choses simplifie énormément la maintenance des jeux de tests. Finis les fichiers DBUnit.xml qui contiennent 80% de données dues aux colonnes not-null donc inutiles pour le test courant.</p>
<p><a title="Tutorial Unitils sur la gestion de la base de données" href="http://www.unitils.org/tutorial.html#Automatic_test_database_maintenance">Unitils/DbMaintain</a> propose une méthode rapide pour désactiver ces contraintes (not null et foreign key).</p>
<h3>Une fausse sensation de sécurité</h3>
<p>Il faut  se poser la question : est-ce que l&#8217;on nuit à la qualité de nos tests si nous touchons à l&#8217;intégrité de la base de données par la désactivation des contraintes ?</p>
<p>En effet, si les tests passent sur une base qui sera identique à la production (colonnes non nulles, clés étrangères, utilisateur non privilégié), alors nous validons en totalité le fonctionnement cible. Au contraire, si nous avons désactivé les contraintes, alors nous risquons de rencontrer des erreurs plus tard dans la vie du projet, et donc que cela soit plus dur à corriger.</p>
<p>La réponse est double :</p>
<ul>
<li>Oui, nous nous écartons du fonctionnement cible (like &#8220;Prod&#8221;) en modifiant le comportement de la base de données ;</li>
<li>Non, ce la ne nuit pas à la qualité des tests.</li>
</ul>
<p>Pourquoi ?</p>
<p>Tester &#8220;comme en prod&#8221; donne un <strong>faux sentiment de sécurité</strong>. Les erreurs susceptibles de ne pas être détectée avant la production ne sont pas des problèmes récurrents. Ok, vous allez détecter qu&#8217;il manque un &#8220;GRANT select&#8221; mais cette erreur ne se reproduira pas.</p>
<p>D&#8217;autant plus que les tests d&#8217;intégration seront complétés par les tests fonctionnels et que détecteront les erreurs de not-null/foreign key laissées derrière.</p>
<h3>Conclusion</h3>
<p>Je suis aujourd&#8217;hui pour une gestion &#8220;Agile&#8221; de la base de données utilisée pour les tests. La bonne voie est pour moi d&#8217;éviter l&#8217;usage d&#8217;une base embarquée car il y a trop de différences entre moteurs SQL mais de désactiver certaines contraintes sur la base de test afin de faciliter le vrai travail : l&#8217;écriture de test qui valident les requêtes (le DML) et non les restrictions SQL (le DDL).</p>
<p>Et vous, avez-vous d&#8217;autres recommandations pour vos tests d&#8217;intégration ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/tests-dintegration-quid-de-la-base-de-donnees/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MoreUnit : les tests plus vite sous Eclipse</title>
		<link>http://www.tomsquest.com/blog/moreunit-les-tests-plus-vite-sous-eclipse/</link>
		<comments>http://www.tomsquest.com/blog/moreunit-les-tests-plus-vite-sous-eclipse/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:24:12 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=718</guid>
		<description><![CDATA[MoreUnit est un plugin Eclipse qui permet de gagner du temps lors de l'écriture des tests (passage du code aux tests, affichage des méthodes testées...)]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-725 alignright" title="classDecoration" src="http://www.tomsquest.com/blog/wp-content/uploads/classDecoration.png" alt="Marqueur des classes testées" width="252" height="257" /></p>
<p>J&#8217;ai découvert aujourd&#8217;hui le plugin <a title="Site de MoreUnit : plugin Eclipse" href="http://moreunit.sourceforge.net">MoreUnit</a> pour Eclipse. Celui-ci accélère grandement le passage code/test et la création de tests.</p>
<p>Il permet de :</p>
<ul>
<li>Passer d&#8217;une méthode à ses tests et des tests à la méthode testée (ctrl+j depuis une méthode)</li>
<li>Montrer les méthodes et classes testées</li>
<li>Créer un test pour la méthode en cours (ctrl+u) [même si ça ne remplace pas "Ctrl+3 &gt; New Junit test case"]</li>
<li>Changer le nom et déplacer les tests lors d&#8217;un refactoring</li>
</ul>
<p><span id="more-718"></span></p>
<p>Je le trouve vraiment pratique pour switcher d&#8217;une méthode aux tests et inversement. Il montre également  les méthodes et classes qui ne sont pas testées et synchronise les tests quand je renomme une méthode. Un vrai gain de temps ! (c&#8217;est mon manager qui va être content).</p>
<h3>Quelques infos</h3>
<div id="attachment_732" class="wp-caption alignright" style="width: 214px"><img class="size-full wp-image-732" title="contextMenu" src="http://www.tomsquest.com/blog/wp-content/uploads/contextMenu.jpg" alt="Capture du menu contextuel" width="204" height="40" /><p class="wp-caption-text">Capture du menu contextuel</p></div>
<p>MoreUnit est compatible avec Eclipse 3.5 (Galileo). Il fonctionne parfaitement avec un project Maven.</p>
<p>Le site : <a title="Site du plugin MoreUnit" href="http://moreunit.sourceforge.net">http://moreunit.sourceforge.net</a></p>
<p>L&#8217;update site : <a title="Update Site MoreUnit" href="http://moreunit.sourceforge.net/org.moreunit.updatesite/">http://moreunit.sourceforge.net/org.moreunit.updatesite/</a></p>
<h3>Astuces</h3>
<p>La configuration qui fonctionne pour un projet Maven et Junit 3.x est :</p>
<ul>
<li>Directory for test cases : src/test/java</li>
<li>Test prefixes : <em>vide</em></li>
<li>Test suffixes : Test</li>
<li>Enable flexible naming of tests : coché</li>
</ul>
<p>Pour voir le marqueur sur les méthodes (caché par d&#8217;autres annotations Eclipse), il est intéressant d&#8217;activer le soulignement des méthodes ou :</p>
<ul>
<li>Préférences &gt; Editors &gt; Text Editors &gt; Annotations &gt; MoreUnit Marker &gt; Cocher &#8220;Test as Suiggly line&#8221;</li>
</ul>
<p>Il est possible de créer une nouvelle méthode de test en appuyant plusieurs fois sur ctrl+u depuis la méthode de test.</p>
<p>La vue qui montre les tests manquants fonctionnent partiellement donc je ne m&#8217;en sers pas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/moreunit-les-tests-plus-vite-sous-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Critique du livre &#8220;Passionate Programmer&#8221;</title>
		<link>http://www.tomsquest.com/blog/passionate-programmer-critique-du-livre/</link>
		<comments>http://www.tomsquest.com/blog/passionate-programmer-critique-du-livre/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 09:20:32 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[livre]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=691</guid>
		<description><![CDATA[Critique du livre "The Passionate Programmer" de Chad Fowler. Ce livre détaille comment gérer sa carrière profesionnelle avec une multitude de conseils et d'actions. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pragprog.com/titles/cfcar2/the-passionate-programmer"><img class="alignright size-full wp-image-709" title="the_passionate_programmer" src="http://www.tomsquest.com/blog/wp-content/uploads/the_passionate_programmer.jpg" alt="the_passionate_programmer" width="150" height="225" /></a></p>
<p>Dans &#8220;<a title="Site du livre Passionate Programmer" href="http://www.pragprog.com/titles/cfcar2/the-passionate-programmer">The Passionate Programmer</a>&#8220;, apprenez comment gérer votre carrière de geek, comment booster votre vie professionnelle, et avoir du fun et l&#8217;argent du fun.</p>
<p>L&#8217;auteur, <a title="Site personnel de Chad Fowler" href="http://chadfowler.com/">Chad Fowler</a>, établit une stratégie pour planifier et créer une vie réussie dans le développement logiciel. Il explique comment prendre le contrôle de sa carrière, s&#8217;activer pour en faire une réussite.</p>
<p><span id="more-691"></span></p>
<h3>Ta carrière comme un business</h3>
<blockquote><p>&#8220;Il faut se voir comme un produit qu&#8217;il faut construire et vendre&#8221;</p></blockquote>
<p>Une entreprise ne nous emploie pas parce qu&#8217;elle nous aime, mais pour faire de  l&#8217;argent (pour en gagner ou ne pas en perdre). En nous embauchant, la société investie en nous. Donc le challenge est de devenir un bon investissement pour elle, être rentable. Il faut juger ses performances par rapport à notre valeur ajoutée pour la société.</p>
<p>C&#8217;est sur cette notion de R.O.I. personnelle que Chad Fowler conseille de se poser régulièrement cette question : &#8220;Suis-je un bon investissement ? &#8220;.</p>
<h3>Ta carrière, c&#8217;est ta vie (ou presque)</h3>
<p>Vivre une vie remarquable n&#8217;est souvent pas un but quand on débute sa carrière. C&#8217;est beaucoup plus facile de suivre le courant et de se laisser guider par les autres. Vous avez déjà entendu le commercial vous dire : &#8220;C&#8217;est la mission qu&#8217;il te faut&#8221; pour être déçu dès les cinq premières minutes de l&#8217;entretien.</p>
<p>Le travail représente 50% du temps éveillé. Si vous n&#8217;aimez pas ce que vous faites au boulot, ce chiffre devrait vous choquer. Cela veut aussi dire que l&#8217;on passe plus de temps avec ses collègues qu&#8217;avec notre femme !</p>
<p>Donc aimer son boulot, c&#8217;est aussi aimer sa vie. On se leurre souvent en cherchant simplement le prochain job mieux payé qui ne nous apportera pas grand-chose. Il faut chercher la satisfaction : &#8220;qu&#8217;est-ce qui me fait plaisir ?&#8221;.</p>
<h3>Quelques conseils tirés du livre</h3>
<h4>La Roadmap personnelle</h4>
<p>Chad Fowler conseille de se construire une liste des compétences que l&#8217;on veut acquérir. Cette liste est une roadmap équivalent à celle d&#8217;un projet qui permettra de planifier et de définir vers où on veut aller.<br />
L&#8217;exercice peut se faire sur son passé : de où je viens, ce que j&#8217;ai appris à chaque fois jusque maintenant.</p>
<h4>Ne pas mettre tous ses oeufs dans le panier de quelqu&#8217;un d&#8217;autre</h4>
<p>Java, Java et rien que Java ? Pour l&#8217;auteur, l&#8217;intégrisme technologique est une mauvaise chose. Chaque techno, langage, framework progresse, stagne et décroit. Pour éviter d&#8217;investir sur un mauvais choix (une techno en déclin), il faut étudier le marché et dans tous les cas se diversifier.</p>
<p>Une entreprise a les moyens (argent et temps) de passer d&#8217;une techno à une autre. Ce n&#8217;est pas le cas pour un individu, car il n&#8217;aura pas les ressources pour le faire (moins d&#8217;argent, moins de temps).</p>
<p>S&#8217;élargir à d&#8217;autres technos, c&#8217;est limité les risques. Comme en bourse, il s&#8217;agit de diversifier son  portefeuille.</p>
<h4>Savoir dire Non</h4>
<p>Oser dire Non à son client ou à son manager est un bon challenge quand on commence sa carrière. Nous avons tous un devoir de conseil qui passe, parfois, par l&#8217;émission d&#8217;un Non motivé. C&#8217;est assez dur à faire car on se sent souvent en infériorité (par exemple, développeur contre client). Il faut être courageux pour savoir dire Non.</p>
<p>D&#8217;autre part, savoir dire Non renforce notre Oui car les personnes savent alors que cette réponse est sérieuse et motivée.</p>
<p>Petit bémol, dans certains contextes un &#8220;Oui, mais&#8221; permet de sauver sa peau.</p>
<h3>Mon avis</h3>
<p>J&#8217;ai aimé ce livre car j&#8217;ai découvert un nouveau point de vue intéressant et une vision du business différente de la vision traditionnelle. On ne vit pas dans un monde de Bisounours comme diraient les Cast Codeurs.J&#8217;en tire de nombreux conseils et des actions afin de me remettre régulièrement en question et progresser.</p>
<p>Ce que je n&#8217;ai pas aimé :</p>
<ul>
<li>Certains chapitres sont trop simplistes ou évidents. Mais, sur 53 chapitres, c&#8217;est normal que tous ne soient pas bons.</li>
<li>Beaucoup d&#8217;anecdotes divertissantes sur l&#8217;auteur et la musique mais quelquefois trop écartés du sujet (Chad Fowler est un ancien musicien professionnel)</li>
</ul>
<p>Note finale : 7/10</p>
<h3>Will code for food</h3>
<p><a href="http://www.pragprog.com/titles/mjwti/my-job-went-to-india"><img class="size-full wp-image-702 alignleft" title="my_job_went_to_india" src="http://www.tomsquest.com/blog/wp-content/uploads/my_job_went_to_india.jpg" alt="my_job_went_to_india" width="100" height="155" /></a>Pour l&#8217;anecdote, la première version du livre était intitulée : &#8220;<a title="Site du livre My Job Went To India" href="http://www.pragprog.com/titles/mjwti/my-job-went-to-india">My Job went to India</a>&#8221; (ce qui a bien fait rire mes collègues de Singapour).</p>
<p>Sur la couverture, on voit un homme tenant une pancarte &#8220;Will code for food&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/passionate-programmer-critique-du-livre/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gradle : vos builds aux petits oignons</title>
		<link>http://www.tomsquest.com/blog/gradle-vos-builds-aux-petits-oignons/</link>
		<comments>http://www.tomsquest.com/blog/gradle-vos-builds-aux-petits-oignons/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 16:58:11 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=680</guid>
		<description><![CDATA[Gradle est un outil de build très souple ou peut-être trop souple. ]]></description>
			<content:encoded><![CDATA[<p><a title="Site Web de Gradle" href="http://www.gradle.org/"><img class="alignright size-full wp-image-682" title="gradle" src="http://www.tomsquest.com/blog/wp-content/uploads/gradle.jpg" alt="gradle" width="144" height="65" />Gradle</a> est un outil permettant d&#8217;écrire ses scripts de build en groovy.<br />
Il nous a été présenté hier soir chez <a title="Zenika" href="http://www.zenika.com/">Zenika</a> par son créateur, Hans Dockter.</p>
<p>A première vue, c&#8217;est un outil puissant et extrêmement souple. Il apporte beaucoup de bonnes idées et on s&#8217;amuse vite à le comparer à Maven.</p>
<p>Alors, Gradle pour tous ou seulement pour votre pire ennemi ?</p>
<h3><span id="more-680"></span>Donner du sens à vos builds</h3>
<p>Gradle, c&#8217;est avant tout un DSL en Groovy pour décrire ses builds. Il bénéficie donc des améliorations du langage comme les closures et d&#8217;une syntaxe épurée.</p>
<p>Hans Docker insiste sur ce point : un script de build qui épouse votre projet est beaucoup plus intéressant qu&#8217;un projet où la structure est imposée par l&#8217;outil de build (comme Maven).</p>
<p>Il fait un parallèle avec « l&#8217;<a title="Anemic Object Model de Martin Fowler" href="http://martinfowler.com/bliki/AnemicDomainModel.html">Anemic Object Model</a> » de Martin Fowler et le DDD dans le sens où votre build se décrit lui-même et ses buts se documentent eux-mêmes.</p>
<p>Gradle propose donc de donner du sens à nos builds en permettant d&#8217;améliorer la compréhension du système et des tâches réalisées.</p>
<p>Hans oppose les notions de « Langage de build » (Gradle) et de « framework de build » (Maven). L&#8217;un offre la flexibilité, l&#8217;autre pose un cadre défini.</p>
<h3>Attention, outil coupant</h3>
<p>Vous avez déjà eu des projets complexes à construire, avec par exemple de la génération de code ou des fichiers à emboiter. Vous vous êtes battu avec Maven et vous avez souvent perdu (c&#8217;est mon cas, je n&#8217;ai pas encore ma ceinture noire de Maven).</p>
<p>Gradle vient directement répondre à ce besoin : simplifier les builds complexes.<br />
C&#8217;est d&#8217;ailleurs son moto : « Make the impossible possible, the possible easy, and the easy elegant&#8221;.</p>
<p>Discussion faite avec Florent Ramière de Jaxio, nous sommes du même avis : Oui, Gradle est adapté pour les builds complexes mais 80% ont des besoins simples, réalisables avec Maven.</p>
<p>Gradle est un outil puissant qui permet de faire précisément ce que vous voulez.<br />
Cette flexibilité extrême permet aussi de faire n&#8217;importe quoi, y compris se tirer une balle dans le pied.<br />
Maven a pris beaucoup d&#8217;ampleur en proposant des conventions et une structure commune (par exemple, les phases et les packages).</p>
<p>Franchement, c&#8217;est un bonheur de s&#8217;y retrouver entre différents projets. Malheureusement, ces conventions ne peuvent pas se conformer à tous les projets.</p>
<h3>Un peu jeune</h3>
<p>Gradle est « production ready » comme le dit Hans. Il est utilisé par certains gros projets aux besoins complexes.<br />
Pourtant, il est encore en fort développement, signe de bonne santé, mais aussi manque de maturité. Le projet n&#8217;a pas encore un an.</p>
<p>Il lui manque un certain nombre de fonctionnalités avant de devenir réellement complet, par exemple le support d&#8217;autres langages que Java ou encore celui de Netbeans (mais « Why bother ? » comme dirait Antonio Goncalves).</p>
<p>Bref, il y a du travail et ce n&#8217;est pas la crise comme l&#8217;indique la <a title="Roadmap Gradle" href="http://docs.codehaus.org/display/GRADLE/Roadmap">Roadmap</a>.</p>
<h3>Mon avis</h3>
<p>J&#8217;aime :</p>
<ul>
<li>L&#8217;usage d&#8217;un DSL pour donner du sens à ses scripts de build ;</li>
<li>La puissante de ce DSL pour faire des choses qui font rêver (par exemple, une tâche à accès à la liste des tâches suivantes afin de pouvoir modifier son comportement) ;</li>
<li>La réutilisation des tâches Ant facilement, ce qui veut dire qu&#8217;on peut presque tout faire ;</li>
<li>La flexibilité offerte. J&#8217;adore les outils coupants qui me permettent de faire ce que je veux comme je le veux. Mais je reconnais que je n&#8217;ai pas rencontré souvent de besoin très exotique ;</li>
<li>Le Gradle Wrapper qui permet de dérouler un build Gradle sans aucune installation préalable (il télécharge ses dépendances automatiquement).</li>
</ul>
<p>Je n&#8217;aime pas :</p>
<ul>
<li>Le fait de ne pas avoir une intégration/réutilisabilité complète avec Maven (la faute aux Plugins apparemment) ;</li>
<li>Le trop peu de convention, même si c&#8217;est le but du projet, car les conventions permettent d&#8217;entrer dans l&#8217;entreprise pour éviter que chacun puisse faire ce qu&#8217;il veut. Adieu structuration et normalisation entre projets. Mais rien ne dit qu&#8217;on ne puisse pas poser une structure à respecter. Ce serait l&#8217;équivalent des normes de codages ;</li>
<li>Il n&#8217;est pas à  mettre entre toutes les mains. Gros risques de faire dans le non maintenable (quid du debugging, du diagnostique, des performances ?)</li>
<li>La jeunesse du projet qui ne garantit pas encore une pérennité suffisante pour l&#8217;entreprise.</li>
</ul>
<h3>Pour allez plus loin</h3>
<p>Zenika a publié des articles à propose de Gradle ainsi que deux podcasts. Le deuxième podcast couvre bien les avantages et inconvénients de Gradle :</p>
<ul>
<li>Les <a title="Articles Zenika sur Gradle" href="http://blog.zenika.com/index.php?tag/gradle">articles</a> ;<a title="Articles Zenika sur Gradle" href="http://blog.zenika.com/index.php?tag/gradle"><br />
</a></li>
<li>Les <a title="Podcast Zenika sur Gradle" href="http://blog.zenika.com/index.php?post/2009/05/29/Podcast-Gradle">podcasts</a>.</li>
</ul>
<p>Nicolas Martignole du Touilleur Express a fait un <a title="Compte rendu Gradle à Jazoon" href="http://www.touilleur-express.fr/2009/06/23/jazoon-gradle-la-presentation-qui-aura-lieu-jeudi-soir/">compte rendu de la présentation</a> faite à Jazoon. Les commentaires sont également intéressants. J&#8217;aime beaucoup le « Gradle as the assembly language for builds » de Vincent Massol.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/gradle-vos-builds-aux-petits-oignons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les limites de Wicket</title>
		<link>http://www.tomsquest.com/blog/les-limites-de-wicket/</link>
		<comments>http://www.tomsquest.com/blog/les-limites-de-wicket/#comments</comments>
		<pubDate>Sun, 03 May 2009 13:03:37 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=656</guid>
		<description><![CDATA[Wicket offre de nombreuses fonctionnalités mais a également son lots de limites. Faisons le tour de celles-ci et cherchons des solutions.]]></description>
			<content:encoded><![CDATA[<p><a href="http://wicketframework.org/"><img class="alignright size-full wp-image-668" title="wicket_logo" src="http://www.tomsquest.com/blog/wp-content/uploads/wicket_logo.jpg" alt="wicket_logo" width="150" height="147" /></a>Connaître un framework, c&#8217;est aussi reconnaître ses limites et ses points faibles. Pour Wicket, il m&#8217;a fallu creuser profondément. J&#8217;ai interrogé les pros de Wicket présent à cette soirée, Carl Azoury, un des boss de Zenika et Martin Dashort, committer Wicket.</p>
<p>Quelles sont les limites de Wicket ? Quelles sont leurs solutions ?</p>
<p><strong>Mise à jour le 02/06/2010 :</strong> <a href="http://www.developpez.net/forums/d908584/java/developpement-web-java/frameworks/wicket/limites-wicket-commentaire-texte/">une discussion intéressante sur les limites de Wicket</a> a eu lieu sur les forums developpez.com. Il y a des arguments intéressants et de vrais retours d&#8217;expérience.</p>
<p><span id="more-656"></span></p>
<h3>Un mot sur la conférence Wicket/Zenika</h3>
<p><img class="alignleft size-full wp-image-667" style="border: right; border-bottom: 10px solid white;" title="zenika_logo" src="http://www.tomsquest.com/blog/wp-content/uploads/zenika_logo.gif" alt="zenika_logo" width="211" height="68" />L&#8217;invité de la soirée <a title="Zenika" href="http://www.zenika.com/">Zenika</a> du 29 avril était <a href="http://wicketinaction.com/">Martin Dashorst</a>, un des committers principaux de Wicket et coauteur du livre « Wicket In Action », dont vous trouverez <a title="Critique du Livre Wicket In Action" href="http://www.tomsquest.com/blog/critique-du-livre-wicket-in-action/">la critique ici-même</a>.</p>
<p>Martin a réalisé une introduction d&#8217;une heure à Wicket en montrant ses principaux avantages et les façons de faire les choses. La présentation a été convaincante mais j&#8217;aurai aimé plus de détails et d&#8217;exemples sur le futur de Wicket.</p>
<p>La soirée a encore été une nouvelle belle réussite pour Zenika, après les très  bonnes sessions Terracotta et Lean.</p>
<h3>Le markup n&#8217;est pas toujours prévisualisable</h3>
<p>Quand votre application commence à être découpée en composants (et c&#8217;est le but final de Wicket), le markup HTML est lui aussi scindé en différents fichiers. Adieu pré-visualisation, le Designer peut recommencer à s&#8217;arracher les cheveux comme avec ces bonnes vieilles JSP.</p>
<ul>
<li>Un designer intervient principalement au début du projet. C&#8217;est donc à ce moment-là que la pré-visualisation est importante. Wicket n&#8217;est pas un frein dans cette situation, car il offre trois choix pour gérer son markup. Quand le nombre de pages est inférieur à dix, les auteurs conseillent tout simplement de dupliquer le code dans toutes les pages (hé oui, pour moins de 10 pages, le R.O.I. nous dit : « fais-le avec tes mains »). Au-delà, Wicket propose d&#8217;utiliser le Markup inheritance qui est simplement une hiérarchie de classes et de markup qui composent le layout final. Finalement, il est possible de créer un ensemble de Panels pour découper ses écrans, mais la pré-visualisation devient difficile (inclusion de code HTML entre les balises Wicket qui sera ignoré au runtime).</li>
</ul>
<h3>Wicket ne tient pas la charge</h3>
<p>Wicket stocke beaucoup d&#8217;informations en session et il est donc trop lourd pour gérer plusieurs milliers d&#8217;utilisateurs simultanés. Le versionning des pages qui conserve l&#8217;historique de l&#8217;état des pages ouvertes par l&#8217;utilisateur en est le principal responsable. Martin a quelques références de sites à fort trafic, mais un vide se fait sentir à ce sujet.</p>
<ul>
<li>Oui, Wicket stocke beaucoup d&#8217;infos en session mais celles-ci sont nécessaires pour les fonctionnalités avancées comme la gestion du back button et les requêtes Ajax. Wicket propose un tas d&#8217;optimisation et un modèle de programmation qui permettent d&#8217;alléger cette charge. Par exemple, les LoadableDetachableModel permettent d&#8217;attacher et de détacher les objets à chaque affichage plutôt que de maintenir la donnée dans la session ;</li>
<li>Certes certaines pratiques recommandées par Wicket sont assez dures à comprendre. Dans mon cas, je me pose souvent la question : si je mets mon attribut là, est-ce qu&#8217;il sera sérialisé en session avec ses dépendances ? Pour s&#8217;en convaincre, l&#8217;article suivant illustre certains de ces cas : « <a title="Wicket Anti Patterns" href="http://letsgetdugg.com/2009/04/19/wicket-anti-patterns-avoiding-session-bloat/">Wicket Anti-Patterns: Avoiding Session Bloat</a> ».<a href="http://letsgetdugg.com/2009/04/19/wicket-anti-patterns-avoiding-session-bloat/"><br />
</a></li>
</ul>
<h3>Tester une application Wicket est difficile</h3>
<p>Le projet WicketTester est intégré au framework même s&#8217;il n&#8217;a pas été développé par l&#8217;équipe principale. D&#8217;après Martin, il s&#8217;écarte un peu du modèle du framework lui-même et souffre de certaines limitations. Parmi celles-ci, il faut connaître le chemin complet d&#8217;un composant dans la hiérarchie pour y accéder (exemple : pour tester un lien d&#8217;un form d&#8217;un panel, il faut connaître cette hiérarchie pour cliquer sur le lien).</p>
<ul>
<li>En réalité, ces limitations ne sont pas bloquante, juste gênantes. Certains projets Wicket utilisant WicketTester ont une couverture de code importante. Martin nous a montré après la conférence des exemples de tests réels assez convainquant. Ca reste proche de l&#8217;API Selenium (sans ses bugs aléatoires, j&#8217;espère);</li>
<li>Wicket 1.5 devrait apporter un framework de test plus complet et basé sur une partie du travail accomplit sur JDave. JDave est un framework de BDD (Behavior Driven Development) qui permet de spécifier par l&#8217;exemple les comportements des objets. Plus d&#8217;infos sur : <span style="text-decoration: underline;"><a href="http://www.jdave.org/bdd-wicket/">http://www.jdave.org/bdd-wicket/</a>;</span></li>
<li>L&#8217;article « <a title="Tesing Wicket With FitNesse" href="http://blog.xebia.com/2008/07/06/testing-wicket-with-fitnesse/">Testing Wicket with FitNesse</a> » illustre également certains problèmes rencontrés et leurs solutions pour l&#8217;écriture de fixture FitNesse.</li>
</ul>
<h3>Les URLs générées sont moches</h3>
<p>Wicket génère par défaut des URL de type : http://cheer.com/shop?wicket:interface=:0:detail1::ILinkListener::</p>
<p>Moche, non ? Et surtout pas facile à retenir et pas terrible pour le référencement. Ces URL contiennent de plus un numéro de version propre à la session courante. De ce fait, il sera impossible de la bookmarker.</p>
<ul>
<li>Problème récurrent des frameworks Web, la génération des URL par Wicket peut être configurée par pas moins de six stratégies d&#8217;encodage. Un exemple tiré du livre, la stratégie « IndexParamUrlCodingStrategy » est Restful car elle génère une URL de type : http://cheesr.com/cheeses/edam, où « edam » est le paramètre d&#8217;indice 0. D&#8217;autres exemples figurent sur le <a title="Exemple de URL Strategy" href="http://cwiki.apache.org/WICKET/url-coding-strategies.html">Wiki</a>.<a href="http://cwiki.apache.org/WICKET/url-coding-strategies.html"><br />
</a></li>
</ul>
<h3>Spring Security s&#8217;intègre mal à Wicket</h3>
<p>Intégrer SpringSecurity/Acegi à une application Wicket n&#8217;est pas une sinécure. SpringSecurity réalise ses contrôles essentiellement à partir d&#8217;URLs (par exemple : « l&#8217;utilisateur Hadopi est-il autorisé à accéder à www.thepitatebay.com »). Hors les URL de Wicket contiennent toutes par défaut un identifiant de version, ce qui limite fortement l&#8217;usage de SpringSecurity.</p>
<ul>
<li>Wicket dispose de son propre framework de sécurité orienté composant (au lieu d&#8217;être orienté URL) donc il est plus granulaire. Avec ce système, Martin nous explique qu&#8217;il est très simple de ne pas afficher un lien si l&#8217;utilisateur n&#8217;a pas accès à sa destination. Illustration :</li>
</ul>
<pre>
<pre class="brush: java">
Link adminPage = new Link(&quot;admin&quot;) {
	@Override
	public void onClick() {
		setResponsePage(AdminPage.class);
	}

	@Override
	public boolean isVisible() {
		UserSession userSession = UserSession.get();
		return userSession.getUser().isAdmin();
	}
};
</pre>
</pre>
<ul>
<li>Pour aller plus loin et centraliser les autorisations, Wicket propose d&#8217;autres projets. Wicket-auth-roles couvre des besoins simples et Wicket-security-wasp/Wicket-security-swarm émule JAAS. L&#8217;article suivant compare ces solutions : « <a title="Comparison projets de sécurité Wicket" href="http://wicketstuff.org/confluence/display/STUFFWIKI/Security+Framework+Comparison">Security Framework comparison</a> » ;</li>
<li>Au passage, il est même possible de développer ses propres annotations et de les poser sur les composants à protéger. Wicket, ce n&#8217;est que du Java après tout <img src='http://www.tomsquest.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<h3>Wicket n&#8217;est pas un framework managé</h3>
<p>Avec Wicket, vous allez réapprendre à utiliser les mots-clés « new » et « extend » pour lier vos composants. Il n&#8217;y a pas d&#8217;injection de dépendances natives entres les composants.</p>
<ul>
<li>Et c&#8217;est tant mieux car on n&#8217;en a pas besoin ! Avec Wicket, il y a pas de Xml pour pseudo-découpler vos composants. Et franchement, vous en avez eu souvent besoin ?</li>
<li>Côté Injection de dépendances, Wicket s&#8217;intègre très bien avec Spring et Guice. Notamment, il propose pas moins de trois solutions pour utiliser des beans Spring (service locator, proxy et annotation). Plus d&#8217;infos sur la <a title="Intégration Wicket et Spring" href="http://cwiki.apache.org/WICKET/spring.html">page du Wiki dédiée à Spring</a>.</li>
</ul>
<h3>Wicket n&#8217;est pas outillé</h3>
<p><a href="http://www.laughingpanda.org/~inhuman/wicket-bench/docs/features-0.5.html"><img class="alignright size-thumbnail wp-image-673" title="wicket_bench" src="http://www.tomsquest.com/blog/wp-content/uploads/wicket_editor-150x150.jpg" alt="wicket_bench" width="150" height="150" /></a>Même si Wicket enlève sa part de Xml, il nous reste quand-même les pages en Java avec leur markup Html et leurs ressources Xml. Il peut devenir vite fastidieux de manipuler ces fichiers séparément alors qu&#8217;ils ne forment en réalité qu&#8217;une seule page.</p>
<ul>
<li>En réalité, il n&#8217;y a pas vraiment besoin d&#8217;outils pour manipuler Wicket. La plupart des choses se passent en Java. Le markup doit être valide (bons identifiants) sinon Wicket refusera de se lancer ce qui permettra de valider son code ;</li>
<li>Si vous cherchez vraiment un outil, Wicket est assez bien supporté par les IDE. Pour Eclipse. <a title="Wicket Bench" href="http://www.laughingpanda.org/~inhuman/wicket-bench/docs/features-0.5.html">WicketBench</a> propose quelques fonctionnalités intéressantes, mais il n&#8217;est pas toujours stable.<a href="http://www.laughingpanda.org/%7Einhuman/wicket-bench/docs/features-0.5.html"><br />
</a></li>
</ul>
<h3>L&#8217;intégrable avec des frameworks JavaScript est difficile</h3>
<p>A l&#8217;usage, on se rend compte que l&#8217;intégration manuelle avec le JavaScript n&#8217;est pas évidente. Toujours ces histoires d&#8217;Id générés qui rendent plus compliqué un framework orienté Composants qu&#8217;un bon vieux Struts.</p>
<ul>
<li>Comme toujours, un framework Javascript est d&#8217;un grand secours et Wicket ne fait pas l&#8217;impasse là-dessus. Wicket s&#8217;intègre aux principaux frameworks JavaScript : YahooUI, Dojo, Scripaculous ou encore JQuery.</li>
</ul>
<p>L&#8217;exemple suivant montre l&#8217;usage de <a title="WiQuery" href="http://code.google.com/p/wiquery/">WiQuery</a> qui intègre Jquery/JQueryUI à Wicket au travers des Behaviors, qui permettent d&#8217;ajouter des comportements à des objets existants (dont des attributs JS ou Ajax) :</p>
<pre>
<pre class="brush: java">
public MyWebPage() {
	Label example1 = new Label(&quot;example1&quot;, &quot;Example 1&quot;); 

	example1.add(new WiQueryEventBehavior(new Event(MouseEvent.CLICK) {
		@Override
		public JsScope callback() {
			return new JsScope() {
				@Override
				protected void execute(JsScopeContext scopeContext) {
					scopeContext.self().chain(CssHelper.css(&quot;border&quot;, &quot;1px solid red&quot;));
				}
			};
		}
	})); 

	add(example1);
}
</pre>
</pre>
<h3>Conclusion</h3>
<p>Ah Wicket. Quand l&#8217;utiliser ou s&#8217;en passer ? Une chose est sûre : aucun framework n&#8217;est « One size fits all ». Ainsi connaître les limitations de Wicket et leurs solutions est un bon moyen de mieux l&#8217;utiliser et de l&#8217;apprécier. Et moi, j&#8217;adore.</p>
<p>Vous aussi, vous avez certainement rencontré des problèmes et touché les limites de Wicket. Lesquelles ? Les avez-vous trouvées bloquantes ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/les-limites-de-wicket/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Retour du Barcamp &#8220;Travailleurs Du Web&#8221;</title>
		<link>http://www.tomsquest.com/blog/retour-du-barcamp-travailleurs-du-web/</link>
		<comments>http://www.tomsquest.com/blog/retour-du-barcamp-travailleurs-du-web/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 21:13:51 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[tdw]]></category>

		<guid isPermaLink="false">http://www.tomsquest.com/blog/?p=634</guid>
		<description><![CDATA[Compte-rendu du BarCamp "Travailleurs du Web". Une bonne journée où ont été abordés les sujets : web mobile, freelance, scop, vie/travail]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-641" title="tdw_camp" src="http://www.tomsquest.com/blog/wp-content/uploads/tdw_camp.jpg" alt="tdw_camp" width="200" height="193" />Samedi a eu lieu le premier <a title="Barcamp Travailleurs du Web" href="http://barcamp.pbwiki.com/TravailleursDuWebCamp">Barcamp TDW</a> destinés aux personnes travaillant dans le Web ou s&#8217;y intéressant : designers, développeurs, webmasters, curieux et même un mec qui fait du Java (vous avez deviné qui).</p>
<p>Le but du Barcamp était de faire rencontrer les acteurs du Web afin d&#8217;échanger des points de vues et des idées, ainsi que de passer un moment convivial. Mission réussie.</p>
<p>Les sessions étaient nombreuses et j&#8217;ai assisté à :</p>
<ul>
<li>Web Mobile</li>
<li>Freelance</li>
<li>SCOP</li>
<li>Vie/Travail</li>
</ul>
<p><span id="more-634"></span></p>
<h3>Web Mobile</h3>
<p>Le Web sur mobile est avant tout un moyen d&#8217;attirer le client, en assurant une continuité totale. L&#8217;équivalent du &#8220;partout, toujours&#8221;.</p>
<p>Rémi d&#8217;<a title="Heklectic" href="http://www.heklektic.fr">Hekletic</a> déclare que 60% du Web mobile se fait par un IPhone. Le reste étant divisé en Symbian, Windows Mobile, Black Berry et Androïd.</p>
<p>J&#8217;ai tenu mon rôle en expliquant que Java était donc disponible (presque) partout.</p>
<p>Oui, l&#8217;Iphone se porte bien avec ses 1 milliard d&#8217;application téléchargés en deux ans (cf <a title="1 milliard d'application IPhone vendue" href="http://fr.techcrunch.com/2009/04/24/bientot-deux-ans-un-milliard-dapplications-telechargees-liphone-se-porte-a-merveille/">cette news sur techcrunch</a>).</p>
<p>Les principales contraintes de développement sur mobile sont :</p>
<ul>
<li>la taille de l&#8217;écran</li>
<li>la rapidité de réception/envoi 	des données</li>
<li>la puissance du processeur</li>
</ul>
<p>Pour Rémi, la principale limitation est le débit de réception. En effet, il faut éviter de streamer trop de données au risque de gâcher l&#8217;expérience utilisateur.</p>
<p>Certaines applications sont designées entièrement au type de téléphone. Facebook est cité et démonstration à l&#8217;appui : le Facebook de Symbian et celui de l&#8217;Iphone sont bien deux interfaces complètement distinctes. Du point de vue financier, seulement certains éditeurs vont se permettre de développer une interface par téléphone. A quand une homogénéisation ?</p>
<p>A ma question : &#8220;le Web Mobile pour quels usages ?&#8221;. Je n&#8217;ai pas eu de réponse claire : oui pour les mails, la géo-localisation, les news, twitter&#8230; Mais est-ce tout ? Pas de réponse franche, mais une chose est sûre : le mobile est une nouvelle console de jeu et sert aussi de gadgets (avec en preuve cette application IPhone qui affiche des chiens en train de lécher l&#8217;intérieur de l&#8217;écran, si si, j&#8217;vous jure, 79 centimes sur l&#8217;AppStore). Quasiment tout le monde autour de la table a déjà acheté plusieurs applications sur Iphone.</p>
<p>Le Wap est mort, je suis triste. En plus, j&#8217;ai enterré mon minitel la semaine dernière.</p>
<h3>Freelance</h3>
<p>Les freelances ont, entre autres, certains problèmes comme le manque de crédibilité (statut, ancienneté) et le risque personnel.</p>
<p>Quelqu&#8217;un raconte que sa société s&#8217;est fait auditer de A à Z par son client, une grande marque de luxe. Le but était de rassurer le client sur sa solidité financière. Cette garantie de &#8220;pouvoir être là dans 3 ans&#8221; n&#8217;étant apparemment pas réaliste pour un freelance. Ce que le client n&#8217;a jamais su, c&#8217;est que le projet a finalement été développé par des indépendants. Donc la &#8220;continuité&#8221; n&#8217;est de toute façon pas assurée.</p>
<p>Passer freelance est toujours difficile, tout le monde est unanime.</p>
<p>Il peut donc être intéressant de transiter de son activité salarié vers le statut de Freelance en passant par celui d&#8217;auto-entrepreneur, afin de pour tâter le terrain, travailler avec des clients et se faire connaître.</p>
<p>Le statut d&#8217;auto-entrepreneur permet d&#8217;avoir une activité annexe sur laquelle on ne paye des charges que s&#8217;il y a chiffre d&#8217;affaire. Dans les services, le chiffre d&#8217;affaire max est de 32000 euros (au-delà, il faudra changer de statut).</p>
<p>Mais attention, on me souffle à l&#8217;oreille que le statut d&#8217;auto-entrepreneur engage la responsabilité illimité de l&#8217;entrepreneur. Ouch ! A lire dans <a title="Responsabilité illimité de l'auto-entrepreneur" href="http://transtextuel.wordpress.com/2009/04/09/odyssee-d%E2%80%99une-traducteuse-au-regime-l%E2%80%99entreprenariat-volet-2/">&#8220;Odyssée d&#8217;une traducteuse au régime &#8211; l&#8217;entreprenariat, volet 2&#8243;</a>.</p>
<p>Au niveau de la concrétisation, un freelance jouît d&#8217;une plus grande liberté. Tous les freelances à la table organisent leur journée à leur convenance. La liberté est en effet un des attraits du statut. Travailler tôt ou tard, faire sa veille quotidienne, coder, toutes ces tâches s&#8217;enchaînent différemment selon les individus.</p>
<p>La crise ! Ah, le gros mot. Au final pas grand monde pour me dire que la crise se fait durement sentir. Grosse surprise, pour Sébastien d&#8217;<a href="http://www.altrasys.fr">Altrasys</a>, la crise lui a apporté de nouveaux clients. Ceux-ci ne veulent plus payer pour des licences Windows onéreuses, ils veulent de l&#8217;OpenSource car c&#8217;est gratuit et non parce que c&#8217;est mieux.</p>
<p>Au niveau des contrats/paiement, la méthode &#8220;forfait puis à l&#8217;heure travaillée&#8221; semble convenir. Certaines personnes ont eu des problèmes de règlement quand le client fait le difficile pour payer la dernière partie de l&#8217;ardoise. Il faut bien s&#8217;arranger pour que cette dernière partie soit le &#8220;bonus&#8221;, le bénéfice. Autrement dit, il ne faut pas compter dessus pour vivre et continuer à exercer son travail.</p>
<h3>SCOP</h3>
<p>Cette session visait à échanger autour du statut de SCOP (Société Coopérative de Production). C&#8217;est, de façon simplifié, une forme d&#8217;entreprise à but social (par exemple, tous les salariés ont droit de vote).</p>
<p>Mes notes ne seront jamais aussi complètes que la documentation de cette forme d&#8217;entreprise. Je vous renvoie à :</p>
<ul>
<li>Wikipedia pour la <a title="Définition de SCOP" href="http://fr.wikipedia.org/wiki/Scop">définition de 	SCOP</a></li>
<li>Un de mes compte-rendus traite 	aussi du sujet : <a title="Entreprendre au Jug2b" href="http://www.tomsquest.com/blog/entreprendre-au-jug2b/">Ma petite entreprise ne connaît pas la 	crise</a></li>
</ul>
<p>Cédric, un des fondateurs de la Scop &#8220;<a title="SCOP La Green Team" href="http://www.lagreenteam.fr">La Green Team</a>&#8220;, était présent et nous a brièvement parlé de sa société. Comme son nom le dit, sa Scop est axée développement durable dans ses statuts. Ses salariés allouent une partie de leur temps (2 jours par mois) à former leur membre, assister aux formations des membres et participer bénévolement à un projet de développement durable. La Scop apporte également une marque et une vision. Elle se rémunère quand elle apporte une affaire.</p>
<p>Je pense que le statut de Scop est un moyen de faire passer ses idées. L&#8217;orientation sociale et l&#8217;axe donné, comme dans le cas de La Green Team, sont pour moi un vrai moyen de faire du business en allant plus loin dans ses idées. Faire des affaires en changeant le moyen de le faire.</p>
<h3>Vie/Travail</h3>
<p>Cette session a fortement dévié de son but initial et on a donc fait pas mal de prospective.</p>
<p>On s&#8217;interroge sur pourquoi tant d&#8217;intérêt pour le Web. Car Internet réduit avant toutes les distances et les intermédiaires. A tel point qu&#8217;il est dorénavant possible de trouver des fournisseurs, presque qu&#8217;au même prix que des fournisseurs des pays à bas coups de mains d&#8217;oeuvre. Le fondateur de LaFraise est cité, son nouveau business aura des partenaires français sans payer beaucoup plus qu&#8217;en allant les chercher en Chine.</p>
<p>Sous cet angle de la réduction des intermédiaires, Babozor de <a href="http://www.travailleursduweb.com/">TDW</a> imagine une nouvelle version de la politique où le contact avec le citoyen est quasi-direct. L&#8217;idée est intéressante. Il a lui-même essayé de prendre rendez-vous avec un député sans avoir de vrai succès. Les contacts peuvent se faire mais ils ne sont pas faciles.</p>
<p>On parle également d&#8217;identité des entreprises. Il est possible de devenir l&#8217;identité d&#8217;un domaine ou, autrement dit, la personne de référence d&#8217;un secteur, d&#8217;une marque ou d&#8217;une entreprise. Babozor explique cette personne qui twittait tout ce qui se faisait sur CNN et qui est ainsi devenu le représentant CNN non-officiel. Son compte Twitter a depuis été racheté par la société. Et vous, deviendrez-vous un porte-parole d&#8217;une marque par votre activité sur le Web ? Y a-t-il des places à prendre ?</p>
<p>Pour revenir au sujet initial côté horaire de travail, Sébastien d&#8217;Altrasys se fixe sur ceux des bureaux : 9h-18h. Il souhaite limiter ses activités afin de ne pas dépasser et s&#8217;offrir une vraie coupure travail/Vie. Cela n&#8217;est pas facile quand on travaille de chez soi. De même, il ne répondra qu&#8217;exceptionnellement aux mails tardifs à 11h du soir afin de ne pas envoyer de message &#8220;je suis corvéable, allez-y à n&#8217;importe quelle heure&#8221;.</p>
<h3>Conclusion</h3>
<p>Une bonne journée destinée au Web et pour les gens du Web. Ces sessions m&#8217;ont permis de rencontrer des gens beaucoup plus créatifs que la moyenne. Il y avait une forte concentration de freelances, de fondateurs de sociétés innovantes et de codeurs. De quoi animer plusieurs jours en sujets de toutes sortes. (D&#8217;ailleurs, je crois bien qu&#8217;il y avait aussi assez à manger pour plusieurs jours. Oh ces rillettes, qu&#8217;elles étaient bonnes !).</p>
<p>Si vous voulez continuer l&#8217;aventure, rendez-vous sur le site des <a title="Travailleurs du Web" href="http://www.travailleursduweb.com/">travailleurs du web</a>.</p>
<p>Merci à Babozor et à <a href="http://www.quatuorprod.com/">Fred</a> pour la très bonne organisation.</p>
<h3>Les photos</h3>
<p>Voici un échantillon des photos réalisés par Seb. Vous en trouverez d&#8217;autres sur <a title="Galerie photos TDW" href="http://tdwcamp.altrasys.fr">son site</a>.</p>
<p><a href="http://tdwcamp.altrasys.fr"><img class="alignnone size-thumbnail wp-image-646" title="imgp9635" src="http://www.tomsquest.com/blog/wp-content/uploads/imgp9635-150x150.jpg" alt="imgp9635" width="150" height="150" /></a><a href="http://tdwcamp.altrasys.fr"><img class="alignnone size-thumbnail wp-image-647" title="imgp9658" src="http://www.tomsquest.com/blog/wp-content/uploads/imgp9658-150x150.jpg" alt="imgp9658" width="150" height="150" /></a><a href="http://tdwcamp.altrasys.fr"><img class="alignnone size-thumbnail wp-image-648" title="imgp9659" src="http://www.tomsquest.com/blog/wp-content/uploads/imgp9659-150x150.jpg" alt="imgp9659" width="150" height="150" /></a><a href="http://tdwcamp.altrasys.fr"><img class="alignnone size-thumbnail wp-image-649" title="imgp9664" src="http://www.tomsquest.com/blog/wp-content/uploads/imgp9664-150x150.jpg" alt="imgp9664" width="150" height="150" /></a><a href="http://tdwcamp.altrasys.fr"><img class="alignnone size-thumbnail wp-image-650" title="imgp9673" src="http://www.tomsquest.com/blog/wp-content/uploads/imgp9673-150x150.jpg" alt="imgp9673" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomsquest.com/blog/retour-du-barcamp-travailleurs-du-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.680 seconds -->
<!-- Cached page served by WP-Cache -->
