<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Blog Xebia France</title>
	<atom:link href="http://blog.xebia.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.fr</link>
	<description>Agile Enterprise Java, Cloud / NoSQL, Web Oriented Architectures, Mobile</description>
	<lastBuildDate>Tue, 18 Jun 2013 13:16:13 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
	<copyright>CC BY-NC-ND 2.0 http://creativecommons.org/licenses/by-nc-nd/2.0/fr/</copyright>
	<managingEditor>blog-france@xebia.fr (Xebia France)</managingEditor>
	<webMaster>blog-france@xebia.fr (Xebia France)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://blog.xebia.fr/videos/xebia-podcast.png</url>
		<title>Blog Xebia France</title>
		<link>http://blog.xebia.fr</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:new-feed-url>http://blog.xebia.fr/feed/podcast/</itunes:new-feed-url>
	<itunes:subtitle>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agi[...]</itunes:subtitle>
	<itunes:summary>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agile.</itunes:summary>
	<itunes:keywords>Xebia, Java, JEE, SOA, Agile, Méthodes, Agiles</itunes:keywords>
	<itunes:category text="Technology" />
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
	</itunes:category>
	<itunes:category text="Technology">
		<itunes:category text="Tech News" />
	</itunes:category>
	<itunes:author>Xebia France</itunes:author>
	<itunes:owner>
		<itunes:name>Xebia France</itunes:name>
		<itunes:email>blog-france@xebia.fr</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://blog.xebia.fr/videos/xebia-podcast.png" />
		<item>
		<title>Retour sur le mois du JS : la soirée Ember</title>
		<link>http://blog.xebia.fr/2013/06/18/retour-sur-le-mois-du-js-la-soiree-ember/</link>
		<comments>http://blog.xebia.fr/2013/06/18/retour-sur-le-mois-du-js-la-soiree-ember/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 12:55:21 +0000</pubDate>
		<dc:creator>Benoît Lemoine</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[WOA]]></category>
		<category><![CDATA[Ember.js]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14657</guid>
		<description><![CDATA[La soirée du 4 juin 2013 marque l&#8217;ouverture chez Xebia du mois du JS, série d&#8217;évènements destinée à découvrir les principaux acteurs du marchés des frameworks MVC coté client. Cette première soirée, consacrée à Ember.js, a permis à une vingtaine de personnes de découvrir comment poser les premières pierres d&#8217;une application Ember. Durant cette soirée, [...]]]></description>
				<content:encoded><![CDATA[
<p><img width="150" confluence-query-params="effects=border-simple,shadow-kn" src="http://blog.xebia.fr/wp-content/uploads/2013/06/emberjs-logo-150x150.png" style="margin: 1em 1em 1em 1em; float: right;"/></p>
<p>La soirée du 4 juin 2013 marque l&rsquo;ouverture chez Xebia du <a href="http://blog.xebia.fr/2013/05/17/le-mois-du-js-chez-xebia/" rel="nofollow">mois du JS</a>, série d&rsquo;évènements destinée à découvrir les principaux acteurs du marchés des frameworks MVC coté client.</p>
<p> Cette première soirée, consacrée à <a href="http://emberjs.com/" rel="nofollow">Ember.js,</a> a permis à une vingtaine de personnes de découvrir comment poser les premières pierres d&rsquo;une application Ember.</p>
<p><br/> <br/></p>
<p><img width="300" src="http://blog.xebia.fr/wp-content/uploads/2013/06/IMG_20130604_200000-300x225.jpg" style="margin: 1em 1em 1em 1em; float: left;"/></p>
<p>Durant cette soirée, <a href="http://blog.xebia.fr/author/tguerin/" rel="nofollow">Thomas Guerin</a>, <a href="http://blog.xebia.fr/author/mbreton/" rel="nofollow">Mathieu Breton</a> et <a href="http://blog.xebia.fr/author/blemoine" rel="nofollow">Benoit Lemoine</a> ont commencé par rapidement présenter l&rsquo;historique et les concepts sous tendant Ember avant d&rsquo;inviter l&rsquo;audience à découvrir le framework au travers d&rsquo;un tutoriel écrit pour l&rsquo;occasion.</p>
<p>Pour les personnes souhaitant découvrir Ember n&rsquo;ayant pas pu être présentes à la soirée, vous pouvez récupérer le tutoriel sur GitHub à l&rsquo;adresse suivante : <a href="https://github.com/xebia-france/workshop-ember" rel="nofollow">https://github.com/xebia-france/workshop-ember</a>. L&rsquo;application développée étant commune aux 3 ateliers du mois du JS, cela vous permettra d&rsquo;avoir une base de comparaison entre les différents frameworks présentés.</p>
<p>Suite au tutoriel, les organisateurs ont fait un rapide retour d&rsquo;expérience sur leur utilisation d&rsquo;Ember JS sur un site grand public, montrant ainsi les avantages et les inconvénients qu&rsquo;ils ont pu y trouver après un an d&rsquo;utilisation, le problème principal étant lié à la courbe d&rsquo;apprentissage très raide au début (beaucoup de conventions, documentation pas toujours à jour, etc.), mais une fois les bases du framework comprises, le même <em>pattern</em> de développement peut se répéter à l&rsquo;infini, et permet ainsi de devenir très productif.</p>
<p>La soirée s&rsquo;est conclue avec le désormais classique buffet campagnard de Xebia, où les participants ont pu échanger entre eux et avec les organisateurs autour de l&rsquo;atelier et des frameworks Javascript en général.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/18/retour-sur-le-mois-du-js-la-soiree-ember/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/</link>
		<comments>http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 08:23:44 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Glassfish 4.0]]></category>
		<category><![CDATA[Java EE 7]]></category>
		<category><![CDATA[lean startup]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[Product Ownership]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14648</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité L&#39;importance du Lean startup dans les entreprises (Par Yannick Grenzinger) Product Ownership dans le brouillard (Par Gilles Mantel) Mobilité Un meilleur visualiseur de logs pour Android (Par Gautier Mechling) Web AngularJS va être porté sur Dart (Par Mathieu Breton) Le coin de la [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-L%27importanceduLeanstartupdanslesentreprises">L&#39;importance du Lean startup dans les entreprises</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-ProductOwnershipdanslebrouillard">Product Ownership dans le brouillard</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/gmantel" target="_blank">Gilles Mantel</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-Mobilit%C3%A9">Mobilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-UnmeilleurvisualiseurdelogspourAndroid">Un meilleur visualiseur de logs pour Android</a> <span class="c2w-toc-author">(Par <a href="http://twitter.com/Nilhcem" target="_blank">Gautier Mechling</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-AngularJSva%C3%AAtreport%C3%A9surDart">AngularJS va être porté sur Dart</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/mbreton" target="_blank">Mathieu Breton</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/#RevuedePresseXebia-SortiedeJavaEE7etdeGlassfish4.0">Sortie de Java EE 7 et de Glassfish 4.0</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/amichaud" target="_blank">Antoine Michaud</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-L&#39;importanceduLeanstartupdanslesentreprises">L&rsquo;importance du Lean startup dans les entreprises</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40ygrenzinger' target='_blank'><img title='http://twitter.com/%40ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Steve Blank, créateur du Customer Development, revient dans cet <a href="http://readwrite.com/2013/05/28/steve-blanks-lean-startup-model-not-just-for-startups-any-more" rel="nofollow">article</a> sur <a href="http://blog.xebia.fr/2013/05/23/introduction-a-lean-startup/" rel="nofollow">Lean Startup</a> et son importance dans n&rsquo;importe quelle entreprise (et pas uniquement les startups). Si les grandes entreprises sont très concentrées sur l&rsquo;exécution, elles ne doivent pas oublier l&rsquo;innovation dans un marché qui change rapidement avec des innovations disruptives de plus en plus fréquentes. Lean Startup est l&rsquo;outil approprié pour leur permettre d&rsquo;innover et de s&rsquo;adapter rapidement. Steve Blank revient aussi sur l&rsquo;importance des données ainsi que la nécessité de comprendre ce que les clients veulent.</p>
<h4 id="RevuedePresseXebia-ProductOwnershipdanslebrouillard">Product Ownership dans le brouillard</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/3f756649274c986aa3f75d20f2cf92ab' target='_blank'><img title='http://www.gravatar.com/3f756649274c986aa3f75d20f2cf92ab' src='https://secure.gravatar.com/avatar/3f756649274c986aa3f75d20f2cf92ab.jpg?s=24' alt='http://www.gravatar.com/3f756649274c986aa3f75d20f2cf92ab' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/gmantel' target='_blank'><img title='http://blog.xebia.fr/author/gmantel' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/gmantel' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40gmantel' target='_blank'><img title='http://twitter.com/%40gmantel' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40gmantel' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/gmantel' target='_blank'>Gilles Mantel</a></span></div>
<p>Le French SUG a mis en ligne sur sa <a href="http://www.youtube.com/user/FrenchSUG" rel="nofollow">chaîne YouTube</a> un certains nombre de videos du dernier Scrum Day qui s&rsquo;est déroulé au centre de conférence d&rsquo;IBM le 11 Avril. Vous retrouverez les keynotes d&rsquo;ouverture et de fermeture et les sessions des 2 amphithéâtres. Nous avions fait un retour des sessions dans <a href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/" rel="nofollow">cet article</a> de blog, c&rsquo;est maintenant l&rsquo;occasion d&rsquo;en découvrir certaines par vous même et de nous donner votre avis si vous n&rsquo;avez pu assister à l&rsquo;événement. Vous retrouverez notamment la video de notre retour d&rsquo;expérience orientée Product Owner. Nous parlons des techniques classiques que le Product Owner doit maîtriser dans un contexte SCRUM, mais également de pratiques plus avancées qui permettent de continuer d&rsquo;avancer dans un contexte très incertain (le brouillard). Ces pratiques sont à la frontière du Product Owner à la SCRUM et la gestion de produit à l&rsquo;anglo-saxonne. Le produit dont nous parlons est aujourd&rsquo;hui déployé en production.</p>
<p style="text-align: center;"><iframe type="text/html" style="width: 400px; height: 300px" src="https://www.youtube.com/embed/x0EaBrPNxx4" frameborder="0"><br />
  </iframe>
</p>
<h3 id="RevuedePresseXebia-Mobilité">Mobilité</h3>
<h4 id="RevuedePresseXebia-UnmeilleurvisualiseurdelogspourAndroid">Un meilleur visualiseur de logs pour Android</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/1a0b01fc47a191e0fa989649c7c18cb0' target='_blank'><img title='http://www.gravatar.com/1a0b01fc47a191e0fa989649c7c18cb0' src='https://secure.gravatar.com/avatar/1a0b01fc47a191e0fa989649c7c18cb0.jpg?s=24' alt='http://www.gravatar.com/1a0b01fc47a191e0fa989649c7c18cb0' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/null' target='_blank'><img title='http://blog.xebia.fr/author/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/Nilhcem' target='_blank'><img title='http://twitter.com/Nilhcem' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/Nilhcem' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/null' target='_blank'>Gautier Mechling</a></span></div>
<p>Jake Wharton a sorti cette semaine <a href="https://github.com/JakeWharton/pidcat" rel="nofollow">PID Cat</a>, une surcouche à l&rsquo;utilitaire &quot;adb logcat&quot; permettant de consulter les journaux (logs) d&rsquo;un appareil Android.<br />Ce nouveau script en ligne de commande ajoute de la couleur à la sortie de logcat pour la rendre plus lisible, et offre la possibilité de filtrer les logs par application en saisissant leur &quot;package name&quot; (comme ce que propose déjà Eclipse via le plugin ADT) plutôt que leur PID.</p>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-AngularJSvaêtreportésurDart"><span style="font-size: 1.2em;">AngularJS va être porté sur Dart</span></h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' target='_blank'><img title='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' src='https://secure.gravatar.com/avatar/edb702be0a60b6d21c9dc78d20b13fcf.jpg?s=24' alt='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/mbreton' target='_blank'><img title='http://blog.xebia.fr/author/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/mbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/MatBreton' target='_blank'><img title='http://twitter.com/MatBreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/MatBreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/mbreton' target='_blank'><img title='http://github.com/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/mbreton' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/mbreton' target='_blank'>Mathieu Breton</a></span></div>
<p><span style="color: rgb(0,0,0);">L’équipe <a href="https://intranet.xebia.com/confluence/angularjs.org/" rel="nofollow">Angular</a>, durant la présentation de sa roadmap pour la version 1.2, a annoncé le portage du Framework MVC sous <a href="http://www.dartlang.org" rel="nofollow">Dart</a>.</span><span style="color: rgb(0,0,0);font-size: 1.2em;line-height: 13.0pt;"> </span></p>
<p><span style="color: rgb(0,0,0);">D’un point de vue technique cela peut être très intéressant pour le framework. Il disposera d’un typage plus fort, et pourra donc avoir une injection de dépendance plus robuste que celle actuelle. De plus le projet <a href="http://www.dartlang.org/articles/web-ui/" rel="nofollow">Web UI</a> sous Dart permettra à Angular de faire son entrée dans l’ère du Web Component. Actuellement, les composants de base comme le $compiler ou le $scope ainsi que les directives ng-bind et ng-repeat sont déjà portés.</span></p>
<p><span style="color: rgb(0,0,0);">Cependant, avec cette nouvelle étape, Google fait un de pas de plus vers la construction d’une stack web complète dont il a le contrôle. En effet, le géant de la recherche gère désormais son propre moteur de rendu en la personne de <a href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Chromedevientblink%2Cblink" rel="nofollow">Blink</a>, son langage client et serveur avec Dart et son framework MVC client avec Angular, lui permettant ainsi potentiellement d’appliquer ses propres standards mais le protégeant aussi de litiges judiciaires comme il avait pu avoir avec<a href="http://www.zdnet.fr/actualites/proces-android-defaite-cuisante-pour-oracle-google-a-agi-en-accord-avec-la-loi-39772363.htm" rel="nofollow"> Oracle sur Android</a></span><span style="color: rgb(0,0,0);font-size: 10.0pt;line-height: 13.0pt;">.</span></p>
<p><span style="color: rgb(0,0,0);"><a href="http://news.dartlang.org/2013/06/angularjs-announces-port-for-dart.html" rel="nofollow">Source</a></span></p>
<p><span style="color: rgb(0,0,0);"><a href="https://github.com/angular/angular.dart" rel="nofollow">Github du portage</a></span></p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-SortiedeJavaEE7etdeGlassfish4.0">Sortie de Java EE 7 et de Glassfish 4.0</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' target='_blank'><img title='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' src='https://secure.gravatar.com/avatar/37a6259cc0c1dae299a7866489dff0bd.jpg?s=24' alt='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/amichaud' target='_blank'><img title='http://blog.xebia.fr/author/amichaud' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/amichaud' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/amichaud' target='_blank'>Antoine Michaud</a></span></div>
<p>Oracle <a href="http://www.oracle.com/us/corporate/press/1957557" rel="nofollow">a annoncé</a>, mercredi 12 juin 2013, la disponibilité de <a href="http://www.oracle.com/technetwork/java/javaee/downloads/index.html" rel="nofollow">Java EE 7</a>. On pourra en particulier noter la sortie de JMS 2.0, JAX-RS 2.0 et un support amélioré pour les applications comprenant du HTML 5, avec notamment la gestion des WebSockets et l&rsquo;utilisation simplifiée des flux JSON.</p>
<p>L&rsquo;implémentation de référence d&rsquo;Oracle de JEE 7, <a href="https://glassfish.java.net/download.html" rel="nofollow">Glassfish 4</a>, est sortie quant à elle lundi 10 juin dernier.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/18/revue-de-presse-xebia-2013-25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>À la (re)découverte de la UICollectionView</title>
		<link>http://blog.xebia.fr/2013/06/17/a-la-redecouverte-de-la-uicollectionview/</link>
		<comments>http://blog.xebia.fr/2013/06/17/a-la-redecouverte-de-la-uicollectionview/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 11:58:30 +0000</pubDate>
		<dc:creator>Simone Civetta</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[UICollectionView]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14626</guid>
		<description><![CDATA[Vous avez peut-être déjà travaillé avec la classe UICollectionView, mais savez-vous comment personnaliser entièrement la mise en page et les transitions de vos données ? De même, avez-vous déjà eu à mettre en œuvre un UICollectionViewLayout personnalisé ? Si la réponse est &#34;non&#34;, alors une lecture de cette article s&#8217;impose. Parmi les nouveaux composants UI [...]]]></description>
				<content:encoded><![CDATA[
<p>Vous avez peut-être déjà travaillé avec la classe UICollectionView, mais savez-vous comment personnaliser entièrement la mise en page et les transitions de vos données ? De même, avez-vous déjà eu à mettre en œuvre un UICollectionViewLayout personnalisé ?</p>
<p>Si la réponse est &quot;non&quot;, alors une lecture de cette article s&rsquo;impose.</p>
<p>Parmi les nouveaux composants UI introduits par iOS 6, un des plus appréciés est la UICollectionView. Nous verrons ici comment se servir de cet objet en réalisant une galerie photo animée.</p>
<p>La UICollectionView est un composant qui gère une collection ordonnée d’éléments et les présente au travers de vues complètement personnalisables.</p>
<p>Par exemple, il est possible de présenter des données sous forme de cellules dans une grille, un carrousel ou bien encore dans une vue rotative. La CollectionView obtient ses données d’un dataSource qui se conforme au protocole UICollectionViewDataSource. Elle les affiche via des classes de type UICollectionViewCell.</p>
<p>Un protocole UICollectionViewDelegate est mis à disposition par UIKit afin d&rsquo;interagir avec la CollectionView. Il permet notamment d&rsquo;identifier les éléments sélectionnés.</p>
<p>La UICollectionView, de façon similaire à la UITableView, est une sous-classe de la UIScrollView, rajoutant un dataSource, des événements (sélection, désélection, etc) et un layout. Si nous n&rsquo;utilisons que de simples collectionViews au travers de Storyboards pour réaliser nos interfaces, l&rsquo;usage du layout peut passer inaperçu. En réalité, il constitue un des principaux atouts de ce composant car il est conçu pour encapsuler toute la logique d’affichage des éléments.</p>
<p>Notre objectif est d&rsquo;obtenir une galerie dans laquelle les images suivantes et précédentes seront semi-transparentes et sur lesquelles un redimensionnement sera appliqué. La taille de l’image augmentera au fur et à mesure qu’elle s&rsquo;approchera du centre de l&rsquo;écran. L&rsquo;image suivante présente le résultat souhaité:</p>
<p style="text-align: center;"><img src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-10-25-30-1.png" alt="image2013-6-10 10-25-30 (1)" width="465" height="270" class="alignright size-full wp-image-14637" /></p>
<h3 id="id-Àla(re)découvertedelaUICollectionView-CréationduUICollectionView">Création du UICollectionView</h3>
<p><em><strong><u>Note:</u></strong> Si nous devions cibler la version 5.0 d&rsquo;iOS (qui ne supporte pas les UICollectionViews), nous pourrions utiliser la très bonne librairie <a href="https://github.com/steipete/PSTCollectionView" rel="nofollow">PSTCollectionView</a>, réalisée par <a href="http://petersteinberger.com" rel="nofollow">Peter Steinberger</a>, qui réplique parfaitement le comportement de l&rsquo;UICollectionView.</em></p>
<p>La mise en place d&rsquo;une UICollectionView n&rsquo;a rien de complexe : il suffit d&rsquo;instancier ce composant à travers un storyboard ou bien directement via le code. Chaque image de la galerie sera contenue dans une cellule de type XBGalleryCell (Une sous-classe de UICollectionViewCell).  Par exemple :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">XBGalleryLayout *layout = [[XBGalleryLayout alloc] init];
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 320, 320) collectionViewLayout:layout];
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.collectionView registerClass:[XBGalleryCell class] forCellWithReuseIdentifier:@&quot;GalleryCell&quot;];</pre>
<p>Le code ci-dessus crée une UICollectionView avec une taille arbitraire, un layout de type XBGalleryLayout. Un dataSource et delegate sont également définis. La méthode registerClass permet enfin d’attribuer la classe de la cellule à un reuseIdentifier spécifique, ce qui permet à UIKit d’allouer puis réutiliser un objet de classe “XBGalleryCell” pour chaque cellule ayant reuseIdentifier égal à “GalleryCell”.</p>
<p>Pour obtenir le nombre d&rsquo;éléments de la CollectionView, nous mettons en place les méthodes suivantes :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { ... }
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { ... }</pre>
<p>De même, pour obtenir la cellule associée à un élément de la source de données, nous utilisons le code suivant :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @&quot;GalleryCell&quot;;
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    [cell setImageWithURL:[self.imageUrls[indexPath.row] url] placeholderImage:self.placeholderImage];
    
    return cell;
}</pre>
<h3 id="id-Àla(re)découvertedelaUICollectionView-UICollectionViewCell">UICollectionViewCell</h3>
<p>Nous continuons avec la UICollectionViewCell qui, de la même façon que la UITableViewCell, présente le contenu d’un élément de la dataSource :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">@implementation XBGalleryCell

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.imageView = [[UIImageView alloc] initWithFrame:self.bounds];
        self.imageView.contentMode = UIViewContentModeScaleAspectFit;
        [self addSubview:self.imageView];
    }
    return self;
}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage
{
    [self.imageView setImageWithURL:url placeholderImage:placeholderImage];
}

@end</pre>
<h3 id="id-Àla(re)découvertedelaUICollectionView-UICollectionViewLayout">UICollectionViewLayout</h3>
<p>Le principal atout de la UICollectionView est le UICollectionViewLayout. Cette classe permet de configurer l&rsquo;aspect et les animations des items contenues dans notre UICollectionView. UICollectionViewLayout est une classe abstraite qui doit nécessairement être sous-classée et qui contient toutes les informations sur la mise en page d’une UICollectionView. </p>
<p>Grâce au UICollectionViewLayout, nous pouvons appliquer les transitions, les effets d’opacité et de redimensionnement des images que nous avons décrits en début d&rsquo;article.</p>
<p>Ci-dessous l&rsquo;implémentation utilisée pour XBGalleryLayout (le code complet est disponible sur gist à cette URL <a href="https://gist.github.com/viteinfinite/5735887" rel="nofollow">https://gist.github.com/viteinfinite/5735887</a>) :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate"> @implementation XBGalleryLayout
- (id)init
{
    self = [super init];
    
    if (self) {
        
        // Taille des cellules
        self.itemSize = CGSizeMake(imageWitdh, imageHeight);
        
        // Configuration de l'aspect
        self.minimumLineSpacing = -10; // Espace minimum entre les cellules
        self.sectionInset = UIEdgeInsetsMake(0, imageLeftMargin, 0, imageLeftMargin); // &quot;Padding&quot;
        
        // Direction de défilement
        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    }
    return self;
}
...
@end</pre>
<h4 id="id-Àla(re)découvertedelaUICollectionView-Modifierl&#39;aspectetl&#39;animationdescellules">Modifier l&rsquo;aspect et l&rsquo;animation des cellules</h4>
<p>Grâce à la méthode layoutAttributesForElementsInRect il est possible de modifier l&rsquo;aspect (layout attribute) des éléments affichés à l&rsquo;intérieur d’une région de l’écran, et notamment de modifier l&rsquo;opacité et la taille selon la position d’une cellule à l’écran.</p>
<p>Un objet de type UICollectionViewLayoutAttributes permet de configurer les propriétés suivantes :</p>
<ul>
<li>frame</li>
<li>center</li>
<li>size</li>
<li>transform3D</li>
<li>alpha</li>
<li>zIndex</li>
<li>hidden</li>
</ul>
<p>L’implémentation de cette méthode dans notre XBGalleryLayout est la suivante :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *layoutAttributes = [super layoutAttributesForElementsInRect:rect];
    
    CGFloat horizontalCenter = (CGRectGetWidth(self.collectionView.bounds) / 2.0f);
    
    [layoutAttributes enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes *layoutAttributes, NSUInteger idx, BOOL *stop) {
        
        CGPoint centerInCollectionView = layoutAttributes.center;
        CGPoint centerInMainView = [self.collectionView.superview convertPoint:centerInCollectionView
                                                                      fromView:self.collectionView];
        
        if (centerInMainView.x &gt; -80 &amp;&amp; centerInMainView.x &lt; self.collectionView.frame.size.width + 80){
            
            CGFloat translateYBy = [self translateYByOffset:centerInMainView.x fromCenter:horizontalCenter];
            CGFloat scaleBy = [self scaleByOffset:centerInMainView.x fromCenter:horizontalCenter];
            CGFloat alpha = [self alphaByOffset:centerInMainView.x fromCenter:horizontalCenter];
            
            CATransform3D transform = CATransform3DIdentity;
            transform = CATransform3DScale(transform, scaleBy, scaleBy, 1.0);
            transform = CATransform3DTranslate(transform, 0.0, translateYBy, 0.0);
            layoutAttributes.transform3D = transform;
            layoutAttributes.alpha = alpha;
        }
    }];
    
    return layoutAttributes;
}</pre>
<p>Un UICollectionViewLayout permet également de contrôler lorsque la collectionView doit arrêter le défilement inertiel. Ce contrôle est rendu possible grâce à la méthode <a href="http://targetContentOffsetForProposedContentOffsetwithScrollingVelocity" rel="nofollow">targetContentOffsetForProposedContentOffset:withScrollingVelocity</a>: qui nous donne la possibilité de modifier le content offset (c’est à dire le décalage du contenu) à partir du contentOffset initialement prévu et de la vélocité de défilement. En d&rsquo;autres termes, il est possible de forcer la collectionView à réduire l’inertie afin de positionner l’image courante au centre de l’écran :</p>
<pre class="brush: cpp; gutter: true; title: ; notranslate">- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset
                                 withScrollingVelocity:(CGPoint)velocity
{
    
    CGFloat offsetAdjustment = MAXFLOAT;
    CGFloat horizontalOffset = proposedContentOffset.x + imageLeftMargin;
    
    CGRect targetRect = CGRectMake(proposedContentOffset.x, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height);
    
    NSArray *array = [super layoutAttributesForElementsInRect:targetRect];
    
    for (UICollectionViewLayoutAttributes *layoutAttributes in array) {
        CGFloat itemOffset = layoutAttributes.frame.origin.x;
        if (fabsf(itemOffset - horizontalOffset) &lt; fabsf(offsetAdjustment)) {
            offsetAdjustment = itemOffset - horizontalOffset;
        }
    }
    return CGPointMake(proposedContentOffset.x + offsetAdjustment, proposedContentOffset.y);
}</pre>
<h3 id="id-Àla(re)découvertedelaUICollectionView-Conclusion">Conclusion</h3>
<p>La UICollectionView est un élément extrêmement flexible qui permet de s&rsquo;affranchir de nombreuses complexités, et qui permet notamment une personnalisation en profondeur de la présentation d&rsquo;une collection d&rsquo;éléments.</p>
<p>Ce qui rend le composant UICollectionView particulièrement intéressant est la façon dont il est architecturé. Grâce au UICollectionViewLayout, les responsabilités sont partagées efficacement entre les classes. Cela permet une séparation plus propre entre la logique du contrôleur et celle de la vue et donc une meilleure maintenabilité du code.</p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/17/a-la-redecouverte-de-la-uicollectionview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atelier ElasticSearch</title>
		<link>http://blog.xebia.fr/2013/06/14/atelier-elasticsearch/</link>
		<comments>http://blog.xebia.fr/2013/06/14/atelier-elasticsearch/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 12:52:00 +0000</pubDate>
		<dc:creator>Eric Briand</dc:creator>
				<category><![CDATA[Tech Events]]></category>
		<category><![CDATA[Elastic Search]]></category>
		<category><![CDATA[MongoDB]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14565</guid>
		<description><![CDATA[Que vous soyez ingénieurs Java, DEV ou OPS, venez découvrir l&#8217;outil ElasticSearch avec David Pilato et Xebia. Le fil conducteur de l’atelier est la découverte des fonctions de bases et plus avancées dans un scénario réel d&#8217;entreprise. Après une présentation des fonctionnalités de l&#8217;outil par David Pilato (ElasticSearch), vous vous familiariserez avec ElasticSearch notamment à travers des requêtes de base [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-14-145156.png"><img class="alignnone size-medium wp-image-14564" alt="image2013-6-14-145156.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-14-145156-300x93.png" width="230" height="63" style="float: right; margin: 0 0 10px 10px;"/></a></p>
<p>Que vous soyez ingénieurs Java, DEV ou OPS, venez découvrir l&rsquo;outil <a href="http://www.elasticsearch.org/" rel="nofollow">ElasticSearch</a> avec David Pilato et Xebia.</p>
<p>Le fil conducteur de l’atelier est la découverte des fonctions de bases et plus avancées dans un scénario réel d&rsquo;entreprise.</p>
<p>Après une présentation des fonctionnalités de l&rsquo;outil par <strong>David Pilato</strong> <em>(ElasticSearch)</em>, vous vous familiariserez avec ElasticSearch notamment à travers des requêtes de base ainsi que l&rsquo;administration de l&rsquo;outil. Vous serez alors prêt pour la mise en œuvre d&rsquo;un scénario plus orienté entreprise avec l&rsquo;indexation de données d&rsquo;une base de données MongoDB et le requêtage plus avancé de ces données.</p>
<p>Cet atelier aura lieu le <strong>mardi 2 juillet</strong> dans les locaux de Xebia. Vous pouvez dès maintenant vous inscrire sur <a href="http://xfr-elasticsearch.eventbrite.fr" rel="nofollow">Eventbrite</a>.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/14/atelier-elasticsearch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Help, my velocity is like a roller coaster</title>
		<link>http://blog.xebia.fr/2013/06/14/help-my-velocity-is-like-a-roller-coaster/</link>
		<comments>http://blog.xebia.fr/2013/06/14/help-my-velocity-is-like-a-roller-coaster/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 12:00:55 +0000</pubDate>
		<dc:creator>Ludovic Pérot</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[DOD]]></category>
		<category><![CDATA[favourite]]></category>
		<category><![CDATA[Vélocité]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14557</guid>
		<description><![CDATA[Un ami m&#8217;a dit un jour que le Scrum Master était, au-delà du gardien de la méthode, le garant de la vélocité de l&#8217;équipe. Depuis, je me suis approprié cette formule que je trouve excellente. Pour garantir la vélocité, il faut la connaître et qu&#8217;elle soit fiable. Bien souvent, pour des équipes Scrum débutantes, il est [...]]]></description>
				<content:encoded><![CDATA[
<p>Un ami m&rsquo;a dit un jour que le Scrum Master était, au-delà du gardien de la méthode, le garant de la vélocité de l&rsquo;équipe. Depuis, je me suis approprié cette formule que je trouve excellente. Pour garantir la vélocité, il faut la connaître et qu&rsquo;elle soit fiable. Bien souvent, pour des équipes Scrum débutantes, il est possible d&rsquo;être confronté à une vélocité qui fait le yoyo d&rsquo;un sprint à l&rsquo;autre. Ou encore, récemment, je me suis trouvé dans cette situation : le Scrum Master et le Product Owner d&rsquo;une équipe pensaient qu&rsquo;ils ne connaissaient pas la vélocité de leur équipe. Etonnant non ? Et pourtant, dans quelques cas la vélocité a du mal à émerger. Je vous propose quelques bons réflexes à avoir pour stabiliser la vélocité de votre équipe et l&rsquo;accompagner sur le chemin du rythme soutenable.</p>
<h3 id="Help,myvelocityislikearollercoaster-Casd&#39;exception:lavélocitéduSprint1">Cas d&rsquo;exception : la vélocité du Sprint 1</h3>
<p>1 produit (ou projet), 1 équipe, 1 vélocité. Cette porte ouverte enfoncée dans les règles de l&rsquo;art, comment faire pour déterminer la vélocité du premier sprint ? Le cas idéal est d&rsquo;obtenir l&rsquo;engagement de l&rsquo;équipe. Il consiste à demander sur quel ensemble de User Stories l&rsquo;équipe s&rsquo;engage à l&rsquo;issue du sprint, un peu comme un pari. C&rsquo;est souvent difficile, surtout avec une équipe en construction ou composée de juniors. Dans ce cas de figure, il arrive assez souvent que l&rsquo;équipe retourne la question au Scrum Master : Mais quelle est notre capacité ?</p>
<p>Luttez contre la tentation d&rsquo;une espèce de règle de trois &quot;Poids du sprint / coût en Jours Homme / cours du point de complexité&quot;. Si vous vous posez la question du &quot;Pourquoi&quot;, direction ce <a href="http://blog.xebia.fr/2012/12/10/scrum-master-academy-allez-plus-loin" rel="nofollow">billet</a>.</p>
<p>Au delà de l&rsquo;engagement de l&rsquo;équipe, vous pouvez proposer à l&rsquo;équipe un périmètre à fournir en &lsquo;best effort&rsquo;. Là, cela peut être le client ou le sponsor qui sera difficile à convaincre. Il peut en effet considérer l&rsquo;approche comme trop permissive ou pas assez engageante. A vous de faire au mieux avec les moyens du bord&#8230;</p>
<p>Une autre approche se pratique également : l&rsquo;équipe a un backlog produit <em>priorisé</em>, et les stories en haut de la pile satisfont la Definition of Ready. il suffit dès lors de piocher les stories une par une, tant que l&rsquo;équipe est capable de les terminer. Ainsi, à la fin de ce premier sprint la vélocité émerge naturellement : c&rsquo;est la somme des complexités des US livrées.</p>
<h3 id="Help,myvelocityislikearollercoaster-Lavélocitédesautressprints">La vélocité des autres sprints</h3>
<p>Comment aidons-nous nos amis Scrum Master et Product Owner dont je vous parlais un peu plus haut ? En fait, c&rsquo;est assez facile. Une vélocité, ils en avaient une, ils ne la voyaient simplement pas. Quelques sprints s&rsquo;étaient déroulés (4 de mémoire), et effectivement, les vélocités constatées avaient l&rsquo;évolution d&rsquo;un chariot de montagnes russes. Voici mes quelques conseils pour faire émerger simplement la vélocité d&rsquo;une équipe.</p>
<h4 id="Help,myvelocityislikearollercoaster-1.Surtout,netouchezpasauxestimations">1. Surtout, ne touchez pas aux estimations</h4>
<p>Selon le Scrum Master, le coupable était tout trouvé : &quot;<em>Les estimations ne sont pas fiables</em>&quot;. STOP, alerte bouc émissaire. Les estimations ont bon dos, ce ne sont que des estimations. Les accabler cache souvent (toujours ?) un problème bien plus profond. Vous avez un backlog priorisé et estimé ? Surtout, ne touchez à rien. Dans le cas qui nous intéresse, si nous avions touché aux estimations, cela signifiait que nous éliminions l&rsquo;historique de vélocité. Et donc, que nous nous éloignions encore un peu plus du but à atteindre.</p>
<h4 id="Help,myvelocityislikearollercoaster-2.Faitesunemoyennedesvélocitésconstatées">2. Faites une moyenne des vélocités constatées</h4>
<p>Du très classique. Là, nous avions les vélocités A, B, C, D : il suffit d&rsquo;en faire la moyenne E pour poser la vélocité du Sprint 5. OK, c&rsquo;est un peu dirigiste, mais parfois l&rsquo;auto-organisation montre ses limites. Ensuite, une fois la situation rétablie, il sera toujours temps de ne se fier qu&rsquo;à la moyenne des 3 dernières, ou autre, suivant votre préférence.</p>
<h4 id="Help,myvelocityislikearollercoaster-3.PosezclairementlaDéfinitiondeFini">3. Posez clairement la Définition de Fini</h4>
<p>La définition de &quot;fini&quot; (Definition of Done pour les anglophiles) n&rsquo;est parfois pas clairement établie. Le dommage collatéral est limpide : non définie ou mal définie, comment savons-nous qu&rsquo;une US est effectivement terminée ? Si vous ne l&rsquo;avez pas déjà fait, prenez 20 minutes avec l&rsquo;équipe pour dresser la (ou une première …) liste des quelques critères de votre DoD. Vous en sentirez rapidement le retour sur investissement.</p>
<h4 id="Help,myvelocityislikearollercoaster-4.Vérifiezquevosstoriesnesontpastropgrosses">4. Vérifiez que vos stories ne sont pas trop grosses</h4>
<p>Là encore, retour aux fondamentaux : vos stories sont-elles <a href="http://en.wikipedia.org/wiki/INVEST_(mnemonic)" rel="nofollow">INVEST</a> ? Et en particulier, sont-elles &lsquo;S&rsquo; (Small) ? Manipuler des grosses stories est porteur d&rsquo;un risque assez évident. Vous vous exposez au risque plus fort de ne pas les finir pendant le sprint. Et en conséquence, une grosse story, à la complexité importante, pèse sur la vélocité. Si vous ne la finissez pas, c&rsquo;est autant de points de complexité qui ne sont pas pris en compte dans la vélocité, mais surtout c&rsquo;est une US qui apporte de la valeur métier qui n&rsquo;est pas livrée !</p>
<h4 id="Help,myvelocityislikearollercoaster-5. Enfindesprint,limitezl&#39;en-cours">5. En fin de sprint, limitez l&rsquo;en-cours</h4>
<p>C&rsquo;est un bon réflexe à aller piocher chez Kanban. La limite de l&rsquo;en-cours est un pilier des méthodes agiles. Scrum limite l&rsquo;en-cours par la timebox qu&rsquo;est le sprint. Du côté du Kanban, nous limitons l&rsquo;en-cours à chaque étape du processus de fabrication du logiciel. Si en fin de sprint vous avez beaucoup de Stories en-cours, il ne faut pas hésiter à faire des choix forts : protéger la terminaison des stories de plus grande valeur, même au détriment d&rsquo;autres. C&rsquo;est à ce prix que la vélocité est la mieux préservée.</p>
<p>Voilà un petit lot de bonnes pratiques et réflexes pour faire émerger ou améliorer votre vélocité. Cette liste n&rsquo;est pas absolue et définitive, il ne tient qu&rsquo;à vous de la compléter / la critiquer !</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/14/help-my-velocity-is-like-a-roller-coaster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DroidCon Paris les 17 &amp; 18 juin 2013</title>
		<link>http://blog.xebia.fr/2013/06/14/droidcon-paris-les-17-18-juin-2013/</link>
		<comments>http://blog.xebia.fr/2013/06/14/droidcon-paris-les-17-18-juin-2013/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 07:44:00 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14550</guid>
		<description><![CDATA[DroidCon, la conférence exclusivement réservée à Android, prendra place cette année à Paris les 17 et 18 juin 2013. Après une Google I/O 2013 marquée par de nombreuses nouveautés, la DroidCon devrait nourrir la communauté Android de discussions et de présentations passionnantes. Au programme : performance, qualité et industrialisation des développements, marketing et monétisation de [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/droidcon.png" target="_blank"><img style="float: right; margin: 0 0 10px 10px;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/06/droidcon-300x290.png" width="300" /></a></p>
<p><a href="http://fr.droidcon.com/2013/" rel="nofollow">DroidCon</a>, la conférence exclusivement réservée à Android, prendra place cette année à Paris les 17 et 18 juin 2013.</p>
<p>Après une <a href="http://blog.xebia.fr/2013/05/14/google-io-j-1/" rel="nofollow">Google I/O 2013</a> marquée par <a href="http://blog.xebia.fr/2013/05/30/whats-new-in-android/" rel="nofollow">de nombreuses nouveautés</a>, la DroidCon devrait nourrir la communauté Android de discussions et de présentations passionnantes.</p>
<p>Au programme : performance, qualité et industrialisation des développements, marketing et monétisation de ses applications ou encore usages divers et variés d&rsquo;Android. Par ailleurs, le lundi après-midi sera entièrement réservé à un Barcamp géant, ce qui devrait permettre l&rsquo;émergence de sujets encore plus nombreux !</p>
<p>Nous y serons pour vous dire si 2013 est bien l&rsquo;année de la révolution pour Android&#8230;</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/14/droidcon-paris-les-17-18-juin-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop Continuous Delivery le 9 juillet</title>
		<link>http://blog.xebia.fr/2013/06/13/workshop-continuous-delivery-le-9-juillet/</link>
		<comments>http://blog.xebia.fr/2013/06/13/workshop-continuous-delivery-le-9-juillet/#comments</comments>
		<pubDate>Thu, 13 Jun 2013 08:21:00 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[DeployIt]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Jenkins]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14535</guid>
		<description><![CDATA[Le déploiement automatique des applications est l&#8217;un des piliers essentiels du &#34;Continuous Delivery&#34;.  Deployit est une solution transverse qui offre à l&#8217;ensemble des acteurs (Dev &#38; Ops) une solution unifiée pour déployer et configurer leurs applications sur l&#8217;ensemble de leurs environnements. Dans ce workshop de 3 heures, nous verrons comment coupler Deployit à un moteur d&#8217;intégration continue [...]]]></description>
				<content:encoded><![CDATA[
<p>Le déploiement automatique des applications est l&rsquo;un des piliers essentiels du &quot;Continuous Delivery&quot;. </p>
<p>Deployit est une solution transverse qui offre à l&rsquo;ensemble des acteurs (Dev &amp; Ops) une solution unifiée pour déployer et configurer leurs applications sur l&rsquo;ensemble de leurs environnements.</p>
<p>Dans ce workshop de 3 heures, nous verrons comment coupler Deployit à un moteur d&rsquo;intégration continue (Jenkins) afin d&rsquo;inclure l&rsquo;activité &quot;déploiement et configuration&quot; des applications dans différents environnements.</p>
<h4 id="WorkshopContinuousDeliveryle9juillet-Agenda">Agenda</h4>
<ul>
<li>Présentation de l&rsquo;environnement de Workshop,</li>
<li>Définition d&rsquo;un job de build,</li>
<li>Définition d&rsquo;un job de packaging,</li>
<li>Définition d&rsquo;un job de déploiement,</li>
<li>Configuration d&rsquo;un pipeline,</li>
<li>Gestion de la configuration,</li>
<li>Promotion d&rsquo;une application dans un autre environnement.</li>
</ul>
<h4 id="WorkshopContinuousDeliveryle9juillet-Pré-requis">Pré-requis<br /></h4>
<p>    Chaque participant devra :</p>
<ul>
<li>se munir d&rsquo;un ordinateur et avoir installé au préalable: VirtualBox et un client SSH (ex putty),</li>
<li>avoir une connaissance de Maven et Jenkins.</li>
</ul>
<p>Ce workshop est gratuit, inscription sur <a href="http://workshopcontinuousdelivery.eventbrite.fr/" rel="nofollow">eventbrite</a> obligatoire.</p>
<h4 id="WorkshopContinuousDeliveryle9juillet- Lieu"><strong>Lieu</strong></h4>
<p>156 boulevard Haussmann<br />
75008 Paris<br />
Batiment A, 7ième étage</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/13/workshop-continuous-delivery-le-9-juillet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kanban &#8211; Faire des promesses que vous pouvez tenir</title>
		<link>http://blog.xebia.fr/2013/06/12/kanban-faire-des-promesses-que-vous-pouvez-tenir/</link>
		<comments>http://blog.xebia.fr/2013/06/12/kanban-faire-des-promesses-que-vous-pouvez-tenir/#comments</comments>
		<pubDate>Wed, 12 Jun 2013 06:39:14 +0000</pubDate>
		<dc:creator>Yannick Quenec'hdu</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Kanban]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14527</guid>
		<description><![CDATA[Être toujours plus rapide, innover et mettre rapidement votre produit sur le marché, avoir un retour à court terme sur son investissement &#8211; C&#8217;est le leitmotiv des startups et des entreprises du Web. C&#8217;est ici que le Lean Startup et le déploiement continu sont efficaces. C&#8217;est aussi la raison de l&#8217;adaptation rapide et majeure des pratiques agiles. Nous pouvons concevoir [...]]]></description>
				<content:encoded><![CDATA[
<p>Être toujours plus rapide, innover et mettre rapidement votre produit sur le marché, avoir un retour à court terme sur son investissement &#8211; C&rsquo;est le leitmotiv des startups et des entreprises du Web. C&rsquo;est ici que le Lean Startup et le déploiement continu sont efficaces. C&rsquo;est aussi la raison de l&rsquo;adaptation rapide et majeure des pratiques agiles. Nous pouvons concevoir au plus vite et de manière itérative en prenant en compte au fil de l&rsquo;eau de la création du produit le retour des clients. </p>
<p>Mais est-ce que cela est reproductible chez toutes les entreprises ? Est-ce que la vitesse de mise sur le marché (que l&rsquo;on nomme aussi le TTM) est le facteur le plus important pour les entreprises ? Il faut aussi maintenir cette vitesse dans le temps, maintenir les coûts et fournir un produit de qualité, mais il y a aussi d&rsquo;autres facteurs tels que la sécurité, la maintenabilité. Il faut les intégrer à des systèmes existants de l&rsquo;entreprise et parfois conserver la compatibilité avec les anciennes versions qui sont chez vos clients, etc. </p>
<p>En 2011, je mettais pour la première fois en oeuvre des indicateurs de prédictibilité avec mon acolyte Etienne. Au-delà du premier engouement pour ses indicateurs, j&rsquo;ai remarqué une nouvelle manière de faire de l&rsquo;Agile. Nous fournissions des indicateurs précis et en temps réel aux équipes. Nous pouvions dépasser cette limite réductrice de l&rsquo;indicateur vélocité. La collecte d&rsquo;information obtenue nous permettait de mieux comprendre ce qu&rsquo;il se passait dans le projet et la direction que nous allions prendre. Nous pouvions mesurer notre futur et l&rsquo;améliorer avec ces indicateurs factuels. </p>
<p>Depuis, nous avons mis en place les indicateurs Kanban et les indicateurs de prédictibilité sur moult projets. Pour une grande entreprise, le plus important n&rsquo;était pas la vitesse ou la productivité &#8211; même si tout le monde souhaite réduire les coûts et éliminer les gaspillages. Ce n&rsquo;est pas non plus la flexibilité en essayant de prendre en compte les changements au fil de l&rsquo;eau du projet. Ce qui importe le plus pour une entreprise, c&rsquo;est de respecter les exigences de leurs clients et/ou sponsors de leurs produits. De fournir le logiciel lorsque l&rsquo;entreprise en a besoin, d&rsquo;être un fournisseur fiable et de confiance. En un mot, tenir ses promesses. </p>
<h3>Agilité et Prédictibilité </h3>
<p>Beaucoup de grandes entreprises adoptent les méthodes agiles parce qu&rsquo;elles ont entendu et vu que ces approches fonctionnent. Mais ils ne les utilisent pas de la même manière, parce qu&rsquo;ils ne les utilisent pas pour les mêmes raisons que les petites entreprises.</p>
<p>Les grandes entreprises adaptent les pratiques agiles et fabriquent des hybrides, un peu de cascade en combinant des estimations agiles et de la planification classique, et injectent cela dans les pratiques de l&rsquo;entreprise. Nous le vivons chaque jour quand une grande entreprise vous demande de venir les accompagner dans leur transition Agile. </p>
<p>Pourquoi ces hybrides de pratiques ? Parce que les méthodes classiques proposent des indicateurs de pseudo-prévisibilité qui, même si nous savons qu&rsquo;ils sont erronés, ont le mérite d&rsquo;exister pour l&rsquo;entreprise et de rassurer. </p>
<p>Comment combiner les besoins de ces grandes entreprises, qui fonctionnent pour la plupart sur des approches classiques, avec l&rsquo;apport des pratiques agiles ?</p>
<p>L&rsquo;essentiel est de comprendre ce dont l&rsquo;entreprise a besoin. Il ne s&rsquo;agit pas de réaliser des changements au fil de l&rsquo;eau en suivant un plan. Il s&rsquo;agit d&rsquo;avoir un plan qui inclut la capacité à réagir aux changements.</p>
<p>Il ne faut pas abandonner nos principes de répondre aux changements et redéfinir les priorités. Mais ce n&rsquo;est pas notre premier objectif. Il faut répondre à leurs premiers besoins, en proposant des indicateurs qui permettent de donner une vision réaliste de la vie d&rsquo;un projet en temps réel.</p>
<p>Nous faisons cela en gardant l&rsquo;équipe concentrée sur la fabrication du produit et en essayant de chasser tout le reste. Les pratiques Kanban et leurs indicateurs permettent de répondre aux besoins des entreprises en proposant une palette d&rsquo;indicateurs, dont la prédictibilité peut répondre à leur premier besoin.</p>
<p>Les équipes peuvent utiliser les indicateurs Kanban pour gérer les priorités et contrôler le flux d&rsquo;activité de façon dynamique, équilibrer l’activité entre la création de valeur et la réduction de dette technique, mieux respecter leurs engagements à date fixe, limiter le travail en cours pour réduire les délais et améliorer le temps de réalisation, contrôler la variabilité de leurs User Stories. Vous pouvez également utiliser les données du <a href="http://www.morisseauconsulting.com/2013/06/04/quid-de-la-velocite-en-kanban/" rel="nofollow">débit</a> et le diagramme de flux cumulé, afin de vous projeter vers l&rsquo;avant et prévoir ce qui va se passer.</p>
<p>Ce qui est intéressant, c&rsquo;est de voir comment les mêmes idées et pratiques sont utilisées de manières très différentes par des entreprises très différentes &#8211; petites ou grandes &#8211; pour atteindre ce succès, qu&rsquo;elles soit axées sur des itérations courtes et de réponses aux changements rapides ou axées sur la gestion de grands programmes avec des indicateurs de prédictibilité.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/12/kanban-faire-des-promesses-que-vous-pouvez-tenir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>27 Juin 2013 : Big Data Day chez Xebia</title>
		<link>http://blog.xebia.fr/2013/06/11/27-juin-2013-big-data-day-chez-xebia/</link>
		<comments>http://blog.xebia.fr/2013/06/11/27-juin-2013-big-data-day-chez-xebia/#comments</comments>
		<pubDate>Tue, 11 Jun 2013 12:35:00 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[10gen]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[Cloudera]]></category>
		<category><![CDATA[CouchBase]]></category>
		<category><![CDATA[Datastax]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Neo4j]]></category>
		<category><![CDATA[NoSQL / Big Data]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14463</guid>
		<description><![CDATA[Inscriptions Merci de vous inscrire à chaque partie de la journée à laquelle vous souhaitez participer : 9h30-12h00 : Les essentiels du Big Data. Inscriptions sur invitation uniquement. 13h00-18h20 : Le Big Data en pratique. Inscriptions ici. 18h30-21h : Soirée de clôture. Inscriptions ici. Agenda Salles Map Reduce 09:00 &#8211; 09:30 Petit déjeuner 09:30 &#8211; 10:30 [...]]]></description>
				<content:encoded><![CDATA[
<style><!--
table {border: solid 1px #6A205F; border-collapse: collapse; font-size: small;} 	tr, th, td {border: solid 1px #6A205F; padding: 5px;} 	th {border: solid 1px #6A205F; background: #AD98B5; color:white;} 	tr {border-top: solid 1px #6A205F; border-bottom: solid 1px #6A205F;} 	td {text-align: center;} 	td.cloud-conference {background-color:#F09021;} 	td.iaas-conference {background-color:#709ACD;} 	td.paas-conference {background-color:#80C680;} 	td.misc-conference {background-color:#9E8867;} 	td.break {background-color:#F0EDF1;} 	tr.fifteen-mins {height: 15px;} 	tr.thirty-mins {height: 30px;} 	tr.sixty-mins {height: 60px;} 	tr.seventyfive-mins {height: 75px;} 	tr.ninety-mins {height: 90px;} 	tr.onhundredfifty-mins {height: 150px;}
--></style>
<p><img style="float: right; margin: 0 0 10px 10px;" alt="bigdata-mascotte" src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture-d’écran-2013-05-15-à-09.56.00-150x150.png" width="160" height="160" /></p>
<h3 id="id-27Juin2013:BigDataDaychezXebia-Inscriptions">Inscriptions</h3>
<p><strong>Merci de vous inscrire à chaque partie de la journée à laquelle vous souhaitez participer</strong> :</p>
<ul>
<li>9h30-12h00 : Les essentiels du Big Data. <strong><span style="color: #ff0000;">Inscriptions sur invitation uniquement.</span></strong></li>
<li>13h00-18h20 : Le Big Data en pratique. <span style="color: #ff0000;"><strong><a href="http://bigdatadayparis-am.eventbrite.fr/" rel="nofollow"><span style="color: #ff0000;">Inscriptions ici</span></a>.</strong></span></li>
<li>18h30-21h : Soirée de clôture. <span style="color: #ff0000;"><strong><a href="http://bigdatadayparis-soiree.eventbrite.fr/" rel="nofollow"><span style="color: #ff0000;">Inscriptions ici</span></a>.</strong></span></li>
</ul>
<h3 id="id-27Juin2013:BigDataDaychezXebia-Agenda">Agenda</h3>
<p><center></p>
<table border="1">
<tbody>
<tr class="sixty-mins">
<th width="90px">Salles</th>
<th align="center" width="210px">Map</th>
<th align="center" width="210px">Reduce</th>
</tr>
<tr class="thirty-mins">
<th>09:00 &#8211; 09:30</th>
<td class="break" colspan="2">Petit déjeuner</td>
</tr>
<tr class="sixty-mins">
<th>09:30 &#8211; 10:30</th>
<td class="iaas-conference" colspan="2"><strong>L&rsquo;avenir du Big Data pour votre entreprise vu par Amazon</strong><br />
<a href="#BorisLecoeur" rel="nofollow">Boris Lecoeur</a> <em>(Amazon)</em></td>
</tr>
<tr class="thirty-mins">
<th>10:30 &#8211; 11:00</th>
<td class="break" colspan="2">Petit déjeuner</td>
</tr>
<tr class="sixty-mins">
<th>11:00 &#8211; 12:00</th>
<td class="iaas-conference" colspan="2"><strong>Les coulisses du Big Data chez Bouygues Télécom</strong><br />
<a href="#GuillaumePinot">Guillaume Pinot</a> <em>(Bouygues Télécom)</em></td>
</tr>
<tr class="sixty-mins">
<th>12:00 &#8211; 13:00</th>
<td class="break" colspan="2">Déjeuner</td>
</tr>
<tr class="sixty-mins">
<th>13:00 &#8211; 14:00</th>
<td class="iaas-conference"><img title="Présentation en anglais" alt="" src="http://blog.xebia.fr/wp-content/uploads/2012/05/us-flag-icon-16.png" width="16" height="16" /><strong>Ask bigger questions with Cloudera and Apache Hadoop</strong><br />
<a href="#GrahamGear">Graham Gear</a> <em>(Cloudera)</em></td>
<td class="paas-conference"><img title="Présentation en anglais" alt="" src="http://blog.xebia.fr/wp-content/uploads/2012/05/us-flag-icon-16.png" width="16" height="16" /><strong>Analytics and Aggregation on MongoDB</strong><br />
<a href="#NorbertoLeite">Norberto Leite</a> <em>(10gen)</em></td>
</tr>
<tr class="sixty-mins">
<th>14:05 &#8211; 15:05</th>
<td class="iaas-conference"><strong>Atelier Hadoop : Explorer le comportement de vos utilisateurs</strong><br />
<a href="#BertrandDechoux">Bertrand Dechoux</a> <em>(Xebia)</em></td>
<td class="paas-conference"><strong>Géolocalisation avec MongoDB</strong><br />
<a href="#CharlesBlonde">Charles Blonde</a> <em>(Xebia)</em></td>
</tr>
<tr class="sixty-mins">
<th>15:10 &#8211; 16:10</th>
<td class="iaas-conference"><strong>Neo4j: Graphs are everywhere</strong><br />
<a href="#CédricFauvet">Cédric Fauvet</a> <em>(NeoTechnology)</em></td>
<td class="paas-conference"><img title="Présentation en anglais" alt="" src="http://blog.xebia.fr/wp-content/uploads/2012/05/us-flag-icon-16.png" width="16" height="16" /><strong>The Matrix and DataStax</strong><br />
<a href="#HayatoShimizu">Hayato Shimizu</a> <em>(DataStax)</em></td>
</tr>
<tr class="sixty-mins">
<th>16:15 &#8211; 17:15</th>
<td class="iaas-conference"><strong>Atelier Neo4j : The power of the graph</strong><br />
<a href="#MathieuBreton">Mathieu Breton</a> <em>(Xebia)</em></td>
<td class="paas-conference"><strong>Cassandra Nextgen avec CQL3 et Datastax driver</strong><br />
<a href="#GuillaumeBalaine">Guillaume Balaine</a> <em>(Xebia)</em> et <a href="#ClémentLardeur">Clément Lardeur</a> <em>(Xebia)</em></td>
</tr>
<tr class="sixty-mins">
<th>17:20 &#8211; 18:20</th>
<td class="iaas-conference"><strong>ntroduction au NoSQL avec Couchbase</strong><br />
<a href="#TugdualGrall">Tugdual Grall</a> <em>(Couchbase)</em></td>
<td class="paas-conference"><strong>Atelier Amazon : Analyses haute performance à coûts optimisés</strong><br />
<a href="#StephanHadinger">Stephan Hadinger</a> <em>(Amazon)</em></td>
</tr>
<tr class="onhundredfifty-mins">
<th>18:30 &#8211; 21:00</th>
<td class="break" colspan="2">Buffet de clôture</td>
</tr>
</tbody>
</table>
<p></center></p>
<h3>Légende</h3>
<table border="1">
<tbody>
<tr>
<td class="iaas-conference">Conférence Big Data</td>
</tr>
<tr>
<td class="paas-conference">Conférence NoSQL</td>
</tr>
<tr>
<td class="break">Pause</td>
</tr>
</tbody>
</table>
<h3 id="id-27Juin2013:BigDataDaychezXebia-9h-12h:LesessentielsduBigData">9h-12h: Les essentiels du Big Data</h3>
<h4 id="id-27Juin2013:BigDataDaychezXebia-L'avenirduBigDatapourvotreentreprisevuparAmazon">L&rsquo;avenir du Big Data pour votre entreprise vu par Amazon</h4>
<p>Depuis les réseaux sociaux à vos sites web, le volume des données capturées ne cesse d&rsquo;augmenter. Amazon Web Services propose des services stockage, de base de données et de traitement Hadoop qui vous permettent de transformer ces données en informations pertinentes pour votre entreprise. Découvrez comment les clients d&rsquo;Amazon Web Services innovent en utilisant les services élastiques de Big Data sur AWS.</p>
<p><em>Intervenant : </em>Boris Lecoeur</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-LescoulissesduBigDatachezBouyguesTélécom">Les coulisses du Big Data chez Bouygues Télécom</h4>
<p>Guillaume Pinot, responsable étude et architecture self care web chez Bouygues Télécom viendra vous présenter son retour d&rsquo;expérience sur la mise en place d&rsquo;une solution Big Data. Il sera accompagné de Julien Buret, consultant chez Xebia en mission chez Bouygues Télécom depuis un an et demi.</p>
<p><em>Intervenants</em> : Guillaume Pinot, Julien Buret</p>
<h3 id="id-27Juin2013:BigDataDaychezXebia-13h-18h20:LeBigDataenpratique">13h-18h20 : Le Big Data en pratique</h3>
<h4 id="id-27Juin2013:BigDataDaychezXebia-AskbiggerquestionswithClouderaandApacheHadoop">Ask bigger questions with Cloudera and Apache Hadoop</h4>
<p>Big Data is often defined as a set of problems burdening a business : In this session, see how Cloudera, with the help of Hadoop and related technologies, is able to address the opportunity the growing data volumes offers a business. The session will include an overview of the challenges Big Data poses to existing data management infrastructure and discuss how the Hadoop ecosystem solves these problems, including a technical breakdown of the major components of a Big Data architecture. Concluding the discussion will be some Cloudera case studies showing how and why Cloudera technology is being applied today.</p>
<p><em>Intervenant</em> : Graham Gear</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-AtelierHadoop:Explorerlecomportementdevosutilisateurs">Atelier Hadoop : Explorer le comportement de vos utilisateurs</h4>
<p>Les logs sont des mines d&rsquo;or, trop rarement exploitées à leur juste potentiel. Analyser votre visibilité sur le net, connaître l&rsquo;impact de vos campagnes marketing, découvrir les habitudes de vos utilisateurs ou encore l&rsquo;influence de la latence de votre service sur leur comportement, tout cela n&rsquo;est que le début. Ensemble nous allons voir comment Hadoop vous donne les moyens pour répondre à ces questions.</p>
<p><em>Intervenant</em> : Bertrand Dechoux</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-DataProcessingwithMongoDB">Data Processing with MongoDB</h4>
<p>Talk will cover using MongoDB aggregation framework, map reduce engine and integration with Hadoop<em>.</em></p>
<p><em>Intervenant</em> : Norberto Leite</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-AtelierMongoDB">Atelier MongoDB</h4>
<p>Geolocalisation avec MongoDB : MongoDb propose un ensemble de fonctions permettant de facilement exploiter les données géographiques. Dans cet atelier, nous mettrons en pratique grâce à OpenStreetMap les différentes possibilités offertes par MongoDB.</p>
<p><em>Intervenant</em> : Charles Blonde</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-Neo4j:Graphsareeverywhere">Neo 4j: Graphs are everywhere</h4>
<p>From websites adding social capabilities to Telco’s providing personalized customer services to innovative bioinformatics research, organizations are adopting graph databases as the best way to model and query connected data. Neo Technology researchers have pioneered graph databases since 2000 and have been instrumental in bringing the power of the graph to numerous organizations worldwide, including <strong>25 Global 2000 customers, such as Cisco, HP, Accenture, Deutsche Telekom, and Telenor</strong>. Come learn about common use cases of Neo4j and hear how Neo4j is helping drive value for customers.</p>
<p><em>Intervenant</em> : Cédric Fauvet</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-AtelierNeo4j:Thepowerofthegraph">Atelier Neo4j: The power of the graph</h4>
<p>Vous pensez que le graphe c’est seulement pour les réseaux sociaux ? Je vais vous montrer que non !</p>
<p>Au travers d’un cas autour d’un site de e-commerce, nous allons étudier comment une base NoSQL orientée graphe telle que Neo4j va vous permettre d’exploiter au mieux les informations clients pour améliorer l’expérience utilisateur et potentiellement augmenter vos ventes.</p>
<p><em>Intervenant</em> : Mathieu Breton</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-TheMatrixandDataStax">The Matrix and DataStax</h4>
<p><em>Intervenant</em> : Hayato Shimizu</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-CassandraNextgenavecCQL3etDatastaxdriver">Cassandra Nextgen avec CQL3 et Datastax driver</h4>
<p>Recently, the general availability release of the Cassandra CQL driver came out. Using it, we are going to explore its new features through simple exercices : Bound statements, Query Builder, Atomic Batches, Async I/O, Node discovery, etc.</p>
<p><em>Intervenants</em> : Guillaume Balaine, Clément Lardeur</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-IntroductionauNoSQLavecCouchbase">Introduction au NoSQL avec Couchbase</h4>
<p>Cette présentation commencera par une courte introduction au NoSQL. Cette introduction expliquera les raisons pour lesquelles de plus en plus de projets utilisent ce type de solutions et les limitations des architectures classiques. Tugdual fera également le tour des différentes approches (Clé Valeur, Document, Colonnes, Graph) et solutions.</p>
<p>Une fois cette rapide introduction effectuée, vous verrez en détail la solution Couchbase Server 2.0. Couchbase est une base de donées NoSQL orientée Document développée en Open Source. Tugdual presentera en s&rsquo;appuyant sur des démonstrations</p>
<ul>
<li>le développement d&rsquo;applications Java (et/ou autres selon les gouts) sur du NoSQL en expliquant les bénéfices des solutions,</li>
<li>se basant sur des structures de données flexibles (Document JSON),</li>
<li>l&rsquo;utilisation de Map Reduce pour la création de requetes complexes,</li>
<li>la mise en place et l&rsquo;administration d&rsquo;un cluster, et les défis associés.</li>
</ul>
<p><em>Intervenant : </em>Tugdual Grall</p>
<h4 id="id-27Juin2013:BigDataDaychezXebia-AtelierAmazon:Analyseshauteperformanceàcoûtsmaîtrisés">Atelier Amazon : Analyses haute performance à coûts maîtrisés</h4>
<p>En savoir plus sur les outils, techniques et technologies pour travailler de manière productive avec des données à n&rsquo;importe quelle échelle. Vous découvrirez la gamme d&rsquo;outils d&rsquo;analyse des données disponible sur AWS et que vous pouvez utiliser pour collecter, stocker, analyser et partager vos données, pour des volumes allant du giga-octets au péta-octets (1024 tera-octets). Nous discuterons d’Amazon Elastic MapReduce, d’Hadoop, de données structurées et non structurées, et des types d&rsquo;instances Amazon EC2 qui permettent des analyses hautes performances à coûts optimisés.</p>
<p><em>Intervenant</em> : Stephan Hadinger</p>
<h3 id="id-27Juin2013:BigDataDaychezXebia-Intervenants">Intervenants</h3>
<div>
<table border="1" cellspacing="0" cellpadding="4">
<tbody>
<tr>
<td colspan="1"><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153454.png"><img class="alignleft size-full wp-image-14456" alt="image2013-6-10-153454.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153454.png" width="100" height="100" /></a></td>
<td style="text-align: left;" colspan="1">
<h6 id="BorisLecoeur">Boris Lecoeur</h6>
<p>Boris Lecoeur a une longue carrière dans l&rsquo;IT, spécialisé sur les solutions High Tech et permettant aux clients de tirer un maximum de bénéfices de la technologie. Dans son rôle de Partner Development Manager chez Amazon Web Services, Boris travaille avec les partenaires technologiques et services qui ont choisi AWS pour développer leurs offres, leurs business et leur services.</p>
<p>Parmi les partenaires technologiques, on compte des fournisseurs indépendants de logiciels (ISV), ainsi que des fournisseurs d&rsquo;outils de développement, de gestion et de sécurité et de solutions SaaS et PaaS. Parmi ces partenaires de services, on compte des intégrateurs de systèmes (IS), des cabinets de conseil, des revendeurs, des distributeurs à valeur ajoutée (VAR) et des infogéreurs .</td>
</tr>
<tr>
<td><img class="alignleft size-thumbnail wp-image-14462" alt="image2013-6-10-153155.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153155-150x150.png" width="100" height="100" /></td>
<td style="text-align: left;">
<h6 id="GuillaumePinot">Guillaume Pinot</h6>
<p>Responsable étude et architecture Self Care chez Bouygues Télécom.</td>
</tr>
<tr>
<td><img class="alignleft size-thumbnail wp-image-14455" alt="image2013-6-10-153734.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153734-150x150.png" width="100" height="100" /></td>
<td style="text-align: left;">
<h6 id="NorbertoLeite">Norberto Leite</h6>
<p>Senior Solution Architect at 10gen.</td>
</tr>
<tr>
<td></td>
<td style="text-align: left;">
<h6 id="GrahamGear">Graham Gear</h6>
<p>Graham Gear is a Systems Engineer with Cloudera and advises organisations across Europe on how to bring Hadoop to bear against their Big Data challenges and opportunities. As an engineer at heart, Graham regularly gets involved in helping to resolve and refine Hadoop development and operational concerns, while also helping to identify new or streamlined branches of analytics to help benefit the business as a whole.</p>
<p>With over 10 years of experience as a professional developer and consultant, Graham has worked on many large scale, data driven systems across many different industries. Having begun his career working at a defence research institution implementing sonar algorithms leveraging MPI on large Beowulf clusters, then spending time in the commercial world working on massively parallel web scale solutions, he feels he has found his new home with Hadoop and enjoys applying it to the Big Data uses cases faced by todays Enterprises. Graham is an Apache software committer.</td>
</tr>
<tr>
<td colspan="1"><img alt="" src="https://intranet.xebia.com/confluence/download/thumbnails/4522409/Bertrand+Dechoux+CV.jpg?version=2&amp;modificationDate=1364984088135" width="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="BertrandDechoux">Bertrand Dechoux</h6>
<p>Tombé jeune dans les data en étudiant l&rsquo;apprentissage automatique (Machine learning), Bertrand Dechoux est devenu passionné de leur problématiques associées : vitesse, volume et variété. Utilisant Hadoop depuis début 2010, il continue d&rsquo;intervenir sur cet écosystème aussi bien dans sa mise en place en tant que consultant Xebia que dans sa démocratisation en tant que formateur Xebia training.</td>
</tr>
<tr>
<td colspan="1"><img alt="" src="https://intranet.xebia.com/confluence/download/thumbnails/4522409/Charles.jpg?version=1&amp;modificationDate=1305645673646" width="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="CharlesBlonde">Charles Blonde</h6>
<p>Consultant Xebia.</td>
</tr>
<tr>
<td colspan="1"><img class="alignleft size-full wp-image-14457" alt="image2013-6-10-153835.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153835.png" width="100" height="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="CédricFauvet">Cédric Fauvet</h6>
<p>Business Development France at Neo Technology.</td>
</tr>
<tr>
<td colspan="1"><img class="alignleft size-full wp-image-14458" alt="image2013-6-10-153933.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-153933.png" width="100" height="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="HayatoShimizu">Hayato Shimizu</h6>
<p>Hayato is a technical solutions architect for DataStax EMEA division. Prior to joining DataStax in May this year, Hayato architected and delivered a massively scalable hybrid cloud infrastructure for an IPTV platform by the largest independent broadcaster in the UK using Cassandra. He also had contributed to successful technical deliveries of large scale software/infrastructure projects at other organisations, including BBC, HSBC, AOL, and Citrix.</td>
</tr>
<tr>
<td colspan="1"><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/me-zoom.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/06/me-zoom-96x96.jpg" width="100" /></a></td>
<td style="text-align: left;" colspan="1"><span style="color: #000000;"><br />
<h6 id="MathieuBreton">Mathieu Breton</h6>
<p> : /[mathieu] </span><span style="color: #000000;">bʀətɔ̃</span><span style="color: #000000;">/ (n.m.)</span></p>
<ol>
<li>Consultant Xebia, membre actif de la communauté Web à Paris.</li>
<li>Chevalier de l’ordre du mérite des Single Page Applications.</li>
<li>Evangéliste Dart, instructeur Neo4J, docteur ès Grails et contributeur Ember.JS.</li>
</ol>
</td>
</tr>
<tr>
<td colspan="1"><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/68a309d1d32fd23fa48f61198274573e.jpeg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/06/68a309d1d32fd23fa48f61198274573e-96x96.jpeg" width="100" /></a></td>
<td style="text-align: left;" colspan="1">
<h6 id="GuillaumeBalaine">Guillaume Balaine</h6>
<p style="text-align: left;">Guillaume is a polyglot developer passionate about the Web and the world of startups. He is an adept of best practices such as BDD and TDD that are now becoming standard in the industry. He is also a certified Cassandra Trainer and a Big Data afficionado in general.</p>
<p style="text-align: left;">For the past 8 month, he has been working on the strategic Orange project Libon, as an API engineer. You can follow him at <a href="http://igosuki.github.io" rel="nofollow">http://igosuki.github.io</a></p>
</td>
</tr>
<tr>
<td colspan="1"><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/photo.jpg" target="_blank"><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/06/photo-96x96.jpg" width="100" /></a></td>
<td style="text-align: left;" colspan="1">
<h6 id="ClémentLardeur">Clément Lardeur</h6>
<p><span lang="en">Clement Lardeur is a young Java/JEE and Web developper passionate about « Clean Code », TDD, Refactoring, and other best practices that make us modern developers. As a software engineer, he is particularly interested in technical challenges that offers Big Data and mainly by the Cassandra database for which he has hosted the last workshop in Xebia.</span></p>
<p><span lang="en">At the heart of strategic IT projects</span>, he currently works for SFR to completely overhaul their e-commerce parts. In the past, he also worked <span lang="en">for</span> the CNIL and the French Prime Minister to dematerialized their documents with an ECM solution. Clement is also involved in open source projects having contributed to the <a href="http://youtestit.org/" rel="nofollow">YouTestIt!</a> project that aims to improve quality thanks to acceptance tests. He has recently started a blog <a href="http://clardeur.blogspot.fr/" rel="nofollow">http://clardeur.blogspot.fr/</a> and you can follow him on twitter <a href="https://twitter.com/ClemLardeur" rel="nofollow">@ClemLardeur</a>.</td>
</tr>
<tr>
<td colspan="1"><img class="alignleft size-full wp-image-14453" alt="image2013-6-10-154655.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-154655.png" width="100" height="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="StephanHadinger">Stephan Hadinger</h6>
<p>Stephan Hadinger a une longue carrière dans l&rsquo;IT, spécialisé dans les domaines Infrastructure, B2C et B2B afin de permettre aux entreprises de tirer un maximum de bénéfices de leurs investissements technologiques. Dans son rôle d&rsquo;Architecte Solutions avec Amazon Web Services, Stephan travaille avec des entreprises françaises de toutes tailles pour les aider à migrer vers la Cloud et utiliser leur IT pour mieux servir leurs clients.</td>
</tr>
<tr>
<td colspan="1"><img alt="image2013-6-10-173519.png" src="http://blog.xebia.fr/wp-content/uploads/2013/06/image2013-6-10-173519-150x150.png" width="100" height="100" /></td>
<td style="text-align: left;" colspan="1">
<h6 id="TugdualGrall">Tugdual Grall</h6>
<p>Tugdual « Tug » Grall,  est Technical Evangelist chez Couchbase, et un développer passionné. Il travaille actuellement avec les communautés de developpers en Europe pour faciliter l’adoption du NoSQL. Tugdual contribue aux SDKs Java et NodeJS de Couchbase.</p>
<p>Avant de rejoindre Couchbase, Tug était le CTO d’eXo la société qui a créé l’outil de développement sur le cloud <a href="http://www.codenvy.com/" rel="nofollow">www.codenvy.com</a> et la pateforme sociale eXo Platform. Auparavant Tugdual a travaillé comme product manager et développeur dans l’équipe Oracle Fusion Middleware sur la plateforme Java EE.</p>
<p>Tug a participé a de nombreuses conférences DevoxxFR, MixIT, 33degree, FOSDEM, Google I/O, JavaOne et de nombreux meetups/groupes utilisateurs. Tugdual est co-fondateur du NantesJUG qui organise depuis 2008 des réunions mensuelles autour l’écosystème Java. Lorsqu’il a le temps, il tient un blog <a href="http://tugdualgrall.blogspot.com/" rel="nofollow">http://tugdualgrall.blogspot.com</a> et une application déployée sur Google App Engine  <a href="http://www.resultri.com/" rel="nofollow">http://www.resultri.com</a>. Vous pouvez le suivre sur Twitter.</td>
</tr>
</tbody>
</table>
</div>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/11/27-juin-2013-big-data-day-chez-xebia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/</link>
		<comments>http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#comments</comments>
		<pubDate>Tue, 11 Jun 2013 07:43:20 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Impact Mapping]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Kata Toyota]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Rétrospective]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14432</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Le Kata Toyota une alternative à la rétrospective (By Yannick Quenec&#8217;hdu) Interview Gojko Adzic (By Yannick Grenzinger) Mobilité Google déconstruit Android petit à petit (By Gautier Mechling) objc.io #1 &#8211; Lighter View Controllers (By Simone Civetta) Web Liste de liens autour d&#8217;AngularJS (By [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /><br />
<em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-LeKataToyotaunealternative%C3%A0lar%C3%A9trospective">Le Kata Toyota une alternative à la rétrospective</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/yquenechdu" target="_blank">Yannick Quenec&rsquo;hdu</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-InterviewGojkoAdzic">Interview Gojko Adzic</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Mobilit%C3%A9">Mobilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Googled%C3%A9construitAndroidpetit%C3%A0petit">Google déconstruit Android petit à petit</a> <span class="c2w-toc-author">(By <a href="http://twitter.com/@Nilhcem" target="_blank">Gautier Mechling</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-objc.io%231-LighterViewControllers">objc.io #1 &#8211; Lighter View Controllers</a> <span class="c2w-toc-author">(By <a href="http://twitter.com/viteinfinite" target="_blank">Simone Civetta</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Listedeliensautourd%27AngularJS">Liste de liens autour d&rsquo;AngularJS</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li><strong><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></strong></li>
<li class="c2w-toc-item c2w-toc-level3">
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/#RevuedePresseXebia-%C3%8Atrenotifi%C3%A9desmises%C3%A0jourdesesartefactsmaven">Être notifié des mises à jour de ses artefacts maven</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-LeKataToyotaunealternativeàlarétrospective">Le Kata Toyota une alternative à la rétrospective</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/yquenechdu' target='_blank'><img title='http://blog.xebia.fr/author/yquenechdu' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/yquenechdu' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40openagileorg' target='_blank'><img title='http://twitter.com/%40openagileorg' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40openagileorg' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/yquenechdu' target='_blank'>Yannick Quenec'hdu</a></span></div>
<p><a href="http://hakanforss.wordpress.com/2012/04/25/agile-lego-toyota-kata-an-alternative-to-retrospectives/">Cet article</a> qui date déjà d&rsquo;un an a été rédigé d&rsquo;une manière très ludique pour présenter le principe du Kata Toyota comme une alternative aux rétrospectives.</p>
<h4 id="RevuedePresseXebia-InterviewGojkoAdzic">Interview Gojko Adzic</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40ygrenzinger' target='_blank'><img title='http://twitter.com/%40ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Dans son dernier livre, Gojko Adzic, déjà auteur de &laquo;&nbsp;Spécification par l&rsquo;exemple&nbsp;&raquo; nous permet de découvrir l&rsquo;<a href="http://fr.impactmapping.org/">Impact Mapping</a>, &laquo;&nbsp;une technique de planification stratégique qui permet aux entreprises de ne pas s&rsquo;égarer durant les phases de développement logiciel ou de livraison de projets, en identifiant clairement les hypothèses, en aidant les équipes à aligner leurs activités avec les objectifs métiers principaux, et en facilitant les décisions stratégiques.&nbsp;&raquo;</p>
<p>Dans Cette <a href="http://www.infoq.com/interviews/interview-gojko-adzic-qcon-2013">interview chez InfoQ</a> Gojko Adzic revient sur le contenu de son livre, les motivations et les raisons comme le besoin de challenger les hypothèses, de tout mesurer ou encore de garder du budget pour apprendre et expérimenter.</p>
<h3 id="RevuedePresseXebia-Mobilité">Mobilité</h3>
<h4 id="RevuedePresseXebia-GoogledéconstruitAndroidpetitàpetit">Google déconstruit Android petit à petit</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://twitter.com/%40Nilhcem' target='_blank'><img title='http://twitter.com/%40Nilhcem' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40Nilhcem' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://twitter.com/%40Nilhcem' target='_blank'>Gautier Mechling</a></span></div>
<p>Ces derniers temps, nous avons pu voir certaines fonctionnalités clés d&rsquo;Android se séparer du système d&rsquo;exploitation pour être disponibles à travers le Google Play Store, en tant que services ou applications autonomes.<br />
Cette semaine, c&rsquo;est au tour du <a href="https://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin">clavier par défaut d&rsquo;Android</a> d&rsquo;être disponible en téléchargement sur le store.<br />
Google déconstruit Android petit à petit en retirant certains composants pour les mettre à disposition différemment.<br />
<a href="http://blogs.computerworld.com/android/22295/google-deconstructing-android">Cet article</a> nous présente en détails la situation et explique en quoi cette séparation des composants ancrés au cœur du système est une bonne nouvelle, à la fois pour Google et ses partenaires mais aussi pour les utilisateurs d&rsquo;Android.</p>
<h4 id="RevuedePresseXebia-objc.io#1-LighterViewControllers">objc.io #1 &#8211; Lighter View Controllers</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://twitter.com/viteinfinite' target='_blank'><img title='http://twitter.com/viteinfinite' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/viteinfinite' width='24' height='24' /></a><a class='c2w-author-icon' href='http://viteinfinite.com' target='_blank'><img title='http://viteinfinite.com' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-generic.png' alt='http://viteinfinite.com' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://twitter.com/viteinfinite' target='_blank'>Simone Civetta</a></span></div>
<p>Le premier numéro du nouveau magazine Web créé par <a href="https://twitter.com/floriankugler" rel="nofollow">Florian Kugler</a>, <a href="https://twitter.com/chriseidhof" rel="nofollow">Chris Eidhof</a> et <a href="https://twitter.com/danielboedewadt" rel="nofollow">Daniel Eggert</a>, <a href="http://www.objc.io/" rel="nofollow">objc.io</a>, qui parlera des meilleures pratiques et techniques avancées du développement Objective-C.</p>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">Cette première edition se compose de cinq articles décrivant la manière d&rsquo;</span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://www.objc.io/issue-1/lighter-view-controllers.html" rel="nofollow">écrire des viewControllers plus propres</a><span style="font-size: 10.0pt; line-height: 13.0pt;"> en séparant les responsabilités entre plusieurs classes ainsi que des techniques permettant de </span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://www.objc.io/issue-1/testing-view-controllers.html" rel="nofollow">tester efficacement le code d’un viewController</a><span style="font-size: 10.0pt; line-height: 13.0pt;">. Le dernière article présente quelques </span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://www.objc.io/issue-1/containment-view-controller.html" rel="nofollow">bonnes pratiques sur l’utilisation des API de view containement</a><span style="font-size: 10.0pt; line-height: 13.0pt;"> introduites dans iOS 5.</span></p>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-Listedeliensautourd'AngularJS">Liste de liens autour d&rsquo;AngularJS</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Cette page GitHub référence un ensemble de liens (articles de blog, videos, livres &#8230;) autour d&rsquo;AngularJS, surement à garder dans vos favoris si la techno vous intéresse!</p>
<p><a href="https://github.com/jmcunningham/AngularJS-Learning" rel="nofollow">https://github.com/jmcunningham/AngularJS-Learning</a></p>
<h3 id="RevuedePresseXebia-Web">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-Êtrenotifiédesmisesàjourdesesartefactsmaven">Être notifié des mises à jour de ses artefacts maven</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Le plugin Versions de Maven possède un goal indiquant les dépendances de notre build à jour et celle dont une mise à jour est disponible.</p>
<p>mvn <a href="http://versionsdisplay-dependency-" rel="nofollow">versions:display-dependency-</a>updates</p>
<p>Cependant, il peut être plus agréable d&rsquo;être notifié par mail des nouvelles versions de nos dépendances. Le site <a href="https://www.artifact-listener.org/" rel="nofollow">artifact-listener</a> permet soit en téléchargeant son fichier pom.xml, soit en choisissant directement ses artefacts via l&rsquo;interface web de recevoir une notification à chaque nouvelle mise à jour de ceux-ci.</p>
<div>Le projet est open source sous license Apache V2, et est disponible sous <a href="https://github.com/openwide-java/artifact-listener/" rel="nofollow">github</a>.</div>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/11/revue-de-presse-xebia-2013-24/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript, retour aux bases : constructeur, prototype et héritage</title>
		<link>http://blog.xebia.fr/2013/06/10/javascript-retour-aux-bases-constructeur-prototype-et-heritage/</link>
		<comments>http://blog.xebia.fr/2013/06/10/javascript-retour-aux-bases-constructeur-prototype-et-heritage/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 06:57:51 +0000</pubDate>
		<dc:creator>Pierre Gayvallet</dc:creator>
				<category><![CDATA[WOA]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14427</guid>
		<description><![CDATA[Depuis quelques temps, l&#8217;utilisation du javascript se démocratise. De langage permettant de faire clignoter un texte ou défiler un bandeau de pub sur votre site multimania, il est progressivement devenu un outil à part entière de toute application web, jusqu&#8217;au point, atteint récemment, d&#8217;être auto suffisant, et ainsi de voir émerger un certain nombre de [...]]]></description>
				<content:encoded><![CDATA[
<p>Depuis quelques temps, l&rsquo;utilisation du javascript se démocratise. De langage permettant de faire clignoter un texte ou défiler un bandeau de pub sur votre site multimania, il est progressivement devenu un outil à part entière de toute application web, jusqu&rsquo;au point, atteint récemment, d&rsquo;être auto suffisant, et ainsi de voir émerger un certain nombre de librairies permettant de réaliser la partie interface d&rsquo;une application (presque) exclusivement en javascript.</p>
<p>Pourtant, on partait de loin ! Très longtemps considéré par la majorité comme un language de bidouilleur tout juste bon à sortir du code inmaintenable, on aura tout entendu sur javascript : depuis &laquo;&nbsp;nan mais de toute façon javascript ca marche pas&nbsp;&raquo; jusqu&rsquo;a &laquo;&nbsp;nan mais javascript c&rsquo;est nul, c&rsquo;est pas orienté objet : y a pas de classe&nbsp;&raquo; en passant par  &nbsp;&raquo;nan mais moi le prototype j&rsquo;ai rien pigé, pourquoi ils ont fait ca, sérieux ?&nbsp;&raquo;, sans oublier le fameux &laquo;&nbsp;c&rsquo;est quoi ce mot clef &lsquo;this&rsquo; qui change tout le temps ? c&rsquo;est vraiment le comportement voulu ?&nbsp;&raquo;. Encore maintenant, alors qu&rsquo;il est devenu un des outils de tous les jours de pas mal de développeurs, ce genre de question perdure, démontrant que le mysticisme autour de javascript n&rsquo;est toujours pas vraiment levé&#8230;</p>
<p>C&rsquo;est pourquoi je pense qu&rsquo;il est très important de comprendre les particularités de ce langage lors de son utilisation. Langage dont les concepts sont, de plus, aussi simples que puissants, pour peu que l&rsquo;on accepte qu&rsquo;il ne fasse pas tout comme les autres&#8230; Cette série d&rsquo;articles, qui débute avec celui-ci, aura donc cet objectif : la compréhension des concepts inhérents au langage, ainsi que les subtilités et astuces tournant autour. Back to basics.</p>
<p>Dans ce premier article, je vais donc tenter de montrer le plus simplement possible les différentes approches pour faire de l&rsquo;orienté objet&nbsp;&raquo; et des &laquo;&nbsp;classes&nbsp;&raquo; en javascript (sujet qui, contrairement aux idées reçues, <a href="http://dean.edwards.name/weblog/2006/03/base/" rel="nofollow">est abordé depuis quelques temps maintenant</a>), jusqu’à arriver sur l&rsquo;approche prototype, concept apparemment proche du voodoo, que je ne manquerai pas de démystifier. Aller, c&rsquo;est parti !</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Ladéclarationinline"><strong>La déclaration inline</strong></h3>
<p>Parce qu&rsquo;il faut bien partir de zéro, la première façon de construire un objet en javascript est la déclaration inline. Tout le monde a en effet déjà du croiser une déclaration de ce type :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var myObject = {
 a : 1,
 b : 2,
 sum : function() {
  return this.a + this.b;
 }
};</pre>
<p>Ceci est une simple déclaration d&rsquo;objet. On observe qu&rsquo;on peut lui spécifier des méthodes comme propriétés, et que ces méthodes peuvent utiliser le mot clef &laquo;&nbsp;this&nbsp;&raquo;. Il est donc possible de déclarer un objet de cette manière.Cependant, on n&rsquo;a pas ici de notion de classe ou de constructeur, aucune réutilisation possible. Si l&rsquo;on veut déclarer un nouvel objet disposant des mêmes méthodes, il faut recommencer la déclaration&#8230; Pas très pratique.</p>
<p>Heureusement, des méthodes plus convaincantes existent.</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Leconstructeurautodéclarant"><strong>Le constructeur auto déclarant</strong></h3>
<p>Car comme peu semblent le savoir, il est en fait très facile de déclarer un &laquo;&nbsp;constructeur&nbsp;&raquo; d&rsquo;objet en javascript. En effet, toute fonction peut servir de constructeur : il suffit simplement de l’appeler avec le mot clef &lsquo;new&rsquo;. Cela peut effectivement être très déroutant au début &#8211; une fonction qui est une classe ? einh ? quoi ? &#8211; mais une fois le concept accepté, on retrouve une utilisation se rapprochant beaucoup de ce qu&rsquo;on peut trouver dans les language OO plus &laquo;&nbsp;classiques&nbsp;&raquo;.</p>
<p>Prenons un exemple tout simple :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {   // defining Dog constructor
 this.hasTail = true; // defining a property
 this.bark = function() { // defining a method property
  console.log(&quot;wouf wouf&quot;);
 }
}

var bobby = new Dog(); // instanciating the constructor

bobby.hasTail; // returns true
bobby.bark();  // print &quot;wouf wouf&quot; to the console</pre>
<p>Et voila, voici une classe toute bête. On observe quand même que pour définir une propriété des futures instances, il faut utiliser le mot clef this. <span style="font-size: small;"><span style="line-height: 13.0pt;">En effet &lsquo;var&rsquo; ne suffit pas. C&rsquo;est d&rsquo;ailleurs une particularité </span></span>intéressante<span style="font-size: small;"><span style="line-height: 13.0pt;"> dont on peut se servir pour déclarer des variables privées de l&rsquo;instance : </span></span></p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {
 var shout = &quot;wouf wouf&quot;; // defining a local var.
 this.bark = function() {
  console.log(shout); // local scope access the 'shout' variable
 }
}

var bobby = new Dog();

bobby.bark();  // print &quot;wouf wouf&quot; to the console
bobby.shout;   // undefined , not attached to the instance</pre>
<p>Comme pour une fonction classique, il est également possible de passer des paramètres à un constructeur :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function(breed) {
 this.breed = breed;
}

var bobby = new Dog(&quot;terrier&quot;);

bobby.breed;  // returns &quot;terrier&quot;</pre>
<p>Cette méthode fonctionne bien. Cependant un problème de taille apparaît : comme la déclaration des méthodes se fait lors de l&rsquo;instanciation, les instances ne partageant pas leurs méthodes.</p>
<p>En d&rsquo;autres termes :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {
 this.bark = function() {
  console.log(shout);
 }
}

var bobby = new Dog();
var felix = new Dog();

(boddy.bark == felix.bark); // returns false. They both declared their own method. </pre>
<p>Si ce n&rsquo;est pas très gênant sur une faible volumétrie d&rsquo;instances, cela le devient cependant vite sur une application &lsquo;full&rsquo; javascript avec des centaines de milliers d&rsquo;objets, voir plus. De plus, il n&rsquo;est pas possible de faire de l’héritage de classe avec cette approche (nous reviendrons sur ce point), ce qui est encore plus problématique en vu de notre objectif&#8230;</p>
<p>C&rsquo;est ici que l&rsquo;utilisation du prototype entre en jeu.</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Constructeuretprototype"><strong>Constructeur et prototype</strong></h3>
<p>Alors, qu&rsquo;est-ce qu&rsquo;un prototype ? Et bien dit simplement, c&rsquo;est une liste de propriétés, attaché à un constructeur, qui va servir de &laquo;&nbsp;fallback&nbsp;&raquo; lorsque l&rsquo;on cherche à accéder à une propriété manquante d&rsquo;une instance dudit constructeur. En effet, lorsque l&rsquo;on cherche à accéder à une propriété sur une instance, on (comprendre : le langage)  va d&rsquo;abord regarder si l&rsquo;instance contient cette propriété, et dans le cas contraire, va ensuite vérifier si le prototype de son constructeur la contient.</p>
<p>Si vous ne saviez pas ce qu&rsquo;était un prototype avant le paragraphe précédent, vous en êtes probablement au même point ici. C&rsquo;est normal. Ici un exemple sera plus efficace que toutes les définitions du monde.</p>
<p>Toute fonction déclaré possède nativement une propriété &laquo;&nbsp;prototype&nbsp;&raquo; initialement vide :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {}; // declaring constructor
Dog.prototype;     // prints &quot;{}&quot; : prototype exists and is empty
</pre>
<p>Une propriété rajouté sur le prototype du constructeur devient disponible sur les instances :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">Dog.prototype.bark = function() { // defining a method on the Dog prototype
 console.log(&quot;wouf wouf&quot;);
};

var bobby = new Dog();
bobby.bark(); // using the prototype declaration - prints &quot;wouf wouf&quot; to the console

var felix = new Dog();
(bobby.bark == felix.bark); // instances share same reference - returns true;
bobby.bark = Dog.prototype.bark // which is the prototype property - returns true;</pre>
<p>Voila. C&rsquo;est tout pour le principe de base, qui est au final aussi simpliste qu&rsquo;inhabituel : on défini un constructeur, on lui rattache des propriétés (qui peuvent être des fonctions) via son prototype, on instancie le constructeur, l&rsquo;instances dispose des propriétés définie sur le prototype de son constructeur. Voila, c&rsquo;est tout. Simple non ?</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Unpeuplussurl'utilisationduprototype">Un peu plus sur l&rsquo;utilisation du prototype</h3>
<p>Il y a plusieurs subtilités à connaitre quant à l&rsquo;utilisation des prototypes :</p>
<p>On peut surcharger sur une instance une propriété définie sur son prototype. Cependant cela ne surcharge que sa propre référence, et ne touche donc pas à la déclaration du prototype. Si l&rsquo;on reprend la classe Dog telle que définie si dessus :<span style="font-size: 10.0pt; line-height: 13.0pt;"> </span></p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var bobby = new Dog();
var felix = new Dog();

bobby.bark = function() { console.log(&quot;beeeee !&quot;) }; // setting the bark property on dogA

bobby.bark(); // using the instance function, prints &quot;beeee !&quot; to the console

felix.bark(); // still using the prototype function, prints &quot;wouf wouf&quot; to the console. </pre>
<p>Une modification du prototype est immédiate sur les instances déjà existantes et les futures. En effet le prototype est une référence des instances, et le &laquo;&nbsp;fallback&nbsp;&raquo; se fait au moment de l&rsquo;accès à la propriété.</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var bobby = new Dog();

bobby.bark(); // prints &quot;wouf wouf&quot; to the console

Dog.prototype.bark = function() { console.log(&quot;meow meow&quot;); } // overrides the prototype bark method

bobby.bark(); // now prints &quot;meow meow&quot; to the console.  </pre>
<p>Nous arrivons à une particularité beaucoup plus intéressante : l&rsquo;extension. En effet, tout comme une méthode modifiée sur le prototype est immédiatement active, un rajout l&rsquo;est aussi :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var bobby = new Dog();

bobby.sleep(); // Raise a TypeError : has no method sleep

Dog.prototype.sleep = function() { console.log(&quot;Zzz Zzz&quot;); }

bobby.sleep(); // now prints &quot;Zzz Zzz&quot; to the console. </pre>
<p>La classe d&rsquo;une instance (enfin, techniquement, le constructeur) est accessible via la propriété constructor. Cela permet également d’accéder à son prototype (même s&rsquo;il est très rare d&rsquo;y voir une utilité) :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">bobby.constructor === Dog; // bobby constructor is Dog, returns true

bobby.constructor.prototype.bark // direct access to the prototype</pre>
<p>Et le mot clef instanceof de javascript fonctionne bien avec les constructeurs :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">bobby instanceof Dog; // bobby is an instance of Dog, returns true
</pre>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Héritage,premièreapproche"><strong>Héritage, première approche</strong></h3>
<p>Nous sommes donc capable de déclarer un constructeur et un prototype, ce qui se rapproche énormément d&rsquo;une déclaration de classe dans des langages OO plus classiques. Cependant, il nous manque une particularité souvent indispensable de l&rsquo;orienté objet : l&rsquo;héritage entre classes.</p>
<p>En javascript, il est possible de faire de l’héritage simplement en étendant un prototype à partir d&rsquo;un autre. C&rsquo;est par ce moyen que nous allons parvenir à faire notre première implémentation de l&rsquo;héritage en javascript. Démonstration:</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {}; // defining Dog constructor and prototype
Dog.prototype.bark = function() { console.log(&quot;wouf wouf&quot;); };

var Doberman = function() {}; // defining Doberman constructor
for(key in Dog.prototype) {   // copying all Dog prototype property into the Doberman property
 Doberman.prototype[key] = Dog.prototype[key];
}
Doberman.growl = function() { console.log(&quot;aouww&quot;); }; // then adding some Doberman specific functions

var rufus = new Doberman();

rufus.bark();  // using the Dog bark method, prints &quot;wouf wouf&quot;;
rufus.growl(); // using the Doberman growl method, prints &quot;aouww&quot;;</pre>
<p>Nous avons donc ici bel et bien deux déclarations de prototype, dont l&rsquo;un étend les propriétés de l&rsquo;autre. C&rsquo;est la manière la plus simple de rendre disponible des méthodes dans différents prototypes, et peut être suffisant pour les besoins d&rsquo;héritages les plus simples.</p>
<p>Attention cependant à ne<strong> surtout pas faire cela : </strong></p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {};
Dog.prototype.bark = function() { console.log(&quot;wouf wouf&quot;); };

var Doberman = function() {};
Doberman.prototype = Dog.prototype; // warning : never do that : will share the same prototype !
Doberman.growl = function() { console.log(&quot;aouww&quot;); };</pre>
<p>Car dans ce cas la, Dog et Doberman partageraient le même prototype. Tout rajout ou modification sur l&rsquo;un sera aussi effectif sur l&rsquo;autre. Ce qui déclenche en général des effets de bord assez magnifiques et qui peuvent être compliqués à identifier.</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Leslimitesdecetteapproche"><strong>Les limites de cette approche</strong></h3>
<p>On arrive ici dans les parties les plus techniques. Pour comprendre le besoin, il faut tout d&rsquo;abord pointer du doigt deux problèmes de notre approche précédente qui, au final, ne fait que copier, à un instant T, les propriétés d&rsquo;un prototype vers un autre.</p>
<p>Premier problème : instanceof ne fonctionne pas correctement :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">rufus instanceof Doberman; // returns true
rufus instanceof Dog; // oh no, return false, ack ! </pre>
<p>En effet, nous avons simplement étendu le prototype du second avec des méthodes du premier. Les constructeurs de Dog et Doberman n&rsquo;ont rien en commun.</p>
<p>Le second problème est qu&rsquo;avec notre technique actuelle, nous avons perdu une partie de la magie du prototype :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {}; // defining Dog
Dog.prototype.bark = function() { console.log(&quot;wouf wouf&quot;); };

var Doberman = function() {}; // defining Doberman
for(key in Dog.prototype) {
 Doberman.prototype[key] = Dog.prototype[key];
}
Doberman.growl = function() { console.log(&quot;aouww&quot;); };

var bobby = new Dog();
var rufus = new Doberman();

Dog.prototype.lick = function() { console.log(&quot;it tickles !&quot;) }; // adding a new method to the Dog's proto

bobby.lick(); // Dog instance can use this new method, prints &quot;it tickles !&quot;
rufus.lick(); // Doberman instance can't ! TypeError : Object [object] has no method 'tickle'</pre>
<p>Et oui ! Comme nous avons juste, à un moment donné, copié les propriétés d&rsquo;un proto vers l&rsquo;autres&#8230; les modifications apportées <strong>après</strong> cette copie n&rsquo;affectent pas ce dernier.</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Lechainagedeprototypes">Le chainage de prototypes</h3>
<p>Heureusement, il est possible de palier ces problèmes en chaînant les prototypes. Et oui, un peu comme dans <em>Inception</em> : a prototype in a prototype, we have to go deeper !</p>
<p>Expliqué simplement, nous allons faire en sorte que le prototype de Doberman ai lui même comme prototype Dog ! Ainsi, les instances de doberman regarderont dans le prototype de Doberman qui lui même regardera dans celui de Dog (même ce n&rsquo;est pas <em>exactement</em> ca, mais nous allons le voir juste en dessous)</p>
<p>Alors, comment fait-on ça ? comme ceci :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = function() {}; // defining Dog constructor
Dog.prototype.bark = function() { console.log(&quot;wouf wouf&quot;); }; // adding methods to Dog proto

var Doberman = function() {}; // defining Doberman constructor

var Surrogate = function() { // defining doberman surrogate constructor.
    this.constructor = Doberman;
};
Surrogate.prototype = Dog.prototype;  // setting Dog as the Surrogate prototype
Doberman.prototype = new Surrogate(); // then setting a surrogate instance as Doberman prototype

var rufus = new Doberman(); // here we go !</pre>
<p>Comme on le voit en dessus, il y a en effet une subtilité : <strong>un prototype ne peut lui même avoir de prototype</strong>. Par contre, <strong>un constructeur peut avoir comme prototype une instance d&rsquo;un autre constructeur disposant lui même d&rsquo;un prototype</strong> ! Ce qui revient au comportement voulu, de manière un peu détournée.</p>
<p>Et c&rsquo;est ce qu&rsquo;on fait ici : On crée un constructeur intermédiaire &nbsp;&raquo;Surrogate&nbsp;&raquo; dont le prototype est Dog. puis on instancie ce constructeur, ce qui nous donne une instance ayant accès aux méthodes du prototype Dog. Et on fait de cette instance le prototype de notre constructeur Doberman. Et voila ! On arrive ici à avoir un héritage de &lsquo;classe&rsquo; très proche de celui qu&rsquo;on pourrait trouver en java par exemple :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var rufus = new Doberman();
Dog.prototype.lick = function() { console.log(&quot;it tickle&quot;) }; // adding new method to Dog prototype
rufus.lick(); // it works ! prints &quot;it tickle&quot; // rufus instance has access to the new method !

rufus instanceof Doberman; // still returns true
rufus instanceof Dog; // yippie ! now returns true !</pre>
<p>Et de plus, notre autre problème est au passage corrigé : instanceof se comporte maintenant correctement. En effet, en interne, ce mot clef se base sur la chaine de prototype pour savoir si x est instance de X !</p>
<h3 id="Javascript,retourauxbases:constructeur,prototypeethéritage-Situationréelle"><strong>Situation réelle</strong></h3>
<p>Je sais ce que vous vous dites : oui mais&#8230;. si je dois faire ca à chaque fois que je veux faire un héritage de classe, ça va être un peu compliqué non ? Eh bien, c&rsquo;est sur que dans l’état actuel des choses, c&rsquo;est du code qui n&rsquo;est pas vraiment réutilisable. Si l&rsquo;on devait refaire le tour de passe passe du surrogate à chaque fois, cela serait un peu compliqué. Heureusement, ce code est facilement factorisable pour permettre une réutilisation :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var extendClass = function(child, parent) {
    var Surrogate = function() {};
    Surrogate.prototype = parent.prototype;
    child.prototype = new Surrogate();
};

var Dog = function() {};
Dog.prototype.bark = function() { console.log(&quot;wouf wouf&quot;); };

var Doberman = function() {};
extendClass(Doberman, Dog); // using extendClass to makes Doberman inherits from Dog.
new Doberman().bark();  // works as previously : prints &quot;wouf wouf&quot;</pre>
<p>Et voila. On est maintenant capable de faire étendre &lsquo;simplement&rsquo; un constructeur à un autre constructeur via une méthode réutilisable.</p>
<p>En pratique on peut encore aller plus loin et définir une &laquo;&nbsp;Classe&nbsp;&raquo; de base qui permettra une déclaration plus facile de nos futur classes hérités :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">// definiting the base constructor for all classes, which will execute the final class prototype's initialize method if exists
var Class = function() {
    this.initialize &amp;&amp; this.initialize.apply(this, arguments);
};
Class.extend = function(childPrototype) { // defining a static method 'extend'
    var parent = this;
    var child = function() { // the child constructor is a call to its parent's
        return parent.apply(this, arguments);
    };
    child.extend = parent.extend; // adding the extend method to the child class
    var Surrogate = function() {}; // surrogate &quot;trick&quot; as seen previously
    Surrogate.prototype = parent.prototype;
    child.prototype = new Surrogate;
    for(var key in childPrototype){
        child.prototype[key] = childPrototype[key];
    }
    return child; // returning the child class
};</pre>
<p>Ce qui nous permet désormais une déclaration de nos &laquo;&nbsp;classes&nbsp;&raquo; beaucoup plus lisible :</p>
<pre class="brush: jscript; gutter: true; title: ; notranslate">var Dog = Class.extend({
    initialize : function() { // initialize is called by constructor at instanciation.
  this.numberOfLegs = 4;
 },
    bark : function() { console.log(&quot;wouf wouf&quot;); }
});

var Doberman = Dog.extend({
   growl : function() { console.log(&quot;aouwww&quot;); }
});

var rufus = new Doberman();
// now play with it !</pre>
<p>Et voila. Cette dernière approche est beaucoup plus satisfaisante : on peut définir simplement et de manière lisible nos classes javascript.</p>
<p>En pratique, c&rsquo;est ce qui est utilisé dans presque toute les librairies actuelles : <a href="http://backbonejs.org/#Model-extend" rel="nofollow">le système d&rsquo;extension de vue/model de backbone</a> par exemple, utilise simplement une version un peu plus avancé de notre méthode extend. Dans Angular, <a href="https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance#wiki-Angular" rel="nofollow">le système de cascading dans les scope</a> fonctionne aussi comme cela : chaque scope fils a comme prototype le scope parent ! <span style="font-size: 10.0pt; line-height: 13.0pt;">Et avant eux, <a href="http://mootools.net/docs/core/Class/Class" rel="nofollow">mootools</a> et <a href="http://prototypejs.org/learn/class-inheritance" rel="nofollow">prototype</a> (la librairie) proposaient déjà une approche OO avec des méthodes similaires.</span></p>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">C&rsquo;est également sur ce concept que se basent les transcompiler javascript tels que <a href="http://coffeescript.org/#classes" rel="nofollow">Coffeescript</a> ou <a href="http://www.typescriptlang.org/Playground/#ex5" rel="nofollow">TypeScript</a> pour leur approche objet.</span></p>
<p><span style="font-size: small;"><span style="line-height: 13.0pt;">Pour ceux qui veulent aller plus loin, il existe, depuis </span></span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://en.wikipedia.org/wiki/ECMAScript" rel="nofollow">ECMAScript 5</a><span style="font-size: small;"><span style="line-height: 13.0pt;"> (sur les </span></span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://kangax.github.io/es5-compat-table/#Object.create" rel="nofollow">navigateurs modernes</a><span style="font-size: small;"><span style="line-height: 13.0pt;"> donc) une alternative viable pour gérer la </span></span>chaîne<span style="font-size: small;"><span style="line-height: 13.0pt;"> de prototype (et pas seulement) : </span></span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create" rel="nofollow">Object.create</a><span style="font-size: small;"><span style="line-height: 13.0pt;"> (et au passage, </span></span><a style="font-size: 10.0pt; line-height: 13.0pt;" href="http://dailyjs.com/2012/06/04/js101-object-create/" rel="nofollow">un autre pointeur dailyjs</a><span style="font-size: small;"><span style="line-height: 13.0pt;">).</span></span></p>
<p>Alors, au final, le prototypage, plutôt simple non ?</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/10/javascript-retour-aux-bases-constructeur-prototype-et-heritage/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Xebia sera présent à dotSacle</title>
		<link>http://blog.xebia.fr/2013/06/07/xebia-sera-present-a-dotsacle/</link>
		<comments>http://blog.xebia.fr/2013/06/07/xebia-sera-present-a-dotsacle/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 07:07:24 +0000</pubDate>
		<dc:creator>Pablo Lopez</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[dotSacle]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14413</guid>
		<description><![CDATA[DotScale, la conférence technique sur les applications surdimensionnées, a lieu aujourd&#8217;hui, à Paris. L&#8217;affiche est plus qu&#8217;alléchante ;  au menu, les créateurs de frameworks star dans les domaines du BigData, comme Hadoop et ElasticSearch, mais aussi dans les domaines de l&#8217;infra (OpenStack, OpsWork), et des très grands du Web (Google Cloud Engine, Heroku, WordPress.com). Nous [...]]]></description>
				<content:encoded><![CDATA[
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/06/dotscala.jpeg" alt="dotscala" width="323" height="156" style="margin: 20px; float: right;"/>
<p><a href="http://www.dotscale.eu/">DotScale</a>, la conférence technique sur les applications surdimensionnées, a lieu aujourd&rsquo;hui, à Paris.</p>
<p> L&rsquo;affiche est plus qu&rsquo;alléchante ;  au menu, les créateurs de frameworks star dans les domaines du BigData, comme Hadoop et ElasticSearch, mais aussi dans les domaines de l&rsquo;infra (OpenStack, OpsWork), et des très grands du Web (Google Cloud Engine, Heroku, WordPress.com).</p>
<p> Nous serons sur place pour vous faire vivre, ce qui sera, nous l&rsquo;espérons, un des évènements de l&rsquo;année en ce qui concerne le monde des applications &quot;hors normes&quot;.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/07/xebia-sera-present-a-dotsacle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J&#8217;ai essayé Bower, l’outil de gestion des dépendances front-end</title>
		<link>http://blog.xebia.fr/2013/06/05/jai-essaye-bower-loutil-de-gestion-des-dependances-front-end/</link>
		<comments>http://blog.xebia.fr/2013/06/05/jai-essaye-bower-loutil-de-gestion-des-dependances-front-end/#comments</comments>
		<pubDate>Wed, 05 Jun 2013 12:55:57 +0000</pubDate>
		<dc:creator>Florent Duveau</dc:creator>
				<category><![CDATA[WOA]]></category>
		<category><![CDATA[Bower]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14377</guid>
		<description><![CDATA[Pourquoi ? Le management de librairies externes a toujours été un casse-tête pour les développements front en javascript. Combien de fois sommes-nous allés sur le site de jQuery afin de récupérer la dernière version, de la remplacer dans notre dossier “/libs” et de faire la modification dans notre balise &#60;script&#62; ?. Quand on a une [...]]]></description>
				<content:encoded><![CDATA[
<p><img width="200" height="200" src="http://bower.io/img/bower-logo.png" style="margin: 20px; float: right;"/></p>
<h3>Pourquoi ?</h3>
<p>Le management de librairies externes a toujours été un casse-tête pour les développements front en javascript. Combien de fois sommes-nous allés sur le site de jQuery afin de récupérer la dernière version, de la remplacer dans notre dossier “/libs” et de faire la modification dans notre balise &lt;script&gt; ?. Quand on a une vingtaine de dépendances, le travail commence à devenir relativement&#8230; agaçant ; sans parler des risques de non compatibilité et la gestion des rollback. On a beau parfois râler sur maven, on ne peut nier que celui-ci soulage beaucoup les développeurs java dans sa gestion des dépendances.</span></p>
<p>Node a apporté une première solution avec son npm (Node Packaged Modules), indispensable pour le développement d’applications en node.js. Celui-ci est malheureusement uniquement orienté “back” et le travail côté front reste toujours manuel.</p>
<p>Puis bower s’est présenté à moi.</p>
<h3>Bower c&rsquo;est quoi ?</h3>
<p>Bower c’est donc un outil de management de librairies pour le web. Il s’installe le plus facilement du monde avec la commande : <code>npm install -g bower</code></p>
<p>Il fonctionne en s’appuyant sur github pour télécharger les composants grâce à des tables de correspondances <code>“name” : ”url”</code> (par défaut : <a href="https://bower.herokuapp.com/packages">https://bower.herokuapp.com/packages</span></a> mais il est tout à fait possible de la remplacer ou d’en rajouter).
<p/>
<p>Bower gère aussi les versions de projets grâce aux tags. Ainsi, pour installer jquery, la commande code>bower install jquery#2.0.0</code> ira chercher le tag 2.0.0 de l’url github correspondant au nom <em>jquery</em> dans la table d’assocations. Par défaut c’est donc à l’url <a href="git://github.com/components/jquery.git" rel="nofollow">git://github.com/components/jquery.git</a> (et non sur le repo officiel) qu’il ira chercher jquery. Pourquoi pas l’url officielle ? Car bower se contente simplement de rapatrier TOUT le repo en local, et le repo <a href="https://github.com/jquery/jquery">https://github.com/jquery/jquery</a> contient beaucoup de choses inutiles pour nous qui voulons simplement utiliser le <em>jquery.js</em>.</p>
<p>Si le projet n’est pas présent dans la table d’associations, pas de problème, on peut directement appeler l’url github pour installer le composant (<code>bower install </code><code>git@github.com</code><code>:components/jquery.git#2.0.0</code> marche aussi très bien).</p>
<p>A noter que si on ne définit pas de version (<code>bower install jquery</code>), bower ira chercher par défaut la dernière version compatible disponible. Je dis bien dernière version compatible car bower gère aussi les conflits de versions grâce au fichier component.json des composants. Par exemple, nous voulons installer <em>jquery</em> et <em>backbone</em> et <em>Marionette</em>. <a href="https://github.com/marionettejs/backbone.marionette/blob/master/component.json" rel="nofollow">Le fichier <em>component.json</em> de <em>Marionette</em></a> stipule qu’il faut utiliser une version 1.8.x de <em>jquery</em>. Bower, voyant cela, ira, si on ne lui spécifie pas de version de <em>jquery</em>, chercher la version 1.8.3.
<p/>
<p>C’est plutôt utile pour éviter de mauvaises surprises. Encore faut-il que ces fichiers soient à jour et présents dans tous les projets github, ce qui est aujourd’hui loin d’être le cas.</p>
<p>S’appuyer sur github fait la force et la faiblesse de bower. Bower possède, grâce à cela, une base énorme de composants, se reposant sur un système générique et indépendant. Et chacun peut facilement rajouter son projet au registry de bower. Cependant, comme nous allons le voir, les projets ne sont pas tous aussi “bower compatible” et l’hétérogénéité des structures des projets freine parfois le côté automatique des imports.</p>
<h3>Mise en pratique</h3>
<p>Pour se faire une idée plus claire de bower, je vous propose de l'intégrer dans un de mes projets présents sur github : mon <a href="https://github.com/FlorentD/marionette-boilerplate" rel="nofollow">Marionette boilerplate</a> qui me sert de support à de nouveaux projets sur ce framework. Un serveur node.js est présent pour lancer l’application.</p>
<p>Ce projet utilise les librairies JS suivantes (en mai 2013) :</p>
<ul>
<li>backbone 1.0.0
  </li>
<li>marionette 1.0.2 (avec json2, babysitter, et wreqr)
  </li>
<li>underscore 1.4.4
  </li>
<li>jQuery 2.0.0
  </li>
<li>requirejs 2.1.5
  </li>
<li>with text plugin 2.0.5+
  </li>
<li>mustache 0.7.2
  </li>
<li>hogan 3.0.0
  </li>
<li>Twitter Boostrap 2.3.1
  </li>
<li>less 1.3.3</li>
</ul>
<p>J’utilise requireJS pour la gestion du chargement des fichiers JS. Mes fichiers JS sont aujourd’hui importés manuellement dans le dossier /public/js/libs</p>
<p>Je commence d’abord par créer le ficher bower.json dans le dossier “public”. Je le place ici et non à la racine du projet car bower n’est destiné qu’à la partie front de l’application.
<p />
<p>Le fichier bower.json va me permettre de définir tous les composants que je veux importer. Voici la structure du fichier, c’est très simple :</p>
<p><strong>bower.json</strong></p>
<pre class="brush: jscript; title: ; notranslate">{
 &quot;name&quot;: &quot;Marionette-Boilerplate&quot;,
  &quot;version&quot;: &quot;0.0.1&quot;,
 &quot;dependencies&quot;: {
   &quot;jquery&quot;: &quot;2.0.0&quot;,
    &quot;backbone&quot;: &quot;1.0.0&quot;,
    &quot;marionette&quot;: &quot;1.0.2&quot;,
    &quot;underscore&quot;: &quot;1.4.4&quot;,
    &quot;requirejs&quot;: &quot;2.1.5&quot;,
    &quot;requirejs-text&quot;: &quot;2.0.6&quot;,
    &quot;mustache&quot;: &quot;latest&quot;,
    &quot;hogan&quot;: &quot;latest&quot;,
    &quot;bootstrap&quot;: &quot;latest&quot;,
    &quot;less.js&quot;: &quot;latest&quot;
  }
}</pre>
<p>Une simple commande <strong><code>bower install</code></strong> lira le fichier et installera les composants en local. </p>
<p>Le problème est que, par défaut, bower crée un dossier <em>components</em> pour importer les librairies javascript. Or, je voudrais pouvoir les mettre dans mon dossier <em>libs</em> déjà existant. Pour cela il faut créer un fichier de configuration <em>.bowerrc</em> au même niveau que mon <em>bower.json</em> comme-ceci :</p>
<p><strong>.bowerrc</strong></p>
<pre class="brush: jscript; title: ; notranslate">{
  &quot;directory&quot;: &quot;js/libs&quot;,
  &quot;json&quot;: &quot;bower.json&quot;
}</pre>
<p>C'est aussi ici que vous pouvez définir de nouvelles tables de dépendances pour vos projets. <code>bower install</code>, les packages s’installent maintenant dans le bon dossier/</p>
<p>Bower me jette par contre un warning comme quoi il pourrait y avoir des problèmes de compatibilité. En effet, j’installe une version 2.0.0 de Jquery alors que le fichier component.json de bootstrap indique une compatiblité avec jquery seulement dans ses version 1.8.x. Bower m’a tout de même importé la version 2.0.0 et c’est très bien comme ça !</p>
<p>une fois l’installation terminée, je lance un <code>bower list</code> pour voir mes packages installés :</p>
<pre class="brush: jscript; title: ; notranslate">
Marionette-Boilerplate
├── backbone#1.0.0
├── backbone.babysitter#0.0.6
├── backbone.wreqr#0.2.0
├─┬ bootstrap#2.3.2
│ └── jquery#2.0.0
├── hogan#78d244777d120c0e365644a21e45a81407c48bc2
├── jquery#2.0.0
├── json2#ff55d8d4513b149e2511aee01c3a61d372837d1f
├── less.js#1.4.0-b4
├─┬ marionette#1.0.2
│ ├── jquery#2.0.0
│ └── backbone#1.0.0
├── mustache#0.7.2
├── requirejs#2.1.5 (2.1.6 now available)
├── requirejs-text#2.0.6
└── underscore#1.4.4</pre>
<p>On peut voir que bower me prévient qu'il existe une version de requirejs plus récente. Bower a balayé tous les repos github des projets en cherchant des tags plus récents. C'est très pratique pour voir d'un coup d’œil si nous avons les dernières versions des projets. Je mets donc mes projets à jour.</p>
<p> On peut voir un numéro de version plutôt affreux de la part de hogan (et json2). En effet, Hogan n’a pas de tag sur son repo github (<a href="https://github.com/twitter/hogan.js" rel="nofollow">https://github.com/twitter/hogan.js</a>!</p>
<p>Maintenant il ne reste plus qu’à modifier mon fichier index.html et reconfigurer requirejs comme ceci :</p>
<p><strong>index.html</strong></p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;title&gt;Marionette Boilerplate&lt;/title&gt;
    ...
    &lt;script src=&quot;js/libs/less.js/dist/less-1.3.3.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script data-main=&quot;js/config.js&quot; src=&quot;js/libs/requirejs/require.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
...
&lt;/html&gt;</pre>
<p><strong>config.js</strong></p>
<pre class="brush: jscript; title: ; notranslate">require.config({
 baseUrl: 'js',
 paths: {
  jquery: 'libs/jquery/jquery',
  underscore: 'libs/underscore/underscore',
  backbone: 'libs/backbone/backbone',
  babysitter: 'libs/backbone.babysitter/lib/backbone.babysitter',
  wreqr: 'libs/backbone.wreqr/lib/backbone.wreqr',
  marionette: 'libs/marionette/lib/backbone.marionette',
  json2: 'libs/json2/json2',
  hogan: 'libs/hogan/web/1.0.0/hogan',
  mustache: 'libs/mustache/mustache',
  text: 'libs/requirejs-text/text',
  bootstrap: 'libs/bootstrap/docs/assets/js/bootstrap'
 },
 ...
});</pre>
<p><strong>Voilà, ça marche.</strong></p>
<p>Je ne suis tout de même pas totalement satisfait. Hogan s’intègre très mal à bower, je suis obligé de spécifier la version dans mon import requirejs. Je devrai donc manuellement le changer lors d’une future mise à jour. De plus, les urls sont, comme je le craignais, hétérogènes. Si pour jquery, underscore ou backbone, la logique est la même, pour bootstrap je dois utiliser un chemin plus que douteux. Pour finir, tous mes composants ne possèdent pas de component.json. Je ne suis donc pas totalement sûr de la compatibilité entre mes versions. Tout ceci est sans doute imputable à la relative jeunesse du projet.</p>
<h3>Pour conclure</h3>
<p>Bower a eu la bonne idée de se reposer sur github pour sa gestion des composants, ce qui rend le catalogue immensément riche dès à présent. Sa simplicité et sa non-intrusion dans les autres briques du projet est aussi très appréciable. Couplé à grunt, bower devient un allié très puissant. Yeoman l’intègre d’ailleurs par défaut dans son workflow de création d’applications web.</p>
<p>Tout n’est pas rose cependant. Les projets sur github ont des architectures différentes et prennent plus ou moins (ou pas du tout) en compte bower. Ceci entraine une certaine frustration dans l’import des librairies. La solution serait qu’un compte github soit entièrement dédié aux imports des composants comme c’est déjà le cas avec le compte &quot;Components&quot; (<a href="https://github.com/components" rel="nofollow">https://github.com/components</a>) qui ne possède pour l’instant que 33 repos. Bower pourrait aussi devenir plus strict dans l’ajout de librairies à son catalogue, comme par exemple obliger la présence du fichier component.json ou le respect d’une certaine architecture. Entre la qualité et la quantité, il faut souvent choisir...</p>
<p>Le fait que bower importe tous les fichiers des repos est aussi parfois frustrant dans la mesure où on n’utilise souvent qu’un fichier dans tout le repository.</p>
<p><strong>Les choses devraient tout de même s’améliorer avec l’adoption massive de cette solution (si adoption il y a). Bower reste un outil pratique et je vais continuer à l’utiliser pour mes prochains projets front !</strong></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/05/jai-essaye-bower-loutil-de-gestion-des-dependances-front-end/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/</link>
		<comments>http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 12:23:03 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[EmberJS]]></category>
		<category><![CDATA[GameStorming]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14371</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité GameStorming, Reference Guide (By Yannick Grenzinger) Rainbow spreadsheet collaborative UX research tool (By Yannick Quenec&#8217;hdu) Pour renforcer l&#8217;Agilité IT, il est nécessaire d&#8217;accepter l&#8217;échec. (By Couthaïer Farfra) Web Sortie Ember JS RC 5 et Ember Data 0.13 (By Benoit Lemoine) Minimifier un projet [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /><br />
<em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-GameStorming%2CReferenceGuide">GameStorming, Reference Guide</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-RainbowspreadsheetcollaborativeUXresearchtool">Rainbow spreadsheet collaborative UX research tool</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/yquenechdu" target="_blank">Yannick Quenec&rsquo;hdu</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-Pourrenforcerl%27Agilit%C3%A9IT%2Cilestn%C3%A9cessaired%27accepterl%27%C3%A9chec.">Pour renforcer l&rsquo;Agilité IT, il est nécessaire d&rsquo;accepter l&rsquo;échec.</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-SortieEmberJSRC5etEmberData0.13">Sortie Ember JS RC 5 et Ember Data 0.13</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/blemoine" target="_blank">Benoit Lemoine</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/#RevuedePresseXebia-MinimifierunprojetAngular">Minimifier un projet Angular</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité"><span style="font-size: 1.4em;">Agilité</span></h3>
<h4 id="RevuedePresseXebia-GameStorming,ReferenceGuide">GameStorming, Reference Guide</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Gamestorming est un livre proposant un nombre incroyable de propositions d&rsquo;outils proche du jeu pour conduire des réunions en entreprise (par exemple des réunions de type rétrospective ou brainstorming ou encore liées à l&rsquo;innovation). Malheureusement ce livre ressemble à une longue liste et fini par être difficile à lire. C&rsquo;est la que viennent nous aider trois ressources:<br />
- un document Google Document (en espérant que le lien ne soit pas invalide rapidement) servant de guide de référence <a href="https://docs.google.com/document/d/1U_9_Of_lcpkzbRpThpSh7paIBPNG9m7vAcrG3wj0_cA/edit" rel="nofollow">https://docs.google.com/document/d/1U_9_Of_lcpkzbRpThpSh7paIBPNG9m7vAcrG3wj0_cA/edit</a><br />
- le site associé au livre <a href="http://www.gogamestorm.com/" rel="nofollow">http://www.gogamestorm.com/</a><br />
- une application iPhone &laquo;&nbsp;Gamestorming Card Deck&nbsp;&raquo; qui récupère le contenu du site et le met dans une forme de pile de cartes pour se créer des decks pour préparer des ateliers</p>
<h4 id="RevuedePresseXebia-RainbowspreadsheetcollaborativeUXresearchtool">Rainbow spreadsheet collaborative UX research tool</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/yquenechdu' target='_blank'><img title='http://blog.xebia.fr/author/yquenechdu' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/yquenechdu' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40openagileorg' target='_blank'><img title='http://twitter.com/%40openagileorg' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40openagileorg' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/yquenechdu' target='_blank'>Yannick Quenec'hdu</a></span></div>
<p>Cette article présente une petit outil pour les designers pour mieux appréhender le ressenti des utilisateur face à la création de nouveau produit.</p>
<p><a title="http://uxdesign.smashingmagazine.com/2013/04/11/rainbow-spreadsheet-collaborative-ux-research-tool/" href="http://uxdesign.smashingmagazine.com/2013/04/11/rainbow-spreadsheet-collaborative-ux-research-tool/" rel="nofollow">uxdesign.smashingmagazine.com/2013/04/11/rainbow-spreadsheet-collaborative-ux-research-tool/</a></p>
<h4 id="RevuedePresseXebia-Pourrenforcerl'AgilitéIT,ilestnécessaired'accepterl'échec.">Pour renforcer l&rsquo;Agilité IT, il est nécessaire d&rsquo;accepter l&rsquo;échec.</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40cfarfra' target='_blank'><img title='http://twitter.com/%40cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Couthaïer Farfra</a></span></div>
<p>Quel ScrumMaster ou Coach Agile n&rsquo;a pas entendu une fois (au moins) dans sa carrière un Chef de Projet, un représentant du métier ou un DSI dire &laquo;&nbsp;L&rsquo;agilité ça ne marche pas&nbsp;&raquo; au moindre problème rencontré sur un projet Scrum par exemple et aussitôt déclarer l&rsquo;abandon des projets Agiles dans son organisation.</p>
<p>Cet article du Monde rapporte une étude du cabinet Gartner sur la nécessité pour une organisation (DSI, Métier, tous les acteurs en fait) de savoir accepter un taux d&rsquo;échec des projets (de l&rsquo;ordre de 20 à 28%). L&rsquo;objectif de ce changement de mentalité et de pousser les organisations à tirer le bilan de leurs échecs, afin d&rsquo;apprendre à s&rsquo;améliorer et ainsi minimiser les pertes et identifier plus tôt les points de blocages.</p>
<p>C&rsquo;est Lean, c&rsquo;est Agile, c&rsquo;est Lean startup.</p>
<p><a href="http://www.lemondeinformatique.fr/actualites/lire-pour-renforcer-l-agilite-it-il-est-necessaire-d-accepter-l-echec-53610.html" rel="nofollow">http://www.lemondeinformatique.fr/actualites/lire-pour-renforcer-l-agilite-it-il-est-necessaire-d-accepter-l-echec-53610.html</a></p>
<h3 id="RevuedePresseXebia-Web"><span style="font-size: 1.4em;">Web</span></h3>
<h4 id="RevuedePresseXebia-SortieEmberJSRC5etEmberData0.13">Sortie Ember JS RC 5 et Ember Data 0.13</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/blemoine' target='_blank'><img title='http://blog.xebia.fr/author/blemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/blemoine' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/benoit_lemoine' target='_blank'><img title='http://twitter.com/benoit_lemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/benoit_lemoine' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/blemoine' target='_blank'><img title='http://github.com/blemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/blemoine' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/blemoine' target='_blank'>Benoit Lemoine</a></span></div>
<p>Cette semaine fut riche pour l’écosystème Ember, avec la sortie de la version <a href="http://emberjs.com/blog/2013/05/28/ember-data-0-13.html" rel="nofollow">0.13 de Ember Data</a> et la sortie de la version <a href="http://emberjs.com/blog/2013/06/01/ember-1-0-rc5.html" rel="nofollow">RC5 de Ember</a>.</p>
<p>Le framework JavaScript étant dans la dernière ligne droite vers la version finale 1.0, la version RC5 n&rsquo;apporte que des corrections de bugs et des optimisations.</p>
<p>À l&rsquo;inverse, Ember Data voit sortir sa première version officielle, mais reste extrêmement instable, et doit être considéré comme une version alpha. La librairie est encore sujette à beaucoup d&rsquo;évolution, et va en particulier mettre l&rsquo;accent sur le support des promesses et la gestion d&rsquo;erreurs dans sa prochaine version.</p>
<h4 id="RevuedePresseXebia-MinimifierunprojetAngular">Minimifier un projet Angular</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Une des problématiques récurrentes sur les projets Angular est la minimisation du code javascript. Par défaut, angular base son système d&rsquo;injection de dépendances sur les noms des paramètres, et donc le changement de nom de ceux-ci par la minimisation du code casse ce beau système. On se retrouve alors avec un nombre conséquent d&rsquo;erreurs javascript du type missing provider, &#8230;</p>
<p><a href="http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/" rel="nofollow">Cet article</a> explique comment écrire son code javascript pour contourner cette problématique.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/04/revue-de-presse-xebia-2013-23/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comprendre le fonctionnement de la JVM &#8211; Article 2/2</title>
		<link>http://blog.xebia.fr/2013/06/03/comprendre-le-fonctionnement-de-la-jvm-article-2/</link>
		<comments>http://blog.xebia.fr/2013/06/03/comprendre-le-fonctionnement-de-la-jvm-article-2/#comments</comments>
		<pubDate>Mon, 03 Jun 2013 08:01:21 +0000</pubDate>
		<dc:creator>Pierre Laporte</dc:creator>
				<category><![CDATA[Java / JEE]]></category>
		<category><![CDATA[JVM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14356</guid>
		<description><![CDATA[Dans le premier article de cette série, nous avons vu comment la JVM optimise notre code. Ici, intéressons nous à la manière dont la mémoire est gérée et aux différents Garbage Collectors. L&#8217;hypothèse générationnelle Toute la gestion de la mémoire opérée par la JVM se base sur une hypothèse générationnelle, résumée par la phrase &#34;la plupart des [...]]]></description>
				<content:encoded><![CDATA[
<p>Dans le premier article de cette série, nous avons vu comment la JVM optimise notre code. Ici, intéressons nous à la manière dont la mémoire est gérée et aux différents Garbage Collectors.</p>
<h3>L&rsquo;hypothèse générationnelle</strong></h3>
<p>Toute la gestion de la mémoire opérée par la JVM se base sur une hypothèse générationnelle, résumée par la phrase &quot;la plupart des objets meurent jeunes&quot; ou encore &quot;La plupart des objets créés deviennent très rapidement inaccessibles&quot;.</p>
<p>L&rsquo;idée derrière cette hypothèse est que les applications créent de nombreux objets pour leur fonctionnement, mais que seule une faible partie d&rsquo;entre eux a une longue durée de vie. Ainsi, les différentes étapes d&rsquo;un traitement génèrent beaucoup d&rsquo;objets transitoires mais une seule donnée finale.</p>
<p>Le graphique suivant résume la quantité d&rsquo;objets créés par une application en fonction de leur âge.</p>
<p style="text-align: center;"><a href="http://blog.xebia.fr/wp-content/uploads/2013/06/hypothese-generationelle.png" target="_blank"><img width="500" src="http://blog.xebia.fr/wp-content/uploads/2013/06/hypothese-generationelle-300x160.png" /></a></p>
<p>Note : un objet est considéré comme toujours en vie s&rsquo;il existe un autre objet vivant qui le référence.</p>
<h3>Les espaces mémoire utilisables</h3>
<p>Dans cette optique, la mémoire utilisable de la JVM est fragmentée en deux zones : la young generation qui contient les nouveaux objets et la old generation qui contient les objets ayant une longue durée de vie.</p>
<p>La young generation est elle-même fragmentée en trois espaces distincts : l&rsquo;Eden dans lequel tous les objets sont crées et deux zones dites &quot;Survivor&quot; qui servent de sas d&rsquo;entrée dans la old generation.</p>
<p>Le cycle de vie de tous les objets commence dans l&rsquo;Eden. Au premier passage du garbage collector, si l&rsquo;objet est toujours vivant il est déplacé dans la zone &quot;Survivor 1&quot;. À chaque prochain passage du GC, il sera déplacé dans l&rsquo;autre zone &quot;Survivor&quot; jusqu&rsquo;à un certain seuil. Au delà, il sera déplacé dans la old generation.</p>
<p style="text-align: center;"><img width="500" src="http://blog.xebia.fr/wp-content/uploads/2013/06/cycle-de-vie-des-objets.png" /></p>
<p><a name="__DdeLink__498_395240094" rel="nofollow"></a> Prenons l&rsquo;exemple d&rsquo;une application avec 2 types d&rsquo;objets A et B avec un seuil générationnel de 4. Tous les objets sont crées dans l&rsquo;Eden et ont un âge de 1. Au premier passage du GC, seul B (âge : 2) est toujours utilisé, il est donc déplacé dans le Survivor 0 tandis que A1 est collecté. Au second GC, un nouvel objet A2 (âge 1) est crée, B (âge : 3) est toujours utilisé et est déplacé dans Survivor 1. Au troisième passage du GC, A2 (âge : 2) et B (âge : 4) sont toujours vivants et donc déplacés dans Survivor 0. Enfin, au cinquième GC, l&rsquo;age de B (âge : 5) dépasse le seuil générationnel, B est donc transféré dans la old generation tandis que A2 (âge: 3) passe dans le Survivor 1.</p>
<p style="text-align: center;"><img width="500" src="http://blog.xebia.fr/wp-content/uploads/2013/06/creation-et-vie-des-objets.png" /></p>
<h3>Les collections</h3>
<p>Deux types de collections ont été implémentés d&rsquo;après l&rsquo;hypothèse générationnelle : les collections mineures qui récupèrent la mémoire dans la young generation et les collections majeures qui récupèrent la mémoire dans la old generation. On confond parfois collection majeure et Full GC, ce dernier terme indique une collection dans la young et la old generation.</p>
<p>Par application de l&rsquo;hypothèse, les collections mineures sont celles qui arriveront le plus souvent. Les espaces mémoire et le garbage collector sont donc spécialement optimisés pour que celles-ci durent le moins de temps possible.</p>
<p>Les collections majeures sont bien plus coûteuses, car elles doivent scanner l&rsquo;intégralité de la mémoire pour déterminer si les objets de la old generation sont toujours vivants.</p>
<h3>Les pauses du GC</h3>
<p>Les algorithmes de GC imposent parfois une pause de l&rsquo;application (Stop The World). Dans ce cas de figure, le garbage collector fige tour à tour chacun des threads de l&rsquo;application lorsqu&rsquo;ils atteignent un point d&rsquo;arrêt. Cette première étape peut déjà prendre un certain temps, en effet, le GC ne peut pas figer tous les threads en une seule fois tant que ces derniers ne sont pas dans un état cohérent. Ensuite, le GC élimine les objets non utilisés et redémarre tous les threads de l&rsquo;application.</p>
<p>L&rsquo;un des objectifs d&rsquo;une JVM correctement paramétrée est d&rsquo;avoir le moins de Full GC possible, cet objectif est atteint lorsque l&rsquo;application passe moins de 5% de son temps figée à cause du GC.</p>
<p>La old generation n&rsquo;existe que pour optimiser le travail du Garbage Collector et diminuer les pauses éventuelles de l&rsquo;application. Lorsque l&rsquo;âge d&rsquo;un objet a dépassé un certain seuil, on peut affirmer que cet objet constitue l&rsquo;exception de l&rsquo;hypothèse générationnelle : sa durée de vie sera bien plus longue que la majorité des objets de l&rsquo;application. Il n&rsquo;est alors plus utile de le scanner pour déterminer s&rsquo;il est un objet à faible durée de vie, cela ne ferait que ralentir le travail du GC dans l&rsquo;Eden.</p>
<h3>Les logs</h3>
<p>Pour pouvoir tuner une JVM, il est nécessaire d&rsquo;avoir les logs du garbage collector. Ces derniers contiennent énormément d&rsquo;informations et permettent de prendre des décisions éclairées et de mesurer les progrès effectués.</p>
<p>Les logs peuvent être activés par l&rsquo;option -Xloggc:logs/gc.log qui crée un fichier gc.log dans le dossier logs/. Il est également recommandé d&rsquo;ajouter des informations complémentaires avec les options -XX:+PrintGCDetails et -XX:+PrintTenuringDistribution. Ces deux options donnent des détails sur la manière dont la mémoire est utilisée et permettent d&rsquo;identifier très facilement les problèmes de dimensionnement de la heap.</p>
<p>La lecture des logs peut-être très fastidieuse sans les outils appropriés. Il est possible d&rsquo;utiliser HPJmeter (gratuit, <a href="http://www.hp.com/go/hpjmeter" rel="nofollow">www.hp.com/go/hpjmeter</a>), GCViewer (gratuit et open-source, <a href="https://github.com/chewiebug/GCViewer" rel="nofollow">https://github.com/chewiebug/GCViewer</a>) ou JClarity Censum (payant, <a href="http://www.jclarity.com/products/censum/" rel="nofollow">www.jclarity.com/products/censum/</a>).</p>
<h3>Les types de collections</h3>
<p>Il existe deux stratégies pour le nettoyage de la mémoire : Mark &amp; Evacuate et Mark, Sweep &amp; Compact.</p>
<p>Dans la stratégie Mark &amp; Evacuate, le GC travaille en deux phases : dans un premier temps, tous les objets vivants de l&rsquo;application sont marqués. Ces mêmes objets sont ensuite recopiés dans une nouvelle zone mémoire et les pointeurs sont réécrits pour référencer les nouvelles adresses.</p>
<p>Le principal avantage de cette stratégie est que la mémoire n&rsquo;est pas fragmentée. En effet, la zone nettoyée peut être considérée comme vide à l&rsquo;issue de la copie puisque les objets vivants ont été &quot;déplacés&quot;. L&rsquo;inconvénient de cette stratégie est qu&rsquo;elle est plus coûteuse en mémoire à cause de la copie des objets. Cette copie nécessite du temps et au moins autant d&rsquo;espace que d&rsquo;objets vivants, elle est donc réservée à des espaces à taille raisonnable. Son principal avantage est que son temps d&rsquo;exécution est proportionnel au nombre d&rsquo;objets vivants.</p>
<p>C&rsquo;est cette stratégie qui est utilisée dans la young generation et qui fait le passage des objets depuis l&rsquo;Eden vers un Survivor, puis d&rsquo;un Survivor à l&rsquo;autre et enfin d&rsquo;un Survivor vers la old generation.</p>
<p>Dans la stratégie Mark, Sweep &amp; Compact, en revanche, ces inconvénients n&rsquo;existent pas. Le GC travaille en trois temps : dans le premier, il marque les objets vivants. Les objets morts sont ensuite supprimés, ce qui a pour effet de fragmenter la mémoire. La mémoire devra alors être compactée pour que l&rsquo;espace libéré forme un bloc contigu.</p>
<p>L&rsquo;avantage de cette stratégie est donc la vitesse d&rsquo;exécution des deux premières phases et la moindre consommation mémoire. L&rsquo;inconvénient est que la phase de défragmentation est quant à elle très coûteuse en temps.</p>
<h3>Le choix d&rsquo;un Garbage Collector</h3>
<p>Plusieurs garbage collectors ont été développés pour permettre la récupération de la mémoire dans différents contextes. On distingue les GC qui travaillent dans la young generation de ceux qui travaillent dans la old generation. Dans cet article, intéressons nous aux GC les plus fréquemment utilisés : ParallelGC (young) + ParallelOldGC (old) et ParNew (young) + CMS (old).</p>
<h3>Les GC Parallel et ParallelOld</h3>
<p>Initialement, le garbage collector de la JVM n&rsquo;utilisait qu&rsquo;un seul thread, ce qui rendait son exécution particulièrement longue sur les heap de plusieurs giga-octets. Les GC &quot;Parallel&quot; permettent de régler ce problème en créant un nombre de threads proportionnel au nombre de cores disponibles sur le serveur.</p>
<p>Les GC &quot;Parallel&quot; font partie de la catégorie &quot;Throughput&quot;. Leur objectif est de récupérer le plus de mémoire possible en un minimum de temps. Ils sont utilisés dans des applications sans contrainte &quot;temps-réel&quot; car les pauses peuvent être assez longues (plusieurs secondes). On les active, par exemple, sur les traitements batchs.</p>
<p>Ces garbage collectors offrent le meilleur ratio entre overhead et mémoire libérée.</p>
<p>Dans la young generation, on peut activer le GC Parallel via l&rsquo;option -XX:+UseParallelGC. Ce dernier suit la stratégie Mark &amp; Evacuate et a donc un temps d&rsquo;exécution proportionnel au nombre d&rsquo;objets vivants dans la young generation. Dans une JVM correctement tunée, avec une heap de quelques Go, les temps de pause se comptent en dizaines de millisecondes.</p>
<p>Dans la old generation, on peut activer le GC Parallel via l&rsquo;option -XX:+UseParallelOldGC. Celui-ci suit la stratégie Mark, Sweep &amp; Compact et a donc un temps d&rsquo;exécution plus long car proportionnel à la taille de la heap. Dans une JVM correctement tunée, pour une heap de quelques Go, les pauses du ParallelOldGC peuvent prendre plusieurs secondes. Ces temps de pauses augmentent considérablement lorsque la taille de la heap se compte en dizaines de Go.</p>
<p>Il est possible de spécifier le nombre de threads utilisables par les GC parallèles via l&rsquo;option ParallelGCThreads (par exemple, pour 8 threads, -XX:ParallelGCThreads=8).</p>
<h3>Les GC ParNew et CMS</h3>
<p>Les garbage collectors parallels sont particulièrement inadaptés aux problématiques temps réel. Par exemple, sur des sites à très fort traffic comme Twitter, des pauses de plusieurs secondes ne seraient pas acceptables. Deux garbage collectors ont donc été ajoutés : CMS (Concurrent Mark &amp; Sweep) et ParNew. Ils permettent de minimiser les temps de pause, mais impliquent un overhead plus important.</p>
<p>Ces deux garbage collectors offrent le meilleur ratio entre temps de pause et mémoire libérée.</p>
<p>Dans la young generation, on peut activer le GC ParNew via l&rsquo;option -XX:+UseParNewGC. Ce dernier est relativement semblable au ParallelGC (stratégie Mark &amp; Evacuate, temps d&rsquo;exécution proportionnel au nombre d&rsquo;objets vivants) à la différence près qu&rsquo;il a un overhead plus important que ce dernier. La principale caractéristique de ParNew est qu&rsquo;il est compatible avec CMS et qu&rsquo;il peut lui envoyer des informations sur l&rsquo;utilisation de la young generation, chose que le ParallelGC ne peut pas faire. Les pauses de ParNew sont bloquantes et sont de l&rsquo;ordre de la milliseconde dans une JVM correctement tunée.</p>
<p>Dans la old generation, on peut activer le GC CMS via l&rsquo;option -XX:+UseConcMarkSweepGC. Comme pour ParallelOldGC, il a un temps d&rsquo;exécution proportionnel à la taille de la heap. En revanche, l&rsquo;exécution de CMS ne bloque pas les threads de la JVM, elle se fait pendant l&rsquo;exécution de l&rsquo;application et partage donc le temps CPU avec cette dernière.</p>
<p>CMS suit la stratégie Mark, Sweep &amp; Compact mais n&rsquo;effectue la compaction qu&rsquo;en dernier recours, c&rsquo;est à dire lorsque la heap est tellement fragmentée qu&rsquo;un objet de la young generation ne peut pas être déplacé dans la old generation car il n&rsquo;existe pas de bloc contigu suffisamment grand pour l&rsquo;y acueillir. Dans ce cas de figure, on parle alors de promotion failure et la JVM déclenche un Full GC parallèle (bloquant) pour compacter la heap.</p>
<p>Grâce à la communication entre ParNew et CMS, il est possible de déclencher un cycle de CMS lorsque l&rsquo;utilisation de la young generation dépasse un certain seuil, donné par l&rsquo;option InitiatingHeapOccupancyPercent en pourcentage (valeur par défaut : 45%).</p>
<h3>Le GC Garbage First</h3>
<p>Un nouveau garbage collector baptisé G1 (Garbage First) a été introduit en version béta dans la JVM 1.6 et est considéré stable depuis la JVM 1.7.</p>
<p>La force de G1 tient dans les objectifs qui peuvent lui être définis. Par exemple, si l&rsquo;on souhaite qu&rsquo;aucune pause ne dépasse 300ms, il suffit de spécifier l&rsquo;option -XX:MaxGCPauseMillis=300 pour que les cycles de G1 s&rsquo;arrêtent une fois ce délai dépassé.</p>
<p>Attention toutefois à ne pas spécifier une limite trop basse. Si la durée maximale est trop faible, G1 se déclenchera plus souvent pour pouvoir libérer de la mémoire et cela aura donc un effet contre-productif. Si malgré des déclenchements plus fréquents, la heap est complètement remplie, la JVM déclenche un Full GC parallèle qui est bloquant pour nettoyer toute la heap.</p>
<h3>Objectifs de tuning et indicateurs</h3>
<p>Lorsque l&rsquo;on souhaite affiner le comportement de la JVM, il est important de définir des métriques qui vont permettre de mesurer l&rsquo;état d&rsquo;une application en fonction du temps. Les indicateurs les plus souvent utilisés sont :</p>
<ul>
<li>
<p>Temps passé dans le GC sur toute la durée de l&rsquo;application en pourcentage. Lorsque cet indicateur est supérieur à 5%, cela signifie que des actions peuvent être menées sur la heap, le garbage collector ou le code de l&rsquo;application.</p>
</li>
<li>
<p>Temps passé dans le GC par minute (minimum, moyenne et maximum). Cet indicateur fonctionne sur le même principe que le précédent mais indique en plus la durée maximale de pause que l&rsquo;application a subi</p>
</li>
<li>
<p>Fréquence de lancement des GC. Lorsque cet indicateur est élevé, il faut analyser la quantité de mémoire libérée à chaque GC pour déterminer un éventuel problème de dimensionnement de la heap</p>
</li>
<li>
<p>Nombre de Full GC. Les full GC bloquent l&rsquo;application, il faut donc faire en sorte d&rsquo;avoir un nombre de Full GC proche de 0.</p>
</li>
</ul>
<h3>Piège 1 : Ne pas activer les logs GC</h3>
<p>Il est assez fréquent de voir des applications sur lesquelles les logs GC ne sont pas activés par peur que cela allonge le temps de collection. Ces craintes sont généralement toujours infondées car la quantité d&rsquo;information écrite par le GC dans son log est très faible (de l&rsquo;ordre d&rsquo;un ou deux tweets).</p>
<p>Le vrai problème que cause ce piège est que sans les logs du GC, il est impossible de connaître les informations qui permettront de tuner efficacement une JVM, comme par exemple l&rsquo;utilisation des différents espaces, ou la vitesse de création des objets.</p>
<h3>Piège 2 : Fixer au démarrage la taille de la heap</h3>
<p>L&rsquo;un des paramétrages fréquemment constatés dans une JVM est le pattern Xms=Xmx (ou sa variante ms=mx). Il permet d&rsquo;allouer toute la mémoire dont la JVM aura besoin à son démarrage et de ne jamais restituer cette mémoire à l&rsquo;OS. La justification habituelle de ce pattern est que cela permet de s&rsquo;affranchir d&rsquo;appels systèmes malloc et free, qui sont coûteux, et donc d&rsquo;améliorer les performances de la JVM.</p>
<p>Cependant, ce paramétrage est rarement une bonne idée.</p>
<p>Plus la heap est volumineuse, plus les temps d&rsquo;exécution du garbage collector vont être importants. La réduction de la taille de la heap peut être une stratégie utilisée par la JVM pour améliorer les performances de l&rsquo;application en diminuant les pauses du GC, or si la taille de la heap n&rsquo;est pas modifiable, cette stratégie ne peut pas être implémentée.</p>
<p>Il faut également savoir que l&rsquo;augmentation et la diminution de la taille de la heap ne se font que lors de full GC, c&rsquo;est à dire que lorsque l&rsquo;application est déjà en pause. Or une JVM correctement tunée passe moins de 5% de son temps dans des full GC. En résumé, ce pattern tente d&rsquo;accélérer une portion marginale de l&rsquo;exécution d&rsquo;une application, tout en entraînant une diminution des performances globales.</p>
<h3>Piège 3 : libérer la mémoire avec System.gc()</h3>
<p>On tombe parfois sur des appels à System.gc() ou Runtime.gc() dans certaines bases de code. L&rsquo;idée est alors de forcer le démarrage du garbage collector plutôt que de le subir.</p>
<p>Cette approche a plusieurs inconvénients. Tout d&rsquo;abord, d&rsquo;après la spécification Java, un appel à System.gc() n&rsquo;entraîne pas nécessairement le démarrage du Garbage Collector. Il ne faut donc pas nécessairement partir du postulat &quot;Un appel à System.gc() lance le garbage collector&quot;. Dans OpenJDK, cette méthode déclenche effectivement le garbage collector, mais il ne s&rsquo;agit que d&rsquo;un détail d&rsquo;implémentation.</p>
<p>Mais le véritable problème est que c&rsquo;est un full GC qui est déclenché, ce qui provoquera une pause dans l&rsquo;application pour aller collecter des objets dans toute la heap (young et old generation, éventuellement permanent generation).</p>
<p>Si le traitement précédant l&rsquo;appel à System.gc() a produit des objets à faible durée de vie, alors ces derniers ont probablement déjà été collectés par un young GC, ce qui veut dire que nous allons collecter toute la heap pour récupérer des objets déjà éliminés. Dans le cas contraire, rien ne nous garantit qu&rsquo;un Full GC n&rsquo;a pas déjà été exécuté, on aboutit alors à deux full GC au lieu d&rsquo;un seul.</p>
<p>Il est possible de désactiver totalement la méthode System.gc() sur toute une JVM par le paramètre -XX:+DisableExplicitGC, mais ceci ne fonctionne que sur OpenJDK et n&rsquo;est qu&rsquo;une solution de contournement.</p>
<p>Lorsque l&rsquo;on paramètre une JVM, on essaye d&rsquo;obtenir le moins de Full GC possible, et les appels à System.gc() rendent cet objectif inatteignable.</p>
<h3>Conclusion</h3>
<p>La JVM, dans son paramétrage par défaut, tente de s&rsquo;adapter le plus possible au profil de consommation mémoire de l&rsquo;application. Lorsque l&rsquo;on souhaite affiner le comportement de la JVM, il faut s&rsquo;assurer de comprendre la situation courante et d&rsquo;avoir les informations requises pour pouvoir justifier qu&rsquo;un paramétrage différent donnera de meilleurs résultats. Pour cela, il est impératif d&rsquo;avoir les logs d&rsquo;exécution du GC et de solides connaissances sur le fonctionnement des GC.</p>
<p>Dans cet article, nous avons pu voir que la gestion de la mémoire est un sujet très complexe et passionnant. Les ressources sont nombreuses sur le sujet et il ne faut pas hésiter à expérimenter pour bien comprendre le fonctionnement interne de la JVM.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/06/03/comprendre-le-fonctionnement-de-la-jvm-article-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Les outils du développeur moderne</title>
		<link>http://blog.xebia.fr/2013/05/31/les-outils-du-developpeur-moderne/</link>
		<comments>http://blog.xebia.fr/2013/05/31/les-outils-du-developpeur-moderne/#comments</comments>
		<pubDate>Fri, 31 May 2013 08:34:18 +0000</pubDate>
		<dc:creator>Guillaume Balaine</dc:creator>
				<category><![CDATA[Java / JEE]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14345</guid>
		<description><![CDATA[L’âge de pierre du développement logiciel a été dominé par la répétition de tâches : coder, compiler, livrer. Au fil des ans, les développeurs des différentes tribus ont développés leurs “bifaces” pour s’améliorer : outils de build, de packaging et autres. Les développeurs ont gagné en efficacité et se sont libérés du temps pour des [...]]]></description>
				<content:encoded><![CDATA[
<p>L’âge de pierre du développement logiciel a été dominé par la répétition de tâches : coder, compiler, livrer. Au fil des ans, les développeurs des différentes tribus ont développés leurs “bifaces” pour s’améliorer : outils de build, de packaging et autres. Les développeurs ont gagné en efficacité et se sont libérés du temps pour des tâches plus nobles, telles que les tests automatisés, l’optimisation, l’architecture logicielle ou plus simplement le métier de l’application. De nos jours, les outils de développements sont légion, et il en apparaît de nouveaux régulièrement. Ainsi, il devient parfois difficile de s’y retrouver. </p>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Evaluerunoutil">Evaluer un outil</h3>
<p>Comme le dit un proverbe Français : “Les mauvais ouvrier ont toujours de mauvais outils”. Mais qu’est-ce qu’on bon outil, et plus particulièrement, un bon outil de développement logiciel ? Quel intérêt d’investir du temps et de chercher de meilleurs outils que ceux qui sont en place ? Quel gain pour mon projet, mon équipe ? Et ces nouveaux outils, quels sont-ils ?</p>
<p>Les outils de développement recouvrent à la fois, les capacités du système d’exploitation, du langage de programmation utilisé, mais aussi de l’IDE et des différents frameworks que vous pouvez être amenés à choisir. Tout programme pouvant aider le développeur à travailler de façon plus efficace est un outil de développement. Voici les qualités que nous sommes en droit d’attendre d’eux :</p>
<ul>
<li><strong>Productivité :</strong> Un outil doit permettre d&rsquo;effectuer une tâche plus rapidement, ou plus efficacement, et avec une qualité au moins égale à la procédure qui le précède.</li>
<li><strong>Intégrabilité :</strong> Être opérable dans mon environnement, sans perturber ma chaîne d&rsquo;outil, si possible être en synergie avec les autres outils et fonctionner sur plusieurs OS.</li>
<li><strong>Fiabilité :</strong> Être fiable, fonctionner en adéquation avec la documentation, et de façon homogène en fonction des environnements.</li>
<li><strong>Simplicité :</strong> Être facile à prendre en main et ne pas devenir un obstacle dans mon workflow.</li>
</ul>
<p>Nous allons passer en revue les outils qui peuvent vous changer la vie au cours du cycle de vie d&rsquo;un projet.</p>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Concevoir">Concevoir</h3>
<p>La conception est le départ des idées et la définition sur laquelle se basera le développement. Avant d’être avancée ou technique, elle doit être claire. Les outils d’aide à la conception vous permettront de produire une représentation compréhensible par tous les intervenants sur un projet, de partager une vision. Il faut privilégier les outils simples et schématiques :</p>
<ul>
<li>FreeMind est un outil open source pour faire des &quot;Mind Maps&quot;, c&rsquo;est à dire des diagrammes à idées avec des liens entre elles.</li>
<li>Google Docs propose des outils &quot;office&quot; classiques gratuits et concis et qui vont droit au but, de plus il est très simple de faire de l&rsquo;édition concurrente.</li>
<li>yEd est un outil de modélisation utilisé notamment par le projet Apache Ivy, on peut y faire de l&rsquo;UML, du BPMN ou tout autre type de représentation populaire, l&rsquo;outil est gratuit et très simple à prendre en main.</li>
</ul>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Partager...">Partager&#8230;</h3>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-...labasedecode">&#8230; la base de code</h4>
<p>Partager des fichiers et la base de code est essentiel dans un projet. La meilleure façon de le faire est d’utiliser un outil de gestion des sources. Subversion a été longtemps populaire, mais depuis quelques années, l’outil montant est Git, créé par Linus Torvald pour gérer les sources du projet Linux.</p>
<p>Le principal avantage de Git sur Subversion est que chaque développeur peut faire des commits sur sa machine sans impacter directement le dépôt commun. Cela permet donc aux développeurs :</p>
<ul>
<li>de faire des commits plus petits, ce qui facilite les merge par Git ;</li>
<li>de réduire l’effort de merge manuel quand il y a malgré tout des conflits.</li>
</ul>
<p>Git possède également des algorithmes de merge de fichier beaucoup plus performants que Subversion. Le travail en local sur chaque poste facilite les manipulations de branches et les développeurs acquièrent rapidement plus de maîtrise sur leur base de code.</p>
<p>De nombreux outils permettent de gérer ces dépôts de manière distribuée, en proposant des batteries d&rsquo;outils de gestion de projet et d’interaction avec les autres développeurs autour de votre base de code. <br />Le plus populaire est de loin Github, gratuit pour les projets open source. Gitlab est une version open source à installer soi-même. <br />Il existe aussi des outils graphiques tels que gitk, SourceTree d&rsquo;Atlassian, qui lui est payant. Enfin, Git s&rsquo;intègre aussi très bien à Eclipse via EGit et IntelliJ.</p>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-...letravail">&#8230; le travail</h4>
<p>Il est également appréciable d&rsquo;avoir un outil de gestion des tâches qui intègre la méthodologie Agile et le cycle de vie d&rsquo;une tâche dans un backlog (journal de bord) Kanban ou Scrum par exemple.<br />Pour ce faire les principaux sont JIRA d&rsquo;Atlassian (payant), Redmine (open source), Mantis (open source) et Trello (en ligne, gratuit), mais les plateformes de gestion des sources comme Github possèdent leur propre système.<br />Ces outils possèdent tous des APIs qui permettent de les intégrer à des SI et des outils de reporting existants. Grâce à cette trace gardée dans ces outils, on peut facilement retrouver les spécifications d&rsquo;une implémentation et éventuellement le code associé, ce qui réduit dramatiquement le temps de résolution des erreurs et améliore la maintenabilité des projets, permettant d&rsquo;allouer des ressources à l&rsquo;avancement de celui-ci.</p>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Coderavec...">Coder avec &#8230;</h3>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-...unlangage"><span style="font-size: 10.0pt;line-height: 13.0pt;">&#8230; un langage</span></h4>
<p>Malheureusement le cadre de cet article ne nous permet pas de traiter de tous les langages de programmation prêts pour de vrai projets de production. Il faudrait un livre entier pour traiter des différents points forts et faibles de chacun. Nous allons nous limiter à quatre langages qui ont la côte ces derniers temps :</p>
<ul>
<li>Java : Le leader, très grosse communauté, beaucoup d&rsquo;outils ;</li>
<li>Groovy : Présent dans beaucoup de projets sous forme de scripting, d&rsquo;outils de monitoring ;</li>
<li>Scala : Le langage fonctionnel qui monte ;</li>
<li>JavaScript : L&rsquo;assembleur du web, qui passe maintenant côté serveur.</li>
</ul>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-...unIDE">&#8230; un IDE</h4>
<p>Les environnements de développement les plus populaires sont IntelliJ et Eclipse. Ces deux IDE permettent de développer dans à peu près n&rsquo;importe quel langage. Pour choisir votre IDE de rêve, penser à soupeser :</p>
<ul>
<li>L’intégration des technologies que vous utilisez : compilation automatique, complétion de code, formatage, plugins dédiés aux frameworks utilisés, moteur de templates ;</li>
<li>Un contrôle complet à partir du clavier pour une productivité maximale ;</li>
<li>Zero Turn Around : mon IDE doit être capable de minimiser le temps entre l&rsquo;écriture de mon code et le feedback (tests ou redéploiement) ;</li>
<li>Build incrémental : les classes modifiées doivent être recompilées rapidement, sans déclencher un build complet ;</li>
<li>Les capacité de refactoring.</li>
</ul>
<p>Il arrive parfois que ces deux IDE phares soient tout simplement trop gros pour votre projet. Parmi les éditeurs de texte à fort potentiel pour les développeurs, je vous conseille SublimeText. Pour les puristes, Emacs, Vi ou TextMate remplissent toujours leur rôle avec brio.</p>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-…unFramework">… un Framework</h4>
<p>Le Framework, comme son nom l’indique, offre un cadre de travail pour des technologies à travers un certain nombre de concepts. La problématique du Web est riche, et il est intéressant de voir comment les nouveaux frameworks tentent de répondre à la fois à ses impératifs, et de satisfaire les besoins d’industrialisation des SI d’entreprise.</p>
<p>Il existe aujourd’hui deux Frameworks Web en vogue pour la JVM intégrant de nombreuses JSR :</p>
<ul>
<li>Grails, grâce à son moteur de plugins, et aux principes Convention Over Configuration et Don’t Repeat Yourself (Groovy, Spring), permet de démarrer des projets en un temps record et d’intégrer toutes sortes de technologies externes. Il permet de faire du Domain Driven Development et de générer une application entière à partir d’un simple modèle de données.</li>
<li>Play, grâce à la forte optimisation du langage Scala par la compilation statique et à son footprint mémoire faible, est un framework à haute performance. De plus, son modèle d’IO itératif, permet d’être directement asynchrone, ce qui est nécessaire pour des applications web utilisées à grande échelle.</li>
</ul>
<p>Pour rester dans le Web, depuis la montée en puissance de HTML5, un nouveau framework Javascript naît chaque mois. L&rsquo;un des plus prometteurs est AngularJS. Le but de ces frameworks est de créer des applications Web performantes tout en respectant les standards W3C. AngularJS est un MVC côté client. Il embarque des directives (mise à jour du DOM), de l’injection de dépendances entre composants, des intercepteurs pour les requêtes http, et des services (injectables et réutilisables dans les controleurs), et surtout une méthodologie de tests unitaires, basée sur Testacular.</p>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Tester…">Tester …</h3>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-…unitairement">… unitairement</h4>
<p>Tester le code est fondamental. Les tests unitaires sont là pour tester la logique interne de chaque méthode. Idéalement on appliquera le Test Driven Development qui permet d&rsquo;avoir un code plus proche des spécifications.<br /> Quelques librairies disponibles :</p>
<ul>
<li>Java : FestAssert, Mockito ;</li>
<li>Groovy : Spock, Geb ;</li>
<li>Scala : ScalaTest, Specs2 ;</li>
<li>Javascript : Testacular, Qunit.</li>
</ul>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-…enintégration">… en intégration</h4>
<p>La dynamique entre les composants doit également être testée à travers les tests d&rsquo;intégration et fonctionnels. <br />Pour tester des pages web, PhantomJS ou son spin-off CasperJS permettent d’émuler un navigateur et exécuter des scénarios sous forme de script Javascript.<br />Dans le cas d’une API REST écrite avec la JSR 311 (JAX-RS), Apache CXF permet de générer automatiquement des clients de test.</p>
<h4 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-…souspression">… sous pression</h4>
<p>Souvent délaissés par manque de temps ou délégués à des équipes dédiées, les tests de performance doivent être intégrés au plut tôt dans le cycle de développement pour évacuer des problèmes structurants pour l&rsquo;application. Pour nous aider, il existe un certain nombre d&rsquo;injecteurs, citons :</p>
<ul>
<li>Gatling permet d’exécuter des scénarios à l&rsquo;aide d&rsquo;une DSL écrite en Scala, consomme peu de ressources et s&rsquo;intègre bien avec Maven et Jenkins.</li>
<li>JMeter a une interface graphique plus complète et peut adresser un large panel de protocoles</li>
</ul>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Livrer">Livrer</h3>
<p>Pour s’assurer en permanence que l’application est livrable, il faut automatiser le build, les tests automatisés et le packaging. Il existe un certain nombre de serveurs d&rsquo;intégration continu (CI) qui permettent d&rsquo;ordonnancer ces étapes. Le plus populaire est sans doute Jenkins, dont Cloudbees propose un hébergement en ligne, ainsi que Travis, plus ouvert sur les autres langage que Java.</p>
<p>Pour automatiser le déploiement de machines dans un environnement Cloud, il existe Chef, Capistrano et Puppet, ainsi que des outils en ligne tels qu’Amazon Web Services. Ce sont généralement des scripts qui déploient des machines ou des ASGs (Auto Scaling Group) dans le Cloud puis activent des services tels que les connecteurs à des bases de données ou l&rsquo;installation de serveurs.</p>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Monitoreretdebugger">Monitorer et debugger</h3>
<p>Votre application est enfin codée, testée, livrée, mais il y a des soucis en production. Pour vous aider à poser un diagnostic, la boite à outils s’alourdit encore un peu. Tout d’abord, il y a des outils de console essentiels pour démarrer l’analyse :</p>
<ul>
<li>nmap : scanner de ports, vous permettra de vite trouver les erreurs de visibilité réseau ou de configuration de firewall ;</li>
<li>lsof, ps, top : déterminer quels programmes sont lancés et utilisent une ressource dans le système ;</li>
<li>ssh, scp : se connecter à une machine distante et y copier des fichiers, créer des tunnels pour connecter des programmes à travers une machine.</li>
</ul>
<p>Si les problèmes se trouvent dans une page Web, tournez vous alors vers Firebug, Chrome Dev Tools ou modern.ie, suivant votre navigateur. Il y a là tout le nécessaire pour faire de l’introspection de page.</p>
<p>Pour pouvoir tirer de l’information des entrailles de votre application, il reste les logs et le monitoring. Pour ça, penchez vous sur :</p>
<ul>
<li>Graphite : pour effectuer des graphes de toutes les métriques de votre application ;</li>
<li>JavaMelody : Pour vérifier l&rsquo;activité du réseau et des requêtes ;</li>
<li>VisualVM : pour observer vos Thread applicatifs et l’utilisation de la mémoire en direct ;</li>
<li>Nagios ou Ganglia : Plateforme de monitoring et de lancement d’alerte pour être prévenu au plus tôt des pannes ;</li>
<li>Logstash ou Graylog2 : si la gestion et l’analyse de vos log est complexe.</li>
</ul>
<h3 id="Lesoutilsdudéveloppeurmoderne(pourlejournalProgrammez)-Conclusion">Conclusion</h3>
<p>Les bénéfices cumulés des outils de développement contrebalancent largement le coût initial et leur support. Ils peuvent changer complètement la vie d’un projet, les développeurs pouvant se concentrer sur de la vraie valeur ajoutée : la qualité des livrables.</p>
<p>Nous n’avons traité ici que quatre langages, mais n’allez pas vous imaginer qu’ils sont les seuls à être outillés, C#, Ruby, Clojure, et les autres, recèlent aussi de nombreuses pépites, comme Cucumber ou Luminus par exemple. Cela sera peut-être le sujet d’un prochain chapitre.</p>
<p>Gardez à l&rsquo;esprit que le meilleur outil est celui qui vous va et qui vous facilite la vie. A vous maintenant de vous forger votre boite à outil sur mesure, adaptée à vos contraintes. Testez, mesurez les gains, jugez, recommencez.</p>
<p> </p>
<p> </p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/31/les-outils-du-developpeur-moderne/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>What&#8217;s new in Android ?</title>
		<link>http://blog.xebia.fr/2013/05/30/whats-new-in-android/</link>
		<comments>http://blog.xebia.fr/2013/05/30/whats-new-in-android/#comments</comments>
		<pubDate>Thu, 30 May 2013 07:34:00 +0000</pubDate>
		<dc:creator>Thomas Guerin</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google Cloud Messaging]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14332</guid>
		<description><![CDATA[Google I/O s&#8217;est terminé le 17 mai et après 3 jours de sessions non stop, il est temps de revenir sur les annonces faites lors de la conférence. En  2013, Android représente au total pas moins de 900 millions d&#8217;activations avec près de 2.5 milliard d&#8217;applications installées chaque mois. Ces chiffres confirment la bonne santé de l&#8217;OS [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/defi-android-logoandroid.jpeg" target="_blank"><img width="100" src="http://blog.xebia.fr/wp-content/uploads/2013/05/defi-android-logoandroid-96x96.jpeg" style="float:right; margin:0 0 10px 10px;" /></a>Google I/O s&rsquo;est terminé le 17 mai et après 3 jours de sessions non stop, il est temps de revenir sur les annonces faites lors de la conférence. En  2013, Android représente au total pas moins de 900 millions d&rsquo;activations avec près de 2.5 milliard d&rsquo;applications installées chaque mois. Ces chiffres confirment la bonne santé de l&rsquo;OS mobile au robot vert. Les annonces de cette année vont d&rsquo;ailleurs dans ce sens car les développeurs de la plateforme Android ont eu le droit à leur lot de bonnes nouvelles.</p>
<h3 id="What&#39;snewinAndroid?-AndroidStudio">Android Studio</h3>
<p>Une des plus grosses surprises reste l&rsquo;annonce du nouvel environnement de développement : Android Studio. En effet après des années à développer le plugin ADT pour Eclipse, Google s&rsquo;oriente maintenant vers un IDE qui s&rsquo;appuie sur IntelliJ. JetBrains a d&rsquo;ailleurs écrit une <a href="http://blogs.jetbrains.com/idea/2013/05/intellij-idea-and-android-studio-faq/" rel="nofollow">entrée dans leur blog</a> suite aux nombreuses questions suscitées par cette annonce. Il en ressort qu&rsquo;Android Studio et le plugin Android d&rsquo;IntelliJ sont construits à partir de la même base de code. Toutes les nouvelles fonctionnalités présentes dans Android Studio seront donc disponibles dans les prochaines releases de la version 13 d&rsquo;IntelliJ.</p>
<p>Android studio est actuellement disponible en <a href="http://developer.android.com/sdk/installing/studio.html" rel="nofollow">early preview</a> et dispose de nouvelles fonctionnalités intéressantes dont notamment :</p>
<ul>
<li>Le support du nouveau système de build : Gradle,</li>
<li>Un éditeur graphique plus abouti, permettant de voir le rendu sur plusieurs devices en même temps,</li>
<li>Possibilité de voir la valeur d&rsquo;une ressource suivant la langue directement dans le code. </li>
</ul>
<h3 id="What&#39;snewinAndroid?-Unnouveausystèmedebuild">Un nouveau système de build</h3>
<p>Lors de la présentation <a href="https://developers.google.com/live/shows/599297362/" rel="nofollow">&quot;The New Android SDK Build System&quot;</a>, Xavier Ducrochet nous a introduit le nouveau système de build pour Android : Gradle. Le plugin Android est actuellement en <a href="http://tools.android.com/tech-docs/new-build-system" rel="nofollow">version 0.4.1</a> et propose déjà un ensemble de fonctionnalités prometteuses. Entre autres un système de flavors qui permet de construire différentes versions d&rsquo;une même application mais aussi de facilement mettre en place du multi-apk. Pour plus d&rsquo;informations concernant ce système de build, la <a href="http://tools.android.com/tech-docs/new-build-system/user-guide" rel="nofollow">documentation officielle</a> est vraiment claire et met à disposition des projets d&rsquo;exemple.</p>
<p>Cette annonce va de paire avec celle d&rsquo;Android Studio qui intègre déjà le support de Gradle. Seule ombre au tableau, ce plugin utilise un nouveau format (.aar) pour packager les librairies nécessitant des ressources Android qui n&rsquo;est pas compatible avec le format apklib de Maven Android. Il faut attendre la séance de questions pour apprendre qu&rsquo;il est prévu que le plugin Maven pour Android utilise ce nouveau format. D&rsquo;ailleurs certaines librairies comme ActionBarSherlock <a href="https://github.com/JakeWharton/ActionBarSherlock/blob/dev/build.gradle" rel="nofollow">prévoit déjà de le supporter</a>. </p>
<h3 id="What&#39;snewinAndroid?-GooglePlayServices">Google Play Services</h3>
<h4 id="What&#39;snewinAndroid?-LocationAPIs">Location APIs</h4>
<p>C&rsquo;est au cours de la keynote que les nouveaux services intégrés dans le projet Google Play Services ont été présentés. Tout d&rsquo;abord trois nouvelles API de localisation font leur apparition :</p>
<ul>
<li><a href="https://developer.android.com/training/location/retrieve-current.html" rel="nofollow">Fused Location Provider</a> : API de haut niveau permettant de s&rsquo;abstraire des location providers (GPS, WI-FI) pour récupérer les informations de géolocalisation adaptées au besoin, </li>
<li><a href="http://developer.android.com/training/location/activity-recognition.html" rel="nofollow">Activity Recognition</a> : API capable de déterminer l&rsquo;activité de l&rsquo;utilisateur (en voiture, à vélo &#8230;) afin de permettre aux applications de s&rsquo;adapter au contexte d&rsquo;utilisation en améliorant ainsi l&rsquo;expérience utilisateur,</li>
<li><a href="http://developer.android.com/training/location/geofencing.html" rel="nofollow">Geofencing</a> : offre la possibilité de déclencher des triggers quand un utilisateur entre ou sort de zones géographiques précises.</li>
</ul>
<p>Avec ces nouvelles API, le développement d&rsquo;application dont le contenu nécessite de s&rsquo;adapter au contexte d&rsquo;utilisation devrait être simplifié. Elles ont aussi pour but de réduire la consommation de batterie liée à la récupération d&rsquo;informations de géolocalisation.</p>
<h4 id="What&#39;snewinAndroid?-GameServices">Game Services</h4>
<p>Il s&rsquo;agit d&rsquo;un ensemble de fonctionnalités qui permettent de rendre les jeux plus attractifs auprès des utilisateurs. Il est maintenant possible de mettre en place des récompenses ou des leaderboards afin de fidéliser le joueur. Afin d&rsquo;améliorer l&rsquo;expérience cross-device, l&rsquo;avancement d&rsquo;un jeu peut maintenant être sauvé dans le cloud afin de pouvoir reprendre sa partie, et ce, peu importe le device utilisé. Pour finir, le développement d&rsquo;applications multi-joueurs en temps réel est facilité avec ces nouvelles APIs.  </p>
<h4 id="What&#39;snewinAndroid?-GoogleCloudMessaging">Google Cloud Messaging</h4>
<p>Il fait maintenant partie intégrante du projet Google Play Services et se voit doté de nouvelles fonctionnalités :</p>
<ul>
<li><a href="http://developer.android.com/google/gcm/ccs.html" rel="nofollow">upstream</a> : bien qu&rsquo;abandonné par Hangout le protocole XMPP refait son apparition afin de permettre une communication bi-directionnelle entre le serveur et un device,</li>
<li><a href="http://developer.android.com/google/gcm/notifications.html" rel="nofollow">seamless multi-device messaging</a> : Google permet de grouper les devices d&rsquo;un même utilisateur afin d&rsquo;envoyer de manière uniforme des notifications à un utilisateur. Par exemple si un utilisateur reçoit la notification et traite l&rsquo;information sur son téléphone il ne l&rsquo;aura pas en double sur sa tablette par exemple. </li>
</ul>
<p>Le principal avantage des Google Play Services est qu&rsquo;ils sont mis à jour au travers du Play store indépendamment de la version de l&rsquo;OS (jusqu&rsquo;à la 2.2). Par contre les émulateurs actuels ne permettent pas de les tester nativement, c&rsquo;est pourquoi une image contenant les play services devrait voir le jour via le SDK Manager. Tous ces Google Play Services seront présentés plus en détails dans un prochain article.</p>
<h3 id="What&#39;snewinAndroid?-Traductionsimplifiée">Traduction simplifiée</h3>
<p>Google lance un nouveau service professionnel de traduction d&rsquo;application directement intégré dans la console Play. Il a été présenté plus en détails au cours de la session <a href="https://developers.google.com/live/shows/599819016/" rel="nofollow">&quot;Building Android Apps for Global Audience&quot;</a>. On y apprend que la tarification se fait au nombre de mots, le prix du mot variant d&rsquo;une langue à l&rsquo;autre. De plus l&rsquo;utilisateur est en mesure de suivre l&rsquo;état d&rsquo;avancement de ses traductions. Pour finir le traducteur peut, via un système de commentaires, demander des précisions concernant le contexte d&rsquo;utilisation d&rsquo;un mot afin de le traduire au mieux.</p>
<h3 id="What&#39;snewinAndroid?-Betatesting/Stagedrollouts">Beta testing/Staged rollouts</h3>
<p>Dans la nouvelle version de la console Play il est maintenant possible de faire tester une version d&rsquo;un apk à un ensemble réduit d&rsquo;utilisateurs. Ces groupes de testeurs peuvent être soit un Google Group soit une Google+ Community. Ces utilisateurs ne pourront pas laisser d&rsquo;avis publics directement sur Google Play, il faut donc penser à leur fournir un canal de communication spécifique (email, site web&#8230;)</p>
<p>En plus du beta testing, il est possible de faire du &quot;staged rollouts&quot;. Cela consiste à releaser de manière progressive une nouvelle version d&rsquo;une application afin de pouvoir contrôler l&rsquo;évolution de l&rsquo;avis des utilisateurs vis à vis des nouvelles fonctionnalités mais aussi s&rsquo;assurer que le nombre de crash n&rsquo;augmente pas. </p>
<h3 id="What&#39;snewinAndroid?-Etlesautresannonces...">Et les autres annonces&#8230;</h3>
<p>Lors de la session <a href="https://developers.google.com/live/shows/576596704/" rel="nofollow">&quot;Best Practices for Bluetooth Development&quot;</a>, on apprend qu&rsquo;il sera possible d&rsquo;utiliser la technologie <a href="http://en.wikipedia.org/wiki/Bluetooth_low_energy" rel="nofollow">Bluetooth Low Energy</a> à partir de la version 18 de l&rsquo;API sur les devices mettant à disposition cette technologie.</p>
<p>Pour finir la dernière annonce concerne la Google TV qu&rsquo;il a été possible d&rsquo;apercevoir fonctionner sous Jelly Bean. Une mise à jour vers la toute dernière version d&rsquo;Android devrait voir le jour au cours de l&rsquo;année.</p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/30/whats-new-in-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Graphite &#8211; les bases</title>
		<link>http://blog.xebia.fr/2013/05/29/graphite-les-bases/</link>
		<comments>http://blog.xebia.fr/2013/05/29/graphite-les-bases/#comments</comments>
		<pubDate>Wed, 29 May 2013 13:25:26 +0000</pubDate>
		<dc:creator>Charles Blonde</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[Java / JEE]]></category>
		<category><![CDATA[Graphite]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14316</guid>
		<description><![CDATA[Graphite est un outil pour grapher différentes métriques qui peuvent être aussi bien des indicateurs systèmes (utilisation CPU, espace disque disponible, etc &#8230;), des indicateurs applicatifs (utilisation de la heap d’une JVM, requêtes par secondes d’une base de données, etc.) ou des indicateurs métiers exposés en JMX par exemple. Théoriquement, il n’y a pas de limite [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://graphite.wikidot.com/" rel="nofollow">Graphite</a> est un outil pour grapher différentes métriques qui peuvent être aussi bien des indicateurs systèmes (utilisation CPU, espace disque disponible, etc &#8230;), des indicateurs applicatifs (utilisation de la heap d’une JVM, requêtes par secondes d’une base de données, etc.) ou des indicateurs métiers exposés en JMX par exemple. Théoriquement, il n’y a pas de limite aux informations qui peuvent être stockées dans Graphite du moment qu’il s’agit de données numériques. Il est très facile de créer ses propres indicateurs.</p>
<p>Si l’installation basique de Graphite est relativement aisée, les choses deviennent un peu plus complexes lorsqu’il s’agit d’optimiser l’installation et de comprendre son comportement interne pour l’adapter à vos besoins.
<p/>
<p>Dans cet article je parlerai uniquement des mécanismes de Graphite et de son installation dans un environnement mono-serveur. La montée en charge et la haute disponibilité ainsi que les outils s’appuyant sur Graphite feront l&rsquo;objet d’articles ultérieurs.</p>
<h3 id="Graphite-lesbases-Lesmécanismesdebase">Les mécanismes de base</h3>
<p>Lors de l&rsquo;installation initiale de Graphite, on se retrouve vite perdu dans les différents éléments à installer ainsi dans le grand nombre de fichiers de configuration différents. Il est donc important de faire le point sur le mode de fonctionnement interne de Graphite.</p>
<h4 id="Graphite-lesbases-LescomposantsdeGraphite">Les composants de Graphite</h4>
<p>Graphite est une application codée en Python, qui est composé de trois éléments distincts.</p>
<h5 id="Graphite-lesbases-Carbon">Carbon</h5>
<p>Il s’agit du ou des processus qui vont être responsables de la collecte des métriques. Le premier qui se nomme Carbon est composé de trois daemons :</p>
<ul>
<li><strong>carbon-cache.py</strong> : Processus qui collecte les données afin de les stocker par la suite. Il écoute par défaut sur les ports 2003 et/ou 2004.</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><strong>carbon-relay.py</strong> : Processus facultatif qui permet à Graphite de répliquer et de répartir les données entre plusieurs carbon-cache.py.</span></li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><strong>carbon-aggregator.py</strong> : Processus facultatif qui permet de bufferiser et d’agréger les données en amont du carbon-cache.py afin de limiter les écritures de données et ainsi réduire les IO qui sont en règle générale le premier facteur limitant.</span></li>
</ul>
<p>Dans une installation basique mono-serveur, seul le processus carbon-cache.py est utilisé.</p>
<h5 id="Graphite-lesbases-Whisper">Whisper</h5>
<p>Il s’agit de la base de données de type fichier à taille fixe utilisée pour stocker les métriques. Whisper est comparable à RRD (<a href="http://oss.oetiker.ch/rrdtool/" rel="nofollow">Round Robin Database</a>) et fournit à la fois une bibliothèque Python utilisée par Carbon et des outils en ligne de commande afin de manipuler les fichiers de données.</p>
<h5 id="Graphite-lesbases-GraphiteWebapp">Graphite Webapp</h5>
<p>Comme son nom l’indique, il s’agit de l’application web, écrite en Python et utilisable avec Apache (ou autre serveur HTTP) via le module WSGI.<br />L’application accède aux données provenant de Whisper et les affiche sous la forme de graphiques et de tableaux de bord.<br />Une base de données est nécessaire pour stocker uniquement les préférences utilisateurs et la sauvegarde des graphiques et des tableaux de bord. Par défaut, SQLite est utilisée, mais il est possible d’utiliser MySQL. Au vu de la faible volumétrie de données stockées, SQLite répond au besoin pour une installation mono-serveur.</p>
<p style="text-align: center;"><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/graphite.png" /></p>
<h4 id="Graphite-lesbases-Lesprotocoles">Les protocoles</h4>
<p>Plusieurs protocoles sont disponibles pour envoyer des informations vers Graphite.</p>
<h5 id="Graphite-lesbases-Textebrut">Texte brut</h5>
<p>Il s’agit du protocole standard le plus simple à utiliser. Le port par défaut pour envoyer des données en texte brut est le 2003. <br />Le format d’un message est le suivant :</p>
<pre class="brush: java; title: ; notranslate">&lt;path.de.la.metrique&gt; &lt;value&gt; &lt;timestamp (epoch in second)&gt;</pre>
<p>Il est très facile d’envoyer des messages dans ce format grâce à <em>nc</em> ou à un programme de quelques lignes de codes : il suffit d’écrire des chaînes de caractères dans une socket.</p>
<h5 id="Graphite-lesbases-Pickle">Pickle</h5>
<p>Dans ce protocole utilisant le port 2004 par défaut, l’objectif est de bufferiser les données afin de les envoyer par lot (avec une limite à 500 métriques environ afin d’éviter de dépasser les 1Mo/message). <br />Pour ce faire, Graphite utilise le mécanisme de “pickle” qui peut être considéré comme la sérialisation interne de Python. Ainsi, il est très délicat d’utiliser ce protocole avec un programme écrit dans un autre langage.<br />Le format des messages, avant sérialisation, est le suivant :</p>
<pre class="brush: java; title: ; notranslate">[(path, (timestamp, value)), ...] avec la taille du message comme entête.</pre>
<h5 id="Graphite-lesbases-AMQP">AMQP</h5>
<p>AMQP (pour Advanced Message Queuing Protocol, RabbitMQ par exemple) peut également être utilisé comme source de données. Dans ce cas, deux options sont disponibles :</p>
<ul>
<li>
<p>Le nom de la métrique est dans le routing key et le message a le format suivant :</p>
<pre class="brush: java; title: ; notranslate">&lt;value&gt; &lt;timestamp&gt;</pre>
</li>
<li>
<p>Le nom de la métrique est directement dans le message :</p>
<pre class="brush: java; title: ; notranslate">&lt;metric.path&gt; &lt;value&gt; &lt;timestamp&gt;</pre>
</li>
</ul>
<h4 id="Graphite-lesbases-Lesmétriques">Les métriques</h4>
<p>Chaque métrique est stockée dans son propre fichier qui par défaut a une taille fixe : il sera créé et alloué automatiquement lors de la première utilisation. Il est assez facile d’estimer l’occupation totale sur le système de fichiers.</p>
<p>Les métriques sont définies par un “chemin” séparé par des points. Par exemple :</p>
<pre class="brush: java; title: ; notranslate">servers.&lt;nom-serveur&gt;.cpu.total.idle
servers.&lt;nom-serveur&gt;.diskspace.root.byte_avail</pre>
<p>Le répertoire de stockage des métriques par défaut est /opt/graphite/storage/whisper et l’extension des fichiers utilisée est .wsp.</p>
<h3 id="Graphite-lesbases-Installationmono-serveur">Installation mono-serveur</h3>
<p>Dans cet article, nous allons faire l’installation de Graphite sur Amazon EC2 avec des distributions de type Amazon Linux qui sont basées sur des Red-Hat. Il est facile de faire le même type d’installation sur toute autre distribution où la principale différence résidera dans le nom des packages nécessaires.</p>
<p>Afin de générer du trafic, j’utilise <a href="https://github.com/BrightcoveOS/Diamond" rel="nofollow">Diamond</a>  qui est un outil pour collecter différentes métriques et ayant de nombreux plugins (collector). De base, seules les informations systèmes sont reportées.</p>
<p>Une fois connecté sur le serveur, l’installation à partir des binaires <a href="https://launchpad.net/graphite/0.9/0.9.10" rel="nofollow">disponibles sur Launchpad</a> est assez rapide. Lors de la rédaction de cet article, la dernière version stable de Graphite est la 0.9.10.</p>
<pre class="brush: bash; title: ; notranslate"># Installation des packages nécessaires (valable pour Redhat/CentOS/etc...)
sudo yum install django-tagging Django python-zope-interface pycairo python-twisted httpd mod_wsgi --enablerepo=epel

mkdir /tmp/graphite

#Installation de Carbon
cd /tmp/graphite/
wget https://launchpad.net/graphite/0.9/0.9.10/+download/carbon-0.9.10.tar.gz
tar xzf carbon-0.9.10.tar.gz
cd carbon-0.9.10
sudo python setup.py install

# Installation de Whisper
cd /tmp/graphite/
wget https://launchpad.net/graphite/0.9/0.9.10/+download/whisper-0.9.10.tar.gz
tar xzf whisper-0.9.10.tar.gz
cd whisper-0.9.10
sudo python setup.py install

#Installation de la Webapp
cd /tmp/graphite/
wget https://launchpad.net/graphite/0.9/0.9.10/+download/graphite-web-0.9.10.tar.gz
tar xzf graphite-web-0.9.10.tar.gz
cd graphite-web-0.9.10
sudo python setup.py install
#Configuration carbon
cd /opt/graphite/bin
sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

#Lancement de Carbon
sudo ./carbon-cache.py start

#Configuration de la webapp
sudo rm /etc/httpd/conf.d/wsgi.conf
sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/httpd/conf.d/vhost-graphite.conf
sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py
cd /opt/graphite/webapp/graphite

# Configuration de la base de données nécessaire pour la Webapp : sqlite par défaut. 
# Le script va créer la base de données et proposer de créer un compte utilisateur graphite
sudo python manage.py syncdb

# L’utilisateur apache doit pouvoir lire et écrire dans le répertoire de stockage
sudo chown -R apache:apache /opt/graphite/storage/

# Lancement d’Apache
sudo service httpd start</pre>
<p>À ce stade, vous avez un processus <em>carbon-cache.py</em> qui écoute sur les ports 2003 et 2004 pour recevoir des métriques et une application web disponible à travers Apache, qui écoute sur le port 80 et accessible via navigateur. Il s’agit cependant de la configuration par défaut qui risque vite de se trouver limitée.</p>
<h3 id="Graphite-lesbases-ConfigurationdeGraphite">Configuration de Graphite</h3>
<p>Si vous laissez fonctionner votre application quelques jours, vous allez rapidement vous rendre compte que la rétention des données par défaut est de 24h. Pour y remédier,  il est nécessaire de réaliser quelques ajustements.</p>
<h4 id="Graphite-lesbases-Stockage">Stockage</h4>
<p>La gestion du stockage est réalisée dans le fichier <em>storage-schemas.conf</em> et est composé d’un ensemble de bloc du type :</p>
<pre class="brush: java; title: ; notranslate">[title]
pattern = &lt;pattern-metric&gt;
retentions = &lt;retentions_rule&gt;</pre>
<p>où :</p>
<ul>
<li><em><u>title</u></em> : Un titre logique</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><u><em>pattern</em></u> : Il s’agit d’une expression régulière qui va être appliquée à chaque métrique et la première qui correspond sera utilisée. Les blocs sont lus dans l’ordre, du début du fichier jusqu’à la fin.</span></li>
<li>
<p><span style="font-size: 10.0pt;line-height: 13.0pt;"><u><em>retentions</em></u> : la règle de rétention à utiliser qui a la forme suivante </span></p>
<pre class="brush: java; title: ; notranslate">timePerPoint:timeToStore, timePerPoint:timeToStore, …</pre>
<p><span style="font-size: 10.0pt;line-height: 13.0pt;"> avec: </span></p>
<ul>
<li>timePerPoint : la durée d’un point (1sec, 1min, 10 min, 1h , etc …)</li>
<li>timeToStore : le temps de rétention avec cette précision (1 journée, 1 semaine, etc …)</li>
</ul>
</li>
</ul>
<h5 id="Graphite-lesbases-Quelquesexemples"><span style="font-size: 10.0pt;line-height: 13.0pt;">Quelques exemples</span></h5>
<pre class="brush: java; title: ; notranslate">[mongodb]
pattern = ^mongodb\.
retentions = 1s:4h, 1m:6d, 1d:1y</pre>
<p>Explications : Toutes les métriques qui commencent par “mongodb” vont être stockées de la façon suivante:</p>
<ul>
<li>1 point par seconde pendant 4h</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;">1 point par minute pendant 6 jours</span></li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;">1 point par jour pendant 1 an</span></li>
</ul>
<p>Taille du fichier par métrique : 275Ko.</p>
<pre class="brush: java; title: ; notranslate">[default]
pattern = .*
retentions = 1s:1d, 1m:30d, 1h:1y</pre>
<p>Explications : Pour toutes les métriques, stocker les données de la façon suivante :</p>
<ul>
<li>1 point par seconde pendant un jour</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;">1 point par minute pendant 1 mois</span></li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;">1 point par h pendant un an</span></li>
</ul>
<p>Taille du fichier par métrique : 1,6Mo</p>
<p>Vous avez maintenant configuré Graphite avec la précision que vous souhaitez. Relancez le service carbon-cache.py et&#8230;.rien ! En effet, ce fichier n’est lu que lorsqu’une métrique inconnue est reçue et qu’un nouveau fichier de données doit donc être créé. Les fichiers existants ne seront donc pas modifiés !</p>
<p>Dans ce cas vous avez deux solutions :</p>
<ul>
<li>Solution de facilité  : Vous pouvez vous permettre de perdre les données existantes et il suffit de supprimer le répertoire de stockage  (/opt/graphite/storage/whisper/ par défaut). Attention à un autre point cependant : par défaut et afin de limiter l’impact des créations de fichiers, Carbon va limiter le nombre de créations maximums de nouvelles métriques à 50 par minute. Ne vous inquiétez donc pas si certaines métriques n’apparaissent pas immédiatement (le processus-carbon-cache.py se monitor lui-même et il est donc possible de suivre le nombre de créations par minute directement dans Graphite)</li>
<li>
<p>Solution avec récupération des données : Whisper vient avec plusieurs outils de visualisation et de manipulation des données qui vont nous permettre de modifier la durée de rétention. Exemple d’utilisation pour une métrique bien précise : </p>
<pre class="brush: bash; title: ; notranslate">sudo whisper-resize.py &lt;link-to-wsp-file&gt; 1s:4h 1m:6d 1d:1y</pre>
<p>Il est bien sûr possible de faire des modifications en masse en scriptant un petit peu: </p>
<pre class="brush: bash; title: ; notranslate">find /opt/graphite/storage/whisper/servers/ -name &quot;*.wsp&quot; -exec sudo whisper-resize.py --nobackup {} 1s:4h 1m:6d 1d:1y \;</pre>
</li>
</ul>
<p>Il est aussi possible d’afficher des informations sur un fichier de métriques afin de connaître la rétention utilisée :</p>
<pre class="brush: bash; title: ; notranslate">whisper-info.py &lt;nom-fichier-wsd&gt;</pre>
<h4 id="Graphite-lesbases-Agrégation">Agrégation</h4>
<p>L&rsquo;agrégation se produit lorsque l’on change de zone de précision (eg : passage de 1 point par seconde à 1 point par minute).<br />Il est possible d’intervenir sur l’agrégation grâce au fichier facultatif storage-aggregation.conf dont le format ressemble à celui storage-schemas.conf. Il est composé de suites de blocs du type :</p>
<pre class="brush: java; title: ; notranslate">[title]
pattern = &lt;pattern-metric&gt;
xFilesFactor = &lt;double&gt;
aggregationMethod = &lt;average|max|min|sum|last&gt;</pre>
<p>Où :</p>
<ul>
<li><em><u>title</u></em>: Un titre logique.</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><em><u>pattern</u></em>: Il s’agit d’une expression régulière qui va être appliquée à chaque métrique et la première qui correspond sera utilisée. Les blocs sont lus dans l’ordre, du début du fichier jusqu’à la fin.</span></li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><em><u>xFilesFactor</u></em>: Ratio (entre 0 et 1) pour représenter le nombre de points nécessaires du palier précédent pour que la valeur soit non nulle. Cette valeur est utile lorsque le palier précédant n’est pas complet et qu’il manque des données. La valeur par défaut est 0.5.</span></li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt;"><em><u>aggregationMethod</u></em>: L’opération à appliquer pour agréger les données. La valeur par défaut est average.</span></li>
</ul>
<p><span style="font-size: 10.0pt;line-height: 13.0pt;">Example :</span></p>
<pre class="brush: java; title: ; notranslate">[min]
pattern = .*min$
xFilesFactor = 0.1
aggregationMethod = min</pre>
<p>Explications : Lors de l’agrégation, pour que la valeur agrégée soit non nulle, il faut qu’il y ait au moins 10% des valeurs du palier précédant et la valeur minimum sera utilisée.</p>
<p>Comme pour le fichier storage-schemas.conf, la modification de ce fichier sera sans impact sur les métriques déjà créées. Il faut utiliser l’utilitaire whisper-resize.py avec les options &#8211;xFilesFactor et &#8211;aggregationMethod afin de modifier les options adéquates. À noter qu’il existe aussi l’utilitaire whisper-set-aggregation-method.py qui permet de modifier uniquement l’opération à appliquer sur les valeurs.</p>
<h4 id="Graphite-lesbases-Whitelist/blacklist">Whitelist/blacklist</h4>
<p>Il est possible, au niveau du serveur Carbon, de gérer une liste de métriques acceptées ou au contraire rejetées. Bien entendu la configuration idéale est de ne pas envoyer de métriques inutiles, toutefois, il est parfois pratique de les exclure dans une configuration centralisée.<br />Afin d’activer la prise en charge des blacklist/whitelist, il faut tout d’abord ajouter une option dans le fichier de configuration carbon.conf :</p>
<pre class="brush: java; title: ; notranslate">USE_WHITELIST = true</pre>
<p>Ensuite il faut créer les fichiers whitelist.conf et blacklist.conf dans le répertoire de configuration de Carbon (/opt/graphite/conf par défaut). Des fichiers d&rsquo;exemples sont mis à disposition, il suffit de les renommer :</p>
<pre class="brush: bash; title: ; notranslate">sudo cp /opt/graphite/conf/whitelist.conf.example /opt/graphite/conf/whitelist.conf
sudo cp /opt/graphite/conf/blacklist.conf.example /opt/graphite/conf/blacklist.conf</pre>
<p>La syntaxe de ces deux fichiers est assez simple. Ils consistent en une suite d’expressions régulières Python.<br />Si vous utilisez Diamond pour envoyer des métriques systèmes et que vous ne souhaitez pas avoir les détails de chaque CPU mais seulement le total, rien de plus simple. Il suffit de rajouter la ligne suivante dans blacklist.conf :</p>
<pre class="brush: python; title: ; notranslate"># Remove individual CPU details
^servers\..*\.cpu\.[a-z]+[0-9]+\..*</pre>
<p>Ainsi les métriques du type ci-dessous seront ignorées</p>
<pre class="brush: java; title: ; notranslate">servers.&lt;nom-serveur&gt;.cpu.cpu[0-9].&lt;metric&gt;</pre>
<p>Pour que les autres métriques soient acceptées, il faut qu’une ligne acceptant toutes les métriques soit ajoutée dans le fichier whitelist.conf :<span style="font-size: 10.0pt;line-height: 13.0pt;"> </span></p>
<pre class="brush: java; title: ; notranslate">#Accept all metrics
\.</pre>
<p>Il est fortement recommandé de commenter chaque ligne ajoutée à ces deux fichiers, la lecture des expressions régulières n’est pas forcément des plus aisée.<br />Un redémarrage du processus carbon-cache.py est nécessaire lorsqu’une option dans le fichier carbon.conf mais les modifications des fichiers whitelist.conf/blacklist.conf sont prises à chaud.<br />Attention également à ne pas ajouter de lignes vides dans le fichier blacklist.conf ! En effet, une ligne vide sera interprétée comme une expression régulière <em>matchant</em> tout et par conséquence toutes vos métriques seront ignorées !</p>
<h4 id="Graphite-lesbases-Lefichiercarbon.conf">Le fichier carbon.conf</h4>
<p>Le fichier de configuration principal pour le processus carbon-cache.py est le fichier carbon.conf et il est divisé en trois parties distinctes :</p>
<pre class="brush: python; title: ; notranslate">[cache]
####
# carbon-cache.py configuration
####
[relay]
####
# carbon-relay.py configuration
####
[aggregator]
####
# carbon-aggregator.py configuration
####</pre>
<p>Dans notre installation mono-serveur avec uniquement un seul processus, les parties [relay] et [aggregator] sont tout simplement ignorées.
<p/>
<p>Le fichier par défaut est par ailleurs très bien <a href="https://github.com/graphite-project/carbon/blob/master/conf/carbon.conf.example" rel="nofollow">auto documenté</a> et permet principalement de définir les protocoles et les ports d’écoutes des différents processus.</p>
<h3 id="Graphite-lesbases-Conclusion">Conclusion</h3>
<p>Vous avez maintenant une installation Graphite installée et configurée parfaitement. Vous allez ajouter régulièrement de nouvelles métriques à grapher et vos tableaux de bord deviendront de plus en plus critiques: pour un web-commerçant qui suit son activité à la journée, comment se passer du nombre de ventes en temps (quasi) réel comparé à celui de la semaine précédente (si l&rsquo;activité est très &quot;journalisée&quot;) ?
<p/>
<p>La montée en charge et la haute disponibilité deviendront vite des pré requis indispensables à votre installation. Graphite permet de fonctionner dans un tel environnement, cela fera l’objet d’un second article.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/29/graphite-les-bases/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/</link>
		<comments>http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#comments</comments>
		<pubDate>Tue, 28 May 2013 06:00:00 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Polymer]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14303</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Augmentation des évaluations Agiles, bonne ou mauvaise nouvelle ? (Par Benjamin Moitié) Visual management for having a baby (Par Yannick Quenec&#8217;hdu) Arrêtez d&#8217;estimer, commencez à livrer (Par Yannick Grenzinger) Web AngularJS : Monochromatic-rainbow et triangle-squarification (Par Bastien Caudan) Polymer et Web components, le [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /></p>
<p><em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-Augmentationdes%C3%A9valuationsAgiles%2Cbonneoumauvaisenouvelles%3F">Augmentation des évaluations Agiles, bonne ou mauvaise nouvelle ?</a> (Par <a href="http://blog.xebia.fr/author/bmoitie" target="_blank">Benjamin Moitié</a>)</div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-Visualmanagementforhavingababy">Visual management for having a baby</a> (Par <a href="http://blog.xebia.fr/author/yquenechdu" target="_blank">Yannick Quenec&rsquo;hdu</a>)</div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-Arr%C3%AAtezd%27estimer%2Ccommencez%C3%A0livrer">Arrêtez d&rsquo;estimer, commencez à livrer</a> (Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-AngularJS%3AMonochromatic-rainbowettriangle-squarification">AngularJS : Monochromatic-rainbow et triangle-squarification</a> (Par <a href="http://blog.xebia.fr/author/bcaudan" target="_blank">Bastien Caudan</a>)</div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/#RevuedePresseXebia-PolymeretWebcomponents%2ClefuturdesframeworksUIWeb%3F">Polymer et Web components, le futur des frameworks UI Web ?</a> (Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-AugmentationdesévaluationsAgiles,bonneoumauvaisenouvelles?">Augmentation des évaluations Agiles, bonne ou mauvaise nouvelle ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/benjaminmoitie' target='_blank'><img title='http://twitter.com/benjaminmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/benjaminmoitie' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moitié</a></span></div>
<p>Où l&rsquo;on parle de <em>change management</em>, de management agile et la perte des valeurs dans des déploiements en masse de l&rsquo;agilité.</p>
<p><a href="http://www.agilex.fr/2013/05/evaluation-agile-bonne-mauvaise-nouvelle/" rel="nofollow">http://www.agilex.fr/2013/05/evaluation-agile-bonne-mauvaise-nouvelle/</a></p>
<h4 id="RevuedePresseXebia-Visualmanagementforhavingababy">Visual management for having a baby</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/yquenechdu' target='_blank'><img title='http://blog.xebia.fr/author/yquenechdu' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/yquenechdu' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/openagileorg' target='_blank'><img title='http://twitter.com/openagileorg' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/openagileorg' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/yquenechdu' target='_blank'>Yannick Quenec'hdu</a></span></div>
<p>Une approche amusante du management visuel. Xavier Quesada Allue, futur papa, se lance dans un management visuel pour coordonner la venue de son futur bébé.</p>
<p><a href="http://www.xqa.com.ar/visualmanagement/2010/09/visual-management-for-having-a-baby/" rel="nofollow">http://www.xqa.com.ar/visualmanagement/2010/09/visual-management-for-having-a-baby/</a></p>
<h4 id="RevuedePresseXebia-Arrêtezd'estimer,commencezàlivrer">Arrêtez d&rsquo;estimer, commencez à livrer</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>&laquo;&nbsp;Arrêtez d&rsquo;estimer, commencez à livrer&nbsp;&raquo;: derrière cette phrase provocatrice se cache un vrai problème: le besoin classique des managers de prévoir les releases d&rsquo;un projet mais aussi l&rsquo;impossibilité de prévoir avec justesse aussi bien le besoin que le temps nécessaire pour en réaliser le développement. Cet article de Ron Jeffries, un des signataires du Manifeste Agile, revient sur ce problème de l&rsquo;estimation et en général de prévoir le futur surtout que ces prévisions sont souvent effectuées au début du développement d&rsquo;un projet quand l&rsquo;équipe a le moins de connaissance sur celui-ci.</p>
<p><a href="http://pragprog.com/magazines/2013-02/estimation-is-evil" rel="nofollow">http://pragprog.com/magazines/2013-02/estimation-is-evil</a></p>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-AngularJS:Monochromatic-rainbowettriangle-squarification">AngularJS : Monochromatic-rainbow et triangle-squarification</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bcaudan' target='_blank'><img title='http://blog.xebia.fr/author/bcaudan' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bcaudan' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/BastienCaudan' target='_blank'><img title='http://twitter.com/BastienCaudan' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/BastienCaudan' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/bcaudan' target='_blank'><img title='http://github.com/bcaudan' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/bcaudan' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bcaudan' target='_blank'>Bastien Caudan</a></span></div>
<p>L&rsquo;équipe d&rsquo;<a href="http://angularjs.org/" rel="nofollow">AngularJS</a> a annoncé jeudi dernier <a href="http://blog.angularjs.org/2013/05/angularjs-107-monochromatic-rainbow-and.html" rel="nofollow">deux nouvelles versions</a> de leur framework : <strong>1.0.7</strong> (monochromatic-rainbow) et <strong>1.1.5</strong> (triangle-squarification).</p>
<p>La mise à jour de la branche stable (1.0.7) apporte son lot de corrections de bugs et d&rsquo;améliorations de la documentation.</p>
<p>La nouvelle version de la branche instable (1.1.5) quant à elle, enrichit le framework de nouvelles fonctionnalités. Les améliorations concernent principalement les <strong>animations</strong> avec notamment la possibilité de déclencher une animation sur l&rsquo;événement de son choix ou encore la désactivation des animations de manière globale. On peut noter qu&rsquo;il est maintenant possible d&rsquo;utiliser les <strong>opérateurs ternaires</strong> dans les expressions et qu&rsquo;une directive<strong> ngIf</strong> a été introduite pour insérer ou retirer un élément du DOM, contrairement au ngShow qui ne fait que changer la visibilité.</p>
<p>Une amélioration importante est le <strong>nommage des controllers</strong> via la syntaxe :</p>
<pre>ng-controller="MyController as my"</pre>
<p>Un controller nommé est ajouté au scope ce qui permet d&rsquo;accéder directement à ses propriétés et à ses méthodes. Une vidéo illustrant cette fonctionnalité est déjà disponible sur <a href="http://www.egghead.io/video/tTihyXaz4Bo" rel="nofollow">egghead.io</a>.</p>
<h4 id="RevuedePresseXebia-PolymeretWebcomponents,lefuturdesframeworksUIWeb?">Polymer et Web components, le futur des frameworks UI Web ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Lors de son récent évènement I/O 2013, Google a présenté une nouvelle interface utilisateur web nommée <a href="http://www.polymer-project.org/" rel="nofollow">Polymer</a>. Non ce n&rsquo;est pas un nouveau framework MVC javascript, donc vous pouvez rester. Polymer a pour but de promouvoir <a href="http://www.w3.org/TR/components-intro/" rel="nofollow">les composants Web</a> (composés entre autre du Shadow DOM sur lequel se base Angular ou encore des imports HTML). Pour résumer, Polymer a pour but de mettre en avant les futurs standards HTML 5 en particulier sur la partie interface utilisateur. Enfin, bonne nouvelle, les deux frameworks majeurs que sont Ember.js et Angular.js ont annoncé qu&rsquo;ils tireront parti de ces composants Web.</p>
<p>Vous trouverez plus d&rsquo;infos sur ces deux articles:</p>
<p><a href="http://www.2ality.com/2013/05/google-polymer.html" rel="nofollow">http://www.2ality.com/2013/05/google-polymer.html</a></p>
<p><a href="http://www.2ality.com/2013/05/web-components-angular-ember.html" rel="nofollow">http://www.2ality.com/2013/05/web-components-angular-ember.html</a></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/28/revue-de-presse-xebia-2013-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comprendre le fonctionnement de la JVM &#8211; Article 1/2</title>
		<link>http://blog.xebia.fr/2013/05/27/comprendre-le-fonctionnement-de-la-jvm-article-1/</link>
		<comments>http://blog.xebia.fr/2013/05/27/comprendre-le-fonctionnement-de-la-jvm-article-1/#comments</comments>
		<pubDate>Mon, 27 May 2013 08:33:57 +0000</pubDate>
		<dc:creator>Pierre Laporte</dc:creator>
				<category><![CDATA[Java / JEE]]></category>
		<category><![CDATA[JVM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14280</guid>
		<description><![CDATA[Origines Depuis 1996, Java et la JVM ont envahi nos équipements pour devenir des éléments incontournables de notre quotidien. Avant de s&#8217;intéresser aux détails et aux forces de la JVM, il est important de comprendre la relation entre le langage Java et cette dernière. Au démarrage, Java se voulait un langage multi-plateformes, principalement guidé par [...]]]></description>
				<content:encoded><![CDATA[
<h3>Origines</h3>
<p>Depuis 1996, Java et la JVM ont envahi nos équipements pour devenir des éléments incontournables de notre quotidien. Avant de s&rsquo;intéresser aux détails et aux forces de la JVM, il est important de comprendre la relation entre le langage Java et cette dernière.</p>
<p>Au démarrage, Java se voulait un langage multi-plateformes, principalement guidé par le principe WORA : &quot;Write Once, Run Anywhere&quot;. La JVM ne comportait qu&rsquo;un nombre limité d&rsquo;optimisations par rapport à aujourd&rsquo;hui, et Java était critiqué à raison pour sa lenteur. C&rsquo;est en 2000 que le langage a bénéficié d&rsquo;un second souffle avec l&rsquo;intégration de Hotspot dans la JVM 1.3.</p>
<p>La technologie Hotspot, quant à elle, est motivée par une toute autre problématique : concevoir une technologie qui maintienne l&rsquo;aspect multi-plateformes de Java tout en profitant des optimisations de chaque machine (type de CPU, architecture matérielle).</p>
<p>Java est le langage dans lequel nous développons nos applications, Hotspot est le support par lequel nos applications sont de plus en plus optimisées à chaque nouvelle version de la JVM.</p>
<h3>Concepts majeurs</h3>
</p>
<p>Chaque application Java est constituée de fichiers source (.java) qui sont compilés en bytecode. Ce bytecode est ensuite utilisé par la JVM et transformé en code natif.</p>
<p>Grace à cette séparation entre le langage et la plateforme d&rsquo;exécution, nous tirons aujourd&rsquo;hui de nombreux bénéfices : les applications Java sont de plus en plus optimisées sans avoir à être recompilées, d&rsquo;anciens langages ont été portés sur la JVM pour pouvoir profiter de ces mêmes optimisations (Jython, JRuby) et de nouveaux langages ont émergé pour combler les lacunes de Java (Clojure, Scala).</p>
<p style="text-align: center;">
<img class="aligncenter" src="http://blog.xebia.fr/wp-content/uploads/2013/05/compiling-to-bytecode.png">
</p>
<p>La JVM s&rsquo;occupe de la gestion de la mémoire en segmentant la heap en plusieurs sections : la &quot;Young Generation&quot; est l&rsquo;espace dans lequel tous les objets sont crées; la &quot;Old Generation&quot;, quant à elle, contient les objets ayant une longue durée de vie. Il existe deux autres zones mémoire que sont la &quot;Permanent Generation&quot; qui contient la définition des classes de l&rsquo;application et le &quot;Code Cache&quot; qui est l&rsquo;espace dans lequel la JVM stocke et manipule le code optimisé.</p>
<p style="text-align: center;">
<img src="http://blog.xebia.fr/wp-content/uploads/2013/05/memory-layout.png" alt="memory-layout.png" width="700" height="144" class="aligncenter size-full wp-image-14278" />
</p>
<p>Tout au long de l&rsquo;exécution d&rsquo;une application, la JVM maintient des compteurs qui lui permettent de détecter le code souvent exécuté. C&rsquo;est sur ce code que les optimisations vont être le plus utiles et c&rsquo;est donc sur celui-ci que la JVM travaille (Just-In-Time Optimisation).</p>
<p>Le cycle d&rsquo;exécution d&rsquo;un fragment de code commence donc toujours en mode interprété. Lorsqu&rsquo;il est détecté par le profiler, il est ensuite passé à l&rsquo;optimiseur avec des données complémentaires sur son exécution (nombre d&rsquo;appels, code appelant, &#8230;). Une fois que l&rsquo;optimiseur a appliqué des transformations sur ce code, il stocke le résultat dans le &quot;Code Cache&quot;.</p>
<p style="text-align: center;">
<img src="http://blog.xebia.fr/wp-content/uploads/2013/05/profiler-and-optimiser.png" />
</p>
<h3>Le compilateur javac optimise-t-il le code ?</h3>
<p>Pour éviter toute optimisation inutile, le compilateur javac n&rsquo;effectue presque aucune opération sur le code source Java. Prenons l&rsquo;exemple d&rsquo;un &quot;Hello world !&quot; dans lequel on a ajouté du code mort.</p>
<pre class="brush: java; title: ; notranslate">public final class NoOptimisation {
    private final static void empty() {}
    private final static void dead() {
        String bar = &quot;Bar&quot;;
    }
    public static void main(String... args) throws Exception {
        for(int i=0; i&lt;10_000_000; i++)
            empty();
        System.out.println(&quot;Hello world&quot;);
    }
}</pre>
<p>Si l&rsquo;on compile cette classe et que l&rsquo;on analyse le bytecode produit, on constate que la méthode empty() a été compilée en l&rsquo;état, qu&rsquo;elle est toujours appelée depuis la méthode main(), et que la méthode dead() et la variable bar sont également présentes dans le bytecode.</p>
<pre class="brush: java; title: ; notranslate">$ javap -c -p NoOptimisation
[...]
  private static void empty();
    Code:
       0: return        
[...]
  private static void dead();
    Code:
       0: ldc          #2  // String Bar
       2: astore_0      
       3: return        
[...]
  public static void main(java.lang.String...);
    Code:
[...]
       3: ldc          #6  // int 10000000
       5: if_icmpge    17
       8: invokestatic #4  // Method empty:()V
[...]</pre>
<p>Ce comportement est normal : la quasi totalité des optimisations sur le code sont effectuées par Hotspot, durant l&rsquo;exécution de l&rsquo;application, si et seulement si le code est souvent utilisé. Dans le cas présent, la méthode dead() ne sera jamais supprimée car elle n&rsquo;est jamais utilisée, sa suppression serait donc une perte de temps. La boucle d&rsquo;appels de la méthode empty() sera quant à elle bien supprimée après un certain nombre d&rsquo;itérations.</p>
<p> </p>
<h3>Temps de chauffe</h3>
<p>Au démarrage d&rsquo;une application, l&rsquo;intégralité du bytecode est interprété par la JVM. La JVM entre alors dans une phase de chauffe, durant laquelle elle optimise les fragments de code fréquemment utilisés jusqu&rsquo;à ce qu&rsquo;elle atteigne un point d&rsquo;équilibre permettant à l&rsquo;application de fonctionner à vitesse maximale.</p>
<p>Pour bien se rendre compte de ce temps de chauffe, on peut exécuter la classe NoOptimisation en mode interprété uniquement (-Xint), en mode mixte (-Xmixed, le mode par défaut) et en mode compilé (-Xcomp) uniquement en comparant les temps d&rsquo;exécution.</p>
<pre class="brush: java; title: ; notranslate">$ time java -client -Xint NoOptimisation
Hello world
real    0m0.201s
user    0m0.190s
sys     0m0.013s
$ time java -client -Xmixed NoOptimisation
Hello world
real    0m0.073s
user    0m0.063s
sys     0m0.017s
$ time java -client -Xcomp NoOptimisation
Hello world
real    0m1.647s
user    0m1.643s
sys     0m0.033s</pre>
<p>On voit que le mode interprété est plus long que le mode mixte, ce qui est logique.</p>
<p>Cependant, on remarque aussi que le mode compilé est considérablement plus long que le mode mixte. Ceci est normal : dans ce mode, la moindre méthode invoquée se retrouve compilée, même si elle n&rsquo;est appelée qu&rsquo;une seule fois, ce qui est inutile.</p>
<p>Le mode mixte de la JVM est donc le mode qui permet d&rsquo;obtenir les meilleures performances le plus rapidement possible.</p>
<h3>Compilation du code</h3>
<p>La JVM peut le compiler les fragments de code &quot;hot&quot; en code natif. Cette compilation se fait alors en utilisant tout le jeu d&rsquo;instructions du processeur sur lequel l&rsquo;application s&rsquo;exécute.</p>
<p>Dans ce cas de figure, le code compilé est stocké dans le Code Cache et tous les pointeurs vers ce code sont réécrits pour référencer la version optimisée.  S&rsquo;il s&rsquo;agit d&rsquo;une compilation d&rsquo;un bloc de code particulier dans une méthode, par exemple une boucle, on parle alors de &quot;On Stack Replacement (OSR)&quot;, la JVM modifie la pile d&rsquo;instructions de la méthode pour que le prochain GOTO mène sur le code compilé et non plus sur le code interprété.</p>
<p>On peut voir la JVM à l&rsquo;oeuvre en activant les logs de compilation (-XX:+PrintCompilation).</p>
<pre class="brush: java; title: ; notranslate">$ java -client -XX:+PrintCompilation NoOptimisation
  61  1    NoOptimisation::empty (1 bytes)
  61  1 %  NoOptimisation::main @ 2 (26 bytes)
  71  1 %  NoOptimisation::main @ -2 (26 bytes) made not entrant
[...]</pre>
<p>Le format utilisé est le suivant : d&rsquo;abord, un timestamp indique à quel moment (timestamp) la compilation a eu lieu. Ici, les compilations ont eu lieu à 61ms et 71ms.</p>
<p>Ensuite, un nombre entier indique l&rsquo;id de compilation associé à l&rsquo;optimisation. Il existe deux compteurs distincts, le premier pour les compilations de méthodes et le second pour les compilations OSR, c&rsquo;est pourquoi les deux premières lignes portent le même id.</p>
<p>Le champ suivant est une série de caractères donnant des indications sur la nature de la compilation.</p>
<pre class="brush: java; title: ; notranslate">b    La compilation a bloqué l'exécution du programme;
*    La compilation a donné lieu à un wrapper en code natif;
%    La compilation a donné lieu à un OSR;
!    La méthode compilée peut lever des exceptions;
s    La méthode compilée est synchronisée;
n    La méthode est déclarée comme du code natif.</pre>
<p> </p>
<p>On peut donc lire que la méthode empty() a été compilée à 61ms et qu&rsquo;elle représente un seul octet de code. On voit également qu&rsquo;un bloc de la méthode main a été compilé et remplacé à la volée (OSR) à 61ms.</p>
<p>Enfin, la troisième ligne nous indique que la JVM a détecté à 71ms qu&rsquo;une de ses optimisations a produit un code incorrect. Elle a désoptimisé ce code et est revenue en mode interprété. Le bloc optimisé a été marqué comme not-entrant, ce qui veut dire qu&rsquo;il ne peut plus être exécuté.  Comme il s&rsquo;agit d&rsquo;un retour en arrière, la JVM utilise l&rsquo;id de compilation de l&rsquo;optimisation annulée. Ceci explique pourquoi la troisième ligne a l&rsquo;id 1 : elle concerne l&rsquo;optimisation #1 faite à la ligne 2.</p>
<h3>Fusion et remodelage de code</h3>
<p>L&rsquo;une des optimisations effectuées par la JVM consiste à remplacer l&rsquo;appel d&rsquo;une méthode par le corps de cette méthode (inlining). Dans notre cas, l&rsquo;appel de la méthode empty() peut être fusionné dans la méthode main(). Et c&rsquo;est exactement ce que fait la JVM. On peut s&rsquo;en rendre compte en affichant les logs d&rsquo;inlining (-XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining).</p>
<pre class="brush: java; title: ; notranslate">$ java -client -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining NoOptimisation
  @ 8  NoOptimisation::empty (1 bytes)  inline (hot)
[...]</pre>
<p>La méthode empty de la classe NoOptimisation a été fusionnée car la JVM a détecté qu&rsquo;elle était souvent appelée.</p>
<p>La taille des méthodes est un facteur très impactant pour la fusion de code. Si une méthode dépasse la taille autorisée (-XX:MaxInlineSize=), elle ne sera pas fusionnée dans d&rsquo;autres blocs de code. À l&rsquo;opposé, si une méthode est considérée comme triviales, très courtes (-XX:MaxTrivialSize=), elle sera presque immédiatement fusionnée dans le code appelant. Typiquement, les getters et setters sont toujours très rapidement fusionnés.</p>
<p>La fusion de code par la JVM permet de rendre de nouvelles optimisations possibles. Reprenons l&rsquo;exemple de code présenté par Brian Goetz dans la conférence &quot;Towards A Universal VM&quot; (Devoxx 2009).</p>
<pre class="brush: java; title: ; notranslate">public interface Holder&lt;T&gt; {
  T get();
}
public class MyHolder&lt;T&gt; implements Holder&lt;T&gt; {
  private final T content;
  public MyHolder(T someContent) {
    content = someContent;
  }
  @Override public T get() {
    return content;
  }
}
public String getFrom(Holder&lt;String&gt; h) {
  if(h == null)
    throw new IllegalArgumentException(&quot;h cannot be null&quot;);
  else
    return h.get();
}
public String doSomething() {
  MyHolder&lt;String&gt; holder = new MyHolder&lt;&gt;(&quot;Hello World&quot;);
  return getFrom(holder);
}</pre>
<p>Analysons comment la méthode doSomething() va être optimisée.</p>
<p>Dans un premier temps, la JVM va fusionner le code de la méthode getFrom() dans la méthode doSomething() car la méthode getFrom() est courte. La méthode doSomething va donc devenir :</p>
<pre class="brush: java; title: ; notranslate">public String doSomething() {
  MyHolder&lt;String&gt; holder = new MyHolder&lt;&gt;(&quot;Hello World&quot;);
  if(holder == null)
    throw new IllegalArgumentException(&quot;h cannot be null&quot;);
  else
    return holder.get();
}</pre>
<p>Grace à cette fusion, on constate que la branche if(holder == null) ne pourra jamais être exécutée car la variable holder est toujours initialisée. Cette branche est devenue du code mort, la JVM va donc la supprimer et aboutir au code suivant :</p>
<pre class="brush: java; title: ; notranslate">public String doSomething() {
  MyHolder&lt;String&gt; holder = new MyHolder&lt;&gt;(&quot;Hello World&quot;);
  return holder.get();
}</pre>
<p>La méthode getFrom() référençait l&rsquo;interface Holder, ce qui obligeait la JVM à effectuer l&rsquo;invocation de la méthode get() à travers l&rsquo;interface. À présent la JVM sait qu&rsquo;elle a affaire à un type concret et peut donc remplacer le code de la méthode get() par son contenu, ce qui donne le pseudo-code suivant :</p>
<pre class="brush: java; title: ; notranslate">public String doSomething() {
  MyHolder&lt;String&gt; holder = new MyHolder&lt;&gt;(&quot;Hello World&quot;);
  return holder.content;
}</pre>
<p>Enfin, à travers l&rsquo;analyse avancée du bytecode (Escape Analysis), la JVM va remarquer que la référence someContent est conservée en l&rsquo;état dans la variable content, que cette dernière est une référence finale et qu&rsquo;elle n&rsquo;est jamais modifiée. Elle va donc pouvoir remplacer l&rsquo;appel au constructeur de MyHolder et arriver au code suivant :</p>
<pre class="brush: java; title: ; notranslate">public String doSomething() {
  return &quot;Hello world&quot;;
}</pre>
<h3>Suppression des locks inutiles</h3>
<p>La JVM procède aussi à un nettoyage du code synchronisé. Lorsqu&rsquo;un fragment de code implique une section critique (bloc synchronized) mais qu&rsquo;il n&rsquo;est utilisé que par un seul thread, la Hotspot peut modifier la nature du verrou utilisé, voire le supprimer complètement.</p>
<pre class="brush: java; title: ; notranslate">public class LockRemoval {
  private static void run(int times) {
    StringBuffer accumulator = new StringBuffer();
    for(int i=0; i&lt;times; i++)
      accumulator.append('.');
    System.out.println(&quot;Added &quot; + accumulator.length());
  }
  public static void main(String[] args) {
    int loopCount = Integer.parseInt(args[0]);
    int times = Integer.parseInt(args[1]);
    for(int i=0; i&lt;times; i++)
      run(loopCount);
  }
}</pre>
<p>Dans cet exemple se cachent de nombreux locks. En effet, la classe StringBuffer est synchronisée pour pouvoir être partagée entre plusieurs threads. Dans notre cas, c&rsquo;est inutile et il aurait été préférable d&rsquo;utiliser la classe StringBuilder qui n&rsquo;est pas synchronisée.</p>
<p>Si l&rsquo;on exécute le programme avec l&rsquo;élimination de locks (-XX:+EliminateLocks), on constate que la JVM a bien supprimé les entrées en section critiques et leurs sorties pour optimiser le programme.</p>
<pre class="brush: java; title: ; notranslate">$ java -XX:+EliminateLocks -XX:+PrintEliminateLocks LockRemoval 10000000 8
++++ Eliminated: 623 Unlock
++++ Eliminated: 612 Unlock
++++ Eliminated: 483 Lock
++++ Eliminated: 234 Unlock
++++ Eliminated: 217 Lock
[...]</pre>
<p>Note : le paramètre -XX:+PrintEliminateLocks n&rsquo;est disponible que sur une version de développement d&rsquo;OpenJDK.</p>
<h3>Les deux modes de la JVM</h3>
<p>La JVM dispose de deux modes de fonctionnement adaptés à des applications bien différentes.</p>
<p>Le premier mode est le mode &quot;client&quot;, aussi nommé &quot;C1&quot;. Il est utilisé pour les applications desktop, ayant une faible durée de vie (comptée en heures).  Dans ce mode, la JVM démarre plus rapidement mais n&rsquo;effectue que peu d&rsquo;optimisations sur le code et a pour objectif de ne pas utiliser beaucoup de ressources matérielles.</p>
<p>Le mode client est utilisé pour les applications desktop (NetBeans, IntelliJ, SQL Developer, &#8230;).</p>
<p>Le deuxième mode est le mode &quot;server&quot;, aussi appelé &quot;C2&quot; ou &quot;opto&quot;. Il est utilisé sur les serveurs, pour lesquels la durée de vie est bien plus longue (comptée en jours). Dans ce mode, la JVM démarre plus lentement compte tenu des optimisations effectuées pour atteindre le point d&rsquo;équilibre.  La limitation sur les ressources matérielles du mode client n&rsquo;existe plus ici : toutes les optimisations possibles sont activées.</p>
<p>Le mode serveur est activé sur tous les serveurs d&rsquo;applications (Tomcat, Glassfish, JBoss).</p>
<h3>Pour aller plus loin : quelques pièges à éviter</h3>
<h4>Piège 1 : vouloir tout compiler</h4>
<p>On pourrait avoir envie de compiler toute une application, puisque, par définition, le code natif est plus rapide que le code interprété. Cependant, c&rsquo;est une mauvaise idée.</p>
<p>Que ce soit par le paramètre -Xcomp ou le paramètre -XX:CompileThreshold=1, toutes les méthodes seront compilées avant d&rsquo;être exécutées et même fusionnées. Problème : lorsque le Code Cache est plein, la JVM peut tenter, en dernier recours, d&rsquo;éliminer du code natif qui n&rsquo;est plus utile (-XX:+UseCodeCacheFlushing). Si toutefois cette tentative se solde par un échec, la JVM cesse d&rsquo;optimiser le code. Les threads de compilation sont arrêtés et ne peuvent pas être redémarrés. La JVM fonctionne alors sur ce qu&rsquo;elle a pu optimiser jusque là.</p>
<h4>Piège 2 : forcer des paramètres de la JVM sans certitude</h4>
<p>Lorsque l&rsquo;on fait un tuning de la JVM, il faut s&rsquo;assurer que ce tuning améliore réellement la situation et pouvoir expliquer ses choix. Il faut donc sans cesse mesurer les performances de son application pour vérifier qu&rsquo;à chaque nouvelle version, le tuning apporte toujours un gain de performances.</p>
<p>Appliquer un ensemble de paramètres à une JVM sans avoir prouvé leur utilité revient à appliquer des solutions à un problème qui n&rsquo;est pas diagnostiqué.</p>
<h4>Piège 3 : optimiser prématurément son code</h4>
<p>On l&rsquo;a vu, la JVM modifie profondément le code qu&rsquo;elle exécute. On tombe parfois sur des méthodes rendues illisibles pour des raisons de performance.  Or à chaque nouvelle mise à jour, la JVM se dote d&rsquo;améliorations qui rendent ces astuces obsolètes, voire nuisibles.</p>
<p>Un bytecode optimisé ne ressemble pas au source Java dont il est issu. Il vaut mieux écrire un code maintenable, éviter les optimisations prématurées et laisser la JVM s&rsquo;occuper de rendre le code plus véloce.</p>
<h3>Conclusion</h3>
<p>Lorsque l&rsquo;on paramètre une JVM, il faut toujours appliquer la règle &quot;Diagnostiquer avant de soigner&quot;, c&rsquo;est à dire prouver l&rsquo;existence d&rsquo;un problème et prouver qu&rsquo;il sera résolu par un paramètrage manuel avant d&rsquo;appliquer ce dernier. Il faut également vérifier après chaque mise à jour de l&rsquo;application ou de la JVM que ce paramétrage profite toujours au projet. Au démarrage d&rsquo;un projet, il est préférable de laisser les réglages par défaut tant que ces derniers n&rsquo;ont pas montré leurs limites.</p>
<p>La JVM est une plateforme très évoluée qui ne prend des décisions que lorsqu&rsquo;elles sont justifiées par un contexte d&rsquo;exécution. À chaque mise à jour, elle devient de plus en plus performante et c&rsquo;est ce qui en fait une plateforme incontournable aujourd&rsquo;hui.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/27/comprendre-le-fonctionnement-de-la-jvm-article-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Introduction à Lean Startup</title>
		<link>http://blog.xebia.fr/2013/05/23/introduction-a-lean-startup/</link>
		<comments>http://blog.xebia.fr/2013/05/23/introduction-a-lean-startup/#comments</comments>
		<pubDate>Thu, 23 May 2013 12:10:00 +0000</pubDate>
		<dc:creator>Yannick Grenzinger</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[lean startup]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14218</guid>
		<description><![CDATA[Commençons par un constat : 9 produits sur 10 échouent (et souvent la Startup qui porte un de ces produits). C’est en partant de ce bilan qu’Éric Ries publie en septembre 2011 The Lean Startup: How Today&#8217;s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses qui devient un succès mondial et un véritable mouvement [...]]]></description>
				<content:encoded><![CDATA[
<p>Commençons par un constat : 9 produits sur 10 échouent (et souvent la Startup qui porte un de ces produits). C’est en partant de ce bilan qu’Éric Ries publie en septembre 2011 The Lean Startup: How Today&rsquo;s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses qui devient un succès mondial et un véritable mouvement avec ses conférences et ses nombreux meetups (par exemple <a href="http://www.meetup.com/lean-startup-france/" rel="nofollow">Lean Startup France</a>).</p>
<p>L’objectif de Lean Startup, dans la continuité des méthodes Agiles, est de réduire le cycle de développement d’un produit afin de réduire les risques d’échec, de mesurer le progrès et d’obtenir de précieux feedbacks des clients, et cela de manière régulière. <span style="color: #000000;">De cette façon, les entreprises, en particulier les startups, peuvent concevoir leurs produits ou services pour répondre aux demandes de leur clientèle sans nécessiter un important budget de démarrage ou de coûteux lancements de produits.</p>
<p>Si on se permet la remarque, cette méthode va encore plus loin que les méthodes Agiles comme Scrum et remet en cause les méthodes de réalisation d’un produit traditionnellement présentes dans les entreprises fondées sur des mythes comme :</p>
<ul>
<li>Nous savons ce que le client veut,</li>
<li>Nous pouvons prédire le futur,</li>
<li>Avancer selon le plan c’est progresser.</li>
</ul>
<p>À l&rsquo;instar des préceptes de Lean Management, la philosophie Lean Startup cherche à éliminer les gaspillages et accroître la création de valeur pendant la phase de développement du produit. L&rsquo;objectif est d&rsquo;obtenir les meilleures chances de réussite sans nécessiter un important financement, des Business Plan élaborés ou un produit parfait. Eric Ries estime que les retours des clients au cours du développement du produit font partie intégrante du processus Lean Startup, et veille à ne pas investir trop de temps à concevoir des fonctions ou des services que les utilisateurs ne veulent potentiellement pas.</p>
<p>Éric Ries s’est fortement inspiré de l&rsquo;ouvrage de Donald Reinertsen le &laquo;&nbsp;The Principle of Product Development Flow&nbsp;&raquo;, du &nbsp;&raquo;Customer Development&nbsp;&raquo; de Steve Blank, des méthodes de Design UX ou encore du monde Agile pour créer une approche de lancement de produits qui repose principalement sur :</p>
<ul>
<li>la validation des hypothèses</li>
<li>des expérimentations scientifiques,</li>
<li>un apprentissage constant,</li>
<li>des déploiements en production les plus fréquents possible.</li>
</ul>
<p>Lean Startup est vue comme une méthode d’amélioration continue du produit en trois étapes :  construire &#8211; mesurer &#8211; apprendre</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/WF_LEAN_Startup.png"><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/WF_LEAN_Startup.png" alt="WF_LEAN_Startup.png" width="700" height="150" class="aligncenter size-full wp-image-14216" /></a>
</p>
<h3 id="IntroductionàLeanStartup-Construire">Construire</h3>
<blockquote><p>&laquo;&nbsp;Aucun business plan ne survit au premier contact avec le client&nbsp;&raquo; &#8211; Steve Blank</p></blockquote>
<p>Tout produit est un ensemble d’hypothèses qu’il va falloir valider de façon qualitative et quantitative sur le terrain. Ces hypothèses, en particulier les plus risquées, doivent être validées par un MVP ou Minimum Viable Product.</p>
<p>Ce MVP est la plus simple version d&rsquo;un nouveau produit. Il permet à une équipe d&rsquo;apprendre au maximum, avec une validation des clients et avec le moindre effort. Il y a différents types de MVP (‘magicien d&rsquo;Oz’, concierge, test papier, pré-vente, Landing Page avec un appel à action, vidéo) mais tous ont pour objectif de recueillir des retours concrets des utilisateurs afin de trouver la meilleure adaptation au marché pour le produit.</p>
<p>Si cette étape en est rendue à un vrai logiciel, il faut utiliser au maximum les techniques de développement modernes en découpant en itérations courtes et efficaces. Cela va du déploiement sur le Cloud, de la mise en place de l’intégration continue jusqu’au déploiement continu en passant bien sûr par les méthodes d’organisation projet Agile telles que Scrum ou Lean Software Management avec les pratiques Kanban.</p>
<h3 id="IntroductionàLeanStartup-Mesurer">Mesurer</h3>
<blockquote><p>&laquo;&nbsp;Les clients ne s’intéressent pas à vos solutions, ils se soucient de leurs problèmes&nbsp;&raquo; &#8211; Dave McClure</p></blockquote>
<p>Dans Lean Startup, la validation des hypothèses se fait de façon scientifique avec des méthodes aussi bien qualitatives que quantitatives. On peut même aller jusqu’à dire qu’il y a une certaine obsession de la mesure !</p>
<p>Les méthodes qualitatives reprennent les outils connus de l’expérience utilisateur tel que l’interview d’utilisateurs. Il s&rsquo;agit de rencontrer les utilisateurs afin qu&rsquo;ils utilisent le produit tout en observant leurs réactions ou encore en leur posant des questions. </p>
<p>Les méthodes quantitatives telles que les méthodes de type A/B testing </span>sont encore plus utilisées, associées à des outils d’analyse du trafic et de l’activité comme Google Analytics. Pour créer une mesure qualitative de qualité, il faut aussi choisir les bons indicateurs clés de performance. Cela peut être le taux d’acquisition comme le nombre d’utilisateurs créant un compte sur le site ou encore l’engagement de ceux-ci en faisant le ratio entre le nombre d’utilisateurs actifs par mois et par jours. </p>
<p>Pour donner un exemple très simple, dans le cadre d’un MVP de type Landing Page, on peut créer deux versions du site avec deux propositions de valeur différentes. En utilisant la technique de l’A/B testing et en mesurant le nombre de personnes donnant leur email pour être informé de la sortie du produit, on peut ainsi déterminer quelle solution intéressera le plus les clients potentiels.</p>
<h3 id="IntroductionàLeanStartup-Apprendre">Apprendre</h3>
<blockquote><p>&laquo;&nbsp;Les startups qui réussissent sont celles qui parviennent à itérer assez de fois avant d’épuiser leurs ressources&nbsp;&raquo; &#8211; Éric Ries</p></blockquote>
<p>La construction et la mesure ont un seul véritable objectif : apprendre, apprendre, apprendre ! Il faut alors utiliser au maximum l&rsquo;usage de feedbacks de la clientèle afin d’adapter davantage ses produits aux besoins spécifiques de ses clients.</p>
<p>Lean Startup permet d’apprendre quels sont les éléments, les fonctionnalités qui apportent de la valeur ou au contraire celles qui créent du gaspillage. Mais pas seulement ! La méthode permet aussi de tester le marketing du produit ou encore son Business Model. Si les indicateurs sont bons, c’est alors le signe qu’il faut persévérer et continuer d’améliorer l’existant. Au contraire, si les indicateurs sont mauvais, il faut alors pivoter.</p>
<p>Le pivot est une nouvelle hypothèse stratégique qui va nécessiter un nouveau MVP. Des pivots à succès permettent de mettre le produit sur le chemin d’un business ayant une croissance durable. </p>
<p>Il y a plusieurs types de pivot par exemple :</p>
<ul>
<li>Zoom In : ce qui était considéré comme une fonctionnalité d’un produit devient le produit dans son ensemble,</li>
<li>Zoom Out : ce qui était considéré comme le produit dans son ensemble devient une seule fonctionnalité d’un produit plus large,</li>
<li>Customer Segment : on change le type de client qu’on souhaitait adresser originalement,</li>
<li>Customer Need : on réalise que le segment de clients qu’on vise a un problème plus intéressant à résoudre que celui anticipé,</li>
<li>Platform : on change d’une application à un service ou inversement,</li>
<li>Value Capture : on change la façon dont on capture la valeur, c’est-à-dire le modèle de revenu,</li>
<li>Channel : on change la façon dont on délivre le service au client,</li>
<li>Technologique : Tout en conservant la solution apportée au client, on va utiliser une technologie complètement différente.</li>
</ul>
<p>Cependant, il ne faut pas oublier que les expérimentations sont rarement définitives et les résultats de chaque apprentissage doivent être contrebalancés par la vision et le jugement sans mettre la tête dans le sable.</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/the-lean-startup_big_picture.png"><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/the-lean-startup_big_picture.png" alt="the-lean-startup_big_picture.png" width="720" height="541" class="aligncenter size-full wp-image-14217" /></a></p>
<p>Dans ce premier article, j&rsquo;espère vous avoir présenté de façon claire la pratique du &laquo;&nbsp;Lean Startup&nbsp;&raquo; dont tout le monde commence à parler. C&rsquo;est aussi le début d&rsquo;une série qui vous présentera plus en détail certains outils de cette méthode, par exemple, le Lean Canvas.</p>
<h3>Quelques liens:</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Lean_Startup" rel="nofollow">http://en.wikipedia.org/wiki/Lean_Startup</li>
<li><a href="http://banditfox.com/blog/art/lean-startup-for-artists/" rel="nofollow">http://banditfox.com/blog/art/lean-startup-for-artists/</a></li>
<li><a href="http://hbr.org/2013/05/why-the-lean-start-up-changes-everything/ar/1" rel="nofollow">http://hbr.org/2013/05/why-the-lean-start-up-changes-everything/ar/1</a></li>
<li><a href="http://www.infoq.com/news/2013/05/learn-failures-lean-startup" rel="nofollow">http://www.infoq.com/news/2013/05/learn-failures-lean-startup</a></li>
<li><a href="http://theleanstartup.com/principles" rel="nofollow">http://theleanstartup.com/principles</li>
<p></a>
</ul>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/23/introduction-a-lean-startup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Backbone, deux ans après</title>
		<link>http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/</link>
		<comments>http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/#comments</comments>
		<pubDate>Wed, 22 May 2013 08:15:01 +0000</pubDate>
		<dc:creator>Yves Amsellem</dc:creator>
				<category><![CDATA[WOA]]></category>
		<category><![CDATA[Backbone]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14202</guid>
		<description><![CDATA[Backbone fut une des premières librairies à offrir une structure aux applications JavaScript. Avec le succès qu’on lui connaît — trello, airbnb, linkedin. Cet article se propose de synthétiser l’expérience de deux ans de développements à ses côtés — mauvais jours inclus — d’identifier des bonnes pratiques et d’entrevoir la suite de l’aventure. Plus simple, [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/backbone.png" target="_blank"><img width="300" src="http://blog.xebia.fr/wp-content/uploads/2013/05/backbone-300x53.png" style="margin: 1em 1em 1em 1em; float:right"/></a></p>
<p><span style="color: rgb(34,34,34);">Backbone fut une des premières librairies à offrir une structure aux applications JavaScript. Avec le succès qu’on lui connaît — </span><a href="https://trello.com/" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">trello</span></a><span style="color: rgb(34,34,34);">, </span><a href="https://www.airbnb.fr/" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">airbnb</span></a><span style="color: rgb(34,34,34);">, <a href="http://fr.linkedin.com/mobile" rel="nofollow">linkedin</a></span><span style="color: rgb(34,34,34);">. Cet article se propose de synthétiser l’expérience de deux ans de développements à ses côtés — mauvais jours inclus — d’identifier des bonnes pratiques et d’entrevoir la suite de l’aventure.</span></p>
<ul>
<li><a href="http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/#shell">Plus simple, tu meurs</a></li>
<li><a href="http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/#simpliste">Simpliste, peut-être</a></li>
<li><a href="http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/#pratiques">Bonnes pratiques</a></li>
<li><a href="http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/#idees">Idées reçues</a></li>
</ul>
<h3><a name="simple"></a>Plus simple, tu meurs</h3>
<p><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;">Backbone repose sur le pattern observeur de Smalltalk : les modèles stockent les données et émettent des évènements auxquels les vues s’abonnent — modification d’un attribut, réception d’une requête serveur, erreur de validation, etc. Les vues s’abonnent également aux évènements de l’interface — clic, saisie, etc. Les vues sont orchestrées par un routeur : abonné aux changements d’URL, il sélectionne quelles vues afficher.</span></p>
<p><span style="color: rgb(34,34,34);">Backbone canalise la puissance des deux célèbres librairies </span><a href="http://jquery.com/" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">$</span></a><span style="color: rgb(34,34,34);"> et </span><a href="http://underscorejs.org/" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">_</span></a><span style="color: rgb(34,34,34);">, auxquelles il ajoute peu, en définitive (</span><a href="http://backbonejs.org/#Events-catalog" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">une liste d’évènements</span></a><span style="color: rgb(34,34,34);"> et </span><a href="http://backbonejs.org/#Sync" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">une interface restful</span></a><span style="color: rgb(34,34,34);">). Avec jQuery, il s’entoure d’une myriade de plugins, et, comme <a href="http://backbonejs.org/#View" rel="nofollow">il ne présuppose pas de la façon dont il sera utilisé</a>, peut en intégrer de nombreuses autres aussi facilement — templating, charts, <a href="http://requirejs.org/" rel="nofollow">amd</a>, etc. </span></p>
<p><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;">De nombreux mécanismes concourent à rendre ses accès rest transparents : <a href="http://documentcloud.github.io/backbone/#Model-save" rel="nofollow">model.save</a><span style="color: rgb(34,34,34);"> crée l&rsquo;objet </span><a href="http://documentcloud.github.io/backbone/#Model-isNew" rel="nofollow">s&rsquo;il n&rsquo;existe pas côté serveur</a><span style="color: rgb(34,34,34);">, ou le met à jour sinon, </span><a href="http://documentcloud.github.io/backbone/#Model-fetch" rel="nofollow">model.fetch</a><span style="color: rgb(34,34,34);"> et </span><a href="http://documentcloud.github.io/backbone/#Model-destroy" rel="nofollow">model.destroy</a><span style="color: rgb(34,34,34);"> parlent d&rsquo;eux-mêmes, <a href="http://backbonejs.org/#Model-url" rel="nofollow">model.url</a> indique l&rsquo;adresse de la ressource serveur, </span></span><a href="http://documentcloud.github.io/backbone/#Model-parse" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">model.parse</a><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;"> manipule la réponse serveur lorsqu&rsquo;elle n&rsquo;est pas similaire à l&rsquo;objet souhaité, etc</span><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;"> <span style="color: rgb(34,34,34);">(en interne, les appels serveur sont effectués avec jQuery)</span>.</span></p>
<p><span style="color: rgb(34,34,34);font-size: small;"><span style="line-height: 13.0pt;">Cette approche minimaliste permet un debug très rapide : identifier la template concernée puis la vue qui la manipule et l&rsquo;URL serveur de son modèle, vous y êtes presque. Les erreurs sont explicites, les responsabilités faciles à déceler. Il est </span></span><span style="color: rgb(34,34,34);">extrêmement</span><span style="color: rgb(34,34,34);font-size: small;"><span style="line-height: 13.0pt;"> rare de se retrouver à éplucher le code source de Backbone pour essayer de démêler une situation étrange.</span></span></p>
<h3><a name="simpliste"></a>Simpliste, peut-être</h3>
<p><span style="color: rgb(34,34,34);">Backbone n’est pas exempt de défauts. Le premier d’entre eux est le caractère rudimentaire du routeur. Ce dernier associe URLs et méthodes sans offrir de filtre d’accès global sur celles-ci. Ainsi, chacune des méthodes doit dupliquer le code de vérification si leur affichage dépend des droits de l’utilisateur. Il faudra avoir recours à </span><a href="https://github.com/documentcloud/backbone/wiki/Extensions,-Plugins,-Resources#routing" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">une extension Backbone</span></a><span style="color: rgb(34,34,34);"> pour bénéficier de cette fonctionnalité.</span></p>
<p><span style="color: rgb(34,34,34);">Le deuxième problème que l’on peut rencontrer est la gestion manuelle de l’imbrication de modèles. Lorsque Backbone récupère des données du serveur, il les enrobe dans un modèle (</span><span style="color: rgb(34,34,34);">ou une collection s’il s’agit d’une liste</span><span style="color: rgb(34,34,34);">). Cependant, cet enrobage n’est pas récursif : seul le premier niveau se voit allouer un objet et seulement lui lèvera des évènements. Les raisons de ce fonctionnement <a href="http://documentcloud.github.io/backbone/#FAQ-nested" rel="nofollow">sont détaillées dans la documentation</a> et, ici aussi, </span><a href="https://github.com/documentcloud/backbone/wiki/Extensions,-Plugins,-Resources#relations" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">des extensions Backbone</span></a><span style="color: rgb(34,34,34);"> sont disponibles (</span><span style="color: rgb(34,34,34);">de notre côté, nous avons utilisé </span><a href="https://github.com/dhruvaray/backbone-associations" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">Associations</span></a><span style="color: rgb(34,34,34);">).</span></p>
<p><span style="color: rgb(34,34,34);">Une autre source d’ennui est le manque de précision de certains évènements. Par exemple, l’ensemble des accès serveur — get, put, post, delete — se soldent par un évènement sync en cas de succès, sans indiquer de quel appel http il s’est agi. Cette information est rarement nécessaire, il faut l’avouer, mais quand c’est le cas, il faut alors surcharger la méthode sync du modèle en question (</span><span style="color: rgb(34,34,34);">nous verrons comment un peu plus bas</span><span style="color: rgb(34,34,34);">).</span></p>
<p><span style="color: rgb(34,34,34);">Backbone est un cadre de travail ouvert : de nombreux choix sont laissés à la discrétion du développeur. Des librairies comme <a href="http://marionettejs.com/" rel="nofollow">Marionette</a> ou <a href="http://chaplinjs.org/" rel="nofollow">Chaplin</a> s&rsquo;appuient sur Backbone et offrent une opinion plus appuyée côté client. <a href="https://github.com/airbnb/rendr" rel="nofollow">Rendr</a>, développé pour <a href="https://www.airbnb.fr/" rel="nofollow">airbnb</a>, offre même une intégration côté serveur.</span></p>
<h3><a name="pratiques"></a>Bonnes pratiques</h3>
<p><span style="color: rgb(34,34,34);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Il existe bien des manières de construire des applications Backbone ; la librairie, elle, n’en préconise pas de particulière. Ceci dit, certaines idées ont fleuri au fur et à mesure.</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une vue manipule une collection (</span><span style="color: rgb(34,34,34);">une liste de modèles</span><span style="color: rgb(34,34,34);">) et qu’elle désire offrir des actions individuelles sur chaque modèle, il est plus simple de créer une sous vue par modèle et de lui confier la gestion des actions de son modèle. Plusieurs autres librairies — Ember et Angular, par exemple — utilisent de nombreux data-attributes dans le DOM pour ces cas de figure, là où Backbone peut s’en passer complètement.</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une vue doit être ajoutée au DOM, il est plus efficace qu’elle le soit par la vue (ou le routeur) qui l’a instanciée. En d’autres termes, une vue gagne à ne pas indiquer </span><span style="color: rgb(17,85,204);text-decoration: underline;"><a href="http://backbonejs.org/#View-el" style="text-decoration: none;" rel="nofollow">d’attribut el</a></span><span style="color: rgb(34,34,34);"> (le nœud du DOM auquel elle est liée — qu&rsquo;il soit présent dans la page ou non). Ainsi, elle n’a pas comme prérequis la présence d’un élément dans le DOM. Cet élément est couramment présent dans le template de la vue parente : cette dernière est donc la mieux à même d’ajouter ses filles aux nœuds adéquats — </span><a href="http://backbonejs.org/#View-$el" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">se référer à l’exemple d’une liste ajoutant ses items dans son contenu</span></a><span style="color: rgb(34,34,34);"> (elle peut également le faire </span><a href="http://backbonejs.org/#View-dollar" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">dans un sous sélecteur</span></a><span style="color: rgb(34,34,34);">). </span></p>
<p><span style="color: rgb(34,34,34);">Les vues sans </span><a href="http://backbonejs.org/#View-el" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">attribut el</span></a><span style="color: rgb(34,34,34);"> présentent un second avantage : puisqu’elles n’ont pas de nœud auquel s’attacher, elles se voient affecter un div — </span><a href="http://backbonejs.org/#View-el" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">configurable</span></a><span style="color: rgb(34,34,34);"> — sur lequel est positionné les écouteurs d’évènements. Lorsque la vue n’est plus nécessaire, et que son nœud est détruit, </span><a href="http://backbonejs.org/#View-extend" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">ses écouteurs d’évènements</span></a><span style="color: rgb(34,34,34);"> le sont alors aussi. En revanche, si la vue est rattachée à un </span><a href="http://backbonejs.org/#View-el" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">attribut el</span></a><span style="color: rgb(34,34,34);"> existant, ce dernier est potentiellement nécessaire à d’autres vues, il ne peut pas être détruit : le nettoyage de la vue est alors plus délicat.</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une vue est retirée du DOM, elle doit être supprimée de la mémoire. Cependant, tant qu&rsquo;un objet a des références vers d&rsquo;autres, le Garbage Collector JavaScript ne peut le supprimer. Elle devient ce qu’on appelle alors une vue fantôme ; elle continue à avoir un effet sur l&rsquo;application : une case à cocher effectuant deux fois son action habituelle, par exemple. </span><a href="https://github.com/documentcloud/backbone/issues/2490" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">Une discussion animée sur ce sujet</span></a><span style="color: rgb(34,34,34);"> est en cours pour les futures versions de Backbone. En attendant, une pratique couramment retenue consiste à </span><a href="http://stackoverflow.com/questions/7379263/disposing-of-view-and-model-objects-in-backbone-js" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">ajouter une méthode close</span></a><span style="color: rgb(34,34,34);"> aux vues, souvent déclenchée par le routeur lors de la navigation d’une vue vers une autre (et en cascade pour les vues filles).</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu&rsquo;il devient nécessaire de surcharger Backbone, plusieurs choses sont à prendre en compte. La plus importante, imputable au langage JavaScript, est l&rsquo;absence de mot clé super, qui contraint à l&rsquo;utilisation du prototype de la classe à surcharger (comme expliqué dans l’</span><a href="http://backbonejs.org/#Model-extend" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">aparté sur super</span></a><span style="color: rgb(34,34,34);"> de la documentation). </span><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;">À noter également : la méthode extend — issue d&rsquo;Underscore — remplace les références d&rsquo;attributs au lieu de les étendre. Ainsi, une classe fille définissant </span><a href="http://documentcloud.github.io/backbone/#View" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">l&rsquo;attribut events</a><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;"> n&rsquo;héritera pas de ceux de sa classe mère (si celle-ci en définit). En revanche, si seule la classe mère définit des évènements, ceux-ci sont bien hérités par la fille.</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une information de l’interface utilisateur n’est reliée à aucune donnée côté serveur, il est tout de même pertinent de s’appuyer sur un modèle — sans url, donc — auquel la vue peut apporter des modifications et s’abonner. Une convention de nommage est une bonne idée dans ce cas de figure. Par exemple, le tri d&rsquo;une collection dans un tableau sur chaque attribut peut reposer sur un modèle, au lieu d&rsquo;utiliser des variables dans la vue.</span></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une closure est utilisée dans une méthode d’une vue, le this de cette closure n’est pas la vue elle-même. Underscore propose des méthodes </span><a href="http://underscorejs.org/#bind" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">bind</span></a><span style="color: rgb(34,34,34);"> et </span><a href="http://underscorejs.org/#bindAll" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">bindAll</span></a><span style="color: rgb(34,34,34);"> pour parer ces cas de figure. À utiliser avec modération — pour </span><a href="http://jsperf.com/bind-vs-jquery-proxy/5" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">des raisons de performances</span></a><span style="color: rgb(34,34,34);"> — ces méthodes peuvent souvent être remplacées par un simple self = this.</span></p>
<p><span style="color: rgb(34,34,34);font-size: small;"><span style="line-height: 13.0pt;">Lorsque la méthode toJSON tend à être modifiée </span></span><span style="color: rgb(34,34,34);">pour le templating</span><span style="color: rgb(34,34,34);font-size: small;"><span style="line-height: 13.0pt;">, la création d’une autre méthode est recommandée. En effet, toJSON est utilisée également par Backbone pour l’envoi des modèles au serveur. Utiliser des mixins/helpers dans les templates est aussi une piste </span></span><span style="color: rgb(34,34,34);">intéressante</span><span style="color: rgb(34,34,34);font-size: small;"><span style="line-height: 13.0pt;">.</span></span><strong><strong><br /></strong></strong></p>
<p><span style="color: rgb(34,34,34);">Lorsqu’une gestion centralisée des erreurs serveur est souhaitée, la surcharge de la </span><a href="http://backbonejs.org/#Sync" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">méthode sync</span></a><span style="color: rgb(34,34,34);"> commune à tous les composants </span><a href="http://stackoverflow.com/a/9275282/535184" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">est possible</span></a><span style="color: rgb(34,34,34);">.</span></p>
<h3><a name="idees"></a>Idées reçues</h3>
<p><span style="color: rgb(34,34,34);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Une des idées les plus discutées du moment est le manque de productivité de Backbone vis-à-vis de ses compétiteurs Angular ou Ember. Pour des applications basiques, c’est évident. Mais, dès qu’une application est élaborée, la différence est beaucoup plus ténue : l’intégration naturelle de Backbone avec jQuery et ses dérivés lui ouvre la quasi intégralité des librairies créées ces dix dernières années sur le web. C’est là où réside la force de la simplicité de Backbone : il propose de ne pas réinventer la roue, plutôt de pousser un cran plus loin la manière dont les applications web ont été construites jusque-là.</span></p>
<p><span style="color: rgb(34,34,34);">Pour l’avoir utilisé depuis sa </span><a href="http://backbonejs.org/#changelog" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">version 0.3.3</span></a><span style="color: rgb(34,34,34);">, Backbone s’est raffiné agréablement, profitant </span><a href="http://underscorejs.org/#changelog" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">des améliorations d’Underscore</span></a><span style="color: rgb(34,34,34);">, peaufinant </span><a href="http://backbonejs.org/#Events-catalog" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">sa gestion d’évènements</span></a><span style="color: rgb(34,34,34);">, sans devenir compliqué : au contraire, ces améliorations l’on rendu plus cohérent encore. Et migrer d’une version à une autre n’a jamais été très difficile.</span></p>
<p><span style="color: rgb(34,34,34);">Backbone 1.0 est daté du 20 mars. Si l’on se rapporte </span><a href="https://github.com/documentcloud/backbone/issues?state=open" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">aux issues actuelles</span></a><span style="color: rgb(34,34,34);">, certaines choses mineures restent à traiter, et il semble qu’</span><a href="https://github.com/documentcloud/backbone/issues/2490" style="text-decoration: none;" rel="nofollow"><span style="color: rgb(17,85,204);text-decoration: underline;">une gestion des vues imbriquées</span></a><span style="color: rgb(34,34,34);"> soit en discussion<span style="color: rgb(34,34,34);">, avec à la clé le détail des opérations laissées</span> à la discrétion des développeurs. Difficile aujourd’hui de prédire si Backbone se dotera d’opinions plus prononcées sur la création d’applications web ; il semble que sa popularité en dépende. La simplicité de l&rsquo;ensemble et sa grande adaptation à tous les cadres en font une librairie d&rsquo;une excellente qualité. La <a href="http://backbonejs.org/#examples" rel="nofollow">liste pléthorique d&rsquo;applications réelles</a> en tirant partie, <a href="https://github.com/popular/starred" rel="nofollow">sa popularité sur Github</a>, soulignent à nouveau, l&rsquo;élégance et la pertinence de cette modeste librairie aux 4 classes.</span></p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/22/backbone-deux-ans-apres/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/</link>
		<comments>http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#comments</comments>
		<pubDate>Tue, 21 May 2013 12:00:08 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[lean startup]]></category>
		<category><![CDATA[Reactor]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14188</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Lean Startup suck here are 10 reasons (By Benjamin Moitié) Predict project failure using cumulative flow diagrams (By Couthaïer Farfra) Agile is not Democracy (By Benjamin Moitié) Le coin de la technique Go passe en version 1.1 (By Yannick Grenzinger) Apprenez Git graphiquement [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /><br />
<em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-LeanStartupsuckhereare10reasons">Lean Startup suck here are 10 reasons</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/bmoitie" target="_blank">Benjamin Moitié</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-Predictprojectfailureusingcumulativeflowdiagrams">Predict project failure using cumulative flow diagrams</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-AgileisnotDemocracy">Agile is not Democracy</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/bmoitie" target="_blank">Benjamin Moitié</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-Gopasseenversion1.1">Go passe en version 1.1</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-ApprenezGitgraphiquement">Apprenez Git graphiquement</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/flegall" target="_blank">Florent Le Gall</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/#RevuedePresseXebia-Reactor%3Acr%C3%A9ationd%27applicationasynchronepourlaJVM">Reactor : création d&rsquo;application asynchrone pour la JVM</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité"><span style="font-size: 1.4em;">Agilité</span></h3>
<h4 id="RevuedePresseXebia-LeanStartupsuckhereare10reasons">Lean Startup suck here are 10 reasons</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/bmoitie' target='_blank'><img title='http://twitter.com/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/bmoitie' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moitié</a></span></div>
<p>Un article pas vraiment Lean startup correct, mais il faut toujours tenir compte des contres arguments. Même si dans ce cas, c&rsquo;est parfois un peu &laquo;&nbsp;too much&nbsp;&raquo;&#8230;</p>
<p><a href="http://nanodome.wordpress.com/2011/10/05/lean-startups-suck-here-are-10-reasons-why/" rel="nofollow">http://nanodome.wordpress.com/2011/10/05/lean-startups-suck-here-are-10-reasons-why/</a></p>
<h4 id="RevuedePresseXebia-Predictprojectfailureusingcumulativeflowdiagrams">Predict project failure using cumulative flow diagrams</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40cfarfra' target='_blank'><img title='http://twitter.com/%40cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Couthaïer Farfra</a></span></div>
<p>Cet article, du blog &laquo;&nbsp;<a href="http://www.kanbanway.com/" rel="nofollow">Project Management &#8211; The Kanban way</a>&laquo;&nbsp;, décrit les apports du diagramme de flux cumulé sur la mesure de la prédictibilité, dans une démarche de gestion de projet Kanban.</p>
<p><a href="http://www.kanbanway.com/predict-project-failure-using-cumulative-flow-diagrams" rel="nofollow">http://www.kanbanway.com/predict-project-failure-using-cumulative-flow-diagrams</a></p>
<h4 id="RevuedePresseXebia-AgileisnotDemocracy">Agile is not Democracy</h4>
<p><span><div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/bmoitie' target='_blank'><img title='http://twitter.com/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/bmoitie' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moitié</a></span></div></span></p>
<div>L&rsquo;objectif des jeux et des votes utilisés en coaching n&rsquo;est peut être pas compris de tous.</div>
<div><a href="http://businesscraftsmanship.tumblr.com/post/50495117127/agile-is-not-democracy" rel="nofollow">http://businesscraftsmanship.tumblr.com/post/50495117127/agile-is-not-democracy</a></div>
<h3 id="RevuedePresseXebia-Lecoindelatechnique"><span style="font-size: 1.4em;">Le coin de la technique</span></h3>
<h4 id="RevuedePresseXebia-Gopasseenversion1.1">Go passe en version 1.1</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Go, le langage de Google, passe en <a href="http://blog.golang.org/2013/05/go-11-is-released.html" rel="nofollow">version 1.1</a>. Déjà réputé pour, il <a href="http://arstechnica.com/information-technology/2013/05/googles-programming-language-go-gets-a-big-speed-boost/" rel="nofollow">gagne encore en performance</a> avec cette mise à jour. Pour ceux qui ne connaitrait pas Go, c&rsquo;est un langage compilé et fortement typé qui se veut proche de la programmation système (et qui veut donc concurrencer C/C++). Son gros avantage étant la facilité avec laquelle on peut exécuter du code en parallèle avec les goroutines. Et pour finir pourquoi GO ? quelques réponses <a href="http://nathany.com/why-go" rel="nofollow">ici</a>.</p>
<h4 id="RevuedePresseXebia-ApprenezGitgraphiquement">Apprenez Git graphiquement</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/flegall' target='_blank'><img title='http://blog.xebia.fr/author/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/flegall' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/flornt' target='_blank'><img title='http://twitter.com/flornt' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/flornt' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/flegall' target='_blank'><img title='http://github.com/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/flegall' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/flegall' target='_blank'>Florent Le Gall</a></span></div>
<p>Vous utilisez Git ou envisagez d&rsquo;y passer bientôt ? Vous souhaitez apprendre à utiliser ses fonctionalités avancées : branches / merge / rebase / cherry-pick ?</p>
<p>Cette application web permet de saisir des commandes Git et de voir le résultat immédiatement dans un graphe. L&rsquo;application propose aussi des exercices à résoudre de plusieurs niveaux de difficulté.</p>
<p><a href="http://pcottle.github.io/learnGitBranching/" rel="nofollow">http://pcottle.github.io/learnGitBranching/</a></p>
<h4 id="RevuedePresseXebia-Reactor:créationd'applicationasynchronepourlaJVM">Reactor : création d&rsquo;application asynchrone pour la JVM</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Basé sur le pattern éponyme (<a href="http://en.wikipedia.org/wiki/Reactor_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Reactor_pattern</a>), Spring partage avec la communauté son framework Reactor. Celui-ci, comparable dans les objectifs à Vert.x, permet de créer des applications hautement performante et facilement scalable.</p>
<p>L&rsquo;architecture de Reactor se compose de trois briques de bases :</p>
<ul>
<li><span style="font-size: 10.0pt; line-height: 13.0pt;">Consumer</span></li>
<li><span style="font-size: 10.0pt; line-height: 13.0pt;">Selector</span></li>
<li><span style="font-size: 10.0pt; line-height: 13.0pt;">Event</span></li>
</ul>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">Les Consumer s&rsquo;occupe d&rsquo;un traitement métier, et sont enregistrés auprès du framework. L&rsquo;application envoie des events au framework, et le selector s&rsquo;occupe de dispatcher les events au bon Consumer.</span></p>
<p>Le framework Reactor sera notamment intégré dans la version 2.3 de grails afin de proposer nativement une api de gestion des événements. Pour plus d&rsquo;information sur ce nouveau projet de Spring :</p>
<p><a href="https://github.com/reactor" rel="nofollow">Le github du projet</a></p>
<p><a href="http://blog.springsource.org/2013/05/13/reactor-a-foundation-for-asynchronous-applications-on-the-jvm/" rel="nofollow">L&rsquo;annonce sur le blog de Spring</a></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/21/revue-de-presse-xebia-2013-21/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xebia et les Duchess vous invitent à prendre le café</title>
		<link>http://blog.xebia.fr/2013/05/21/xebia-et-les-duchess-vous-invitent-a-prendre-le-cafe/</link>
		<comments>http://blog.xebia.fr/2013/05/21/xebia-et-les-duchess-vous-invitent-a-prendre-le-cafe/#comments</comments>
		<pubDate>Tue, 21 May 2013 06:00:00 +0000</pubDate>
		<dc:creator>Mathieu Breton</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[Duchess]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14170</guid>
		<description><![CDATA[Le 27 mai prochain, Xebia héberge avec joie une nouvelle soirée Les Mains dans le Code des Duchess France sur CoffeeScript.   Vous trouvez JavaScript trop verbeux ? Vous aimez les classes ?  Vous êtes un fonctional hipster ?  CoffeeScript peut vous intéresser ! Le but de ce Hands-On est de vous apprendre CoffeeScript, un langage compilant vers JavaScript, dont la syntaxe s’inspire de Ruby [...]]]></description>
				<content:encoded><![CDATA[
<p style="text-align: center;"><img alt="marmite-banner-pour-eventbrite" src="https://ebmedia.eventbrite.com/s3-s3/eventlogos/12625139/3678075222-7.png?rand=206679" width="300" /></p>
<p style="text-align: center;"><span style="font-size: 10.0pt; line-height: 13.0pt;">Le 27 mai prochain, Xebia héberge avec joie une nouvelle soirée <span style="color: #ae0000;"><strong>Les Mains dans le Code </strong><span style="color: #000000;">des</span><strong> <strong>Duchess France</strong></strong></span> sur <span style="color: #ae0000;"><strong>CoffeeScript</strong></span>. </span></p>
<p style="text-align: center;"><span style="font-size: 10.0pt; line-height: 13.0pt;"> </span><span style="font-size: 10.0pt; line-height: 13.0pt;">Vous trouvez JavaScript trop verbeux ? </span><span style="font-size: 10.0pt; line-height: 13.0pt;">Vous aimez les classes ? </span><span style="font-size: 10.0pt; line-height: 13.0pt;"> </span><span style="font-size: 10.0pt; line-height: 13.0pt;">Vous êtes un fonctional hipster ? </span><span style="font-size: 10.0pt; line-height: 13.0pt;"> CoffeeScript peut vous intéresser !</span></p>
<p style="text-align: center;"><strong><img class="aligncenter" alt="" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/12625139/logocoffescript.png" width="405" height="69" /></strong></p>
<p>Le but de ce Hands-On est de vous apprendre <a style="text-decoration: none;" title="Coffe Script" href="http://coffeescript.org/" rel="nofollow">CoffeeScript</a>, un langage compilant vers JavaScript, dont la syntaxe s’inspire de Ruby et Python.</p>
<p>Cette session débutera par la démonstration de l&rsquo;implémentation d’un champ de mine en TDD en 20 min top chrono. Ensuite, vous attaquerez le coeur du sujet en fabriquant une partie d’un Space Invaders en CoffeeScript. Cet atelier sera animé par <a href="https://twitter.com/benoit_lemoine" rel="nofollow">Benoît Lemoine</a>, <a href="https://twitter.com/morlhon" rel="nofollow">Jean-Laurent de Morlhon</a> et <a href="https://twitter.com/MatBreton" rel="nofollow">Mathieu Breton</a>.</p>
<p>Pour s&rsquo;inscrire, c&rsquo;est <a href="http://hands-on-coffescript.eventbrite.com/" rel="nofollow">ici</a>.</p>
<p><strong>Lieu</strong> : Xebia<br />
156 Boulevard Haussmann<br />
Batiment A, 7ième étage</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/21/xebia-et-les-duchess-vous-invitent-a-prendre-le-cafe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UITableView + API GitHub + CocoaPods = Keep it Simple, keep it Stupid!</title>
		<link>http://blog.xebia.fr/2013/05/20/uitableview-api-github-cocoapods-keep-it-simple-keep-it-stupid/</link>
		<comments>http://blog.xebia.fr/2013/05/20/uitableview-api-github-cocoapods-keep-it-simple-keep-it-stupid/#comments</comments>
		<pubDate>Mon, 20 May 2013 12:00:00 +0000</pubDate>
		<dc:creator>Alexis Kinsella</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[CocoaPods]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14041</guid>
		<description><![CDATA[Nous avons vu dans un article précédent comment utiliser RestKit pour se faciliter la vie lorsque nous travaillons avec des services web exploitant le format JSON. Toutefois, l&#8217;utilisation d&#8217;un framework fullstack peut se révéler contraignant dès lors que l&#8217;on sort du cadre pour lequel il a été destiné. Malheureusement, cela arrive souvent assez rapidement. Nous [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-A.png" target="_blank"><img style="float: right; padding: 0 0 0 5px;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-A-291x300.png" width="200" /></a>Nous avons vu <a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">dans un article précédent</a> comment utiliser <em><a href="http://restkit.org/" rel="nofollow">RestKit</a></em> pour se faciliter la vie lorsque nous travaillons avec des services web exploitant le format JSON. Toutefois, l&rsquo;utilisation d&rsquo;un framework fullstack peut se révéler contraignant dès lors que l&rsquo;on sort du cadre pour lequel il a été destiné. Malheureusement, cela arrive souvent assez rapidement.</p>
<p style="text-align: left;">Nous verrons dans cet article comment reproduire une application similaire à celle construite grâce à <em>RestKit, </em>sans pour autant abandonner l&rsquo;idée de gagner du temps grâce à l&rsquo;utilisation de quelques librairies bien choisies : </p>
<ul>
<li><a href="https://github.com/AFNetworking/AFNetworking" rel="nofollow">AFNetworking</a>,</li>
<li><a href="https://github.com/johnezang/JSONKit" rel="nofollow">JSONKit</a>,</li>
<li><a href="https://github.com/dchohfi/KeyValueObjectMapping" rel="nofollow">DCKeyValueObjectMapping</a>,</li>
<li><a href="https://github.com/rs/SDURLCache" rel="nofollow">SDURLCache</a>,</li>
<li><a href="https://github.com/samvermette/SVPullToRefresh" rel="nofollow">SVPullToRefresh</a></li>
</ul>
<p>Le monde iOS, comme tout environnement mature, dispose de nombreuses librairies Open Source intégrables dans vos projets via l&rsquo;utilisation d&rsquo;un Dependency Manager. Dans notre cas, nous utiliserons <em><a href="http://blog.xebia.fr/2012/10/15/gerez-vos-dependances-objective-c-avec-cocoapods/" rel="nofollow">CocoaPods</a></em> déjà présenté dans un <a href="http://blog.xebia.fr/2012/10/15/gerez-vos-dependances-objective-c-avec-cocoapods/" rel="nofollow">article précédent</a>.</p>
<p>La création de ce tutoriel fait suite à une présentation en <a href="http://blog.xebia.fr/tag/xke/" rel="nofollow">XKE</a> d&rsquo;une session d&rsquo;1h30 d&rsquo;introduction aux développements iOS. Ce tutoriel est donc réalisable en un temps raisonnable en suivant les instructions ci-dessous.</p>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Créationduprojet">Création du projet</h1>
<p>Avant d&rsquo;utiliser <em>CocoaPods</em>, vous devrez créer un projet de type <em>Empty Application</em> pour iOS via <em>XCode</em>:</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-0.png" /></p>
<p>Vous aurez ensuite à créer un fichier <em>Podfile</em> à la racine de votre projet <em>XCode</em> avec les dépendances suivantes:</p>
<pre class="brush: java; title: ; notranslate">platform :ios, '5.0'
pod 'JSONKit', '1.5pre'
pod 'Underscore.m', '0.2.0'
pod 'AFNetworking', '1.1'
pod 'MBProgressHUD', '0.6'
pod 'SVPullToRefresh', '0.4'
pod 'SDURLCache', '1.2'
pod 'AFHTTPRequestOperationLogger', '0.10.0'
pod 'DCKeyValueObjectMapping', '1.3'</pre>
<p>Puis, vous devrez exécuter la commande suivante pour générer le workspace et intégrer le code des dépendances:</p>
<pre class="brush: java; title: ; notranslate">pod install</pre>
<p>Il faudra alors relancer votre projet en ouvrant le fichier <em>*.XCodeWorkspace</em>, plutôt que le fichier <em>*.XCodeProject</em>. Vous serez alors prêt à développer votre application.</p>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-CréationduStoryBoard">Création du StoryBoard</h1>
<p>Nous avons choisi de créer une application vide. Il nous faut donc créer un StoryBoard qui contiendra les différentes vues que nous aurons à créer. Pour cela, nous allons nous  rendre dans le menu: <em>File &gt; New &gt; File&#8230;</em> et sélectionner <em>StoryBoard</em> dans la section<em> iOS &gt; User Interface</em>. Vous pourrez, par exemple, nommer le fichier: <em>UITableViewTutorial.storyboard</em></p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-1.png" /></p>
<p>Une fois le storyboard créé, il est nécessaire de l&rsquo;associer en tant que storyboard par défaut afin qu&rsquo;il soit utilisé au lancement de l&rsquo;application. Cela peut être réalisé via l&rsquo;onglet de configuration <em>Target Summary</em> de la target par défaut, ici <em>UITableViewTutorial</em>.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-9.png" /></p>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Créationd'unUITableViewController">Création d&rsquo;un UITableViewController</h1>
<p>Nous souhaitons afficher un listing de données, un <em>table view controller</em> correspond donc à notre besoin. Nous devons créer un <em>table view controller</em> dans le storyboard de l&rsquo;application et l&rsquo;assigner comme vue de démarrage de l&rsquo;application. Afin de faciliter la navigation, nous souhaitons également créer un <em>navigation controller</em>.</p>
<p>XCode facilite la création de ces deux <em>view controllers</em> en faisant glisser depuis l&rsquo;explorateur d&rsquo;objets un élément de type: <em>Navigation Controller</em> sur le storyboard. Cela aura pour effet de créer automatiquement le <em>navigation controller,</em> le <em>table view controller</em> ainsi que la liaison de navigation entre les deux view controllers.</p>
<div>
<center></p>
<table>
<tbody>
<tr>
<th><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-3.png" width="200" /></th>
<th><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-2.png" width="400" /></th>
</tr>
</tbody>
</table>
<p></center>
</div>
<p>Lorsqu&rsquo;un projet a été créé sans storyboard avec un template de type <em>Empty Application</em>, il est nécessaire de modifier le code d&rsquo;initialisation de l&rsquo;application et de supprimer le code inutile généré. La méthode de démarrage de l&rsquo;application <em>application:didFinishLaunchingWithOptions:</em> <span style="font-size: 10.0pt; line-height: 13.0pt; font-family: Arial , Helvetica , FreeSans , sans-serif;">dans la classe </span><em style="font-size: 10.0pt; line-height: 13.0pt; font-family: Arial , Helvetica , FreeSans , sans-serif;">AppDelegate</em><span style="font-size: 10.0pt; line-height: 13.0pt; font-family: Arial , Helvetica , FreeSans , sans-serif;"> doit retourner tout simplement la valeur YES:</span></p>
<pre class="brush: java; title: ; notranslate">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 return YES;
}

</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Colorationdesbarresdenavigation">Coloration des barres de navigation</h2>
<p>La coloration des barres de navigation peut-être customisée via l&rsquo;édition des propriétés <em>Status Bar</em> et <em>Top Bar</em> de l&rsquo;onglet <em>Simulated metrics</em> du navigation controller. Nous choisirons la couleur noir, plus passe-partout que le bleu de l&rsquo;interface iPhone un peu vieillissant.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-4.png" /></p>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Titredelatableview">Titre de la table view</h2>
<p>Le titre de la table view peut être changé via la propriété <em>Title</em> de l&rsquo;onglet <em>Navigation Item</em>. Nous l&rsquo;appellerons <em>Repositories</em>.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-B.png" /></p>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Styledescellules">Style des cellules</h2>
<p>Le style de la cellule sera de type <em>Subtitle</em> et correspond donc à un type standard qui peut être configuré via propriété <em>Style</em> de l&rsquo;onglet <em>Table View Cell</em> du prototype de cellule du tableau.</p>
<p style="text-align: center;"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-C.png" /></p>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Identifiantderéutilisation">Identifiant de réutilisation</h2>
<p>Afin d&rsquo;optimiser la performance de ses <em>table views, </em>iOS permet la réutilisation de ses cellules. Pour en bénéficier, un identifiant de cellule réutilisable doit être défini. Nous utiliserons l&rsquo;identifiant <em>RepositoryCell,</em> configurable via la propriété <em>Identifier</em> de l&rsquo;onglet T<em>able View Cell</em>.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-8.png" /></p>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Associationdelatableviewavecsoncontroller">Association de la table view avec son controller</h2>
<p>Nous n&rsquo;avons pas encore créé de table view controller, nous allons donc le créer via le menu <em>File &gt; New &gt; File …</em> et choisir <em>Objective-C class</em> dans la section <em>iOS &gt; Cocoa Touch</em>. Le controller s&rsquo;appellera <em>GHRepositoryTableViewController</em>.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-5.png" /></p>
<p>Une fois la classe créée, nous pouvons associer la table view avec son controller via la propriété <em>Class</em> de l&rsquo;onglet <em>Custom Class</em> de la table view. Il doit correspondre au nom de la classe du controller gérant la vue.</p>
<p><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/UITableView-7.png" /></p>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Récupérationdesdonnées">Récupération des données</h1>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Fluxdedonnées">Flux de données</h2>
<p>Le service web utilisé sera toujours le service de listing des répositories GitHub d&rsquo;une organisation donnée.</p>
<pre class="brush: java; title: ; notranslate">https://api.github.com/orgs/:organization/repos</pre>
<p>Le flux de données correspondant à la liste des repositories de l&rsquo;organisation <em>FaceBook</em> correspond à la structure suivante:</p>
<pre class="brush: java; title: ; notranslate">[
 {
    &quot;default_branch&quot;: &quot;master&quot;,
    &quot;homepage&quot;: &quot;http://three20.info/&quot;,
    &quot;html_url&quot;: &quot;https://github.com/facebook/three20&quot;,
    &quot;owner&quot;: {
        &quot;login&quot;: &quot;facebook&quot;,
        &quot;avatar_url&quot;: &quot;https://secure.gravatar.com/avatar/193c1a93276f729041fc875cf2a20773?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-org-420.png&quot;,
        &quot;gravatar_id&quot;: &quot;193c1a93276f729041fc875cf2a20773&quot;,
        &quot;url&quot;: &quot;https://api.github.com/users/facebook&quot;,
        &quot;id&quot;: 69631
    },
    &quot;has_downloads&quot;: false,
    &quot;created_at&quot;: &quot;2009-02-19T06:31:51Z&quot;,
    &quot;watchers&quot;: 6961,
    &quot;has_issues&quot;: true,
    &quot;description&quot;: &quot;Three20 is an Objective-C library for iPhone developers&quot;,
    &quot;pushed_at&quot;: &quot;2012-10-18T09:30:54Z&quot;,
    &quot;forks&quot;: 1207,
    &quot;git_url&quot;: &quot;git://github.com/facebook/three20.git&quot;,
    &quot;ssh_url&quot;: &quot;git@github.com:facebook/three20.git&quot;,
    &quot;svn_url&quot;: &quot;https://github.com/facebook/three20&quot;,
    &quot;has_wiki&quot;: true,
    &quot;master_branch&quot;: &quot;master&quot;,
    &quot;clone_url&quot;: &quot;https://github.com/facebook/three20.git&quot;,
    &quot;size&quot;: 4704,
    &quot;forks_count&quot;: 1207,
    &quot;fork&quot;: false,
    &quot;updated_at&quot;: &quot;2012-10-23T19:37:21Z&quot;,
    &quot;watchers_count&quot;: 6961,
    &quot;name&quot;: &quot;three20&quot;,
    &quot;open_issues&quot;: 252,
    &quot;url&quot;: &quot;https://api.github.com/repos/facebook/three20&quot;,
    &quot;private&quot;: false,
    &quot;id&quot;: 132321,
    &quot;language&quot;: &quot;Objective-C&quot;,
    &quot;mirror_url&quot;: null,
    &quot;open_issues_count&quot;: 252,
    &quot;full_name&quot;: &quot;facebook/three20&quot;
  }
...
]</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Modélisationdumodèlemétier">Modélisation du modèle métier</h2>
<p>La modélisation métier proposée dans les tutoriels précédents sera reprise. Nous avons donc une interface et une implémentation correspondant aux classes <em>GHOwner</em> et <em>GHRepository</em> à ajouter.</p>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-DéfinitiondelaclasseGHOwner">Définition de la classe GHOwner</h3>
<h4 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Interface">Interface</h4>
<pre class="brush: java; title: ; notranslate">@interface GHOwner : NSObject
@property (nonatomic, strong) NSString *gravatar_id;

@property (nonatomic, strong, readonly) NSURL *avatarImageUrl;

@end</pre>
<h4 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Implémentation">Implémentation</h4>
<pre class="brush: java; title: ; notranslate">#import &quot;GHOwner.h&quot;
@implementation GHOwner

- (NSURL *)avatarImageUrl {
    NSString *gravatarUrlStr = [NSString stringWithFormat:@&quot;https://secure.gravatar.com/avatar/%@?s=44&amp;d=404&quot;, self.gravatar_id];
    return [NSURL URLWithString: gravatarUrlStr];
}

@end</pre>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-DéfinitiondelaclasseGHRepository">Définition de la classe GHRepository</h3>
<h4 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Interface.1">Interface</h4>
<pre class="brush: java; title: ; notranslate">#import &quot;GHOwner.h&quot;
@interface GHRepository : NSObject

@property (nonatomic, strong) NSNumber *forks;
@property (nonatomic, strong) NSString *language;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSNumber *open_issues;
@property (nonatomic, strong) GHOwner *owner;
@property (nonatomic, strong) NSString *url;
@property (nonatomic, strong) NSNumber *watchers;
@property (nonatomic, strong, readonly) NSString *description_;

@end</pre>
<h4 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Implémentation.1">Implémentation</h4>
<pre class="brush: java; title: ; notranslate">#import &quot;GHRepository.h&quot;
@implementation GHRepository

- (NSString *)description_ {
    return [NSString stringWithFormat:@&quot;%@ - %@ Forks - %@ Watchers - %@ Issues&quot;, self.language ? self.language : @&quot;No Language&quot;, self.forks, self.watchers, self.open_issues];
}

@end</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-ChargmentdesdonnéesavecAFNetworking"><span style="font-size: 14.0pt;">Chargment des données avec AFNetworking</span></h2>
<p><em><a href="https://github.com/AFNetworking/AFNetworking" rel="nofollow">AFNetworking</a></em> est une librairie HTTP très appréciée pour sa simplicité d&rsquo;utilisation et son efficacité via l&rsquo;utilisation des <em>Operation Queues</em>. Nous l&rsquo;utiliserons pour nous faciliter le travail d&rsquo;accès aux données du service via HTTP.</p>
<p>Dans la méthode <em>viewDidLoad:</em> du table view controller, nous appellerons une méthode qui aura la responsabilité de charger les données et déclencher le rechargement du composant. Nous appellerons cette méthode <em>loadDataWithCallback</em>.</p>
<pre class="brush: java; title: ; notranslate">- (void)loadDataWithCallback:(void(^)())callback {
    AFHTTPClient *httpClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@&quot;https://api.github.com&quot;]];
    NSURLRequest *urlRequest = [httpClient requestWithMethod:@&quot;GET&quot; path:@&quot;/orgs/facebook/repos&quot; parameters:nil];
    [self showProgressHUDWithMessage:NSLocalizedString(@&quot;Chargement des données&quot;, nil) graceTime:0.5];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
  ...

        [self.tableView reloadData];
        [self dismissProgressHUD];
  if (callback) {
            callback();
        }
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        XBLogWarn(@&quot;Error: %@&quot;, error);
        self.dataSource = [NSArray array];
        [self.tableView reloadData];
        [self showErrorProgressHUDWithMessage:NSLocalizedString(@&quot;Erreur de chargement des données !&quot;, nil) afterDelay:0.5];
        if (callback) {
            callback();
        }
    }];
    [operation start];
}</pre>
<p>Il est nécessaire d&rsquo;appeler cette méthode au chargement de la vue, dans la méthode <em>viewDidLoad</em> si nous souhaitons que les données soient chargées automatiquement lors du premier affichage de la vue:</p>
<pre class="brush: java; title: ; notranslate">- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initProgressHUD];
    [self loadDataWithCallback:^{}];
}</pre>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Loggingdesrequêtes/réponsesHTTP">Logging des requêtes / réponses HTTP</h3>
<p>Afin de faciliter le travail de déboggage via le traçage des appels HTTP, la micro extension <em><span style="font-size: 10.0pt; line-height: 13.0pt;"><a href="https://github.com/AFNetworking/AFHTTPRequestOperationLogger" rel="nofollow">AFHTTPRequestOperationLogger</a> </span></em><span style="font-size: 10.0pt; line-height: 13.0pt;">de la librairie </span><em style="font-size: 10.0pt; line-height: 13.0pt;">AFNetworking</em><span style="font-size: 10.0pt; line-height: 13.0pt;"> a été ajoutée. Elle permet d&rsquo;afficher les informations relatives aux requêtes effectuées via la librairie.</span></p>
<pre class="brush: java; title: ; notranslate">- (void)setupNetworkingLogger {
    [[AFHTTPRequestOperationLogger sharedLogger] startLogging];
    [[AFHTTPRequestOperationLogger sharedLogger] setLevel:AFLoggerLevelDebug];
}</pre>
<p>Cette méthode doit être appelée au démarrage de l&rsquo;application et son initialisation prend donc place dans la classe <em>AppDelegate</em>:</p>
<pre class="brush: java; title: ; notranslate">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self setupNetworkingLogger];
    return YES;
}

</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Ajoutd'indicateursdechargement">Ajout d&rsquo;indicateurs de chargement</h2>
<p>Nous souhaitons ajouter un indicateur de chargement qui apparaît lors du requêtage des données, et qui disparaît une fois les données chargées. Un message d&rsquo;erreur doit être affiché lorsque le chargement des données termine en erreur. Nous utiliserons la librairie <em><a href="https://github.com/jdg/MBProgressHUD" rel="nofollow">MBProgressHUD</a>, </em>qui propose une approche intéressante :<em> </em>l&rsquo;indicateur de chargement n&rsquo;apparait que si le temps d&rsquo;execution de l&rsquo;opération devient &laquo;&nbsp;long&nbsp;&raquo;. Si le chargement est suffisamment rapide, l&rsquo;indicateur n&rsquo;apparaît pas, et contribue à la fluidité de l&rsquo;expérience utilisateur</p>
<p>Dans un premier temps, le code suivant doit être ajouté au table view controller:</p>
<pre class="brush: java; title: ; notranslate">#pragma mark - Progress HUD

- (void)initProgressHUD {
 self.progressHUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
}

- (void)showProgressHUDWithMessage:(NSString *)message graceTime:(float)graceTime {
 self.progressHUD.mode = MBProgressHUDModeIndeterminate;
 self.progressHUD.labelText = NSLocalizedString(message, message);
 self.progressHUD.graceTime = graceTime;
 self.progressHUD.taskInProgress = YES;
 [self.navigationController.view addSubview:self.progressHUD];
 [self.progressHUD show:YES];
}

- (void)showErrorProgressHUDWithMessage:(NSString *)errorMessage afterDelay:(float)delay {
 self.progressHUD.mode = MBProgressHUDModeText;
 self.progressHUD.labelText = errorMessage;
 [self.progressHUD hide:YES afterDelay:delay];
 self.progressHUD.taskInProgress = NO;
 [self.navigationController.view addSubview:self.progressHUD];
}

- (void)dismissProgressHUD {
 self.progressHUD.taskInProgress = NO;
 [self.progressHUD hide:YES];
}</pre>
<p>Une variable d&rsquo;instance doit également être ajoutée dans la déclaration de l&rsquo;interface privée du table view controller:</p>
<pre class="brush: java; title: ; notranslate">@interface GHRepositoryTableViewController ()
@property (nonatomic, strong) MBProgressHUD *progressHUD;
@end</pre>
<p>Puis le composant <em>MBProgressHUD</em> doit être initialisé dans la méthode <em>viewDidLoad du controller</em>.</p>
<pre class="brush: java; title: ; notranslate">- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initProgressHUD];
}

</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-MappingduJSONaveclemodèlededonnées">Mapping du JSON avec le modèle de données</h2>
<p>Pour convertir les données reçues au format JSON, nous utiliserons 2 librairies. La première, <a href="https://github.com/johnezang/JSONKit" rel="nofollow">JSONKit</a>, est reconnue pour sa stabilité et ses performances. Elle permet de convertir une structure de données JSON vers une représentation de données au format NSDictionary / NSArray. Dans un second temps ce format intermédiaire pourra être converti vers notre modèle de données grâce à la librairie <a href="https://github.com/dchohfi/KeyValueObjectMapping" rel="nofollow"><em>DCKeyValueObjectMapping</em></a>.</p>
<pre class="brush: java; title: ; notranslate">- (void)buildDataSourceFromResponseData:(id)responseObject {
    NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSArray *json = [jsonString objectFromJSONString];
    DCParserConfiguration *parserConfiguration = [DCParserConfiguration configuration];
    parserConfiguration.datePattern = @&quot;yyyy-MM-dd'T'HH:mm:ss'Z'&quot;;
    DCKeyValueObjectMapping *parser = [DCKeyValueObjectMapping mapperForClass: GHRepository.class andConfiguration:parserConfiguration];
    self.dataSource = [parser parseArray:json];
}</pre>
<p>Le code de chargement devient donc:</p>
<pre class="brush: java; title: ; notranslate">- (void)loadDataWithCallback:(void(^)())callback {
    AFHTTPClient *httpClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@&quot;https://api.github.com&quot;]];
    NSURLRequest *urlRequest = [httpClient requestWithMethod:@&quot;GET&quot; path:@&quot;/orgs/facebook/repos&quot; parameters:nil];
    [self showProgressHUDWithMessage:NSLocalizedString(@&quot;Chargement des données&quot;, nil) graceTime:0.5];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

        [self buildDataSourceFromResponseData:responseObject];

        [self.tableView reloadData];
        [self dismissProgressHUD];
        if (callback) {
            callback();
        }
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        XBLogWarn(@&quot;Error: %@&quot;, error);
        self.dataSource = [NSArray array];
        [self.tableView reloadData];
        [self showErrorProgressHUDWithMessage:NSLocalizedString(@&quot;Erreur de chargement des données !&quot;, nil) afterDelay:0.5];
        if (callback) {
            callback();
        }
    }];
    [operation start];
}</pre>
<p>Il faut également ajouter une property dans l&rsquo;interface privée de la classe pour stocker le table de résultats. Nous l&rsquo;appellerons dataSource:</p>
<pre class="brush: java; title: ; notranslate">@interface GHRepositoryTableViewController ()
@property (nonatomic, strong) MBProgressHUD *progressHUD;
@property (nonatomic, strong) NSArray *dataSource;
@end</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Supportducachingdedonnées">Support du caching de données</h2>
<p>La librairie <em><a href="https://github.com/rs/SDURLCache" rel="nofollow">SDURLCache</a></em> sera utilisée pour fournir un support de cache fichier stockant les réponses HTTP. La librairie s&rsquo;appuie sur les en-têtes HTTP et le code de retour pour décider si les données de réponse doivent être mises en cache ou non. Cela permet une consultation des données offline si aucune connectivité est disponible lors d&rsquo;un requêtage ultérieur. <span style="font-size: 10.0pt; line-height: 13.0pt;">Le code d&rsquo;initialisation est à intégrer à la classe <em>AppDelegate</em>.</span></p>
<pre class="brush: java; title: ; notranslate">- (void)setupUrlCache {
    SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024*2
                                                         diskCapacity:1024*1024*20
                                                             diskPath:[SDURLCache defaultCachePath]];
    [NSURLCache setSharedURLCache:URLCache];
}</pre>
<p>Il faut également modifier la méthode <em>application:didFinishLaunchingWithOptions:</em> pour appeler la méthode ajoutée:</p>
<pre class="brush: java; title: ; notranslate">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self setupUrlCache];
    [self setupNetworkingLogger];
    return YES;
}</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Configurationdutableviewcontroller">Configuration du table view controller</h2>
<p>Plusieurs méthodes issues du protocole <em>UITableViewDataSource</em> sont à renseigner pour finaliser l&rsquo;implémentation initiale du table view controller.</p>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-numberOfSectionsInTableView:">numberOfSectionsInTableView:</h3>
<p>Cette méthode permet de renseigner le nombre de sections dans la table view. Ici nous n&rsquo;avons besoin que d&rsquo;une seule section qui est la section par défaut. Nous pouvons donc retourner la valeur: 1.</p>
<pre class="brush: java; title: ; notranslate">- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 return 1;
}</pre>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-tableView:numberOfRowsInSection:">tableView:numberOfRowsInSection:</h3>
<p>Cette méthode permet d&rsquo;indiquer combien nous avons de lignes par section. Ici, nous en avons autant qu&rsquo;il y a de résultats dans les données chargées. Cette valeur correspond donc au nombre de résultats présents dans la variable <em>dataSource</em>:</p>
<pre class="brush: java; title: ; notranslate">- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 return self.dataSource.count;
}</pre>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-tableView:cellForRowAtIndexPath:">tableView:cellForRowAtIndexPath:</h3>
<p>Cette méthode permet de configurer la cellule correspondant à l&rsquo;index fourni en paramètre. Nous utilisons ici la notion de <em>reuseIdentifier</em> pour recycler les cellules ayant déjà servi (dans un souci de performance). Il est important de noter que le <em>reuseIdentifier</em> doit être une variable statique, sans quoi le mécanisme de réutilisation de cellule ne fonctionne pas correctement.</p>
<p>En titre de cellule, nous choisirons d&rsquo;afficher le nom du repository. En detail, nous utiliserons la propriété <em>description_</em> qui regroupe différentes informations importantes à propos du repository.</p>
<p>Nous choisirons également d&rsquo;afficher une image sur chaque cellule. Cette image n&rsquo;est autre que le gravatar de l&rsquo;auteur du repository. L&rsquo;identifiant du gravatar est fourni par l&rsquo;API, tout comme son URL. Cependant, l&rsquo;URL ne convenant pas à notre besoin, nous décidons de la reconstruire en indiquant que nous souhaitons une image d&rsquo;une taille de 44 pixels, ainsi qu&rsquo;une erreur 404 lorsque l&rsquo;image n&rsquo;est pas trouvée. Ce dernier point est important car nous voulons pouvoir afficher une image <em>placeholder</em> dans le cas où une image n&rsquo;a pas encore été chargée (lorsqu&rsquo;elle n&rsquo;existe pas ou bien lorsqu&rsquo;il n&rsquo;est pas possible de la récupérer faute de connectivité).</p>
<pre class="brush: java; title: ; notranslate">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @&quot;RepositoryCell&quot;;
    UITableViewCell *repositoryCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    GHRepository *repository = self.dataSource[(NSUInteger) indexPath.row];
    repositoryCell.textLabel.text = repository.name;
    repositoryCell.detailTextLabel.text = repository.description_;
    [repositoryCell.imageView setImageWithURL:repository.owner.avatarImageUrl placeholderImage:self.defaultAvatarImage];
    return repositoryCell;
}</pre>
<p>A noter que la méthode <span style="font-size: 10.0pt; line-height: 13.0pt;"><em>setImageWithURL:placeholderImage:</em> est fournie par la librairie <em>AFNetworking</em> et ne fait pas partie de l&rsquo;API de base iOS.</span></p>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">L&rsquo;avatar par défaut doit être initialisé au chargement de la vue, il faut donc l&rsquo;ajouter à la méthode <em>viewDidLoad:</em></span></p>
<pre class="brush: java; title: ; notranslate">- (void)viewDidLoad
{
    [super viewDidLoad];
    self.defaultAvatarImage = [UIImage imageNamed:@&quot;github&quot;];
    [self initProgressHUD];
    [self loadDataWithCallback:^{}];
}</pre>
<p>Nous devons également ajouter une property dans l&rsquo;interface privée de la classe:</p>
<pre class="brush: java; title: ; notranslate">@interface GHRepositoryTableViewController ()
@property (nonatomic, strong) MBProgressHUD *progressHUD;
@property (nonatomic, strong) NSArray *dataSource;
@property (nonatomic, strong) UIImage *defaultAvatarImage;
@end</pre>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Fonctionnalitéssupplémentaires">Fonctionnalités supplémentaires</h1>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-AjoutduPullToRefresh">Ajout du Pull To Refresh</h2>
<p>Une fonctionnalité intéressante à ajouter dans les views de type <em>table view</em> est le <em>pull to refresh</em>. La librairie <a href="https://github.com/samvermette/SVPullToRefresh" rel="nofollow"><em>SVPullToRefresh</em></a> permet de l&rsquo;ajouter sans être invasive, pour cela il suffit d&rsquo;implémenter une méthode dans le table view controller:</p>
<pre class="brush: java; title: ; notranslate">- (void)setupPullToRefresh {
    __weak typeof(self) weakSelf = self;
    [self.tableView addPullToRefreshWithActionHandler:^{
        [weakSelf loadDataWithCallback:^{
            [weakSelf.tableView.pullToRefreshView stopAnimating];
            [weakSelf.tableView reloadData];
        }];
    }];
}</pre>
<p>Il est également nécessaire d&rsquo;appeler cette méthode au chargement de la vue, dans la méthode <em>viewDidLoad</em>:</p>
<pre class="brush: java; title: ; notranslate">- (void)viewDidLoad
{
    [super viewDidLoad];
    self.defaultAvatarImage = [UIImage imageNamed:@&quot;github&quot;];
    [self setupPullToRefresh];
    [self initProgressHUD];
    [self loadDataWithCallback:^{}];
}</pre>
<h2 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Ajoutdel'InfiniteScrolling">Ajout de l&rsquo;Infinite Scrolling</h2>
<p>La fonction d&rsquo;<em>infinite scrolling</em> fait partie des comportements naturels que l&rsquo;on s&rsquo;attend à trouver sur une table view lorsqu&rsquo;on souhaite afficher des données paginées. Lorsque l&rsquo;on atteint en scrollant la fin des premiers résultats chargés, les résultats suivants sont chargés automatiquement, permettant de poursuivre le scroll. Encore une fois, la librairie <em>SVPullToRefresh</em> nous vient en secours puisqu&rsquo;elle en propose une implémentation clean et surtout non invasive.</p>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">Tout comme pour l&rsquo;ajout de la fonction de</span><em style="font-size: 10.0pt; line-height: 13.0pt;"> Pull to Refresh</em><span style="font-size: 10.0pt; line-height: 13.0pt;">, il est nécessaire d&rsquo;ajouter un code d&rsquo;initialisation. Pour cela, nous allons ajouter une méthode <em>setupInfiniteScroll:</em></span></p>
<pre class="brush: java; title: ; notranslate">- (void)setupInfiniteScroll {
    __weak typeof(self) weakSelf = self;
    [self.tableView addInfiniteScrollingWithActionHandler:^{
        if (weakSelf.nextPageURL) {
            [weakSelf loadDataWithCallback:^{
                [weakSelf.tableView.infiniteScrollingView stopAnimating];
                [weakSelf.tableView reloadData];
            }];
        }
        else {
            [weakSelf.tableView.infiniteScrollingView stopAnimating];
        }
    }];
}</pre>
<p>Et modifier encore une fois la méthode <em>viewDidLoad:</em> de notre table view controller pour ajouter son initialisation:</p>
<pre class="brush: java; title: ; notranslate">- (void)viewDidLoad {
    [super viewDidLoad];
    self.defaultAvatarImage = [UIImage imageNamed:@&quot;github&quot;];
    [self setupPullToRefresh];
    [self setupInfiniteScroll];
    [self initProgressHUD];
    [self loadDataWithCallback:^{}];
}</pre>
<p>Nous devons également ajouter une propriété permettant de stocker l&rsquo;URL de la page suivante si l&rsquo;information nous a été renvoyée par les en-têtes:</p>
<pre class="brush: java; title: ; notranslate">@interface GHRepositoryTableViewController ()
@property (nonatomic, strong) MBProgressHUD *progressHUD;
@property (nonatomic, strong) NSMutableArray *dataSource;
@property (nonatomic, strong) UIImage *defaultAvatarImage;
@property (nonatomic, strong) NSString *nextPageURL;
@end</pre>
<p>La méthode <span style="font-size: 10.0pt; line-height: 13.0pt;"><em>tryFindNextPageUrl:</em> est ajoutée au table view controller afin de permettre d&rsquo;extraire le lien vers la page de données suivante:</span></p>
<pre class="brush: java; title: ; notranslate">- (void)tryFindNextPageUrl:(NSHTTPURLResponse *)response {
    NSString *linkHeader = response.allHeaderFields[@&quot;Link&quot;];
    if (linkHeader) {
        NSArray *links = [linkHeader componentsSeparatedByString:@&quot;,&quot;];

        NSString * __block nextPageURL = nil;
        [links enumerateObjectsUsingBlock:^(NSString *link, NSUInteger idx, BOOL *stop) {
            NSArray *linkParts = [link componentsSeparatedByString:@&quot;;&quot;];
            NSString *rel = [linkParts[1] componentsSeparatedByString:@&quot;\&quot;&quot;][1];
            if ([rel isEqualToString:@&quot;next&quot;]) {
                nextPageURL = [linkParts[0] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@&quot;&lt;&gt;&quot;]];
                *stop = YES;
            }
        }];
        self.nextPageURL = [nextPageURL substringFromIndex:@&quot;https://api.github.com&quot;.length];
    }
    else {
        self.nextPageURL = nil;
    }
}</pre>
<p>Cette méthode est appelée depuis la méthode <em>loadDataWithCallback:</em> qui est modifiée comme suit:</p>
<pre class="brush: java; title: ; notranslate">- (void)loadDataWithCallback:(void(^)())callback {
    AFHTTPClient *httpClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@&quot;https://api.github.com&quot;]];
    NSString *path = self.nextPageURL ? self.nextPageURL : @&quot;/orgs/facebook/repos&quot;;
    NSURLRequest *urlRequest = [httpClient requestWithMethod:@&quot;GET&quot; path:path parameters:nil];
    [self showProgressHUDWithMessage:NSLocalizedString(@&quot;Chargement des données&quot;, nil) graceTime:0.5];
    XBLogInfo(@&quot;[GET] Requesting JSON payload at: %@&quot;, urlRequest.URL);
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        [self tryFindNextPageUrl: operation.response];
        [self buildDataSourceFromResponseData:responseObject];
        [self.tableView reloadData];
        [self dismissProgressHUD];
        if (callback) {
            callback();
        }
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        XBLogWarn(@&quot;Error: %@&quot;, error);
        self.dataSource = [NSMutableArray array];
        [self.tableView reloadData];
        [self showErrorProgressHUDWithMessage:NSLocalizedString(@&quot;Erreur de chargement des données !&quot;, nil) afterDelay:0.5];
        if (callback) {
            callback();
        }
    }];
    [operation start];
}</pre>
<p>La méthode d&rsquo;initialisation du <em>Pull To Refresh</em> doit également être modifiée pour réinitialiser le <em>dataSource</em> et l&rsquo;<em>URL de page suivante</em> afin d&rsquo;assurer un bon fonctionnement lors d&rsquo;un rechargement des données de la première page de résultat:</p>
<pre class="brush: java; title: ; notranslate">- (void)setupPullToRefresh {
    __weak typeof(self) weakSelf = self;
    [self.tableView addPullToRefreshWithActionHandler:^{
        weakSelf.nextPageURL = nil;
        weakSelf.dataSource = nil;
        [weakSelf loadDataWithCallback:^{
            [weakSelf.tableView.pullToRefreshView stopAnimating];
            [weakSelf.tableView reloadData];
        }];
    }];
}</pre>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-Conclusion">Conclusion</h1>
<p>A travers ce tutoriel, nous avons vu comment charger un listing de données depuis une API Web avec un minimum de code en s&rsquo;appuyant sur différentes librairies du monde Open Source. Ces librairies ont été facilement intégrées au projet à l&rsquo;aide du Dependency Manager CocoaPods :  <a href="https://github.com/AFNetworking/AFNetworking" rel="nofollow">AFNetworking</a>, <a href="https://github.com/johnezang/JSONKit" rel="nofollow">JSONKit</a>, <a href="https://github.com/dchohfi/KeyValueObjectMapping" rel="nofollow">DCKeyValueObjectMapping</a>, <a href="https://github.com/rs/SDURLCache" rel="nofollow">SDURLCache</a>, <a href="https://github.com/samvermette/SVPullToRefresh" rel="nofollow">SVPullToRefresh</a></p>
<p>Les librairies tiers Open Source rendent trivial un développement qui était il y a peu de temps autrement plus complexe à mettre en oeuvre. Elles nous offrent presque gratuitement des fonctionnalités avancées telles que le <em>Pull To Refresh</em>, l&rsquo;<em>Infinite Scrolling</em> ou bien encore la mise en cache des données avec un minimum d&rsquo;effort.</p>
<p>Le code source de cet article est bien entendu disponible sur GitHub à l&rsquo;adresse suivante: <a style="font-size: 10.0pt; line-height: 13.0pt;" href="https://github.com/xebia-france/UITableViewTutorial" rel="nofollow">https://github.com/xebia-france/UITableViewTutorial</a></p>
<h1 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-ArticlesLies">Articles Liés</h1>
<ul>
<li><a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/">Introduction à RestKit</a></li>
<li><a href="http://blog.xebia.fr/2013/05/20/uitableview-api-github-cocoapods-keep-it-simple-keep-it-stupid/">UITableView + API GitHub + CocoaPods = Keep it Simple, keep it Stupid!</a></li>
</ul>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/20/uitableview-api-github-cocoapods-keep-it-simple-keep-it-stupid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Intégration de RestKit avec une UITableView</title>
		<link>http://blog.xebia.fr/2013/05/20/integration-de-restkit-avec-une-uitableview/</link>
		<comments>http://blog.xebia.fr/2013/05/20/integration-de-restkit-avec-une-uitableview/#comments</comments>
		<pubDate>Mon, 20 May 2013 10:09:00 +0000</pubDate>
		<dc:creator>Alexis Kinsella</dc:creator>
				<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[JSon]]></category>
		<category><![CDATA[RestKit]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14020</guid>
		<description><![CDATA[Nous avons découvert dans un précédent article comment utiliser RestKit pour récupérer des structures de données JSON depuis une ressource HTTP et les mapper sur un modèle métier. Nous allons voir dans ce nouvel article comment adapter le code existant pour afficher les résultats dans une UITableView iOS. Pour cela, nous allons continuer à travailler avec les APIs [...]]]></description>
				<content:encoded><![CDATA[
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/restkit.png" style="float:right; margin:0 0 10px 10px;" />Nous avons découvert dans un <a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">précédent </a><a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">article</a> comment utiliser <a href="http://restkit.org/" rel="nofollow">RestKit</a> pour récupérer des structures de données JSON depuis une ressource HTTP et les mapper sur un modèle métier. Nous allons voir dans ce nouvel article comment adapter le code existant pour afficher les résultats dans une UITableView iOS. Pour cela, nous allons continuer à travailler avec les APIs GitHub, et nous fixer pour objectif d&rsquo;afficher les <a href="http://developer.github.com/v3/orgs/members/" rel="nofollow">utilisateurs d&rsquo;une organisation</a><a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">.</a></p>
<p><em><u>Notes:</u> </em></p>
<ul>
<li><em>La version actuelle de RestKit est la 0.20. Cet article met en oeuvre la version 0.10.</em></li>
</ul>
<h3 id="IntégrationdeRestKitavecuneUITableView-Installation">Installation</h3>
<p>Dans un premier temps, nous allons créer un projet adapté pour iOS via Xcode. Vous devrez sélectionner dans l&rsquo;assistant de création de projet une <em>application</em> pour <em>iOS</em> avec un template de type <em>Empty Application</em>.</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture-d’écran-2012-10-28-à-09.27.53.png" alt="Capture-d’écran-2012-10-28-à-09.27.53.png" width="652" height="425" style="margin-left: auto; margin-right: auto; display: block;"/></p>
<p>Dans un second temps, nous allons cibler dans notre fichier de <em>Podfile</em> la plateforme <em>iOS</em>, puis ajouter une dépendance appelée <em><a href="https://github.com/rs/SDWebImage" rel="nofollow">SDWebImage</a></em> qui sera présentée plus tard:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">platform :ios

pod 'JSONKit',                          '1.5pre'
pod 'LibComponentLogging-Core',         '1.2.2'
pod 'LibComponentLogging-NSLog',        '1.0.4'
pod 'Reachability',                     '3.0.0'
pod 'RestKit',                          '0.10.1'
pod 'Underscore.m',                     '0.1.0'
pod 'SDWebImage',                       '2.6'
</pre>
<p>Les autres dépendances ont été ajoutées lors de notre <a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">précédent article</a>. Pour plus d&rsquo;informations sur l&rsquo;utlisation de CocoaPods, c&rsquo;est <a href="http://docs.cocoapods.org/guides/integrating_a_project.html" rel="nofollow">par ici</a></p>
<h3 id="IntégrationdeRestKitavecuneUITableView-Descriptiondel&#39;APIGitHub">Description de l&rsquo;API GitHub</h3>
<p>En complément de l&rsquo;accès au listing des repositories d&rsquo;une organisation, nous allons utiliser une seconde ressource de l&rsquo;API GitHub qui permet de lister les utilisateurs d&rsquo;une organisation. L&rsquo;URL est la suivante:</p>
<pre class="brush: java; title: ; notranslate">https://api.github.com/orgs/:organization/public_members
</pre>
<p>Pour une organisation telle que <em>xebia-france</em>, la liste des utilisateurs ressemblera à cela:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">[
  {
    &quot;url&quot;: &quot;https://api.github.com/users/adutra&quot;,
    &quot;login&quot;: &quot;adutra&quot;,
    &quot;avatar_url&quot;: &quot;https://secure.gravatar.com/avatar/e96398d35fcd2cb3df072bcb28c9c917?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png&quot;,
    &quot;gravatar_id&quot;: &quot;e96398d35fcd2cb3df072bcb28c9c917&quot;,
    &quot;id&quot;: 463876
  },
  {
    &quot;url&quot;: &quot;https://api.github.com/users/akinsella&quot;,
    &quot;login&quot;: &quot;akinsella&quot;,
    &quot;avatar_url&quot;: &quot;https://secure.gravatar.com/avatar/0b9d9365c299078a5cd97cfb9861de37?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png&quot;,
    &quot;gravatar_id&quot;: &quot;0b9d9365c299078a5cd97cfb9861de37&quot;,
    &quot;id&quot;: 322456
  },
  {
    &quot;url&quot;: &quot;https://api.github.com/users/aurelienmaury&quot;,
    &quot;login&quot;: &quot;aurelienmaury&quot;,
    &quot;avatar_url&quot;: &quot;https://secure.gravatar.com/avatar/15706981ae8b52786c1587170bb53da6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png&quot;,
    &quot;gravatar_id&quot;: &quot;15706981ae8b52786c1587170bb53da6&quot;,
    &quot;id&quot;: 191001
  },
  ...
]
</pre>
<h3 id="IntégrationdeRestKitavecuneUITableView-Lemodèlemétier">Le modèle métier</h3>
<p>Notre modèle métier ne change pas, vous pouvez le retrouver dans l&rsquo;<a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/" rel="nofollow">article d&rsquo;introduction à RestKit</a>.</p>
<p>Le point d&rsquo;entrée d&rsquo;une application iOS est une classe qui étend la super classe <em>UIRespsonder</em> et qui implémente le protocole <em>UIApplicationDelegate</em>.</p>
<p>Nous allons donc créer une classe appelée <em>AppDelegate</em>. Son interface sera la suivante:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &lt;UIKit/UIKit.h&gt;

@interface AppDelegate : UIResponder &lt;UIApplicationDelegate&gt;

@property (strong, nonatomic) UIWindow *window;

@end
</pre>
<p>Le point d&rsquo;entrée réel de l&rsquo;application est la méthode <em>application:didFinishLaunchingWithOptions:</em> du protocole <em>UIApplicationDelegate</em>. C&rsquo;est ici que nous ajouterons le code d&rsquo;initialisation de RestKit:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &quot;AppDelegate.h&quot;
#import &lt;RestKit/RestKit.h&gt;
#import &quot;NSDateFormatter+XBAdditions.h&quot;
#import &quot;GHRepository.h&quot;
#import &quot;GHUser.h&quot;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self initializeLoggers];
    [self initializeRestKit];

    return YES;
}

- (void)initializeLoggers {
    RKLogConfigureByName(&quot;RestKit/*&quot;, RKLogLevelInfo);
}

-(void)initializeRestKit {
    [self initializeObjectManager];
    [self initializeObjectMapping];
}

- (void)initializeObjectManager {
    RKObjectManager *objectManager = [RKObjectManager managerWithBaseURLString:@&quot;https://api.github.com/&quot;];
    objectManager.client.cachePolicy = RKRequestCachePolicyDefault;
    // RKRequestCachePolicyDefault = RKRequestCachePolicyEtag | RKRequestCachePolicyTimeout
}

- (void)initializeObjectMapping {

    // Github date format: 2012-07-05T09:43:24Z
    // Already available in Restkit default formatters
    [RKObjectMapping addDefaultDateFormatter: [NSDateFormatter initWithDateFormat:@&quot;yyyy-MM-dd'T'HH:mm:ss'Z'&quot;]];

    RKObjectMappingProvider *omp = [RKObjectManager sharedManager].mappingProvider;

    RKObjectMapping *repositoryObjectMapping = [GHRepository mapping];
    [omp addObjectMapping:repositoryObjectMapping];
    [omp setObjectMapping:repositoryObjectMapping forResourcePathPattern:@&quot;/orgs/:organization/repos&quot;];

    RKObjectMapping *userObjectMapping = [GHUser mapping];
    [omp addObjectMapping:userObjectMapping];
    [omp setObjectMapping:userObjectMapping forResourcePathPattern:@&quot;/orgs/:organization/public_members&quot;];
}

@end
</pre>
<p>Dans la méthode <em>initializeObjectMapping</em>, nous avons déclaré un pattern de chemin de ressource complémentaire: &quot;/orgs/:organization/public_members&quot;, qui permet de mapper la liste des utilisateurs sur la classe GHUser du modèle métier.</p>
<h3 id="IntégrationdeRestKitavecuneUITableView-Créationd&#39;unStoryBoard">Création d&rsquo;un StoryBoard</h3>
<p>Depuis iOS 5.0 Apple propose dans <em>Xcode</em> la notion de <em>storyboard</em>. Plutôt que de manipuler isolément des fichiers <em>XIB</em> (Morceaux d&rsquo;interface graphique), Apple a tenté de fournir un ensemble plus consistant et visuel permettant de manipuler l&rsquo;ensemble des vues et leurs interactions. Par exemple, le <em>storyboard </em>permet d&rsquo;accéder à une cartographie des vues applicatives, ou encore des marqueurs visuels représentant les liaisons entre ces vues. Le résultat est plutôt convainquant bien qu&rsquo;un peu difficile à manipuler si vous n&rsquo;êtes pas équipé d&rsquo;un grand écran haute densité.</p>
<p>Dans le contexte de l&rsquo;application développée, 2 vues de type <em>UITableView</em> seront proposées, l&rsquo;une listant les utilisateurs d&rsquo;une organisation Github, l&rsquo;autre listant les repositories de cette même organisation. Les vues seront accessibles grâce à une UITabBar.</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.06.37-2.png" alt="Capture+d’écran+2012-10-28+à+19.06.37-2" width="650" height="681" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Sur le <em>storyboard</em>, vous pouvez observer deux vues de type <em>Navigation Controller</em>. Ces deux vues ont pour rôle de gérer la navigation dans l&rsquo;application. Par défaut, elles sont matérialisées par une barre en haut de l&rsquo;écran qui affiche le titre, un bouton retour sur la gauche permettant de revenir à l&rsquo;écran précédent, et d&rsquo;autres actions. </p>
<p>Pour créer un storyboard semblable à celui présenté, vous devez dans un premier temps insérer un <em>TabBar Controller</em> comme suit:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.18.55-3.png" alt="Capture+d’écran+2012-10-28+à+19.18.55-3" width="482" height="660" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Pour cela, après avoir cliqué sur votre storyboard, vous pouvez faire glisser un objet <em>TabBar Controller</em> depuis le navigateur d&rsquo;objet de base à droite d&rsquo;Xcode:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.16.02-4.png" alt="Capture+d’écran+2012-10-28+à+19.16.02-4" width="260" height="397" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Puis vous devez insérer deux <em>Table View Controllers</em>:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.48.57-5.png" alt="Capture+d’écran+2012-10-28+à+19.48.57-5" width="600" height="426" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Les deux controllers créés avec le <em>tab bar controller</em> sont inutiles, vous pouvez les supprimer:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.26.06-6.png" alt="Capture+d’écran+2012-10-28+à+19.26.06-6" width="680" height="683" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous devez maintenant relier les <em>Navigation Controller</em> associés aux <em>TableView Controller</em> avec le <em>TabBar Controller</em>. Pour cela vous réalisez un clic droit sur le <em>TabBar Controller</em>, l&rsquo;écran suivant apparaitra:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.27.29-7.png" alt="Capture+d’écran+2012-10-28+à+19.27.29-7" width="682" height="682" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous cliquerez et tirerez le curseur depuis le symbole plus de la ligne qui indique <em>view controller</em>, jusqu&rsquo;à chacun des deux <em>Navigation Controller:</em></p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.31.05-8.png" alt="Capture+d’écran+2012-10-28+à+19.31.05-8" width="650" height="517" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous obtiendrez le résultat suivant:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.33.02-9.png" alt="Capture+d’écran+2012-10-28+à+19.33.02-9" width="650" height="581" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Pour chacune des vues, vous devrez affecter un <em>StoryBoard Id</em> qui servira à identifier la vue de façon unique:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.35.34-10.png" alt="Capture+d’écran+2012-10-28+à+19.35.34-10" width="561" height="355" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous pourrez configurer le style de la barre de navigation de votre <em>TableView Controller</em> depuis la combo <em>Top Bar</em>:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.37.41-11.png" alt="Capture+d’écran+2012-10-28+à+19.37.41-11" width="537" height="352" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous pourrez configurer le titre du <em>TableView Controller</em> via l&rsquo;inspecteur d&rsquo;attribut en cliquant sur sa barre de navigation:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.42.20-12.png" alt="Capture+d’écran+2012-10-28+à+19.42.20-12" width="690" height="228" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Vous pourrez alors configurer le controller de chacun des <em>TableView Controller</em>:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.44.32-13.png" alt="Capture+d’écran+2012-10-28+à+19.44.32-13" width="691" height="161" class="aligncenter size-full wp-image-14094" /></p>
<p>Si vous souhaitez customiser les icônes et titres des items du <em>TabBar Controller</em>, vous pourrez le faire depuis l&rsquo;inspecteur d&rsquo;attributs comme suit:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.58.09-14.png" alt="Capture+d’écran+2012-10-28+à+19.58.09-14" width="704" height="247" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Pour terminer, vous devrez marquer le <em>TabBar Controller</em> comme étant la vue initiale du StoryBoard, c&rsquo;est à dire la vue de démarrage. Pour cela, vous devrez cocher la case <em>Is Initial View Controller</em> de l&rsquo;inspecteur d&rsquo;attributs:</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.54.38-17.png"><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-28+à+19.54.38-17.png" alt="Capture+d’écran+2012-10-28+à+19.54.38-17" width="665" height="419" style="margin-left: auto; margin-right: auto; display: block;" /></a></p>
<h3 id="IntégrationdeRestKitavecuneUITableView-Lescontrollerapplicatifs">Les controller applicatifs</h3>
<p>Une fois le StoryBoard configuré, nous pouvons maintenant nous concentrer sur les controller applicatifs. Ceux dédiés à la gestion des vues listant respectivement les utilisateurs et les repositories sont très similaires, nous étudierons donc uniquement l&rsquo;<em>UITableViewController</em> de la vue listant les repositories.</p>
<p>Nous pourrions choisir de travailler bas niveau et implémenter complètement notre controller, cependant <em>RestKit</em> fournit une classe qui pré-mâche une bonne partie du travail. La classe fournie par RestKit fonctionne par délégation, nous avons donc toujours à étendre la classe <em>UITableView</em> dans l&rsquo;interface du controller:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &lt;UIKit/UIKit.h&gt;

@interface GHRepositoryTableViewController : UITableViewController&lt;RKTableControllerDelegate&gt;

@end
</pre>
<p>Le code de l&rsquo;interface est plutôt succinct, cependant, il nous renseigne sur le fait que notre implémentation à besoin de mettre en oeuvre le protocole <em>RKTableControllerDelegate</em> qui permet de réagir à différents événements générés par RestKit.</p>
<p>Dans notre implémentation, nous allons commencer par déclarer une <a href="http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html" rel="nofollow">classe d&rsquo;extension</a>. Cela permet de déclarer des propriétés qui ne sont accessibles que par l&rsquo;implémentation de la classe. Une catégorie ne pourra pas accéder, par exemple, aux données de la classe d&rsquo;extension:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">@interface GHRepositoryTableViewController ()
@property (nonatomic, strong) RKTableController *tableController;
@property (nonatomic, strong) UIImage* defaultAvatarImage;
@end
</pre>
<p>Une classe d&rsquo;extension est définie par le nom de la classe qu&rsquo;elle étend ainsi que des parenthèses vides.<br /> Les propriétés <em>tableController</em> et <em>defaultAvatarImage</em> correspondent à des propriétés privées de l&rsquo;implémentation du controller.<br />La propriété <em>tableController</em> représente le controller RestKit auquel nous allons déléguer le traitement de notre classe.</p>
<h4 id="IntégrationdeRestKitavecuneUITableView-Evénementsd&#39;initialisationducontroller">Evénements d&rsquo;initialisation du controller</h4>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &lt;RestKit/RestKit.h&gt;
#import &lt;RestKit/UI.h&gt;
#import &quot;GHRepository.h&quot;
#import &quot;GHRepositoryTableViewController.h&quot;
#import &quot;SDImageCache.h&quot;
#import &quot;SDWebImageManager.h&quot;
#import &quot;GHRepositoryCell.h&quot;
#import &quot;UIImageView+WebCache.h&quot;
#import &quot;UIColor+XBAdditions.h&quot;
#import &quot;UIScreen+XBAdditions.h&quot;

@interface GHRepositoryTableViewController ()
...
@end

@implementation GHRepositoryTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self configure];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableController loadTableFromResourcePath:@&quot;/orgs/xebia-france/repos&quot;];
}

...

@end
</pre>
<p>Dans un premier temps, sur l&rsquo;événement <em>viewDidLoad:</em>, nous allons configurer notre controller. Cette configuration est déléguée à différentes méthodes que nous allons voir par la suite.<br /> Puis, sur l&rsquo;événement <em>viewWillAppear:</em>, nous allons initialiser la demande de chargement de la la table avec les données JSON renvoyées par la ressource de l&rsquo;API GitHub. Nous le faisons en appelant la méthode <em>loadTableFromResourcePath</em> du controller RestKit <em>tableController</em> que nous avons au préalable initialisé sur l&rsquo;événement <em>viewDidLoad</em>.</p>
<pre class="brush: java; gutter: true; title: ; notranslate">@implementation GHRepositoryTableViewController

...

- (void)configure {
    self.defaultAvatarImage = [UIImage imageNamed:@&quot;github-gravatar-placeholder&quot;];
    [self configureTableViews];
    [self configureTableController];
}

...

@end
</pre>
<p>Dans la méthode <em>configure</em>, nous configurons les views gérées par le controller, puis le controller en lui-même.</p>
<h4 id="IntégrationdeRestKitavecuneUITableView-Configurationdesvues">Configuration des vues</h4>
<p>Les vues à initialiser sont la table en elle-même, ainsi que ses sous-vues, en l&rsquo;occurrence ici, la vue gérant le <em>Pull to refresh</em>:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">- (void)configureTableViews {
    [self configureTableView];
    [self configurePullToRefreshTriggerView];
}

- (void)configureTableView {
    self.tableView.backgroundColor = [UIColor colorWithPatternImageName:@&quot;bg_home_pattern&quot;];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    [self.tableView registerNib:[UINib nibWithNibName:@&quot;GHRepositoryCell&quot; bundle:nil] forCellReuseIdentifier:@&quot;GHRepository&quot;];
}

- (void)configurePullToRefreshTriggerView {
    NSBundle *restKitResources = [NSBundle restKitResourcesBundle];
    UIImage *arrowImage = [restKitResources imageWithContentsOfResource:@&quot;blueArrow&quot; withExtension:@&quot;png&quot;];
    [[RKRefreshTriggerView appearance] setTitleFont:[UIFont fontWithName:@&quot;HelveticaNeue-Bold&quot; size:13]];
    [[RKRefreshTriggerView appearance] setLastUpdatedFont:[UIFont fontWithName:@&quot;HelveticaNeue&quot; size:11]];
    [[RKRefreshTriggerView appearance] setArrowImage:arrowImage];
}
</pre>
<p>La configuration des vues permet principalement de définir les aspects cosmétiques de celles-ci. Néanmoins, la vue de la table est ici associée avec le <em>Nib</em> qui sera utilisé pour customiser le rendu des cellules:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">[self.tableView registerNib:[UINib nibWithNibName:@&quot;GHRepositoryCell&quot; bundle:nil] forCellReuseIdentifier:@&quot;GHRepository&quot;];
</pre>
<p>Cette ligne de code indique que le Nib (Correspondant au fichier du même nom et portant l&rsquo;extension <em>.xib</em>) sera utilisé pour effectuer le rendu des cellules ayant l&rsquo;identifiant <em>GHRepository</em>.</p>
<h4 id="IntégrationdeRestKitavecuneUITableView-Configurationducontroller">Configuration du controller</h4>
<pre class="brush: java; gutter: true; title: ; notranslate">- (void)configureTableController {
    self.tableController = [[RKObjectManager sharedManager] tableControllerForTableViewController:self];

    self.tableController.delegate = self;

    self.tableController.pullToRefreshEnabled = YES;
    self.tableController.variableHeightRows = YES;

    self.tableController.imageForOffline = [UIImage imageNamed:@&quot;offline.png&quot;];
    self.tableController.imageForError = [UIImage imageNamed:@&quot;error.png&quot;];
    self.tableController.imageForEmpty = [UIImage imageNamed:@&quot;empty.png&quot;];

    [self.tableController mapObjectsWithClass:[GHRepository class] toTableCellsWithMapping:[self createCellMapping]];
}

- (RKTableViewCellMapping *)createCellMapping {
    RKTableViewCellMapping *cellMapping = [RKTableViewCellMapping cellMapping];
    cellMapping.cellClassName = @&quot;GHRepositoryCell&quot;;
    cellMapping.reuseIdentifier = @&quot;GHRepository&quot;;

    cellMapping.heightOfCellForObjectAtIndexPath = ^ CGFloat(GHRepository *repository, NSIndexPath* indexPath) {
        ...
        return height;
    };

    [cellMapping mapKeyPath:@&quot;name&quot; toAttribute:@&quot;titleLabel.text&quot;];
    [cellMapping mapKeyPath:@&quot;description_&quot; toAttribute:@&quot;descriptionLabel.text&quot;];

    return cellMapping;
}
</pre>
<p>C&rsquo;est dans la méthode <em>configureController</em> que nous déclarons le controller RestKit. Celui-ci est initialisé via l&rsquo;instance partagée de la classe <em>RKObjectManager</em>. Nous déclarons le controller applicatif comme délégué du controller RestKit, ce qui permet à celui-ci de déléguer le traitement de certains événements au controller applicatif.<br /> La méthode <em>configureController</em> permet également de configurer l&rsquo;activation du mécanisme de <em>Pull to refresh</em>, ainsi que les images associées à différents états de la vue en cas d&rsquo;erreur ou autre. Nous indiquons également que les cellules de la table auront une hauteur variable, qui sera calculée ou bien définie sur les mapping de cellule que nous verrons plus tard.<br /> Enfin, la méthode <em>configureController</em> définit les mapping à utiliser pour associer les objets de la collection affichée par le controller avec les éléments de la vue. Les cellules sont mappées selon une configuration de type <em>RKTableViewCellMapping</em>. Cette classe définit non seulement les mapping entre les objets de la collection et les éléments de la cellule, mais également le nom de la classe qui sera utilisée pour instancier la cellule et l&rsquo;identifiant de réutilisation de la cellule.</p>
<h4 id="IntégrationdeRestKitavecuneUITableView-Calculdelahauteurdelacellule">Calcul de la hauteur de la cellule</h4>
<p>La méthode <em>heightOfCellForObjectAtIndexPath</em> implémentée lors de la configuration des mapping de cellule permet de calculer la hauteur d&rsquo;une ligne. En l&rsquo;occurrence, la méthode permet de calculer la hauteur de la description compte tenu de contraintes et informations fournies telles que la largeur maximale allouée, la taille de la police utilisée ou bien encore la hauteur prise par les autres éléments de la cellule.</p>
<pre class="brush: java; gutter: true; title: ; notranslate">...
#define FONT_SIZE 13.0f
#define CELL_BORDER_WIDTH 88.0f // 320.0f - 232.0f
#define CELL_MIN_HEIGHT 64.0f
#define CELL_BASE_HEIGHT 48.0f
#define CELL_MAX_HEIGHT 1000.0f
...
@implementation GHRepositoryTableViewController
...
- (RKTableViewCellMapping *)createCellMapping {
    RKTableViewCellMapping *cellMapping = [RKTableViewCellMapping cellMapping];
    ...
    cellMapping.heightOfCellForObjectAtIndexPath = ^ CGFloat(GHRepository *repository, NSIndexPath* indexPath) {
        CGRect bounds = [UIScreen getScreenBoundsForCurrentOrientation];
        CGSize constraint = CGSizeMake(bounds.size.width - CELL_BORDER_WIDTH, CELL_MAX_HEIGHT);
        CGSize size = [repository.description_ sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE]
                                          constrainedToSize:constraint
                                              lineBreakMode:UILineBreakModeWordWrap];
        CGFloat height = MAX(CELL_BASE_HEIGHT + size.height, CELL_MIN_HEIGHT);

        return height;
    };
    ...
    return cellMapping;
}
...
@end
</pre>
<h3 id="IntégrationdeRestKitavecuneUITableView-Configurationdurendudescellules">Configuration du rendu des cellules</h3>
<p>Nous n&rsquo;avons pas encore terminé, puisque nous devons maintenant configurer le rendu des cellules. Lors de la configuration du controller, nous avons défini des mapping de cellule qui s&rsquo;appliquent sur un objet représentant la cellule, dont le type est <em>GHRepositoryCell</em>. Nous devons donc créer la classe correspondant au type <em>GHRepositoryCell</em>.</p>
<p>L&rsquo;interface sera la suivante:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &lt;UIKit/UIKit.h&gt;
#import &quot;GHRepositoryCell.h&quot;

@interface GHRepositoryCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UILabel *titleLabel;
@property (nonatomic, strong) IBOutlet UILabel *descriptionLabel;

@end
</pre>
<p>et l&rsquo;implémentation :</p>
<pre class="brush: java; gutter: true; title: ; notranslate">#import &quot;GHRepositoryCell.h&quot;
#import &quot;QuartzCore/QuartzCore.h&quot;

@implementation GHRepositoryCell

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.frame = CGRectMake(10,9,44,44);
    self.imageView.layer.masksToBounds = YES;
    self.imageView.layer.cornerRadius = 3.0;
}

@end
</pre>
<p>Nous devons également créer le <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html" rel="nofollow">Nib</a> / <a href="http://en.wikipedia.org/wiki/Interface_Builder" rel="nofollow">Xib</a> correspondant de la cellule ayant le rendu souhaité via l&rsquo;assistant de création de fichier:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+00.46.50-18.png" alt="Capture+d’écran+2012-10-29+à+00.46.50-18" width="700" height="463" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Une fois le fichier *.xib créé, un objet <em>Table View Cell</em> doit être ajouté:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+00.49.48-19.png" alt="Capture+d’écran+2012-10-29+à+00.49.48-19" width="314" height="311" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Sa taille doit être configurée avec une largeur de 320 pixels et une hauteur de 44 pixels:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+00.52.20-20.png" alt="Capture+d’écran+2012-10-29+à+00.52.20-20" width="700" height="298" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Un label correspondant au titre doit être ajouté. Il sera configuré pour s&rsquo;adapter à la largeur de l&rsquo;écran, aura pour coordonnées: [66, 5, 232, 16], une taille de police 13, ainsi qu&rsquo;un style de retour de ligne de type <em>Word Wrap</em>.</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+00.52.20-f22.png" alt="Capture+d’écran+2012-10-29+à+00.52.20-f22" width="700" height="298" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Un label correspondant à la description doit également être ajouté. Il sera configuré pour s&rsquo;adapter à la largeur de l&rsquo;écran ainsi qu&rsquo;à la hauteur de la cellule. Il aura pour coordonnées: [66, 20, 232, 18], une taille de police 13, ainsi qu&rsquo;un style de retour de ligne de type <em>Word Wrap</em>.</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+00.59.00-f23.png" alt="Capture+d’écran+2012-10-29+à+00.59.00-f23" width="700" height="226" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<p>Il faudra ensuite créer les liens entre les <em>IBOutlet</em> de la classe représentant la cellule et les éléments graphiques correspondants du fichier Xib. Pour cela il faut passer l&rsquo;éditeur en mode splitté avec le code source d&rsquo;un côté et le fichier Xib de l&rsquo;autre. Faire un clic droit sur l&rsquo;encoche dans la goutière sur les lignes correspondant aux définitions de variables typées IBOutlet et tirer un lien vers l&rsquo;élément graphique du Xib:</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture+d’écran+2012-10-29+à+01.04.42-22.png" alt="Capture+d’écran+2012-10-29+à+01.04.42-22" width="600" height="295" style="margin-left: auto; margin-right: auto; display: block;" /></p>
<h4 id="IntégrationdeRestKitavecuneUITableView-Ajoutd&#39;unavatarauxcellules">Ajout d&rsquo;un avatar aux cellules</h4>
<p>L&rsquo;ajout d&rsquo;avatars aux cellules du table view des utilisateurs peut être réalisé facilement grâce à l&rsquo;extrait de code suivant provenant de la classe <em>GHUserTableViewController</em>:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">- (void)tableController:(RKAbstractTableController *)tableController willDisplayCell:(UITableViewCell *)cell forObject:(id)object atIndexPath:(NSIndexPath *)indexPath {
 GHUser *user = object;
 GHUserCell *userCell = (GHUserCell *)cell;
 [userCell.imageView setImageWithURL:[user avatarImageUrl] placeholderImage:self.defaultAvatarImage];
}</pre>
<p>Un avatar par défaut doit être chargé dans la méthode <em>viewDidLoad:</em> dans le cas où l&rsquo;avatar de l&rsquo;utilisateur ne pourrait être récupéré:</p>
<pre class="brush: java; gutter: true; title: ; notranslate">    self.defaultAvatarImage = [UIImage imageNamed:@&quot;github-gravatar-placeholder&quot;] ;</pre>
<h3 id="IntégrationdeRestKitavecuneUITableView-Conclusion">Conclusion</h3>
<p>Nous avons vu à travers cet article comment utiliser RestKit dans une application iOS pour récupérer une collection de données et l&rsquo;afficher dans une vue de type UITableView. RestKit nous a permis de simplifier l&rsquo;implémentation tout en réduisant fortement le nombre de lignes de code à produire.</p>
<h3 id="IntégrationdeRestKitavecuneUITableView-Codesource">Code source</h3>
<p>Le code source de l&rsquo;article est disponible sur le repository GitHub <a href="https://github.com/xebia-france/restkit-tutorial-ios" rel="nofollow">restkit-tutorial-ios</a>.</p>
<h3 id="UITableView+APIGitHub+CocoaPods=KeepItSimple,Stupid!-ArticlesLies">Articles Liés</h3>
<ul>
<li><a href="http://blog.xebia.fr/2013/01/04/introduction-a-restkit/">Introduction à RestKit</a></li>
<li><a href="http://blog.xebia.fr/2013/05/20/uitableview-api-github-cocoapods-keep-it-simple-keep-it-stupid/">UITableView + API GitHub + CocoaPods = Keep it Simple, keep it Stupid!</a></li>
</ul>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/20/integration-de-restkit-avec-une-uitableview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xebia à Agile France 2013</title>
		<link>http://blog.xebia.fr/2013/05/17/xebia-a-agile-france-2013/</link>
		<comments>http://blog.xebia.fr/2013/05/17/xebia-a-agile-france-2013/#comments</comments>
		<pubDate>Fri, 17 May 2013 12:47:33 +0000</pubDate>
		<dc:creator>Nicolas Jozwiak</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Agile France]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=14006</guid>
		<description><![CDATA[L’édition 2013 d’Agile France, la conférence de référence pour les praticiens agiles, se tiendra les 23 et 24 Mai prochains. Tout comme les années précédentes, cette 8ième édition se déroulera dans le superbe cadre du Chalet de la Porte Jaune dans le Bois de Vincennes. Agile France c&#8217;est l&#8217;occasion de venir partager et essayer de [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/AgileFranceOrateur.png" target="_blank"><img width="240" src="http://blog.xebia.fr/wp-content/uploads/2013/05/AgileFranceOrateur-300x300.png" style="float:right; margin:0 0 10px 10px;" /></a>L’édition 2013 d’<a href="http://www.conference-agile.fr/" rel="nofollow">Agile France</a>, la conférence de référence pour les praticiens agiles, se tiendra les 23 et 24 Mai prochains. Tout comme les années précédentes, cette 8<sup>ième</sup> édition se déroulera dans le superbe cadre du Chalet de la Porte Jaune dans le Bois de Vincennes.</p>
<p>Agile France c&rsquo;est l&rsquo;occasion de venir partager et essayer de nouvelles choses pendant 2 jours complet et sur 7 salles en parallèle (voir le programme complet à <a href="http://www.conference-agile.fr/static/programme/programme-agile-france-2013-draft-3.pdf" rel="nofollow">cette adresse</a>).</p>
<p>Cette année encore, Xebia est présent avec 5 sessions :</p>
<ul>
<li><a href="http://www.conference-agile.fr/sessions/agile-development-vs-peter-principle.html" rel="nofollow">Agile Development VS Peter Principle</a> par <a href="http://blog.xebia.fr/author/sdrouard" rel="nofollow">Sébastien Drouard</a></li>
<li>
    <a href="http://www.conference-agile.fr/sessions/scrum-metal-jacket.html" rel="nofollow">Scrum Metal Jacket</a> par <a href="http://blog.xebia.fr/author/jlrigau" rel="nofollow">Jean-Louis Rigau</a> et <a href="http://blog.xebia.fr/author/njozwiak/" rel="nofollow">Nicolas Jozwiak</a>
  </li>
<li>
    <a href="http://www.conference-agile.fr/sessions/bdd-applications-web-modernes.html" rel="nofollow">BDD &amp; applications Web modernes</a> par <a href="http://blog.xebia.fr/author/jlmorlhon/" rel="nofollow">Jean-Laurent De Morlhon</a>
  </li>
<li>
   <a href="http://www.conference-agile.fr/sessions/de-lidee-a-la-startup-comment-concevoir-un-produit-exceptionnel.html" rel="nofollow">De l’idée à la startup, comment concevoir un produit exceptionnel</a><br /> par <a href="http://blog.xebia.fr/author/nrichand/" rel="nofollow">Nathaniel Richand</a> et <a href="http://blog.xebia.fr/author/ygrenzinger" rel="nofollow">Yannick Grenzinger</a>
  </li>
<li>
   <a href="http://www.conference-agile.fr/sessions/cynefin-lego-game-quelle-est-la-complexite-de-votre-systeme.html" rel="nofollow">Cynefin lego game : quelle est la complexité de votre système ?</a> par <a href="http://blog.xebia.fr/author/nrichand" rel="nofollow">Nathaniel Richand</a> et Ellene Dijoux
  </li>
</ul>
<p>N&rsquo;hésitez pas à venir nous rencontrer pour parler d&rsquo;agilité avec nous!</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/17/xebia-a-agile-france-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le mois du JS chez Xebia</title>
		<link>http://blog.xebia.fr/2013/05/17/le-mois-du-js-chez-xebia/</link>
		<comments>http://blog.xebia.fr/2013/05/17/le-mois-du-js-chez-xebia/#comments</comments>
		<pubDate>Fri, 17 May 2013 08:50:52 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Tech Events]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Backbone.js]]></category>
		<category><![CDATA[EmberJS]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13989</guid>
		<description><![CDATA[Le mois de juin, synonyme de beau temps, de longues soirées ensoleillées et du début de l&#8217;été doit son nom à Junon, déesse de la maternité, de la fécondité et du mariage. Cette année, le mois de juin sera également le mois du JS chez Xebia. De plus en plus de code est exécuté coté [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/MoisJs_02.png" target="_blank"><img class="alignright" style="float: right; margin: 0 0 10px 10px;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/MoisJs_02-300x251.png" width="300" height="251" /></a></p>
<p>Le mois de juin, synonyme de beau temps, de longues soirées ensoleillées et du début de l&rsquo;été doit son nom à Junon, déesse de la maternité, de la fécondité et du mariage. Cette année, le mois de juin sera également le mois du JS chez Xebia.</p>
<p>De plus en plus de code est exécuté coté navigateur et les bases de codes JavaScript deviennent de plus en plus importantes, chaotiques et difficiles à maintenir. C&rsquo;est pour mettre de l&rsquo;ordre dans cette jungle que sont apparus les frameworks MVC coté client.</p>
<p>Pendant ce Mois du JS, nous vous invitons à venir découvrir et manipuler les trois grands acteurs de cette mouvance, à savoir :</p>
<ul>
<li>Ember</li>
<li>Backbone</li>
<li>Angular</li>
</ul>
<p>Au cours de ces ateliers, vous développerez la même application avec chacun des frameworks de façon à avoir une base de comparaison viable. Chaque atelier sera encadré par des Xebians ayant travaillé sur des projets &laquo;&nbsp;de la vraie vie&nbsp;&raquo; avec les technologies présentées.</p>
<p>La dernière soirée sera consacrée à une table ronde, animée par Jean Laurent de Morhlon, où nous tenterons de &laquo;&nbsp;compiler&nbsp;&raquo; les expériences acquises avec ces différents frameworks, pour que, lors de votre prochain projet Web, vous fassiez le meilleur choix technologique.</p>
<p>Alors, êtes-vous prêt pour le grand chelem ? Vous restreindrez-vous à une seule soirée ? Aucune obligation, tous les événements sont, bien-sûr, indépendants.</p>
<p>Comme pour tous les TechEvents Xebia, vous aurez besoin d&rsquo;amener votre ordinateur portable.</p>
<p>Pour participer, quatre billetteries, une par soirée :</p>
<ul>
<li><a href="http://ember-xebia-workshop-1.eventbrite.fr/" rel="nofollow">Le 4 juin, soirée Ember (inscription)</a></li>
<li><a href="http://backbone-xebia-workshop-1.eventbrite.fr/" rel="nofollow">Le 12 juin, soirée Backbone (inscription)</a></li>
<li><a href="http://angularjs-xebia-workshop-1.eventbrite.fr/" rel="nofollow">Le 18 juin, soirée Angular (inscription)</a></li>
<li><a href="http://moisdujs-tableronde.eventbrite.fr/" rel="nofollow">Le 25 juin, table ronde de clôture (inscription)</a></li>
</ul>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/17/le-mois-du-js-chez-xebia/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Seconde édition : From User Stories to Acceptance tests avec Gojko Adzic</title>
		<link>http://blog.xebia.fr/2013/05/16/seconde-edition-from-user-stories-to-acceptance-tests-avec-gojko-adzic/</link>
		<comments>http://blog.xebia.fr/2013/05/16/seconde-edition-from-user-stories-to-acceptance-tests-avec-gojko-adzic/#comments</comments>
		<pubDate>Thu, 16 May 2013 13:57:36 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13972</guid>
		<description><![CDATA[Suite au succès rencontré lors de la première formation de Gojko Adzic en février &#171;&#160;From User Stories to Acceptance tests&#160;&#187;, nous avons décidé de renouveler l&#8217;expérience les 20 et 21 juin avec une offre promotionnelle (consultez le site). Cet atelier intensif de 2 jours vous donnera les moyens d&#8217;optimiser la communication entre le management et [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/gojko-adzic.png"><img src="http://blog.xebia.fr/wp-content/uploads/2013/05/gojko-adzic.png" alt="gojko-adzic" style="float: right; margin: 0 0 10px 10px;" /></a>
<p>Suite au succès rencontré lors de la première formation de <a href="http://gojko.net/">Gojko Adzic</a> en février <strong>&laquo;&nbsp;From User Stories to Acceptance tests&nbsp;&raquo;</strong>, nous avons décidé de renouveler l&rsquo;expérience les 20 et 21 juin avec une offre promotionnelle (<a href="http://training.xebia.fr/formation-user-stories-to-acceptance-tests.html">consultez le site</a>).</p>
<p>Cet atelier intensif de 2 jours vous donnera les moyens d&rsquo;optimiser la communication entre le management et les équipes afin d&rsquo;assurer la qualité du logiciel dés le départ. Gojko vous apportera les outils indispensables pour concevoir et livrer un logiciel sur mesure au travers d&rsquo;une gestion du besoin et de pratiques de spécifications et de tests.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/16/seconde-edition-from-user-stories-to-acceptance-tests-avec-gojko-adzic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Data Day le 27 Juin chez Xebia</title>
		<link>http://blog.xebia.fr/2013/05/15/big-data-day-le-27-juin-chez-xebia/</link>
		<comments>http://blog.xebia.fr/2013/05/15/big-data-day-le-27-juin-chez-xebia/#comments</comments>
		<pubDate>Wed, 15 May 2013 07:55:07 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[NoSQL / Big Data]]></category>
		<category><![CDATA[BigData]]></category>
		<category><![CDATA[BigData day]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13951</guid>
		<description><![CDATA[La quantité de données créées aujourd&#8217;hui par les nouveaux usages du Web est impressionnante. Imaginez : stocker la quantité de données produites en 24 heures revient à équiper chaque être humain sur terre d’une clé USB d’1Go tous les jours ! Ces données sont ensuite de véritables trésors pour les entreprises qui les possèdent et savent les utiliser. Vos [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="float: right; margin: 0 0 10px 10px;" alt="bigdata-mascotte" src="http://blog.xebia.fr/wp-content/uploads/2013/05/Capture-d’écran-2013-05-15-à-09.56.00.png" /></p>
<p>La quantité de données créées aujourd&rsquo;hui par les nouveaux usages du Web est impressionnante. Imaginez : stocker la quantité de données produites en 24 heures revient à équiper chaque être humain sur terre d’une clé USB d’1Go tous les jours ! Ces données sont ensuite de véritables trésors pour les entreprises qui les possèdent et savent les utiliser.</p>
<p><strong><em>Vos données valent de l&rsquo;or, il est temps de les exploiter.</em></strong></p>
<p>Nous vous invitons <strong>le 27 Juin 2013</strong> au <strong>Big Data Day Paris</strong> chez Xebia. Venez découvrir les conseils des grands du Big Data autour d&rsquo;applications concrètes.</p>
<p>Au programme :</p>
<ul>
<li><span style="color: #333333;">09h30 &#8211; 12h50 : <strong>Les essentiels du Big Data,</strong> Keynote d&rsquo;ouverture, retour d&rsquo;expérience de Bouygues Telecom et présentation d&rsquo;Amazon <em>(sur invitation uniquement)</em>.</span></li>
<li><span style="color: #333333;">14h00 &#8211; 18h15 : <strong>Le Big Data en pratique</strong>, des présentations et ateliers par les grands du Big Data et des professionnels<em>.</em></span></li>
<li><span style="color: #333333;">19h30 &#8211; 22h00 : <strong>Soirée de clôture</strong>.</span></li>
</ul>
<p>Retrouvez le programme détaillé sur notre <a href="http://bigdataday-paris.xebia.fr">site dédié</a></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/15/big-data-day-le-27-juin-chez-xebia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/</link>
		<comments>http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#comments</comments>
		<pubDate>Tue, 14 May 2013 08:00:22 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Garbage collector]]></category>
		<category><![CDATA[javaee7]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13933</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Scrum-ban, par Corey Lada (Par Couthaïer Farfra) Booster vos Rétrospectives (Par Clément Rochas) UX et Produit Minimum Viable (Par Yannick Grenzinger) Mobilité Le design pour une plateforme Android devenue mature (Par Yannick Grenzinger) Web Web &#8211; CSS architecture (Par Florent Le Gall) Le [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Scrum-ban-parCoreyLada">Scrum-ban, par Corey Lada</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-BoostervosR%C3%A9trospectives">Booster vos Rétrospectives</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/crochas" target="_blank">Clément Rochas</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-UXetProduitMinimumViable">UX et Produit Minimum Viable</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Mobilit%C3%A9">Mobilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-LedesignpouruneplateformeAndroiddevenuemature">Le design pour une plateforme Android devenue mature</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Web-CSSarchitecture">Web &#8211; CSS architecture</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/flegall" target="_blank">Florent Le Gall</a>)</span></div>
</li>
</ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-Comprendreetconfigurerlegarbagecollector">Comprendre et configurer le garbage collector</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/#RevuedePresseXebia-LedriverJavaCassandra-CQLdeDatastaxestsortienGA">Le driver Java Cassandra-CQL de Datastax est sorti en GA</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/gbalaine" target="_blank">Guillaume Balaine</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-Scrum-ban-parCoreyLada">Scrum-ban, par Corey Lada</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' target='_blank'><img title='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' src='https://secure.gravatar.com/avatar/0d4fd0e3f035b5626ab9f7f6741bd5af.jpg?s=24' alt='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/cfarfra' target='_blank'><img title='http://twitter.com/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Coutha&#239;er Farfra</a></span></div>
<p><span style="color: rgb(0,0,0);">Une traduction de <a href="http://www.fabrice-aimetti.fr/dotclear/index.php" rel="nofollow">Fabrice Aimetti</a>, de l&rsquo;article de Corey Lada &quot;<a href="http://leansoftwareengineering.com/ksse/scrum-ban/" rel="nofollow">Scrum-ban</a>&quot;, décrivant toutes les étapes du passage d&rsquo;un processus Scrum à un flux tiré kanban, dans une démarche Lean.</span></p>
<p><span style="color: rgb(0,0,0);">Comme le dit Fabrice &quot;Ca date de 2008, mais ça n&rsquo;a pas vieilli. Que du bonheur !&quot;. Alors bonne lecture ;). </span></p>
<p><span style="color: rgb(0,0,0);"><span style="color: rgb(0,0,0);"><a href="http://www.fabrice-aimetti.fr/dotclear/index.php?post/2011/07/01/Scrumban" rel="nofollow">http://www.fabrice-aimetti.fr/dotclear/index.php?post/2011/07/01/Scrumban</a></span></span></p>
<h4 id="RevuedePresseXebia-BoostervosRétrospectives">Booster vos Rétrospectives</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' target='_blank'><img title='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' src='https://secure.gravatar.com/avatar/51b7d6d805de7b0525d2d8fbb7b4aa0a.jpg?s=24' alt='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/crochas' target='_blank'><img title='http://blog.xebia.fr/author/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/crochas' target='_blank'><img title='http://twitter.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/crochas' target='_blank'><img title='http://github.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/crochas' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/crochas' target='_blank'>Cl&#233;ment Rochas</a></span></div>
<p><span style="color: rgb(0,0,0);">Vous voulez changer le format de votre rétrospective ? <a href="http://www.plans-for-retrospectives.com/" rel="nofollow">plans-for-retrospectives.com</a> vous permettra d&rsquo;en élaborer le plan. </span><span style="color: rgb(0,0,0);font-size: 10.0pt;line-height: 13.0pt;">Le format est claire et propose, à ce jour, 62 activités qui vous permettons de trouver l&rsquo;inspiration. </span><span style="color: rgb(0,0,0);font-size: 10.0pt;line-height: 13.0pt;">De plus les sources sont souvent citées, vous pourrez ainsi approfondir les sujets.</span></p>
<h4 id="RevuedePresseXebia-UXetProduitMinimumViable">UX et Produit Minimum Viable</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p><span style="color: rgb(0,0,0);">Les <a href="http://fr.slideshare.net/andersr/the-ux-of-minimum-viable-products-20462325" rel="nofollow">slides de cette présentation</a> donnée par Anders Ramsay nous présentent rapidement ce qu&rsquo;est un Produit Minimum Viable et comment est-il lié aux pratiques UX et leur impact. Pour l&rsquo;auteur, le MVP est le noyau d&rsquo;une pratique Agile / Lean efficace et il fournit quelques stratégies sur la façon de s&rsquo;y prendre pour concevoir un MVP efficace.</span></p>
<h3 id="RevuedePresseXebia-Mobilité">Mobilité</h3>
<h4 id="RevuedePresseXebia-LedesignpouruneplateformeAndroiddevenuemature">Le design pour une plateforme Android devenue mature</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Le design des applications Android souffre de la comparaison avec celles disponibles sur iOS d&rsquo;Apple. Le manque de consistence et la fragmentation de l&rsquo;ergonomie entre les différentes applications et les différents téléphone Android a grandement contribué à ce problème. Pourtant, la qualité du système Android s&rsquo;est grandement améliorée aussi bien sur les possibilités de Design, la consistence ou encore les outils de développement. Il est donc temps de fournir à Android de bonnes applications!</p>
<p>Cet <a href="http://mobile.smashingmagazine.com/2013/05/08/brave-new-world-designing-for-a-maturing-android/" rel="nofollow">article de Smashing Magazine</a> donne les pistes en se basant principalement sur le <a href="http://developer.android.com/design/index.html" rel="nofollow">&quot;design guidelines&quot;</a> maintenant fourni par Google.</p>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-Web-CSSarchitecture">Web &#8211; CSS architecture</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/a5aa7c02098cea271a161871e436b0b6' target='_blank'><img title='http://www.gravatar.com/a5aa7c02098cea271a161871e436b0b6' src='https://secure.gravatar.com/avatar/a5aa7c02098cea271a161871e436b0b6.jpg?s=24' alt='http://www.gravatar.com/a5aa7c02098cea271a161871e436b0b6' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/flegall' target='_blank'><img title='http://blog.xebia.fr/author/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/flegall' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/flornt' target='_blank'><img title='http://twitter.com/flornt' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/flornt' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/flegall' target='_blank'><img title='http://github.com/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/flegall' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/flegall' target='_blank'>Florent Le Gall</a></span></div>
<p>Un article intéressant présentant quelques anti-patterns trop souvent observés en CSS, les risques qu&rsquo;ils cachent, et comment les éviter.</p>
<p><a href="http://engineering.appfolio.com/2012/11/16/css-architecture/" rel="nofollow">http://engineering.appfolio.com/2012/11/16/css-architecture/</a></p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-Comprendreetconfigurerlegarbagecollector">Comprendre et configurer le garbage collector</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Le garbage collector est encore aujourd&rsquo;hui un des composants les plus méconnus des JVM. Celui ci a pour mission de désallouer les objets qui ne sont plus utilisés par le programme afin de libérer de la mémoire pour les nouveaux objets. En fonction de la manière dont il est configuré, le passage du garbage collector peut prendre plusieurs secondes. Pendant ce temps, l&rsquo;ensemble des threads de la jvm est suspendu, et donc le serveur ne répond plus aux requêtes du client.</p>
<p>Dans <a href="http://blog.mgm-tp.com/2013/03/garbage-collection-tuning/" rel="nofollow">cet article</a>, Andreas Müller nous décrit comment il a répondu à cette problématique sur des sites grands publics, et explique le fonctionnement de la mémoire, du garbage collector, et comment tunner celui-ci en fonction des besoins de votre application.</p>
<h4 id="RevuedePresseXebia-LedriverJavaCassandra-CQLdeDatastaxestsortienGA">Le driver Java Cassandra-CQL de Datastax est sorti en GA</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/gbalaine' target='_blank'><img title='http://blog.xebia.fr/author/gbalaine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/gbalaine' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/igosuki' target='_blank'><img title='http://twitter.com/igosuki' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/igosuki' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/gbalaine' target='_blank'>Guillaume Balaine</a></span></div>
<p>Le driver Java de Datastax pour CQL, le nouveau langage de requêtes dont la version 3 a été introduite dans Cassandra 1.1 est finalement maintenant entré en GA (version 1). Un certain nombre de features qui reprennent le meilleur des clients qui existaient jusqu&rsquo;ici et/ou qui étaient impossible avec Thirft se voient implémenter dans ce Driver. Connection pooling, Streaming, Prepared statements, Query DSL, etc. L&rsquo;article de Datastax est <a href="http://www.datastax.com/dev/blog/the-native-cql-java-driver-goes-ga" rel="nofollow">ici</a>, le code <a href="https://github.com/datastax/java-driver/tree/1.0.0" rel="nofollow">ici</a>.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/14/revue-de-presse-xebia-2013-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google I/O &#8211; J-1</title>
		<link>http://blog.xebia.fr/2013/05/14/google-io-j-1/</link>
		<comments>http://blog.xebia.fr/2013/05/14/google-io-j-1/#comments</comments>
		<pubDate>Tue, 14 May 2013 07:41:51 +0000</pubDate>
		<dc:creator>Thomas Guerin</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[googleio]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13948</guid>
		<description><![CDATA[Google I/O est la conférence des technologies Google qui se déroule chaque année, depuis 2008, au Moscone Center de San Francisco. Cette année elle s&#8217;étend sur 3 jours, du 15 au 17 mai, sous la forme de sessions techniques et de code labs. Les détails du programme sont disponibles à l&#8217;adresse suivante : https://developers.google.com/events/io/sessions. De [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/google-io-2013-logo.png" target="_blank"><img width="300" src="http://blog.xebia.fr/wp-content/uploads/2013/05/google-io-2013-logo-300x217.png" style="float:right; margin:0 0 10px 10px;" /></a><span style="font-size: 10.0pt;line-height: 13.0pt;">Google I/O est la conférence des technologies Google qui se déroule chaque année, depuis 2008, au Moscone Center de San Francisco. Cette année elle s&rsquo;étend sur 3 jours, du 15 au 17 mai, sous la forme de sessions techniques et de code labs.</span></p>
<p>Les détails du programme sont disponibles à l&rsquo;adresse suivante : <a href="https://developers.google.com/events/io/sessions" rel="nofollow">https://developers.google.com/events/io/sessions</a>. De nombreuses tracks sont présentes avec bien sûr les classiques comme Android, Google Cloud Platform, Chrome mais celle qui retient l&rsquo;attention est la track <a href="http://www.google.com/glass/start/" rel="nofollow">Glass</a>.</p>
<p>Bien que le programme soit clairement défini, une question subsiste : Quel sera le contenu de la keynote ? Des mots clés comme Key Lime Pie vs Jelly Bean 4.3, Nexus Q, Glass reviennent souvent sur les blogs techniques mais qu&rsquo;en sera-t-il réellement?</p>
<p>Cette année j&rsquo;ai la chance de pouvoir y assister et de vous fournir un retour sur les faits marquants de la conférence. Vous pourrez ainsi suivre en live son déroulement sur <a href="https://twitter.com/Tom404_" rel="nofollow">twitter</a> (à partir de 18h heure française) ou directement sur <a href="https://developers.google.com/live/" rel="nofollow">https://developers.google.com/live/</a>. Pour finir une synthèse des principales sessions sera disponible sur notre <a href="http://blog.xebia.fr" rel="nofollow">blog</a> dans une série d&rsquo;articles à venir<span style="font-size: 10.0pt;line-height: 13.0pt;">.</span></p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/14/google-io-j-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xebia Event Cassandra 21 Mai</title>
		<link>http://blog.xebia.fr/2013/05/13/xebia-event-cassandra-21-mai/</link>
		<comments>http://blog.xebia.fr/2013/05/13/xebia-event-cassandra-21-mai/#comments</comments>
		<pubDate>Mon, 13 May 2013 12:01:48 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[Datastax]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13918</guid>
		<description><![CDATA[Xebia organise un atelier Cassandra le 21 Mai prochain Le 21 Mai prochain, Xebia organise dans ses locaux un Hands-On de deux heures sur les nouveautés de Cassandra 1.2 et le nouveau Java Driver de Datastax.  Cassandra est un datastore open source, orienté colonne, aux performances linéaires. Lors de cet atelier, nous parlerons du modèle distribué de [...]]]></description>
				<content:encoded><![CDATA[
<h3 id="XebiaEventCassandra21Mai-XebiaorganiseunatelierCassandrale21Maiprochain"><span style="color: rgb(34,34,34);">Xebia organise un atelier Cassandra le 21 Mai prochain</span></h3>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2010/05/apache-cassandra.png" alt="apache-cassandra" width="230" height="48" style="margin: 1em 1em 1em 1em; float: right;"/></p>
<p><span style="font-size: 10.0pt;line-height: 13.0pt;">Le 21 Mai prochain, Xebia organise dans ses locaux un Hands-On de deux heures sur les nouveautés de Cassandra 1.2 et le nouveau Java Driver de </span><a href="http://www.datastax.com/" style="text-decoration: none;" rel="nofollow">Datastax</a><span style="font-size: 10.0pt;line-height: 13.0pt;">. </span></p>
<p><a href="http://cassandra.apache.org/" style="text-decoration: none;" rel="nofollow">Cassandra</a> est un datastore open source, orienté colonne, aux performances linéaires. Lors de cet atelier, nous parlerons du modèle distribué de Cassandra, des formats des données et du nouveau langage de requête CQL. <span style="font-size: 10.0pt;line-height: 13.0pt;">Vous apprendrez à dénormaliser, indexer les données d&rsquo;un réseau social basé sur la musique dans Cassandra avec CQL et Java Driver et éviter les pièges les plus évidents du requêtage dans un cluster distribué. </span></p>
<p>L&rsquo;atelier ne nécessite pas de connaissances préalables pour Cassandra, mais il est préférable de maîtriser Java et d&rsquo;avoir un environnement pré-configuré. </p>
<p>Cette session sera animée par des consultants travaillant chez Xebia dont le formateur Cassandra <a href="http://github.com/Igosuki" style="text-decoration: none;" rel="nofollow">Guillaume Balaine</a>, <a href="https://github.com/pingtimeout" style="text-decoration: none;" rel="nofollow">Pierre Laporte</a>, <a href="https://github.com/n0rad" style="text-decoration: none;" rel="nofollow">Arnaud Lemaire</a>, <a href="https://github.com/mbreton" style="text-decoration: none;" rel="nofollow">Mathieu Breton</a>, <a href="https://github.com/clardeur" style="text-decoration: none;" rel="nofollow">Clément Lardeur</a> et <a href="http://www.linkedin.com/in/joachimrousseau" style="text-decoration: none;" rel="nofollow">Joachim Rousseau</a><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;"> </span></p>
<p>Les inscriptions se font <a href="http://cassandraatxebia.eventbrite.fr/" rel="nofollow">ici</a>.</p>
<p><span style="color: rgb(34,34,34);"><br /></span></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/13/xebia-event-cassandra-21-mai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/</link>
		<comments>http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#comments</comments>
		<pubDate>Tue, 07 May 2013 09:07:00 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Java EE 7]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13889</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Méthodes Agiles : Gérer les entreprises comme des logiciels (Par Benjamin Moitié) Apprenons tôt et souvent : l&#39;acquisition disciplinée de connaissances (Par Yannick Grenzinger) Scrum : un écueil pour les SSII ? et Kanban ? (Par Couthaïer Farfra) Le coin de la technique [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-M%C3%A9thodesAgiles%3AG%C3%A9rerlesentreprisescommedeslogiciels">Méthodes Agiles : Gérer les entreprises comme des logiciels</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/bmoitie" target="_blank">Benjamin Moitié</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-Apprenonst%C3%B4tetsouvent%3Al%27acquisitiondisciplin%C3%A9edeconnaissances">Apprenons tôt et souvent : l&#39;acquisition disciplinée de connaissances</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-Scrum%3Aun%C3%A9cueilpourlesSSII%3FetKanban%3F">Scrum : un écueil pour les SSII ? et Kanban ?</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-LeswebsocketsarriventavecJavaEE7">Les websockets arrivent avec Java EE 7</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-Lesd%C3%A9veloppeursplus%C3%A2g%C3%A9sont-ilsplusdesavoir-faire%3F">Les développeurs plus âgés ont-ils plus de savoir-faire ?</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/#RevuedePresseXebia-LaroadmapdeJavaEE7approuv%C3%A9eparleJCP">La road map de Java EE 7 approuvée par le JCP</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité"><span style="font-size: 1.4em;">Agilité</span></h3>
<h4 id="RevuedePresseXebia-MéthodesAgiles:Gérerlesentreprisescommedeslogiciels">Méthodes Agiles : Gérer les entreprises comme des logiciels</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' target='_blank'><img title='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' src='https://secure.gravatar.com/avatar/c1d0fcafb122081cb6b2ed9ed7a1339b.jpg?s=24' alt='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moiti&#233;</a></span></div>
<p><span style="color: rgb(0,0,0);">Un article du monde intéressant à bien des égards. Il n&rsquo;est pas courant de voir Le Monde publier un papier sur l&rsquo;agilité.</span><span style="color: rgb(0,0,0);"> </span></p>
<p><span style="color: rgb(0,0,0);">Au-delà des définitions &quot;imprécises&quot; (voir les idées reçues) qui sont données aux différentes méthodes agiles, cet article relate en effet le projet de construction d&rsquo;une automobile en utilisant le Lean Start Up, par Joe Justice.</span></p>
<p><span style="color: rgb(0,0,0);"> </span><span style="color: rgb(0,0,0);font-size: 10.0pt;line-height: 13.0pt;">On y retrouve les principales étapes et caractéristiques des méthodes employées pour réaliser ce produit. Le sujet avait déja buzzé en début d&rsquo;année dernière, le voilà réapparaitre sur Le Monde il y a quelques semaines.</span></p>
<p><span style="color: rgb(0,0,0);"><span style="color: rgb(0,0,0);"><a href="http://internetactu.blog.lemonde.fr/2012/12/21/methodes-agiles-gerer-les-entreprises-comme-des-logiciels/?buffer_share=72967" rel="nofollow">http://internetactu.blog.lemonde.fr/2012/12/21/methodes-agiles-gerer-les-entreprises-comme-des-logiciels/?buffer_share=72967</a></span></span></p>
<h4 id="RevuedePresseXebia-Apprenonstôtetsouvent:l&#39;acquisitiondisciplinéedeconnaissances">Apprenons tôt et souvent : l&rsquo;acquisition disciplinée de connaissances</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p><a href="http://alistair.cockburn.us/Disciplined+Knowledge+Acquisition+in+Product+Development" rel="nofollow">Un article long et détaillé d&rsquo;Allistair Cockburn</a> sur &quot;<em>l&rsquo;acquisition disciplinée de connaissances en matière de développement de produit</em>&quot;. L&rsquo;article commence par comparer la courbe d&rsquo;acquisition de connaissances idéale au cours d&rsquo;un projet (inspirée de différentes méthodes telles que Lean Startup) et celle qu&rsquo;on croise typiquement sur les projets que ce soit en terme de marketing ou de développement. Le projet commence avec des idées géniales, de grands espoirs et aucune prise en compte que certaines de ces idées sont peut être complètement fausses. </p>
<p>Pour réussir un projet, ses membres doivent apprendre quatre choses :<br />1. Comment travailler ensemble et, tout simplement, est-ce qu&rsquo;ils peuvent faire ce travail ?<br />2. A quels endroits leurs idées techniques sont imparfaites ?<br />3. Combien cela coûtera-t-il à développer ? <br />4. Et enfin, sont-ils en train de construire la bonne chose, le bon produit ?</p>
<p>Pour répondre à ces questions, l&rsquo;article propose de nombreuses stratégies connues (livrer le plus souvent possible, intégration continue) jusqu&rsquo;à d&rsquo;autres moins utilisées comme le &quot;walking skeleton&quot; ou le prototypage papier.</p>
<h4 id="RevuedePresseXebia-Scrum:unécueilpourlesSSII?etKanban?">Scrum : un écueil pour les SSII ? et Kanban ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' target='_blank'><img title='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' src='https://secure.gravatar.com/avatar/0d4fd0e3f035b5626ab9f7f6741bd5af.jpg?s=24' alt='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/%40cfarfra' target='_blank'><img title='http://twitter.com/%40cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/%40cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Coutha&#239;er Farfra</a></span></div>
<p>Dans cet article <a href="http://www.areyouagile.com/2009/09/scrum-un-ecueil-pour-les-ssii-et-kanban/" rel="nofollow">http://www.areyouagile.com/2009/09/scrum-un-ecueil-pour-les-ssii-et-kanban/</a>, datant de 2009, Pablo Pernot (société <a href="http://www.smartview.fr/" rel="nofollow">Smartview</a> &#8211; Blog <a href="http://www.areyouagile.com" rel="nofollow">Are You Agile ?</a>) nous décrit la difficulté pour les SSII d&rsquo;appliquer le cadre Scrum, à la fois auprès de ses clients et dans leurs projets interne (cadre forfaitaire, stabilité des équipes, maturité des clients). Pablo aborde ensuite les apports d&rsquo;un système Kanban dans l&rsquo;amélioration du processus Scrum, permettant de réduire les obstacles cités précédemment.</p>
<p>Je pense, qu&rsquo;au delà des problématiques décrites par Pablo, qui malheureusement ne sont pas propres aux SSII mais à toute organisation actuelle, et malgré quelques imprécisions (&quot;<span style="color: rgb(17,17,17);">Mon objectif est de définir des User Story (ou MMF : minimal marketable feature) assez compactes et assez indépendantes les unes des autres pour qu&rsquo;elles puissent être abordées unitairement et assez rapidement&quot; =&gt; Le MMF n&rsquo;est pas la définition de Users Stories compactes, cela relève plus des critères INVEST, mais d&rsquo;identifier les fonctionnalités minimales à réaliser permettant une livraison rapide d&rsquo;un produit),</span> Kanban se révèle de plus en plus comme un complément indispensable (j&rsquo;oserais même indissociable) du cadre Scrum (comme décrit par <a href="http://www.morisseauconsulting.com/blog/" rel="nofollow">Laurent Morisseau</a> lors du <a href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-%23OMG%3Amon%C3%A9quipefaitsonhakaenKanbanStyle" rel="nofollow">ScrumDay 2013</a>), tout comme l&rsquo;eXtreme Programming apporte une plus-value essentielle à Scrum dans les pratiques d&rsquo;ingénieries.</p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique"><span style="font-size: 1.4em;">Le coin de la technique</span></h3>
<h4 id="RevuedePresseXebia-LeswebsocketsarriventavecJavaEE7">Les websockets arrivent avec Java EE 7</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' target='_blank'><img title='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' src='https://secure.gravatar.com/avatar/37a6259cc0c1dae299a7866489dff0bd.jpg?s=24' alt='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>La nouvelle version de Java EE arrivera en 2013 et intégrera les fonctionnalités de la norme HTLM 5, notamment les websockets grâce à la JSR 356. Pour rappel, websocket est la solution proposée par le W3C pour permettre au serveur de pusher des informations vers le client, sans utiliser les nombreux hacks développés au fil des ans pour contourner cette limitation du protocole HTTP (comet, long pooling, iframe, flash, &#8230;).</p>
<p><a href="http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html" rel="nofollow">Cet article</a> vous présente la JSR 356, api de JEE7 pour utiliser les websockets coté serveur et client.</p>
<h4 id="RevuedePresseXebia-Lesdéveloppeursplusâgésont-ilsplusdesavoir-faire?">Les développeurs plus âgés ont-ils plus de savoir-faire ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>L&rsquo;étude relatée dans <a href="http://www.infoq.com/news/2013/05/programming-age-study" rel="nofollow">cet article sur InfoQ</a> a tâché de répondre à la question &quot;Les développeurs plus âgés ont-ils plus de savoir-faire ?&quot; et s&rsquo;est basée sur les statistiques du site Stack Overflow. Et même si le résultat peut être biaisé et ne pas représenter l&rsquo;ensemble de la population des développeurs, le résultat est sans appel : oui le nombre d&rsquo;années passées à développer augmente le savoir faire. Cela peut paraître naturel pour un Software Craftsman mais cela semble beaucoup moins clair dans beaucoup d&rsquo;organisation où la progression passe par la case Chef de Projet. </p>
<h4 id="RevuedePresseXebia-LaroadmapdeJavaEE7approuvéeparleJCP">La road map de Java EE 7 approuvée par le JCP</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' target='_blank'><img title='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' src='https://secure.gravatar.com/avatar/37a6259cc0c1dae299a7866489dff0bd.jpg?s=24' alt='http://www.gravatar.com/37a6259cc0c1dae299a7866489dff0bd' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>La JSR 342, qui contient l&rsquo;ensemble des spécifications de Java EE7 a été approuvée par le JCP. JEE7 comprend donc officiellement 14 nouvelles JSR et 9 maintenance release. Parmis les nouvelles JSR, on note l&rsquo;arrivée de nouvelles api pour :</p>
<ul>
<li>la gestion des web sockets (JSR 356)</li>
<li>la création et le parsing du format JSON (JSR 353)</li>
<li>la gestion des batchs (JSR 352)</li>
<li>la gestion des taches en asynchrone (JSR 236)</li>
</ul>
<p>Les api servlet, JPA, EJB, JSP, JSP, JMS, EJB, Bean Validation et CDI sont également mise à jour. La sortie de Java EE 7 est prévue pour fin 2013.</p>
<p>L&rsquo;annonce du résultat est disponible sur <a href="https://blogs.oracle.com/theaquarium/entry/java_ee_7_platform_completes" rel="nofollow">cet article</a> et le résultat du vote sur la page de la <a href="http://jcp.org/en/jsr/results?id=5513" rel="nofollow">JSR 342</a>.</p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/07/revue-de-presse-xebia-2013-19/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>En finir avec le Pilotage Excel Driven</title>
		<link>http://blog.xebia.fr/2013/05/06/en-finir-avec-le-pilotage-excel-driven/</link>
		<comments>http://blog.xebia.fr/2013/05/06/en-finir-avec-le-pilotage-excel-driven/#comments</comments>
		<pubDate>Mon, 06 May 2013 07:55:00 +0000</pubDate>
		<dc:creator>Renaud Chevalier</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Management visuel]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13866</guid>
		<description><![CDATA[Avez-vous déjà rencontré ce genre de fichier Excel dont l&#8217;auteur vous explique fièrement qu&#8217;il gère finement le pilotage de ses 25 collaborateurs ? Vous savez, ce genre de fichier qui contient 156 lignes, non 157, non 158, non&#8230; enfin beaucoup de lignes, dont chacune détaille qui, quand, quoi, comment, avec qui, sur quoi, pour quand, [...]]]></description>
				<content:encoded><![CDATA[
<p>Avez-vous déjà rencontré ce genre de fichier Excel dont l&rsquo;auteur vous explique fièrement qu&rsquo;il gère finement le pilotage de ses 25 collaborateurs ? Vous savez, ce genre de fichier qui contient 156 lignes, non 157, non 158, non&#8230; enfin beaucoup de lignes, dont chacune détaille qui, quand, quoi, comment, avec qui, sur quoi, pour quand, pourquoi, pour qui, le tout avec un identifiant unique bien sûr. Quelque chose comme ça :</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/fichier_excel.jpg" target="_blank"><img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/fichier_excel-300x170.jpg" width="500" /></a></p>
<p>Ah, si vous n&rsquo;êtes pas l&rsquo;un de ces collaborateurs, peut-être est-ce vous qui utilisez ce fichier que vous considérez comme la clé de voute de votre réussite professionnelle et que vous n&rsquo;abandonneriez pour rien au monde. Ce genre de fichier Excel est un peu un miroir aux alouettes, il donne à son auteur une impression de maîtrise et de détail, le fichier est extensible et l&rsquo;on peut ajouter autant de lignes que nécessaire. Pourtant la réalité n&rsquo;est pas aussi simple.</p>
<p>Aujourd&rsquo;hui, nous allons voir ce que nous reprochons à ce fichier Excel et comment s&rsquo;en passer définitivement.</p>
<p>J&rsquo;ai souvent été confronté dans différentes missions, sur de gros projets, avec beaucoup d&rsquo;acteurs (internes / externes), à des fichiers Excel de plusieurs centaines de lignes tenus par les équipes de pilotage d&rsquo;équipes Scrum (équipes étendues). La mise à jour du fichier se fait généralement lors de réunions hebdomadaires interminables et non productives. La lecture du fichier se fait généralement &#8230; jamais. C&rsquo;est malheureusement trop souvent le cas dans des mises à l&rsquo;échelle. L&rsquo;agilité se fait au niveau de l&rsquo;équipe mais on retrouve les bonnes vieilles techniques de management pour synchroniser l&rsquo;ensemble des parties prenantes (marketing, tests, infra&#8230;).<br />
Nous retrouvons la structure la plus courante du fichier Excel : le Qui / Quand / Quoi. Voici un exemple :<br />
<img style="margin-left: auto; margin-right: auto; display: block;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/exemple.jpg" width="686" height="91" /></p>
<p>Avec ce type de fichier, à moins d&rsquo;avoir une mémoire d&rsquo;éléphant, il devient impossible d&rsquo;avoir une vision globale. Les acteurs sont démotivés, n&rsquo;écoutent plus, n&rsquo;ont plus envie de venir en réunion, les tâches perdent de leurs pertinences et ne sont plus traitées, de nouveaux degrés d&rsquo;alerte apparaissent, la priorisation est de plus en plus difficile, voire impossible&#8230; Plus grave encore, des éléments plus structurants pour la fluidité du travail passent totalement inaperçus et ne permettent pas d&rsquo;anticiper les problèmes : surcharge, goulots d&rsquo;étranglement non visibles, détection des points de blocage, etc.</p>
<p>Outre les problèmes de fond, des problèmes logistiques viennent s&rsquo;ajouter : maintenance du fichier, suivi et mise à jour, accès concurrents, versionning, etc.</p>
<p>Dans ce contexte, comment piloter l&rsquo;activité, maîtriser tous les sujets et anticiper les risques afin de permettre aux équipes Agiles de travailler le plus efficacement possible ? Soyons réaliste&#8230; C&rsquo;est IMPOSSIBLE !!!</p>
<h1 id="EnfiniraveclePilotageExcelDriven-ManagementvisueletStand-up">Management visuel et Stand-up</h1>
<p>Malgré la popularité de ce format, les équipes de pilotages souffrent et ne peuvent que rarement exploiter la mine d&rsquo;informations contenues dans ce fichier. Je vais donc vous présenter une solution simple pour se débarrasser de cette boîte de Pandore en reprenant quelques principes du Manifeste Agile :</p>
<ul>
<li>Favoriser la communication plutôt que les processus et les outils,</li>
<li>Favoriser un logiciel qui fonctionne plutôt qu&rsquo;une documentation exhaustive.</li>
</ul>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">Le principe est d&rsquo;instaurer un management visuel et changer le format du weekly en Stand-Up. Dans quel but </span>? Avoir une vision globale, rendre visible l&rsquo;avancement des tâches, rendre visible les goulots d&rsquo;étranglement et les points de blocage, réduire le temps du weekly, favoriser la communication, améliorer la cohésion, etc.</p>
<p>Afin de ne pas réinventer la roue, nous proposons un stand-up calqué sur le Daily SCRUM. À tour de rôle, pendant 3 minutes, chaque participant répond à trois questions :</p>
<ul>
<li>Qu&rsquo;est-ce que j&rsquo;ai fait la semaine dernière ?</li>
<li>Quels sont les problèmes que je rencontre ?</li>
<li>Qu&rsquo;est-ce que je compte faire cette semaine ?</li>
</ul>
<p>La deuxième étape est de responsabiliser les participants à la levée des obstacles. Ils disposent de 30 minutes pour communiquer entre eux de leurs actions potentielles. L&rsquo;objectif est de lever un maximum d&rsquo;obstacles.</p>
<p>La troisième étape est de clore officiellement le standup et de fixer la date du prochain weekly, normalement une semaine plus tard, mais au mois de Mai cela peut changer  ;-)</p>
<p>Le point clé de cette solution est de concevoir la structure de l&rsquo;affichage visuel. Le principe du tableau est inspiré de l&rsquo;approche Kanban mais nous ne reprenons pas tous les principes. Nous garderons un découpage de l&rsquo;espace en zones de travail dans lesquelles vont transiter les tâches. L&rsquo;objectif est d&rsquo;identifier en un coup d&rsquo;oeil le volume de travail dans un état précis, tout en conciliant une simplicité d&rsquo;utilisation. Par rapport à un Kanban classique, les tâches n&rsquo;auront pas forcément le même cycle de vie, il faut donc rester simple sur la structure du flux de travail.</p>
<h1 id="EnfiniraveclePilotageExcelDriven-LeLeanboard">Le Lean board</h1>
<p>Lors d&rsquo;une précédente expérience, j&rsquo;ai participé de l&rsquo;intérieur à une transformation Lean pour l&rsquo;IT. Les équipes de Coachs ont déployés dans chaque équipe de développement un Kanban assez différent de ce que l&rsquo;on a l&rsquo;habitude de voir. L&rsquo;objectif de celui-ci était de rendre visible le &laquo;&nbsp;Qui fait quoi?&nbsp;&raquo;. Attention : l&rsquo;état d&rsquo;esprit est toujours Agile, il n&rsquo;est pas question ici de tracking mais bien de limiter toute forme de gaspillage. J&rsquo;ai trouvé ce format parfaitement adapté pour modéliser notre fichier Excel.</p>
<p>Comment ça marche?</p>
<p>Le tableau est divisé en quatre colonnes. L&rsquo;aspect visuel est le suivant :</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0656.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0656-300x225.jpg" width="300" /></a></p>
<p>Avec quelques Post-It en plus :</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0695.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0695-300x225.jpg" width="300" /></a></p>
<p>Dans la colonne de gauche, nous listons les sujets, les thèmes principaux qui vont constituer un regroupement cohérent de tâches de la colonne &laquo;&nbsp;To Do&nbsp;&raquo;, la correspondance entre les 2 est assurée par un alignement horizontal (ligne de nage) :<br />
<a href="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0699.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0699-225x300.jpg" width="300" /></a></p>
<p>Lorsqu&rsquo;un acteur démarre une tâche, il la positionne dans sa zone personnelle de la colonne &laquo;&nbsp;In Progress&nbsp;&raquo; :</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/in_progress_vide.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/in_progress_vide-225x300.jpg" width="300" /></a><br />
<a href="http://blog.xebia.fr/wp-content/uploads/2013/05/in_progress_rempli.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/in_progress_rempli-225x300.jpg" width="300" /></a></p>
<p>Il n&rsquo;est nullement ici question de &laquo;&nbsp;fliquer&nbsp;&raquo; les individus, mais bien de détecter les surcharges. Si l&rsquo;aspect nominatif vous rebute, utilisez un avatar.<br />
Enfin lorsque la tâche est terminée, vous savez ce qu&rsquo;il se passe ?</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0698.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0698-225x300.jpg" width="300" /></a></p>
<p>Bien vu ! Elles passent à &laquo;&nbsp;Done&nbsp;&raquo;. Vous noterez également que nous ajoutons des cases supplémentaires pour visualiser des situations particulières et ne pas surcharger les cases individuelles :</p>
<ul>
<li>Stand-by : les tâches en attentes,</li>
<li>Blocked : les tâches bloquées,</li>
<li>Impediments : les problèmes à régler.</li>
</ul>
<h1 id="EnfiniraveclePilotageExcelDriven-Retourd'expérience"><strong>Retour d&rsquo;expérience</strong></h1>
<p>J&rsquo;ai mis en place cet outil chez deux clients, le premier avec une dizaine d&rsquo;acteurs et le second avec une trentaine d&rsquo;acteurs. Voilà mon retour d&rsquo;expérience.</p>
<p><strong>Règle n°1 : Le &laquo;&nbsp;grooming&nbsp;&raquo;</strong></p>
<p>L&rsquo;ajout de sujets et de tâches pendant le weekly ne fonctionne pas. Le consensus des acteurs sur la ou les nouvelle(s) tâche(s) et la rédaction des post-its constituent une perte de temps. De plus, il faut revoir régulièrement la priorisation des tâches. Ce n&rsquo;est pas l&rsquo;objectif du weekly. Rappelez-vous que tout le monde est debout. L&rsquo;objectif est d&rsquo;être efficace.</p>
<p>Il y a besoin de &laquo;&nbsp;groomer&nbsp;&raquo; et il faut prévoir un temps pour ça.</p>
<p><strong>Règle n°2 : Un bon weekly est un weekly préparé individuellement</strong></p>
<p>À l&rsquo;échelle de la semaine, une rétrospective sur ce que l&rsquo;on a fait, son engagement à venir et expliquer succinctement les problèmes que l&rsquo;on rencontre ne s&rsquo;improvise pas (mode &laquo;&nbsp;arrache&nbsp;&raquo;). Afin d&rsquo;éviter les temps de recherche (effet découverte), il faut préparer son weekly pour être le plus synthétique possible. Chaque acteur dispose seulement de 3 minutes de temps de parole. Il n&rsquo;y a rien de plus désagréable pour une assemblée que d&rsquo;écouter quelqu&rsquo;un qui vient en &laquo;&nbsp;touriste&nbsp;&raquo;.</p>
<p><strong>Règle n°3 : Rendre l&rsquo;urgence visible</strong></p>
<p>Pour rendre les urgences visibles, il faut attirer l&rsquo;oeil avec des signaux immédiatement perceptibles. Je vous conseille de ne pas dépasser 2 niveaux d&rsquo;urgence afin de ne pas multiplier les signaux. Le management visuel pourrait devenir contre productif. Vous pouvez utiliser ça:</p>
<p><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/60290.jpg" /><br />
Remarque : étant donné que le tableau ne gère pas la priorisation (les tâches sont seulement classées par sujet), comment gérer l&rsquo;urgence sans un signal visuel? Notez donc l&rsquo;importance de cette règle accompagnée d&rsquo;une revue régulière des urgences en &laquo;&nbsp;grooming&nbsp;&raquo; (règle n°1).</p>
<p><strong>Règle n°4: Identifier les points de blocage</strong></p>
<p>Afin d&rsquo;identifier les points de blocage, pointer les tâches en cours toutes les semaines avec un point ou un bâton. Cette technique permet de rendre visibles les tâches qui stagnent.</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/9430841-compter-les-jours-sur-un-tableau-noir.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/9430841-compter-les-jours-sur-un-tableau-noir-300x200.jpg" width="300" /></a><br />
Pour éviter cela, il est important de définir des tâches avec une bonne granularité. Idéalement, une tâche à un objectif bien précis avec un résultat attendu explicite et doit pouvoir être résolue en une semaine (notion de &laquo;&nbsp;SMART&nbsp;&raquo;). Si une tâche stagne, essayez d&rsquo;identifier pourquoi et n&rsquo;hésitez pas à la redéfinir, la découper ou même la supprimer lors de la séance de &laquo;&nbsp;grooming&nbsp;&raquo; (règle n°1).</p>
<p><strong>Règle n°5: Instaurer des KPI ludiques</strong></p>
<p>Afin de challenger les acteurs, mesurez toutes les semaines le nombre de tâches urgentes et celles qui vont le devenir, définissez des seuils et mettez en place un système de récompense si les objectifs sont atteints. Utilisez ces indicateurs pour encourager, créer de la cohésion et un esprit d&rsquo;équipe.</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0657.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/IMG_0657-300x225.jpg" width="300" /></a></p>
<p><strong>Règle n°6: De la rigueur dans les post-it</strong></p>
<p>Sur un gros volume de tâches, cela évite que votre tableau ne ressemble à un amas de feuilles qui inquiète plus qu&rsquo;il ne rassure. Cela permet aussi de garder le contrôle. Pour cela, définissez une taille et un gabarit de post-it et respectez-le !</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/05/gabarit.jpg" target="_blank"><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/gabarit-300x138.jpg" width="300" /></a></p>
<p><strong>Règle n°7: Un peu de couleur </strong></p>
<p><strong> </strong>Vous pouvez avoir besoin d&rsquo;identifier visuellement des types de tâche. Dans ce cas, attribuer une couleur par type. De même que pour les règles n°3 et 6, respectez toujours le code couleur (anticiper le réapprovisionnement de post-it) et limitez leur nombre pour éviter l&rsquo;effet &laquo;&nbsp;arbre de noël&nbsp;&raquo; :-)</p>
<p><img alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/05/un-peu-de-couleur_2.jpg" /></p>
<h1 id="EnfiniraveclePilotageExcelDriven-Etalors,çamarche?"><strong>Et alors, ça marche?</strong></h1>
<p>Dans les deux cas, en l&rsquo;espace de 3 semaines, les acteurs se sont appropriés l&rsquo;outil. Le pilotage est redevenu efficace, avec une vrai visibilité, les urgences ont diminuées et les risques ont de nouveau été anticipés&#8230; sans parler du regain de cohésion engendré par la reprise de la communication.</p>
<p>Il faut néanmoins faire attention à &laquo;&nbsp;l&rsquo;effet soufflé&nbsp;&raquo; ! Sans un grooming efficace (règle n°1) et une vigilance sur les post-it (règles n°6 et 7), le tableau peut rapidement devenir contre productif. L&rsquo;animateur du weekly (Directeur de P<span style="font-size: 10.0pt; line-height: 13.0pt;">rogrammes dans les deux cas) doit rester vigilant pour garder la dynamique du début. </span></p>
<p>Limitation : la mise en place a été effectuée dans des contextes distribués où il était possible aux acteurs de se rassembler sur site une fois par semaine. Si le déplacement n&rsquo;est pas possible, rien n&rsquo;empêche aux acteurs absents d&rsquo;avoir une case &laquo;&nbsp;In Progress&nbsp;&raquo; pour donner de la visibilité à l&rsquo;assemblée. Un suivi hors cérémonie est alors nécessaire et le besoin de dématérialisation reste entier (cf section suivante).</p>
<h1 id="EnfiniraveclePilotageExcelDriven-EtlefichierExceldanstoutça?"><strong>Et le fichier Excel dans tout ça?</strong></h1>
<p>Dans certains contextes, pour diverses raisons (culturelles, légales, simples sauvegardes&#8230;), les entreprises ont besoin d&rsquo;écrits et de traçabilité et ce n&rsquo;est pas NÉGOCIABLE. Welcome in the real world! Les puristes diront que ce n&rsquo;est pas Agile&#8230; Sûrement !!! Mais en attendant de transformer toute l&rsquo;organisation, on peut réfléchir à des solutions intermédiaires.</p>
<p>Voici deux propositions qui marchent : la première, abandonner le fichier Excel. Dans ce cas, la question du compte rendu de weekly est clairement posée. L&rsquo;objectif est de garder une trace des changements intervenus au tableau. La seconde, garder le fichier Excel. Il faut alors le mettre à jour à chaque weekly. La mise à jour à tour de rôle est alors une bonne pratique.</p>
<p>Pour aider la prise de décision, posez-vous les bonnes questions :</p>
<ul>
<ul>
<li>Est-ce vraiment utile ?</li>
<li>Quels sont les objectifs du document ?</li>
<li>À qui le document est-il destiné ?</li>
<li>Le document est-il utilisé ?</li>
<li>Qui rédige et quand ?</li>
<li>Etc.</li>
</ul>
</ul>
<p>Dans tous les cas, rappelez-vous pourquoi vous passez au Management Visuel. Evitez la marche arrière et contentez-vous du minimum vital&#8230; Soyez EFFICACE !!!</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/06/en-finir-avec-le-pilotage-excel-driven/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Hadoop Summit 2013 à Amsterdam, le rattrapage</title>
		<link>http://blog.xebia.fr/2013/05/02/hadoop-summit-2013-a-amsterdam-le-rattrapage/</link>
		<comments>http://blog.xebia.fr/2013/05/02/hadoop-summit-2013-a-amsterdam-le-rattrapage/#comments</comments>
		<pubDate>Thu, 02 May 2013 09:50:43 +0000</pubDate>
		<dc:creator>Bertrand Dechoux</dc:creator>
				<category><![CDATA[NoSQL / Big Data]]></category>
		<category><![CDATA[Hadoop]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13847</guid>
		<description><![CDATA[Le premier Hadoop Summit en Europe est fini. Mais si vous n&#8217;avez pu y participer, il est toujours temps de se rattraper en consultant les slides et les vidéos des présentations renseignées sur le planning. Bien sûr, cela ne vous permettra pas de participer aux échanges &#8216;de couloirs&#8217;. Mais il ne faut pas non plus [...]]]></description>
				<content:encoded><![CDATA[
<p>Le premier <a href="http://blog.xebia.fr/2013/03/19/hadoop-summit-commence-mercredi/" rel="nofollow">Hadoop Summit en Europe</a> est fini. Mais si vous n&rsquo;avez pu y participer, il est toujours temps de se rattraper en consultant <a href="http://www.slideshare.net/Hadoop_Summit/presentations" rel="nofollow">les slides</a> et <a href="http://www.youtube.com/user/HadoopSummit/videos" rel="nofollow">les vidéos</a> des présentations renseignées sur <a href="http://hadoopsummit.org/amsterdam/schedule/" rel="nofollow">le planning</a>. Bien sûr, cela ne vous permettra pas de participer aux échanges &lsquo;de couloirs&rsquo;. Mais il ne faut pas non plus oublier que la communauté française est active au travers du <a href="http://hugfrance.fr/" rel="nofollow">Hadoop User Group France</a> avec des réunions mensuelles. Pour ceux près de Paris, c&rsquo;est l&rsquo;occasion de partager de vive voix ses expériences. Et pour tout le monde, un accès à d&rsquo;autres présentations, en français cette fois-ci.</p>
<p>Pendant ce Hadoop Summit européen, nous avons pu assister à de nombreuses présentations. Voici quelques notes concernant celles qui nous ont le plus marqué.</p>
<h3 id="HadoopSummit2013àAmsterdam,lerattrapage-WhatthepointofHadoop?">What the point of Hadoop?</h3>
<p>Matt Aslett, directeur de la recherche à 451 Research, a ouvert cette conférence avec une question fondamentale : pourquoi Hadoop ? Sa réponse est à la fois simple et très nuancée puisque contextuelle. Il s&rsquo;agit d&rsquo;une plate-forme d&rsquo;une très grande flexibilité, ce qui est à la fois une aubaine et un frein.</p>
<p>C&rsquo;est avec humour qu&rsquo;il a fait le rapprochement avec <a href="http://en.wikipedia.org/wiki/Blind_men_and_an_elephant" rel="nofollow">l&rsquo;histoire des aveugles et de l&rsquo;éléphant</a>. Bien sûr en fonction de ce que vous voyez (ce qui dépend de votre métier et de votre expérience) Hadoop peut être quelque chose de très particulier pour vous et de complètement différent pour quelqu&rsquo;un d&rsquo;autre. Il existe cependant bien un chemin standard pour <a href="http://en.wikipedia.org/wiki/Crossing_the_Chasm" rel="nofollow">franchir le fossé de l&rsquo;adoption </a>:</p>
<ol>
<li><em>stockage</em> : récupérer les données des composants existants dans votre SI et centraliser les logs/événements qui devaient être jetés auparavant.</li>
<li><em>nettoyage/filtrage/extraction</em> : fournir à votre SI les données avec le format et la granularité que chaque composant est capable de gérer.</li>
<li><em>analytique</em> : utiliser, finalement, la puissance de calcul d&rsquo;Hadoop afin de faire les analyses directement sur cette plateforme.</li>
</ol>
<p>Chaque étape permet de profiter de plus en plus des avantages d&rsquo;Hadoop mais le chemin est à prendre dans le bon sens au risque de mettre la charrue avant les bœufs. Il est important de maitriser la complexité du SI existant et sa migration.</p>
<p>Matt Aslett redéfinit plus précisément la problématique (total data) en quatre axes<em>.</em></p>
<ol>
<li><em>totalité</em> : Hadoop permet de stocker la totalité de vos données. Faites le et profitez des économies d&rsquo;échelle.</li>
<li><em>exploration</em> : les données brutes étant stockées, il est possible de les analyser afin de comprendre les informations qui peuvent se révéler utiles. Le fait de ne pas avoir à sélectionner/préparer les données avant de les stocker est clairement un avantage afin d&rsquo;éviter de biaiser l&rsquo;exploration.</li>
<li><em>fréquence</em> : les processus existants peuvent être portés sur la plateforme afin d&rsquo;augmenter leur fréquence d&rsquo;exécution, par exemple du mois au jour. On ne parle pas de temps réel mais cela peut tout de même révolutionner les dynamiques d&rsquo;un métier.</li>
<li><em>dépendance</em> : enfin de plus en plus de solutions permettent de requêter un cluster Hadoop avec du (pseudo-)SQL. Cela permet de réutiliser les compétences acquises mais fournit aussi un lien technique, maitrisé et connu, pour intégrer Hadoop dans le SI.</li>
</ol>
<p>Pour ceux qui souhaitent comprendre le buzz derrière cette technologie, c&rsquo;est définitivement une keynote à rattraper (<a href="http://www.youtube.com/watch?v=UIpUtYehl7E" rel="nofollow">vidéo</a> et <a href="http://www.slideshare.net/Hadoop_Summit/what-is-the-point-of-hadoop" rel="nofollow">slides</a>).</p>
<h3 id="HadoopSummit2013àAmsterdam,lerattrapage-EnterpriseIntegrationofDisruptiveTechnologies"><span>Enterprise Integration of Disruptive Technologies</span></h3>
<p><span>Yahoo!, Facebook et Twitter sont souvent cités comme modèles pour leur utilisation des nouvelles technologies, telle que Hadoop. Cependant, même s&rsquo;il y a certainement beaucoup à apprendre de ces entreprises, &laquo;&nbsp;les géants du web&nbsp;&raquo;, peu d&rsquo;entreprises peuvent se considérer comme similaires à celles-ci, notamment en France. Une entreprise peut-elle tirer parti d&rsquo;Hadoop sachant que son SI est déjà complexe, qu&rsquo;il est critique, qu&rsquo;il ne doit pas être perturbé et que de plus cette entreprise est par culture très conservatrice et prudente? <a href="http://hadoopsummit.org/amsterdam-blog/meet-the-presenters-alasdair-anderson-of-hsbc/" rel="nofollow">Alasdair Anderson</a> nous a montré que c&rsquo;était possible en nous expliquant la mise en place d&rsquo;Hadoop chez HSBC : <a href="http://www.slideshare.net/Hadoop_Summit/enterprise-integration-of-disruptive-technologies" rel="nofollow">slides</a>.<br />
</span></p>
<p><span>Si vous êtes persuadé de l’intérêt d&rsquo;Hadoop mais que vous n&rsquo;arrivez pas à envisager son intégration dans votre entreprise, cette présentation vous permettra certainement de prendre du recul par rapport aux problématiques que vous prévoyez. Des entreprises ont franchi le pas et de plus en plus exposent leur migration. Comme second exemple, il est opportun de rappeler <a href="http://hugfrance.fr/mathias-herberts-fait-le-retour-dexperience-hadoop-darkea/" rel="nofollow">le retour d’expérience fait par Mathias Herberts concernant le Credit Mutuel Arkea</a> lors d&rsquo;un meetup du HUG. Le retour d’expérience de Criteo sur leur utilisation est certainement à voir aussi, la <span style="color: #000000;">vidéo</span> sera uploadée prochainement sur le site du HUG.<br />
</span></p>
<p><span style="color: #000000; font-size: 1.4em; font-weight: bold; line-height: normal;">Hadoop Now, Next and Beyond</span></p>
<p>Eric Baldeschwieler, CTO et fondateur d&rsquo;Hortonworks, a ouvert la seconde journée en retraçant l&rsquo;évolution d&rsquo;Hadoop : depuis sa naissance, son utilisation chez Yahoo! puis les améliorations à venir. Ce fut l&rsquo;occasion de faire un tour de l&rsquo;écosystème et notamment <a href="http://hortonworks.com/about-us/news/hortonworks-proposes-new-apache-hadoop-incubation-projects-to-further-fuel-open-source-innovation/" rel="nofollow">des nouvelles briques à venir</a>. L&rsquo;<a href="http://hortonworks.com/blog/100x-faster-hive/" rel="nofollow">initiative Stinger</a> a pour but d&rsquo;accélérer Hive par un facteur de 100. Cela passera notamment par <a href="http://hortonworks.com/blog/introducing-tez-faster-hadoop-processing/" rel="nofollow">Tez</a>. Ce nouveau framework d’exécution utilisant YARN remplacera MapReduce afin de fournir des requêtes à latences faibles, prérequis nécessaire pour une exploration interactive des données stockées sur Hadoop. La sécurité est également revue : <a href="http://hortonworks.com/blog/introducing-knox-hadoop-security/" rel="nofollow">Knox</a> a pour objectif de proposer une solution plus flexible et plus customisable que l&rsquo;existant se reposant sur l&rsquo;obligation d&rsquo;utiliser Kerberos. Et c&rsquo;est également au tour du data management de se voir cibler avec le projet <a href="http://wiki.apache.org/incubator/FalconProposal" rel="nofollow">Falcon</a>, <a href="https://github.com/InMobi/ivory" rel="nofollow">disponible sur github sous l&rsquo;ancien nom Ivory</a> et <a href="http://mail-archives.apache.org/mod_mbox/incubator-general/201303.mbox/%3CBLU167-W303BEAE2847DF125BB022EA4D00@phx.gbl%3E" rel="nofollow">désormais un projet Apache</a>.</p>
<p>Pour reprendre le sujet : la <a href="http://www.youtube.com/watch?v=DXHLNnkgRKs" rel="nofollow">video</a> et les <a href="http://www.slideshare.net/Hadoop_Summit/apache-hadoop-now-next-and-beyond" rel="nofollow">slides</a>.</p>
<h3 id="HadoopSummit2013àAmsterdam,lerattrapage-HadoopandtheEnterpriseDataWarehouse"><span>Hadoop and the Enterprise Data Warehouse</span></h3>
<p>Patrick Angeles, <em>director of field engineering</em> à Cloudera, est revenu sur l’intégration d&rsquo;Hadoop en entreprise ; spécifiquement sa relation avec les data warehouse et data marts mais plus généralement avec les différentes couches nécessaires pour analyser les données métiers. La volumétrie, la variété et la vitesse des données impacteront l&rsquo;architecture utilisée pour le décisionnel mais on retrouve cependant de grands schémas, des patterns. Si vous souhaitez mieux comprendre comment Hadoop peut compléter, voire remplacer, certaines briques de votre information décisionnelle,  c&rsquo;est une présentation à ne pas manquer : <a href="http://www.slideshare.net/Hadoop_Summit/hadoop-and-enterprise-data-warehouse" rel="nofollow">slides</a>.</p>
<h3 id="HadoopSummit2013àAmsterdam,lerattrapage-Enconclusion">En conclusion</h3>
<p>Cette confèrence Hadoop Summit 2013 à Amsterdam était un événement unique puisque le premier en Europe. Etant un spin-off d&rsquo;une conférence déjà bien établie, les speakers étaient triés sur le volet. Elle a rassemblé des intervenants d&rsquo;entreprises dont l&rsquo;implication n&rsquo;est plus à démontrer : <span style="font-size: 10.0pt; line-height: 13.0pt;">Hortonworks, MapR, Cloudera mais aussi Yahoo!, Facebook, LinkedIn, Twitter&#8230; </span><span style="font-size: 10.0pt; line-height: 13.0pt;">On a apprécié le fait d&rsquo;avoir un public mixte, composé à la fois de décideurs, de concepteurs et d&rsquo;exploitants. C&rsquo;est un plus pour favoriser l&rsquo;adoption d&rsquo;Hadoop mais surtout pour crééer une synergie nécessaire au succes de sa mise en place. Bien que previsible en regardant <a href="http://hadoopsummit.org/amsterdam/speakers/" rel="nofollow">la liste des speakers</a>, on regrettera le fait que la vision d&rsquo;Hortonworks était peu nuancée par ses compétiteurs. Enfin si l&rsquo;on devait comparer juste le nombre de participants (500), cela reste une petite confèrence même par rapport à des conférences nationales (<a href="http://blog.xebia.fr/2013/04/05/retour-sur-devoxx-france-2013/" rel="nofollow">devoxx france</a> : 1500). La communauté s&rsquo;agrandit cependant de jours en jours et s&rsquo;il fallait donner un conseil pour Hadoop Summit 2014 en Europe, cela serait seulement : ne la loupez pas.</span></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/05/02/hadoop-summit-2013-a-amsterdam-le-rattrapage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/</link>
		<comments>http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 21:12:54 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Entreprise Agile]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[MRUnit]]></category>
		<category><![CDATA[Spring XD]]></category>
		<category><![CDATA[Wildfly]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13835</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité L&#8217;agilité est-elle à la portée des Entreprises Française ? (By Couthaïer FARFRA) Implementing Minimum Viable Changes As Part of a Lean Startup For Change Approach (By Benjamin Moitié) Le coin de la technique Lancement du projet Spring XD (By Eric Briand) JBoss AS [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /><br />
<em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-L%27agilit%C3%A9est-elle%C3%A0laport%C3%A9edesEntreprisesFran%C3%A7aise%3F">L&rsquo;agilité est-elle à la portée des Entreprises Française ?</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer FARFRA</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-ImplementingMinimumViableChangesAsPartofaLeanStartupForChangeApproach">Implementing Minimum Viable Changes As Part of a Lean Startup For Change Approach</a> <span class="c2w-toc-author">(By <a href="http://github.com/user" target="_blank">Benjamin Moitié</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-LancementduprojetSpringXD">Lancement du projet Spring XD</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/ebriand" target="_blank">Eric Briand</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-JBossASdevientWildfly">JBoss AS devient Wildfly</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/#RevuedePresseXebia-MRunitsortenversion1.0">MRunit sort en version 1.0</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/bdechoux" target="_blank">Bertrand Dechoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité"><span style="font-size: 1.4em;">Agilité</span></h3>
<h4 id="RevuedePresseXebia-L'agilitéest-elleàlaportéedesEntreprisesFrançaise?">L&rsquo;agilité est-elle à la portée des Entreprises Française ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' target='_blank'><img title='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' src='https://secure.gravatar.com/avatar/0d4fd0e3f035b5626ab9f7f6741bd5af.jpg?s=24' alt='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/cfarfra' target='_blank'><img title='http://twitter.com/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Couthaïer FARFRA</a></span></div>
<p><strong>&laquo;&nbsp;L’entreprise agile est une entreprise qui adapte en permanence son organisation afin de correspondre au mieux aux attentes évolutives du marché et de ses clients. Dans un pays ou chaque évolution est source de contestation est-il possible que les entreprises deviennent agiles ?&nbsp;&raquo;</strong></p>
<p><span style="color: #222222;">Au travers de cette introduction, Jean-Pierre Malle (<a href="http://www.m8.fr" rel="nofollow">M8 Institut</a>), nous fais part de sa réflexion sur la capacité des entreprises Françaises à devenir &laquo;&nbsp;Agiles&nbsp;&raquo;, au travers de 3 modes d&rsquo;organisation habituellement vu au sein d&rsquo;une Entreprise : Organisation orientée &laquo;&nbsp;Métier&nbsp;&raquo; ; Organisation orientée &laquo;&nbsp;Processus&nbsp;&raquo; ; Organisation orientée &laquo;&nbsp;Services&nbsp;&raquo;.</span></p>
<p><span style="color: #222222;"><a href="http://www.veillemag.com/L-agilite-est-elle-a-la-portee-des-entreprises-francaises_a1225.html" rel="nofollow">http://www.veillemag.com/L-agilite-est-elle-a-la-portee-des-entreprises-francaises_a1225.html</a></span></p>
<h4 id="RevuedePresseXebia-ImplementingMinimumViableChangesAsPartofaLeanStartupForChangeApproach">Implementing Minimum Viable Changes As Part of a Lean Startup For Change Approach</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moitié</a></span></div>
<div>Un article sur le Lean Start up&#8230; du 25 avril 2012.</div>
<div>
<div><a href="http://agileconsulting.blogspot.fr/2012/04/implementing-minimum-viable-changes-as.html" rel="nofollow">http://agileconsulting.blogspot.fr/2012/04/implementing-minimum-viable-changes-as.html</a></div>
<div><span style="font-size: 10.0pt; line-height: 13.0pt;"> </span></div>
<div><span style="font-size: 10.0pt; line-height: 13.0pt;">Cet article est Intéressant car il détaille une façon de produire des petits incréments, permettant de valider les hypothèses du MVC (</span><em style="font-size: 10.0pt; line-height: 13.0pt;">Model-View-</em><em style="font-size: 10.0pt; line-height: 13.0pt;">Controller)</em><span style="font-size: 10.0pt; line-height: 13.0pt;">, le tout en s&rsquo;appuyant sur un Kanban/ Backlog des hypothèses.</span></div>
<div><span style="font-size: 10.0pt; line-height: 13.0pt;"> </span></div>
<div><span style="font-size: 10.0pt; line-height: 13.0pt;">Cette démarche met également en avant l&rsquo;absolue nécessité de travailler en équipes représentatives et rapprochées.</span></div>
</div>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-LancementduprojetSpringXD">Lancement du projet Spring XD</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' target='_blank'><img title='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' src='https://secure.gravatar.com/avatar/b8cac58f832026793ff351fdd96a40eb.jpg?s=24' alt='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ebriand' target='_blank'><img title='http://blog.xebia.fr/author/ebriand' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ebriand' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/ebriand' target='_blank'><img title='http://github.com/ebriand' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/ebriand' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ebriand' target='_blank'>Eric Briand</a></span></div>
<p>Springsource a <a href="http://blog.springsource.org/2013/04/23/introducing-spring-xd/" rel="nofollow">annoncé</a> le lancement d&rsquo;un nouveau projet Spring : Spring XD (eXtreme Data). Cette nouvelle initiative vise à adresser et simplifier des problématiques qu&rsquo;engendre les projets Big Data telles que :</p>
<ul>
<li><span style="font-size: 10.0pt; line-height: 13.0pt;">Flux important de données en provenance de différentes sources à stocker sur HDFS</span></li>
<li>Statistiques en temps réel sur de gros volume de données transitant</li>
<li>Gestion de workflows, batchs, map reducing</li>
<li>Export de données aussi important vers des bases SQL ou NoSQL</li>
</ul>
<p><span style="font-size: 10.0pt; line-height: 13.0pt;">Ce projet va se baser sur des projets Spring déjà existant comme <a href="http://www.springsource.org/spring-batch" rel="nofollow">Spring Batch</a>, <a href="http://www.springsource.org/spring-integration" rel="nofollow">Spring Integration</a> ou encore <a href="http://www.springsource.org/spring-data" rel="nofollow">Spring Data</a>. Le projet n&rsquo;en est encore qu&rsquo;à ses prémises, mais vous pouvez déjà allez sur <a href="https://github.com/springsource/spring-xd" rel="nofollow">le github du projet</a> ou sur <a href="https://jira.springsource.org/browse/XD" rel="nofollow">le JIRA du projet</a> pour suivre en suivre l&rsquo;évolution, et voir y contribuer !</span></p>
<h4 id="RevuedePresseXebia-JBossASdevientWildfly">JBoss AS devient Wildfly</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/user' target='_blank'><img title='http://twitter.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Jboss AS, le serveur d&rsquo;application open source de red hat change de nom. Afin d&rsquo;éviter une confusion entre la communauté JBoss, qui regroupe une centaine de projet (notamment JBPM, JBoss drools, JBPM, &#8230;), et le serveur d&rsquo;application éponyme, la société Red Hat a organisé un concours pour renommer son serveur. C&rsquo;est finalement <em>Wildfly</em> qui l&rsquo;emporte. JBoss 7.1.1 sera donc la dernière version sous l&rsquo;appelation JBoss.</p>
<p>Le nouveau site web du projet se trouve <a href="http://www.wildfly.org/" rel="nofollow">ici</a>.</p>
<h4 id="RevuedePresseXebia-MRunitsortenversion1.0">MRunit sort en version 1.0</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/2970f03eda4f65fe0a94c9bb32f0415a' target='_blank'><img title='http://www.gravatar.com/2970f03eda4f65fe0a94c9bb32f0415a' src='https://secure.gravatar.com/avatar/2970f03eda4f65fe0a94c9bb32f0415a.jpg?s=24' alt='http://www.gravatar.com/2970f03eda4f65fe0a94c9bb32f0415a' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bdechoux' target='_blank'><img title='http://blog.xebia.fr/author/bdechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bdechoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/BertrandDechoux' target='_blank'><img title='http://twitter.com/BertrandDechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/BertrandDechoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/BertrandDechoux' target='_blank'><img title='http://github.com/BertrandDechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/BertrandDechoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bdechoux' target='_blank'>Bertrand Dechoux</a></span></div>
<p><a href="http://blog.xebia.fr/2012/07/13/tester-vos-jobs-mapreduce-avec-mrunit/" rel="nofollow">MRunit</a>, la librairie pour tester unitairement et facilement vos jobs MapReduce, vient de sortir en <a href="http://mrunit.apache.org/" rel="nofollow">version 1.0</a>. Cela marque la première release depuis la promotion de ce projet en tant qu&rsquo;Apache TLP (Top Level Project), autrement dit depuis <a href="https://blogs.apache.org/mrunit/entry/apache_mrunit_is_now_a" rel="nofollow">sa sortie de l&rsquo;incubateur apache</a>. La release précédente, la <a href="https://blogs.apache.org/mrunit/entry/apache_mrunit_0_9_0" rel="nofollow">0.9-incubating</a>, date d&rsquo;un an environ. Cette mise à jour apporte trois nouveautés majeures :</p>
<ol>
<li>Support d&rsquo;entrées multiples (<a href="https://issues.apache.org/jira/browse/MRUNIT-64" rel="nofollow">MRUNIT-64</a>).
<ul>
<li>Jusqu&rsquo;à présent, l&rsquo;API ne permettait de fournir qu&rsquo;un seul couple de clef/valeur en entrée. Avec plusieurs, il sera plus facile de tester les implémentations utilisant (à bon escient ou non) un état entre les traitements des différentes clef/valeur.</li>
</ul>
</li>
<li>Support du cache distribué (<a href="https://issues.apache.org/jira/browse/MRUNIT-98" rel="nofollow">MRUNIT-98</a>).
<ul>
<li>Le cache distribué permet aux jobs de partager facilement des jeux de données de petites tailles (et/ou de la configuration). Il facilite ainsi l&rsquo;implémentation de jointures faites seulement dans la phase de map. Avec le support du cache distribué dans les tests, il est désormais possible de tester ce genre de fonctionnalités afin d&rsquo;éviter de futures régressions.</li>
</ul>
</li>
<li>Support des OutputFormats (<a href="https://issues.apache.org/jira/browse/MRUNIT-101" rel="nofollow">MRUNIT-101</a>).
<ul>
<li>L&rsquo;interface <a href="http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapred/OutputFormat.html" rel="nofollow">OutputFormat</a> spécifie comment les données doivent être enregistrées à la fin d&rsquo;un job. Jusqu&rsquo;à présent, la libraire avait fait le choix de mocker cette partie afin de récupérer facilement les résultats. Le désavantage était qu&rsquo;il n&rsquo;était pas possible de vérifier le fonctionnement de l&rsquo;OuputFormat utilisé avec les particularités du job.</li>
</ul>
</li>
</ol>
<p>Si vous souhaitez en savoir plus, les <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311292&amp;version=12320548" rel="nofollow">release notes sous JIRA</a> fournissent un inventaire exhaustif.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/29/revue-de-presse-xebia-2013-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour sur le ScrumDay 2013</title>
		<link>http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/</link>
		<comments>http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 07:30:32 +0000</pubDate>
		<dc:creator>Clément Rochas</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[Scrum Day]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13795</guid>
		<description><![CDATA[Nous étions présents au ScrumDay 2013 et nous vous proposons un retour rapide sur quelques sessions que nous avons suivies. Le programme était (très) riche, aussi ne soyez pas étonnés de ne pas trouver un compte-rendu de toutes les sessions. Le nombre de tracks parallèles a même été un sujet de frustration pour certains d&#8217;entre [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="float: right;margin: 0 0 10px 10px" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/04/Logo-Scrum-Day-20131-300x95.png" /></p>
<p>Nous étions présents au ScrumDay 2013 et nous vous proposons un retour rapide sur quelques sessions que nous avons suivies. Le programme était (très) riche, aussi ne soyez pas étonnés de ne pas trouver un compte-rendu de toutes les sessions. Le nombre de tracks parallèles a même été un sujet de frustration pour certains d&rsquo;entre nous&#8230; Il a donc fallu faire des choix et espérer que ceux-ci soient les bons.</p>
<p>Vous pouvez retrouver les vidéos de beaucoup de sessions sur la <a href="http://www.youtube.com/user/FrenchSUG/videos?view=0" rel="nofollow">chaine du French Scrum User Group</a></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-Coach%3AAidez-moi%C3%A0marcher">Coach : Aidez-moi à marcher</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/crochas" target="_blank">Clément Rochas</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-%23OMG%3Amon%C3%A9quipefaitsonhakaenKanbanStyle">#OMG : mon équipe fait son haka en Kanban Style</a> <span class="c2w-toc-author">(Par <a href="http://twitter.com/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-BoostervotreSCRUMavecLeanStartUp">Booster votre SCRUM avec Lean Start Up</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/bmoitie" target="_blank">Benjamin Moitié</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-Keynote%3ACultureHacking%C2%A0">Keynote : Culture Hacking </a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-L%27agilit%C3%A9selonStarcraft2">L&rsquo;agilité selon Starcraft 2</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-L%27artd%27avoirtort">L&rsquo;art d&rsquo;avoir tort</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-1FeatureOwner%2C5ProductOwner%2C5Teams4GreatProducts">1 Feature Owner, 5 Product Owner, 5 Teams 4 Great Products</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-Identifiezettraitezlessignauxetcomportementsfreinantl%27adoptiondel%27agilit%C3%A9">Identifiez et traitez les signaux et comportements freinant l&rsquo;adoption de l&rsquo;agilité</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-DDD%26BDDGames">DDD &amp; BDD Games</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/#RetoursurleScrumDay2013-Agileappliqu%C3%A9%C3%A0toutel%27entreprise%3ARetourd%27exp%C3%A9riencesurlemarch%C3%A9dupaiement%C3%A9lectronique">Agile appliqué à toute l&rsquo;entreprise : Retour d&rsquo;expérience sur le marché du paiement électronique</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/lperot" target="_blank">Ludovic Pérot</a>)</span></div>
</li>
</ul>
</div>
<h3 id="RetoursurleScrumDay2013-Coach:Aidez-moiàmarcher">Coach : Aidez-moi à marcher</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' target='_blank'><img title='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' src='https://secure.gravatar.com/avatar/51b7d6d805de7b0525d2d8fbb7b4aa0a.jpg?s=24' alt='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/crochas' target='_blank'><img title='http://blog.xebia.fr/author/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/crochas' target='_blank'><img title='http://twitter.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/crochas' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/crochas' target='_blank'>Clément Rochas</a></span></div>
<p>Si vous avez lu l&rsquo;ouvrage &laquo;&nbsp;<span style="font-size: 10.0pt;line-height: 13.0pt">Coacher une équipe agile&nbsp;&raquo;, vous avez une idée des outils plébiscités par Véronique Messager. Accompagnée pour cet atelier de Magali Baton, championne de Judo et coach certifiée HEC, le duo a démarré l&rsquo;atelier par une mise en situation amusante et finalement très représentative des situations rencontrées par les coachs et les Scrum Masters dans la vie de tous les jours. Il s&rsquo;agissait de faire lever de sa chaise Magali&#8230; Elle veut, mais elle n&rsquo;y arrive pas : &nbsp;&raquo;je suis coincée, je n&rsquo;arrive plus à me lever pour marcher, je souhaiterais y arriver, aidez-moi !&nbsp;&raquo;</span></p>
<p>Les participants ont essayé de la faire lever. Certains ont cherché la raison, d&rsquo;autres ont voulu l&rsquo;assister, d&rsquo;autres encore ont voulu la soudoyer ou même la forcer !</p>
<p>Cette habile métaphore des situations du quotidien a permis à nos deux coachs de débriefer et de catégoriser les interactions : questions ouvertes/fermées, injonctions/conseils&#8230; et d&rsquo;insister sur la position basse que le coach se doit d&rsquo;avoir.</p>
<p>Malheureusement, le slot trop court et les questions de l&rsquo;assemblée ne nous ont pas laissé le temps de faire la seconde partie de la mise en pratique. Je retiendrai que la professionnalisation des coachs et les passerelles de plus en plus évidentes entre coach et coach agile annoncent encore de beaux débats entre les personnes qui considèrent que les coachs agile peuvent être des mentors et ceux qui considèrent que cette autre posture d’accompagnement n&rsquo;a pas lieu d&rsquo;être dans l&rsquo;accompagnement agile.</p>
<h3 id="RetoursurleScrumDay2013-#OMG:monéquipefaitsonhakaenKanbanStyle">#OMG : mon équipe fait son haka en Kanban Style</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' target='_blank'><img title='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' src='https://secure.gravatar.com/avatar/0d4fd0e3f035b5626ab9f7f6741bd5af.jpg?s=24' alt='http://www.gravatar.com/0d4fd0e3f035b5626ab9f7f6741bd5af' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/null' target='_blank'><img title='http://blog.xebia.fr/author/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/cfarfra' target='_blank'><img title='http://twitter.com/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/null' target='_blank'>Couthaïer Farfra</a></span></div>
<p>Vous avez sans doute lu l&rsquo;excellent ouvrage de Laurent Morisseau &laquo;&nbsp;Kanban pour l&rsquo;IT&nbsp;&raquo; (si ce n&rsquo;est pas le cas, courez vite l&rsquo;acheter) où il décrit avec pédagogie la force de l&rsquo;utilisation d&rsquo;un Système Kanban dans l&rsquo;amélioration des processus de développement logiciel. Dans cet atelier, Laurent annonce la couleur dès le début &laquo;&nbsp;J&rsquo;ai écrit un livre sur Kanban, d&rsquo;accord, mais maintenant je vais vous expliquer comment l&rsquo;utiliser pour améliorer le processus Scrum&nbsp;&raquo; (à quelque chose près), c&rsquo;est ce qu&rsquo;on appelle du ScrumBan.</p>
<p>Pendant une heure, Laurent Morisseau nous a démontré comment mettre en oeuvre des pratiques Kanban, au sein d&rsquo;un dashboard Scrum, afin d&rsquo;en améliorer le processus de fonctionnement et ainsi éviter les goulets d&rsquo;étranglement et les baisses d&rsquo;activité, dans une démarche de planification du Juste à Temps (JAT). La démonstration des apports de Kanban se fait au travers de ce que Laurent a appelé les 3 &laquo;&nbsp;Scènes de crime&nbsp;&raquo; (entre autres) :</p>
<ul>
<li>Une Story = 1 développeur</li>
<li>Le goulet d&rsquo;étranglement entre les différentes étapes (conception, développement, tests)</li>
<li>Un Product Owner débordé</li>
</ul>
<p>Cette présentation, associée à l&rsquo;aisance de Laurent, a été passionnante, bien que trop courte à mon avis. D&rsquo;autant plus que j&rsquo;ai eu l&rsquo;occasion, avec mon collègue Clément Rochas, de mettre en application ces principes avec succès auprès d&rsquo;un de nos clients.</p>
<p>Si vous souhaitez en savoir plus, je vous propose une série de vidéos de cette présentation.</p>
<div>
<div style="float: left;margin: 10px"></div>
<div style="float: left;margin: 10px"></div>
<div style="float: left;margin: 10px"></div>
</div>
<div>
<div style="float: left;margin: 10px"></div>
<div style="float: left;margin: 10px"></div>
<div style="float: left;margin: 10px"></div>
</div>
<div style="float: left;margin: 10px"></div>
<h3 id="RetoursurleScrumDay2013-BoostervotreSCRUMavecLeanStartUp"><strong>Booster votre SCRUM avec Lean Start Up</strong></h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' target='_blank'><img title='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' src='https://secure.gravatar.com/avatar/c1d0fcafb122081cb6b2ed9ed7a1339b.jpg?s=24' alt='http://www.gravatar.com/c1d0fcafb122081cb6b2ed9ed7a1339b' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bmoitie' target='_blank'><img title='http://blog.xebia.fr/author/bmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bmoitie' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/benjaminmoitie' target='_blank'><img title='http://twitter.com/benjaminmoitie' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/benjaminmoitie' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bmoitie' target='_blank'>Benjamin Moitié</a></span></div>
<p>Très bonne présentation de M. Olivier Lafontan qui, en un peu plus de 45 minutes, a su restituer l&rsquo;essence du lean Start Up.</p>
<p>Après une courte présentation de Scrum, la problématique est posée : &laquo;&nbsp;Scrum nous permet de faire efficacement un logiciel en collaboration avec le Product Owner (priorisation, user story). Est-ce pour autant suffisant pour savoir si nous avons développé le BON logiciel, celui qui apportera la VALEUR attendue par ses futurs utilisateurs ?&nbsp;&raquo;</p>
<p>La recherche de la valeur utilisateur, le Graal des projets en Lean Start Up.</p>
<p>Après une courte présentation des 7 principaux outils Lean Start Up, on reste toujours sur sa faim concernant le &laquo;&nbsp;Customer Developpement&nbsp;&raquo;, pratique qui permet de mieux connaitre ses futurs clients, de découvrir ce que sont leurs problèmes.</p>
<p>Quelques outils furent également rapidement présentés comme l&rsquo;incontournable Lean Canvas, mais également la validation Board de <a href="http://leanstartupmachine.com/" rel="nofollow">leanstartupmachine.com</a> qui permet de dérouler les hypothèses sur les différents incréments du produit.</p>
<p>Cette présentation était donc intéressante pour découvrir le Lean Start Up et connaître sa valeur ajoutée, mais la durée de la présentation ne permettait pas de creuser réellement le sujet.</p>
<p>On ne peut donc parler que d&rsquo;une mise en bouche. Le site <a href="http://leanstartupmachine.com/" rel="nofollow">leanstartupmachine.com</a> permet d&rsquo;approfondir ses connaissances, avec notamment une étude de cas à télécharger.</p>
<h3 id="RetoursurleScrumDay2013-Keynote:CultureHacking ">Keynote : Culture Hacking</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Une Keynote engagée qui nous a présenté 5 &laquo;&nbsp;hacks&nbsp;&raquo; permettant d&rsquo;améliorer la culture de l&rsquo;entreprise et la motivation des équipes tirés en particulier de l&rsquo;expérience de <a href="http://www.zappos.com/" rel="nofollow">Zappos</a> :</p>
<ul>
<li>Hack 1 : la façon dont vous entrez dans la pièce peut affecter la culture</li>
<li><span style="font-size: 10.0pt;line-height: 13.0pt">Hack 2 : il faut savoir détruire quelque chose</span></li>
<li>Hack 3 : votre entreprise n&rsquo;est pas un médicament</li>
<li>Hack 4 : la frustration est une opportunité</li>
<li>Hack 5 : il faut créer des rituels pour donner de l&rsquo;énergie</li>
</ul>
<p>Je suis personnellement resté sur ma faim, car l&rsquo;ensemble de la présentation ne me semble pas adapté à la culture et au contexte français avec son utilisation massive de prestataires extérieurs à l&rsquo;entreprise. De plus, la présentation n&rsquo;expliquait pas les concepts psychologiques de ces hacks. Présenter les concepts fondamentaux, le &laquo;&nbsp;pourquoi&nbsp;&raquo; permettrait de mieux les réadapter à des contextes différents.</p>
<h3 id="RetoursurleScrumDay2013-L'agilitéselonStarcraft2">L&rsquo;agilité selon Starcraft 2</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Le sujet abordé par Christophe Héral était difficile par sa spécificité. Le monde de Starcraft 2 et de l&rsquo;eSport a son vocabulaire et son contexte difficile à retranscrire pour le néophyte. J&rsquo;ai trouvé que la notion de feedback constant était le seul vrai rapport entre l&rsquo;Agilité et le jeu. Un des problèmes de la comparaison est surtout que Starcraft 2 à haut niveau est principalement une activité où on se retrouve seul face à l&rsquo;adversaire alors que les problèmes de l&rsquo;Agilité sont surtout liés à la gestion d&rsquo;une équipe, d&rsquo;un groupe de personnes. Par contre, étant connaisseur du jeu, je pense que la comparaison serait très intéressante avec la stratégie produit voire d&rsquo;entreprise.</p>
<h3 id="RetoursurleScrumDay2013-L'artd'avoirtort">L&rsquo;art d&rsquo;avoir tort</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Dans cette atelier, Laurent Bossavit nous a fait la démonstration par le jeu que nous sommes mauvais pour faire des estimations. Plus précisément, nous ne sommes pas calibrés pour. Pour cela, il nous a fait une petite introduction à la pensée probabiliste. Mais nous n’avons pas à être vexés par ce constat d’échec, car même les experts font très souvent de mauvaises estimations (pour aller plus loin, il faut lire « Expert Political Judgment: How Good Is It? How Can We Know? » de Philip Tetlock). Par exemple, si un expert déclare un événement comme impossible, il a 15% de chances de se produire ; s’il déclare un événement comme certain, il a 27% de chances de ne pas se produire (on voit l’effet de l’optimisme sur les probabilités).</p>
<p>Cependant nous pouvons nous améliorer ! Pour cela, il faut à la fois s’entrainer à faire des estimations, mais aussi à y ajouter notre pourcentage de confiance sur la question puis vérifier et mesurer nos jugements. Pour cela, deux sites peuvent nous aider à nous entrainer : <a href="http://predictionbook.com/" rel="nofollow">http://predictionbook.com/</a> et <a href="http://www.goodjudgmentproject.com/" rel="nofollow">http://www.goodjudgmentproject.com/</a></p>
<h3 id="RetoursurleScrumDay2013-1FeatureOwner,5ProductOwner,5Teams4GreatProducts">1 Feature Owner, 5 Product Owner, 5 Teams 4 Great Products</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Dans cette conférence, Bertrand Dour a pris la métaphore du groupe de rock pour présenter une organisation produit et il revient beaucoup sur l&rsquo;exemple de l&rsquo;organisation mise en place chez <a href="https://dl.dropboxusercontent.com/u/1018963/Articles/HowSpotifyBuildsProducts.pdf" rel="nofollow">Spotify</a>. Une conférence qui a démarré difficilement, le temps de faire comprendre la métaphore. Au final, on en retient surtout qu&rsquo;une organisation traditionnelle avec ses manageurs, son besoin de contrôle, de métriques et sa peur de l&rsquo;inconnu sont difficilement compatibles avec une organisation organique et très agile à la Spotify (le groupe de rock). Pourtant, il faut un porteur de la vision globale, par exemple un chef de produit, qui va organiser les différentes équipes techniques, qui va être garant de la cohérence, mais aussi facilitateur en cas de conflit et organisateur de rétrospectives sur l&rsquo;ensemble des équipes du produit.</p>
<h3 id="RetoursurleScrumDay2013-Identifiezettraitezlessignauxetcomportementsfreinantl'adoptiondel'agilité">Identifiez et traitez les signaux et comportements freinant l&rsquo;adoption de l&rsquo;agilité</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Petit atelier animé par Éric Siber assez sympathique, même si on était beaucoup trop nombreux au départ. L&rsquo;idée était de voter pour des signaux et comportements dans une équipe Agile, décider si c&rsquo;était des problèmes nuisant à l&rsquo;Agilité pour enfin en discuter, définir quels principes de l&rsquo;Agilité et surtout du manifeste Agile, ils remettaient en cause et trouver des solutions. À refaire dans une table ronde ou pourquoi pas une rétrospective !</p>
<h3 id="RetoursurleScrumDay2013-DDD&amp;BDDGames">DDD &amp; BDD Games</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Pour résumer,<a href="http://www.slideshare.net/objetdirect/devoxx-2012-grgory-weinbach-il-n-y-a-pas-de-bon-modle-mtier-12675238" rel="nofollow"> il n&rsquo;y a pas de bons modèles métiers</a> ! Un excellent jeu à découvrir animé par Cyril Martraire qui vous permettra de mieux comprendre la notion de &laquo;&nbsp;Bounded Context&nbsp;&raquo; en DDD et pourquoi il est impossible d&rsquo;unifier la vision de l&rsquo;ensemble des acteurs d&rsquo;une entreprise ou d&rsquo;un produit au sein d&rsquo;un même modèle, sous peine de voir ses objets métiers devenir d&rsquo;énormes listes de champs disparates. En gros, comme dans une démarche UX, il faut se mettre à la place de l&rsquo;utilisateur (le métier ciblé ici) et concevoir le modèle métier en fonction et en se limitant à ce point de vue. La deuxième partie de l&rsquo;exercice avait pour but de nous apprendre l&rsquo;écriture de tests fonctionnels sous forme BDD.</p>
<h3 id="RetoursurleScrumDay2013-Agileappliquéàtoutel'entreprise:Retourd'expériencesurlemarchédupaiementélectronique">Agile appliqué à toute l&rsquo;entreprise : Retour d&rsquo;expérience sur le marché du paiement électronique</h3>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' target='_blank'><img title='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' src='https://secure.gravatar.com/avatar/f23d9dee080a22a6bb65caad9997aced.jpg?s=24' alt='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/lperot' target='_blank'><img title='http://blog.xebia.fr/author/lperot' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/lperot' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/LudovicPEROT' target='_blank'><img title='http://twitter.com/LudovicPEROT' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/LudovicPEROT' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/lperot' target='_blank'>Ludovic Pérot</a></span></div>
<p>Ce REX était animé par <a href="https://twitter.com/BrunoSbille" rel="nofollow">Bruno Sbille</a>, accompagné de son client Frédéric Dujeux. Le REX précédent ayant un peu débordé, ils ont dû aller à l&rsquo;essentiel et faire des coupes pour tenir le timing, un peu dommage. Surtout quand on choisit cette session pour son orateur, car Bruno est excellent à ce jeu-là. Les orateurs nous ont bien expliqué comment la sauce a pris, sans mettre de côté les difficultés et les challenges qu&rsquo;ils ont rencontrés. Nous y avons appris qu&rsquo;ils ont opté pour l&rsquo;approche projet pilote et pas un big bang, que l&rsquo;identification des Scrum Masters et leur accompagnement n&rsquo;a pas été complètement fluide&#8230; Un REX classique, ça manquait un peu de Star Wars (Bruno est un grand fan), mais les orateurs nous ont bien fait découvrir leur parcours de presque deux ans.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/29/retour-sur-le-scrumday-2013/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Paris Groovy &amp; Grails User Group @ Xebia</title>
		<link>http://blog.xebia.fr/2013/04/29/paris-groovy-grails-user-group-xebia/</link>
		<comments>http://blog.xebia.fr/2013/04/29/paris-groovy-grails-user-group-xebia/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 07:52:26 +0000</pubDate>
		<dc:creator>Aurélien Maury</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13782</guid>
		<description><![CDATA[La prochaine édition du Groovy &#38; Grails User Group de Paris se tiendra le 29 mai à 19h30 dans les locaux de Xebia. J&#8217;aurai le plaisir de pouvoir vous parler de ma dernière expérience sur un site grand public basé sur Grails : un service de comparaison de voyages train, avion et voiture à travers [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/04/PGGUG_logo.jpeg" target="_blank"><img width="150" src="http://blog.xebia.fr/wp-content/uploads/2013/04/PGGUG_logo-150x150.jpeg" style="float:right; margin:0 0 10px 10px;" /></a></p>
<p>La prochaine édition du Groovy &amp; Grails User Group de Paris se tiendra le 29 mai à 19h30 dans les locaux de Xebia.</p>
<p>J&rsquo;aurai le plaisir de pouvoir vous parler de ma dernière expérience sur un site grand public basé sur Grails : un service de comparaison de voyages train, avion et voiture à travers l&rsquo;Europe.</p>
<p>Je vous montrerai rapidement l&rsquo;architecture générale, les différents backends en jeu et la difficulté à collecter et agréger les résultats de chacun. Ensuite je porterai votre attention sur l&rsquo;utilisation de GPars et des Actors.</p>
<p>Vous saurez comment cette librairie a aidé à résoudre les problèmes de concurrence sans compromettre les performances. Vous découvrirez le monde merveilleux de l&rsquo;organisation d&rsquo;Actors, du message flow, du dimensionnement de ThreadPool et les stratégies de tests associées.</p>
<p>Cette étude de cas de la Vraie Vie ® vous révelera le potentiel de ce superbe outil : GPars vs Wild</p>
<p><a href="http://www.meetup.com/Paris-Groovy-Grails/events/115745562/" rel="nofollow">Réservez sur Meetup.</a></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/29/paris-groovy-grails-user-group-xebia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/</link>
		<comments>http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 07:00:30 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[EmberJS]]></category>
		<category><![CDATA[Java 8]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[Obama]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13764</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité Agilité - Coaching ou mentoring ? (Par Clément Rochas) Comment le pragmatisme de l&#39;équipe IT d&#39;Obama a surclassé celle de Romney (Par Ludovic Pérot) 16 moyens de torturer vos développeurs (Par Yannick Grenzinger) Web Sortie de jQuery 2.0 (Par Benoit Lemoine) Modulariser votre projet [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Agilit%C3%A9-%C2%A0Coachingoumentoring%3F">Agilité - Coaching ou mentoring ?</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/crochas" target="_blank">Clément Rochas</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Commentlepragmatismedel%27%C3%A9quipeITd%27Obamaasurclass%C3%A9celledeRomney">Comment le pragmatisme de l&#39;équipe IT d&#39;Obama a surclassé celle de Romney</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/lperot" target="_blank">Ludovic Pérot</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-16moyensdetorturervosd%C3%A9veloppeurs">16 moyens de torturer vos développeurs</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-SortiedejQuery2.0">Sortie de jQuery 2.0</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/blemoine" target="_blank">Benoit Lemoine</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-ModulariservotreprojetAngular">Modulariser votre projet Angular</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Ember.jsRC3arrivedanslesbacs">Ember.js RC3 arrive dans les bacs</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/mbreton" target="_blank">Mathieu Breton</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-OraclerepousseunenouvellefoislasortiedeJava8">Oracle repousse une nouvelle fois la sortie de Java 8</a> <span class="c2w-toc-author">(Par Eric Briand)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-Exp%C3%A9rienceUtilisateur">Expérience Utilisateur</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-UXDesignforstartup">UX Design for startup</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/#RevuedePresseXebia-UXetAgilit%C3%A9">UX et Agilité</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-Agilité- Coachingoumentoring?">Agilité - Coaching ou mentoring ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' target='_blank'><img title='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' src='https://secure.gravatar.com/avatar/51b7d6d805de7b0525d2d8fbb7b4aa0a.jpg?s=24' alt='http://www.gravatar.com/51b7d6d805de7b0525d2d8fbb7b4aa0a' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/crochas' target='_blank'><img title='http://blog.xebia.fr/author/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/crochas' target='_blank'><img title='http://twitter.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/crochas' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/crochas' target='_blank'>Cl&#233;ment Rochas</a></span></div>
<p>Dans scrum, pour ne citer que cette méthode, il n&rsquo;y a pas de coaches! Le garant de la méthode est le scrum master. Pourtant de plus en plus on fait appel à lui car la conduite du changement nécessite souvent un peu d&rsquo;abstraction. Si vous discutez avec un coach professionnel, vous vous rendrez compte que l&rsquo;on attend souvent d&rsquo;un coach agile des actions que se refuse à faire un coach. Dans cet <a href="http://www.focusrh.com/tribunes/coaching-ou-mentoring.html" rel="nofollow">article</a> vous trouverez les limites que se fixent les coaches et les mentors.</p>
<p>Extrait:</p>
<p><em><span style="color: rgb(0,0,0);">Un mentor n’est donc pas </span>neutre<span style="color: rgb(0,0,0);"> (mais le coach l’est-il vraiment ?), bien au contraire, il y a de l’affection entre le mentor et son « protégé ». Car le propre du mentor c’est de protéger l’autre. Le mot est fort, mais c’est bien de cela qu’il s’agit. Il « veille sur » jusqu’à l’autonomie de la personne. Si le coach met à l’épreuve le coaché, rédige un contrat tripartite, définit un plan en « x » séances, pose des questions « percutantes », met en avant les contradictions, laisse le choix, ne donne ni conseil ni ne forme (c’est en tout cas ce que les principaux écrits français avancent), le mentor quant à lui, a pour intention d’accueillir, de guider, d’enseigner, d’entraîner, d’être un modèle. Le mentor présente des défis au </span>protégé<span style="color: rgb(0,0,0);"> et lui fournit l’occasion de faire ses preuves.</span></em></p>
<p> </p>
<h4 id="RevuedePresseXebia-Commentlepragmatismedel&#39;équipeITd&#39;ObamaasurclassécelledeRomney">Comment le pragmatisme de l&rsquo;équipe IT d&rsquo;Obama a surclassé celle de Romney</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' target='_blank'><img title='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' src='https://secure.gravatar.com/avatar/f23d9dee080a22a6bb65caad9997aced.jpg?s=24' alt='http://www.gravatar.com/f23d9dee080a22a6bb65caad9997aced' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/lperot' target='_blank'><img title='http://blog.xebia.fr/author/lperot' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/lperot' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/LudovicPEROT' target='_blank'><img title='http://twitter.com/LudovicPEROT' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/LudovicPEROT' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/lperot' target='_blank'>Ludovic P&#233;rot</a></span></div>
<p>Cet article est rangé dans la catégorie &lsquo;agilité&rsquo; de notre revue de presse, mais il balaie beaucoup de sujets. <a href="http://arstechnica.com/information-technology/2012/11/how-team-obamas-tech-efficiency-left-romney-it-in-dust/" rel="nofollow">How Team Obama&rsquo; tech efficiency left Romney IT in dust</a> décrit les choix forts de l&rsquo;équipe IT d&rsquo;Obama (cloud, open source, open architecture, devOps). Cette stratégie leur a permis de présenter une facture presque 15 millions de dollars inférieure que celle de Romney dans leurs budgets de campagne respectifs. L&rsquo;article donne l&rsquo;ensemble des coûts IT dans la campagne du futur vainqueur, un éclairage rare et très factuel. A quand le même article pour des campagnes françaises ? </p>
<h4 id="RevuedePresseXebia-16moyensdetorturervosdéveloppeurs">16 moyens de torturer vos développeurs</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Un excellent article qui vous donne <a href="http://www.infoworld.com/d/application-development/16-ways-torture-developers-215773" rel="nofollow">16 astuces pour torturer vos développeurs</a> du plus classique Windows, son antivirus qui rend la machine inutilisable, être dans l&rsquo;équipe de maintenance, le management par la prise d&rsquo;otage aux plus extremes comme bloquer toutes les librairies tiers sans des mois de validation, travailler obligatoirement dans une VM et même les daily stand up de 45 min!  </p>
<h3 id="RevuedePresseXebia-Web"><span style="font-size: 1.4em;">Web</span></h3>
<h4 id="RevuedePresseXebia-SortiedejQuery2.0">Sortie de jQuery 2.0</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/8847b14eee72162957c0f4c0d462b8ee' target='_blank'><img title='http://www.gravatar.com/8847b14eee72162957c0f4c0d462b8ee' src='https://secure.gravatar.com/avatar/8847b14eee72162957c0f4c0d462b8ee.jpg?s=24' alt='http://www.gravatar.com/8847b14eee72162957c0f4c0d462b8ee' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/blemoine' target='_blank'><img title='http://blog.xebia.fr/author/blemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/blemoine' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/benoit_lemoine' target='_blank'><img title='http://twitter.com/benoit_lemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/benoit_lemoine' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/blemoine' target='_blank'><img title='http://github.com/blemoine' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/blemoine' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/blemoine' target='_blank'>Benoit Lemoine</a></span></div>
<p>La tant attendue <a href="http://blog.jquery.com/2013/04/18/jquery-2-0-released/" rel="nofollow">version 2.0 de jQuery</a> est enfin sortie ! Comme prévu, cette version marque un tournant dans la vie de la célèbre librairie Javascript en cessant le support des vieux navigateurs que sont Internet explorer 6, 7 et 8. Mais pas de panique, l&rsquo;équipe de jQuery continue de maintenir la branche 1.9 en parallèle  de la version 2.0, de façon à pouvoir utiliser les éventuelles nouvelles API sur les anciens navigateurs. L&rsquo;arrêt du support des vieilles versions d&rsquo;Internet Explorer a permis une réduction de la taille de la librairie d&rsquo;environ 12%, ainsi que l&rsquo;amélioration globale des performances de la librairie. Autre nouveauté, les build personnalisés sont maintenant bien mieux découpés,  et permettent le téléchargement d&rsquo;une version de jQuery contenant, ou non, 12 module différents.</p>
<p>Attention cependant, jQuery 1.9 et 2.0 partageant les même API, si vous utilisez toujours une version plus ancienne, il peut être nécessaire de migrer vos applications. Pour vous aider, vous pouvez toujours utiliser le <a href="https://github.com/jquery/jquery-migrate/#readme" rel="nofollow">plugin migrate</a>.</p>
<h4 id="RevuedePresseXebia-ModulariservotreprojetAngular">Modulariser votre projet Angular</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>Avec le gain de popularité du framework angular, les best practices commencent à émerger. <a href="http://codingsmackdown.tv/blog/2013/04/19/angularjs-modules-for-great-justice/" rel="nofollow">Cet article</a> décrit comment structurer et organiser nos projets en fonction de leur taille. <span style="font-size: 10.0pt;line-height: 13.0pt;">Les projets angular peuvent être divisés en modules (un peu comme un projet Maven). Tout comme sur un projet Java, les modules permettent de regrouper vos composants (les services, controllers, directives et filtres) par fonctionnalités ou par couches : structurant ainsi votre application.</span></p>
<h4 id="RevuedePresseXebia-Ember.jsRC3arrivedanslesbacs"><span style="color: rgb(0,0,0);font-size: medium;"><span style="line-height: normal;"><strong>Ember.js RC3 arrive dans les bacs</strong></span></span></h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' target='_blank'><img title='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' src='https://secure.gravatar.com/avatar/edb702be0a60b6d21c9dc78d20b13fcf.jpg?s=24' alt='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/mbreton' target='_blank'><img title='http://blog.xebia.fr/author/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/mbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/matbreton' target='_blank'><img title='http://twitter.com/matbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/matbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/mbreton' target='_blank'><img title='http://github.com/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/mbreton' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/mbreton' target='_blank'>Mathieu Breton</a></span></div>
<p>Cette nouvelle version du Framework MVC JS à la braise sort moins d’un mois après la dernière release candidate. On y retrouve une amélioration des performances via l’agglomération du buffering et de l’insertion des vues enfants contiguës, la suppression asynchrone des objets ( afin de prévenir les désabonnements massifs d&rsquo;écouteurs de grosse grappe d&rsquo;objet ) et un allégement de l’empreinte mémoire pendant la phase de rendue des vues.</p>
<p>Ce millésime marque aussi le début d’un chantier d’amélioration de la testabilité des applications Ember avec en autre, des corrections et améliorations de la méthode <strong><em>App.reset</em></strong> qui sert à ré-initialisaser le context d’une application Ember comme si vous veniez de faire un rechargement de votre page. Dans le même esprit le pipe de continious delivry d’Ember, géré par <a href="https://travis-ci.org/emberjs/ember.js" rel="nofollow">Travis</a>, expose désormais les derniers builds à l’adresse <a href="http://builds.emberjs.com/" rel="nofollow">builds.emberjs.com</a>.</p>
<p>Autre nouveauté plus inattendue, la transition des champs de formulaire d’un format helper <strong><em>view</em></strong> classique vers des helpers <strong><em>input</em></strong> plus générique. Exemple :</p>
<p>Avant :</p>
<pre class="brush: java; title: ; notranslate">{{view Ember.TextField valueBinding=&quot;name&quot;}}
{{view Ember.Checkbox checkedBinding=&quot;isActive&quot;}}
{{view Ember.TextArea valueBinding=&quot;name&quot;}}</pre>
<p>Maintenant :</p>
<pre class="brush: java; title: ; notranslate">{{input value=name}}
{{input checked=isActive}}
{{textarea value=name}}</pre>
<p> </p>
<p>La team Ember conseil l’utilisation des ces nouveaux helpers plus “dynamiques”.</p>
<p>Plus de détails : <a href="http://emberjs.com/blog/2013/04/21/ember-1-0-rc3.html" rel="nofollow">http://emberjs.com/blog/2013/04/21/ember-1-0-rc3.html</a></p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-OraclerepousseunenouvellefoislasortiedeJava8">Oracle repousse une nouvelle fois la sortie de Java 8</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' target='_blank'><img title='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' src='https://secure.gravatar.com/avatar/b8cac58f832026793ff351fdd96a40eb.jpg?s=24' alt='http://www.gravatar.com/b8cac58f832026793ff351fdd96a40eb' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ebriand' target='_blank'><img title='http://blog.xebia.fr/author/ebriand' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ebriand' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ebriand' target='_blank'>Eric Briand</a></span></div>
<p>Après les nombreux déboires d&rsquo;Oracle en matière de sécurité ces derniers temps avec les nombreuses failles du framework Java, Oracle a décidé de repousser la release de Java 8. Dans un <a href="http://mreinhold.org/blog/secure-the-train" rel="nofollow">long billet</a> de blog, Mark Reinhold, l&rsquo;architecte en chef du projet, explique les raisons de ce choix :</p>
<ul>
<li>Ne pas répéter les erreurs du passé : Ne pas aller trop vite pour se retrouver une nouvelle fois confronté a une suite de problèmes de sécurité.</li>
<li>Ne pas enlever le projet Lambda de la release : Enlever ce projet de la release reviendrai à le faire sortir en 2016 (si le rythme d&rsquo;une release tous les deux ans est maintenu) et ferai perdre beaucoup de se son intérêt à cette release du framework.</li>
<li style="text-align: left;">Prendre le temps de passer en revue les évolutions
</li>
</ul>
<p style="text-align: left;">Mark parle aussi de la possibilité de repousser la release encore plus pour permettre au projet <a href="http://openjdk.java.net/projects/jigsaw/" rel="nofollow">Jigsaw</a> d&rsquo;être dans la version 8 du framework java mais il semblerait que le retard causé par l&rsquo;introduction de ce projet serait bien trop conséquent. La sortie de Java 8 est maintenant <a href="http://openjdk.java.net/projects/jdk8/" rel="nofollow">prévue</a> pour le mois de mars de l&rsquo;année 2014.</p>
<h3 id="RevuedePresseXebia-ExpérienceUtilisateur"><span style="font-size: 1.4em;">Expérience Utilisateur</span></h3>
<h4 id="RevuedePresseXebia-UXDesignforstartup">UX Design for startup</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Un <a href="http://uxpin.com/upload/ux-design-for-startups-marcin-treder.pdf" rel="nofollow">excellent ebook</a> d&rsquo;une centaine de pages sur l&rsquo;UX design dans le cadre d&rsquo;une startup mais surement aussi applicable sur beaucoup de produits d&rsquo;entreprise. On y parle de Lean Canvas, du besoin de connaître vos utilisateurs, de méthodes UX comme le prototypage ou l&rsquo;utilisation des métriques et enfin liste une série d&rsquo;outils. Cet ebook est aussi une excellente lecture pour toute personne s&rsquo;intéressant à une méthodologie type Lean Startup.</p>
<h4 id="RevuedePresseXebia-UXetAgilité">UX et Agilité</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Même si Agilité et Expérience Utilisateur adressent tous deux les problèmes qui existent dans le développement logiciel traditionnel pour offrir une meilleur solution pour l&rsquo;utilisateur final, il semble parfois difficile de les faire cohabiter. L&rsquo;article &quot;<a href="http://uxmag.com/articles/ux-and-agile-tying-the-knot" rel="nofollow"><em>UX and Agile: tying the knot</em></a>&quot; de UX Magazine revient sur cette question et nous offre quelques éléments de réponse. Nous devrions mettre en place des méthodes adaptatives et flexible (Agile, Lean) et il faudrait se recentrer sur l&rsquo;utilisateur en réinterprétant le célèbre triangle du management de projet (le planning, le coût et le scope) pour trouver un équilibre entre:</p>
<ul>
<li>est-ce viable? peut-on se permettre de la  faire ?</li>
<li>est-ce faisable? peut-on le construire ?</li>
<li>est-ce désirable? est-ce que l&rsquo;utilisateur sera intéressé ?</li>
</ul>
<p>Point intéressant, l&rsquo;article nous dit que faire venir un excellent UX designer ou Scrum Master ne résoudra pas tous les problèmes. Il faut que l&rsquo;organisation évolue et comprenne que l&rsquo;objectif de l&rsquo;entreprise et sa vision font partie de l&rsquo;expérience utilisateur globale.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/23/revue-de-presse-xebia-2013-17/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Xebia à Mix-IT 2013</title>
		<link>http://blog.xebia.fr/2013/04/22/xebia-a-mix-it-2013/</link>
		<comments>http://blog.xebia.fr/2013/04/22/xebia-a-mix-it-2013/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 14:25:00 +0000</pubDate>
		<dc:creator>Nicolas Jozwiak</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[MixIT]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13759</guid>
		<description><![CDATA[Cette année, la conférence Mix-IT se tiendra les Jeudi 25 et Vendredi 26 Avril. Basée à Lyon, elle est organisée par le Lyon JUG et le Club Agile Rhône-Alpes. Plus de 50 speakers animeront pendant ces deux jours des ateliers et des conférences. On y parlera notamment d’agilité, de langages (Scala, Kotlin), de Web et de NoSQL. [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/04/mixit.jpg" target="_blank"><img style="float: right; margin: 0 0 10px 10px;" alt="" src="http://blog.xebia.fr/wp-content/uploads/2013/04/mixit-300x76.jpg" width="300" /></a>Cette année, la conférence <a href="http://www.mix-it.fr/" rel="nofollow">Mix-IT</a> se tiendra les Jeudi 25 et Vendredi 26 Avril. Basée à Lyon, elle est organisée par le <a href="http://www.lyonjug.org/" rel="nofollow">Lyon JUG</a> et le <a href="http://www.clubagilerhonealpes.org/" rel="nofollow">Club Agile Rhône-Alpes</a>. Plus de 50 speakers animeront pendant ces deux jours des ateliers et des conférences.</p>
<p>On y parlera notamment d’agilité, de langages (Scala, Kotlin), de Web et de NoSQL.</p>
<p><strong>Xebia participe à cet événement en animant 3 slots :</strong></p>
<ul>
<li><a href="http://www.mix-it.fr/session/221/scrum-metal-jacket" rel="nofollow">Scrum Metal Jacket</a> par <a href="http://blog.xebia.fr/author/jlrigau" rel="nofollow">Jean-Louis Rigau</a> et <a href="http://blog.xebia.fr/author/njozwiak" rel="nofollow">Nicolas Jozwiak</a></li>
<li><a href="http://www.mix-it.fr/session/248/comment-tester-une-application-html5-" rel="nofollow">Comment tester une application HTML 5 ?</a> par <a href="http://blog.xebia.fr/author/jlmorlhon" rel="nofollow">Jean Laurent de Morlhon</a></li>
<li><a href="http://www.mix-it.fr/session/205/c-est-le-moment-de-se-lancer-dans-s-cas-la-" rel="nofollow">C’est le moment de se lancer dans s’cas la !</a> par <a href="http://blog.xebia.fr/author/jhelou" rel="nofollow">Jean Helou</a> (avec la complicité de Ludwine Probst et Mathieu Chataigner)</li>
</ul>
<p>Vous pouvez découvrir le programme complet <a href="http://www.mix-it.fr/mixit13/planning" rel="nofollow">ici</a>.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/22/xebia-a-mix-it-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La conférence TechTrends 2013</title>
		<link>http://blog.xebia.fr/2013/04/19/la-conference-techtrends-2013/</link>
		<comments>http://blog.xebia.fr/2013/04/19/la-conference-techtrends-2013/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 09:48:44 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[TechTrends]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13748</guid>
		<description><![CDATA[TechTrends, késako ? Parmi les valeurs de Xebia, &#34;Sharing Knowledge&#34; a été appliquée de nouveau au travers de son projet &#34;TechTrends&#34;. Mardi 16 avril 2013, des intervenants de hauts rangs ont présenté à un public de cinquante décideurs techniques les tendances technologiques, tirées du savoir-faire et de l&#8217;expérience de nos 80 consultants, de nos CTOs et [...]]]></description>
				<content:encoded><![CDATA[
<h1 id="LaconférenceTechTrends2013-TechTrends,késako?">TechTrends, késako ?</h1>
<p><span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Parmi les valeurs de Xebia, &quot;Sharing Knowledge&quot; a été appliquée de nouveau au travers de son projet &quot;TechTrends&quot;.</span></p>
<p><span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Mardi 16 avril 2013, des intervenants de hauts rangs ont présenté à un public de cinquante décideurs techniques les tendances technologiques, tirées du savoir-faire et de l&rsquo;expérience de nos 80 consultants, de nos CTOs et de notre président, lors de la première conférence des TechTrends. </span></p>
<p><span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Cette matinée avait pour ambition de présenter un aperçu global des sujets approfondis dans le magasine des TechTrends 2013.</span></p>
<h1 id="LaconférenceTechTrends2013-Lesspeakers">Les speakers</h1>
<p>Les tendances technologiques de demain ont été présentées par xebians qui travaillent au quotidien au coeur des problématiques abordées :</p>
<ul>
<li style="text-align: left;">Thibaud Cavin, responsable mobilité, &quot;l&rsquo;informatique de demain sera mobile ou ne sera pas&quot; ;</li>
<li style="text-align: left;">Jean-Laurent de Morlhon, CTO, &quot;le Web remet en cause notre héritage informatique&quot; et &quot;l&rsquo;agilité, c&rsquo;est un peu tous les jours&quot; ;</li>
<li style="text-align: left;">Pablo Lopez, CTO, &quot;l&rsquo;infrastructure de l&rsquo;entreprise est en profonde mutation&quot; et &quot;les données valent de l&rsquo;or, il est temps de les exploiter&quot; ;</li>
<li style="text-align: left;">Luc Legardeur, président, a partagé son expérience manageriale et les clés de la réussite du projet TechTrends.</li>
</ul>
<div align="center">
<div style="width:425px" id="__ss_19068861">
    <iframe src="http://www.slideshare.net/slideshow/embed_code/19068861" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"><br />
    </iframe>
  </div>
</div>
<h1 id="LaconférenceTechTrends2013-Percevoirlefutur" style="text-align: left;">Percevoir le futur</h1>
<p>Xebia se propose de publier de façon trimestrielle un magasine spécialisé sur un de ses piliers (Agilité, Big Data, Infrastructure, Langage, Mobile, Web). Il sera possible de s&rsquo;abonner, afin de se tenir en permanence au fait des évolutions perçues par les professionnels compétents que nous comptons dans nos rangs.</p>
<p>Actuellement, il vous est possible de télécharger le document via le site : <a href="http://techtrends.xebia.fr/" rel="nofollow">http://techtrends.xebia.fr/</a>. </p>
<p>D&rsquo;autres évènements d&rsquo;échange autour de ces sujets seront organisés, nous espérons vous y voir nombreux. </p>
<p>Ci-joint, la présentation de la conférence :</p>
<div align="center">
<div style="width:425px" id="__ss_19067565">
    <iframe src="http://www.slideshare.net/slideshow/embed_code/19067565" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"><br />
    </iframe>
  </div>
</div>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/19/la-conference-techtrends-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le TechTrends est disponible !</title>
		<link>http://blog.xebia.fr/2013/04/17/le-techtrends-est-disponible/</link>
		<comments>http://blog.xebia.fr/2013/04/17/le-techtrends-est-disponible/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 13:19:11 +0000</pubDate>
		<dc:creator>Luc Legardeur</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[TechTrends]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13724</guid>
		<description><![CDATA[Le monde des nouvelles technologies évolue de plus en plus vite et apporte chaque année son lot d’usages nouveaux et d’innovations, tous plus prometteurs les uns que les autres. Cependant, cette foison de nouveaux concepts technologiques et méthodologiques s’accompagne d’un dilemme. Il s’agira de choisir entre expérimenter, adopter (ou non) en différenciant le mainstream de [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://techtrends.xebia.fr/"><img src="http://blog.xebia.fr/wp-content/uploads/2013/04/packshot-techtrends.png" alt="packshot-techtrends" width="196" height="270"style="float:right; margin:0 0 10px 10px;"/></a></p>
<p><strong>Le monde des nouvelles technologies</strong> évolue de plus en plus vite et apporte chaque année son lot d’usages nouveaux et d’innovations, tous plus prometteurs les uns que les autres.</p>
<p>Cependant, cette foison de <strong>nouveaux concepts</strong> technologiques et méthodologiques s’accompagne d’un dilemme. Il s’agira de choisir entre expérimenter, adopter (ou non) en différenciant le mainstream de l’effet de mode.</p>
<p>L’une des valeurs fondatrices chez Xebia est <strong>« Sharing Knowledge »</strong>.</p>
<p>C’est donc avec grand plaisir que nous vous présentons sur notre <a href="http://techtrends.xebia.fr/" title="TechTrends">site dédié</a> la première version de notre TechTrends, synthèse du savoir-faire de nos 80 consultants français qui, en 2012, ont passé plus de 880 jours en R&#038;D dans le cadre de nos <strong><a href="http://blog.xebia.fr/tag/xke/" title="Xebia Knwoledge Exchange">XKE</a> (Xebia Knowledge Exchange)</strong>, organisé <strong>50 <a href="http://blog.xebia.fr/category/tech-events/" title="TechEvents">TechEvents</a></strong> avec les éditeurs et acteurs de notre communauté et expérimenté les technologies dont nous vous parlons dans ce document.</p>
<p>Organisé en quatre thèmes (<strong>Architectures Orientées Web, Infrastructure d’entreprises, Langages de la JVM and Friends, Agilité and Craftsmanship</strong>), ce document vous propose également deux études plus poussées dans des domaines qui révolutionnent et continueront de révolutionner l’IT à l’avenir : <strong>Big Data</strong> et les <strong>applications mobiles d’entreprise</strong>.</p>
<p><em>Le TechTrends est un document à destination de toutes celles et ceux qui doivent opérer des choix structurants pour leur IT et souhaitent bénéficier du retour d’expérience terrain de ceux qui ont déjà expérimenté les technologies d’aujourd’hui et de demain.</em></p>
<p>Nous espérons qu’il vous guidera dans les décisions importantes que vous aurez à prendre.</p>
<p>Nous vous en souhaitons bonne lecture et rendez-vous en septembre pour le prochain numéro dédié au Web.</p>
<p><a href="http://techtrends.xebia.fr/" title="Site TechTrends">Télécharger un exemplaire du TechTrends</a></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/17/le-techtrends-est-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/</link>
		<comments>http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 08:00:54 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Cascading]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[JPA 2]]></category>
		<category><![CDATA[Kano]]></category>
		<category><![CDATA[Lingual]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Microbenchmark]]></category>
		<category><![CDATA[Mobilité]]></category>
		<category><![CDATA[MoSCoW]]></category>
		<category><![CDATA[Scrum Day]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13699</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité The Battle : Priorisation using MoSCoW vs Kano Analysis (Par Couthaïer Farfra) 5 raisons de célébrer ses erreurs au travail (Par Clément Rochas) Web Browser Diet (Par Yannick Grenzinger) Afficher une page mobile en moins d&#39;une seconde (Par Florent Le Gall) Le coin [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-TheBattle%3APriorisationusingMoSCoWvsKanoAnalysis">The Battle : Priorisation using MoSCoW vs Kano Analysis</a> <span class="c2w-toc-author">(Par Couthaïer Farfra)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-5raisonsdec%C3%A9l%C3%A9brerseserreursautravail">5 raisons de célébrer ses erreurs au travail</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/crochas" target="_blank">Clément Rochas</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-BrowserDiet">Browser Diet</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Afficherunepagemobileenmoinsd%27uneseconde">Afficher une page mobile en moins d&#39;une seconde</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/flegall" target="_blank">Florent Le Gall</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Lecoindelatechnique-Lesnouveaut%C3%A9sdeJPA2.1">Les nouveautés de JPA 2.1</a> <span class="c2w-toc-author">(Par Jean-Eudes Couignoux)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-JavaMicrobenchmarkHarness">Java Microbenchmark Harness</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/plaporte" target="_blank">Pierre Laporte</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/#RevuedePresseXebia-Lingual%3AuneinterfaceSQLpourCascading">Lingual : une interface SQL pour Cascading</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/bdechoux" target="_blank">Bertrand Dechoux</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité">Agilité</h3>
<h4 id="RevuedePresseXebia-TheBattle:PriorisationusingMoSCoWvsKanoAnalysis">The Battle : Priorisation using MoSCoW vs Kano Analysis</h4>
<div class="c2w-author"><div class="c2w-author-icons"></div><span class='c2w-author-name'>Par Coutha&#239;er Farfra</span></div>
<p>Lors d&rsquo;une récente formation j&rsquo;ai eu à décrire le modèle Kano, outil parmi les pratiques Agiles d&rsquo;aide à la priorisation des besoins et j&rsquo;avoue être plus à l&rsquo;aise avec la méthode MoSCoW (Must have ; Should have ; Could have ; Won&rsquo;t have), dont je trouve l&rsquo;approche plus assimilable par des porteurs du besoin métier. </p>
<p>J&rsquo;ai eu l&rsquo;occasion d&rsquo;échanger sur ce sujet avec Gilles Mantel (Coach Agile Xebia et membre de la FSUG) dont les explications du fonctionnement de Kano me sont alors parues très claires et pertinentes.</p>
<p>Aujourd&rsquo;hui je vous propose de vous faire votre propre opinion, au travers de 2 vidéos, décrivant pour l&rsquo;une la méthode MoSCoW (du site <a href="http://www.agileacademy.com.au/agile" rel="nofollow">Agile Academy</a>) et l&rsquo;autre le modèle Kano.</p>
<div>
<table>
<tbody>
<tr>
<td colspan="2" style="text-align: center"><strong>Battle MoSCoW vs Kano</strong></td>
</tr>
<tr>
<th style="text-align: center;">A ma gauche MoSCoW</th>
<th style="text-align: center;">A ma droite Kano</th>
</tr>
<tr>
<td><p><a href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/"><em>Cliquer ici pour voir la vidéo.</em></a></p></td>
<td><p><a href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/"><em>Cliquer ici pour voir la vidéo.</em></a></p></td>
</tr>
</tbody>
</table>
</div>
<p>Bonne lecture et n&rsquo;hésitez pas à me faire part de vos opinions sur le sujet!</p>
<h4 id="RevuedePresseXebia-5raisonsdecélébrerseserreursautravail">5 raisons de célébrer ses erreurs au travail</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/crochas' target='_blank'><img title='http://blog.xebia.fr/author/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/crochas' target='_blank'><img title='http://twitter.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/crochas' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/crochas' target='_blank'><img title='http://github.com/crochas' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/crochas' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/crochas' target='_blank'>Cl&#233;ment Rochas</a></span></div>
<p>Dans cet <a href="http://positivesharing.com/2010/06/top-5-reasons-to-celebrate-mistakes-at-work/" rel="nofollow">article</a> de 2010 mais toujours d&rsquo;actualité, Alexander Kjerulf commence par citer Zappos, l&rsquo;entreprise dont le nom était sur toutes les lèvres la semaine dernière au <a href="http://www.scrumday.fr/" rel="nofollow">scrumday</a> après la keynote de Robert Richman. Il donne ensuite 5 raisons de célébrer ses erreurs au travail!</p>
<ol>
<li>Quand vous célébrez vos erreurs, vous apprenez de ces dernières;</li>
<li>Vous ne perdez plus votre temps à couvrir vos arrières;</li>
<li>Quand les erreurs sont célébrées, vous renforcez votre créativité et votre innovation;</li>
<li>Les failles ouvrent souvent de nouveaux horizons;</li>
<li>Quand vous célébrez vos erreurs, vous en faites moins!</li>
</ol>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-BrowserDiet">Browser Diet</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>Un guide des performances front-end très complet et efficace qui va du javascript/jquery jusqu&rsquo;aux sélecteurs CSS en passant par les stratégies de chargement de fichier et la compression des images:</p>
<p><a href="http://browserdiet.com/" rel="nofollow">http://browserdiet.com/</a></p>
<h4 id="RevuedePresseXebia-Afficherunepagemobileenmoinsd&#39;uneseconde">Afficher une page mobile en moins d&rsquo;une seconde</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/flegall' target='_blank'><img title='http://blog.xebia.fr/author/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/flegall' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/null' target='_blank'><img title='http://twitter.com/null' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/null' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/flegall' target='_blank'><img title='http://github.com/flegall' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/flegall' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/flegall' target='_blank'>Florent Le Gall</a></span></div>
<p>Un talk très instructif donné par Ilya Grigorik (ingénieur chez Google).</p>
<ul>
<li>Pourquoi 1 seconde ? C&rsquo;est le temps maximum qu&rsquo;un utilisateur mobile passera à attendre le chargement d&rsquo;une page sans penser à autre chose.</li>
<li>Pourquoi est-ce difficile ? Les réseaux mobiles ont une latence beaucoup plus élevée que les réseaux filaires, afficher une page web nécessite très souvent plusieurs requêtes.</li>
<li>
    Comment y arriver ? </p>
<ul>
<li>Une seule requête HTTP par page.</li>
<li>Inliner le contenu essentiel à la page. </li>
<li>Reporter le chargement du contenu non-essentiel dans d&rsquo;autres requêtes HTTP.</li>
</ul>
</li>
</ul>
<p>Le talk en video :</p>
<p><a href="http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/"><em>Cliquer ici pour voir la vidéo.</em></a></p>
<p>Les slides : <a href="http://www.igvita.com/slides/2013/breaking-1s-mobile-barrier.pdf" rel="nofollow">http://www.igvita.com/slides/2013/breaking-1s-mobile-barrier.pdf</a></p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-Lecoindelatechnique-LesnouveautésdeJPA2.1">Les nouveautés de JPA 2.1</h4>
<div class="c2w-author"><div class="c2w-author-icons"></div><span class='c2w-author-name'>Par Jean-Eudes Couignoux</span></div>
<p>Pour les inconditionnels des ORM, Red Hat a récemment publié la version 4.3.0.Beta1 de son très populaire framework Hibernate. Cette version apporte le support de JPA 2.1 (spécification de JEE7 pour gérer la persistance des données), et nous donne donc l&rsquo;occasion de faire un point sur les évolutions futures de la norme :</p>
<ul>
<li>le support des procédures stockées (plus de détails dans cet article : <a href="http://relation.to/Bloggers/CallableStatementSupport" rel="nofollow">http://relation.to/Bloggers/CallableStatementSupport</a>)</li>
<li>la possibilité de générer des requêtes de mise en jour et de suppression de données via l&rsquo;API criteria (UPDATE et DELETE)</li>
<li>de nouveaux mots clefs dans la syntaxe JPQL : <em>FUNCTION</em> pour utiliser directement les fonctions du SGBD, <em>ON</em> pour définir des critères supplémentaires pour les jointures et <em>TREAT</em> qui permet d&rsquo;utiliser des propriétés d&rsquo;une sous classe de l&rsquo;entité pour une jointure ou une clause where.</li>
<li>la possibilité d&rsquo;injecter un entityManager en mode &quot;UNSYNCHRONIZED&quot;. Celui-ci n&rsquo;appellera pas la méthode flush à moins d&rsquo;avoir rejoint explicitement une transaction (entityManager.joinTransaction()). Ceci permet de modifier des entités sans que les modifications soit sauvegardées en base de données.</li>
</ul>
<h4 id="RevuedePresseXebia-JavaMicrobenchmarkHarness">Java Microbenchmark Harness</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/plaporte' target='_blank'><img title='http://blog.xebia.fr/author/plaporte' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/plaporte' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/pingtimeout' target='_blank'><img title='http://twitter.com/pingtimeout' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/pingtimeout' width='24' height='24' /></a><a class='c2w-author-icon' href='http://www.pingtimeout.fr' target='_blank'><img title='http://www.pingtimeout.fr' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-generic.png' alt='http://www.pingtimeout.fr' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/plaporte' target='_blank'>Pierre Laporte</a></span></div>
<p>Effectuer des tests de performance demande beaucoup de rigueur. Il en faut encore plus lorsqu&rsquo;il s&rsquo;agit de microbenchmarks, destinés à mesurer l&rsquo;efficacité d&rsquo;une méthode ou d&rsquo;une classe.</p>
<p>Pour aider les testeurs à faire des tests probants et faire face à un grand nombre de microbenchmarks erronés sur internet, un framework de microbenchmark (<a href="http://mail.openjdk.java.net/pipermail/code-tools-dev/2013-March/000004.html" rel="nofollow">Java Microbenchmark Harness</a>) a été intégré aux outils livrés avec OpenJDK. Ce framework a d&rsquo;ores et déjà été utilisé pour vérifier les performances de l&rsquo;api java.util.concurrent (JSR-166) , l&rsquo;inclusion de nouveaux langages dynamiques (JSR-292, InvokeDynamic) et plus récemment pour le projet Lambda (JDK 8).</p>
<h4 id="RevuedePresseXebia-Lingual:uneinterfaceSQLpourCascading">Lingual : une interface SQL pour Cascading</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bdechoux' target='_blank'><img title='http://blog.xebia.fr/author/bdechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bdechoux' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/BertrandDechoux' target='_blank'><img title='http://twitter.com/BertrandDechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/BertrandDechoux' width='24' height='24' /></a><a class='c2w-author-icon' href='https://github.com/BertrandDechoux' target='_blank'><img title='https://github.com/BertrandDechoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='https://github.com/BertrandDechoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bdechoux' target='_blank'>Bertrand Dechoux</a></span></div>
<p><a href="http://blog.xebia.fr/2012/09/14/les-dessous-de-cascalog-cascading/" rel="nofollow">Cascading</a> fait partie des solutions telles que <a href="http://pig.apache.org/" rel="nofollow">Pig</a> ou <a href="http://hive.apache.org/" rel="nofollow">Hive</a> vous permettant de grandement réduire la complexité de conception et de maintenance de vos jobs MapReduce pour un cluster <a href="http://hadoop.apache.org/" rel="nofollow">Hadoop</a>. De nombreuses surcouches ont été créées afin de se détacher de la verbosité de java mais surtout afin de fournir des abstractions encore plus élevées. <a href="http://blog.xebia.fr/2012/02/08/cascalog-ou-comment-ecrire-ses-mapreduces-de-facon-concise-6/" rel="nofollow">Cascalog</a> (clojure) et <a href="https://github.com/twitter/scalding" rel="nofollow">Scalding</a> (scala) sont les deux exemples les plus connus. Le dernier de la famille, <a href="http://www.cascading.org/lingual/" rel="nofollow">Lingual</a>, vient de sortir finalement au grand jour. Il se distingue de ses ainés en proposant à ses utilisateurs un langage plus connu : le SQL. Il se place ainsi en concurrence directe avec Hive qui lui aussi propose de traiter les données par l&rsquo;intermédiaire de requêtes formulées en (pseudo-)SQL. Affaire à suivre.</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/16/revue-de-presse-xebia-2013-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seconde session de l&#8217;atelier NginX le 23 avril chez Xebia</title>
		<link>http://blog.xebia.fr/2013/04/15/seconde-session-de-latelier-nginx-le-23-avril-chez-xebia/</link>
		<comments>http://blog.xebia.fr/2013/04/15/seconde-session-de-latelier-nginx-le-23-avril-chez-xebia/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 15:42:34 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[Tech Events]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Load B]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Web Caching]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13691</guid>
		<description><![CDATA[Après le succès de l&#8217;atelier NginX du 9 avril, Xebia a décidé d&#8217;organiser une seconde session le 23 avril prochain. Description: Facebook, GitHub, Dropbox et bien d&#8217;autres arrivent à gérer des millions de connexions simultanées. Leur secret ? Le serveur http NginX ! Xebia et eNovance s&#8217;associent pour vous faire découvrir ce serveur conçu dans la lointaine [...]]]></description>
				<content:encoded><![CDATA[
<p>Après le succès de l&rsquo;atelier NginX du 9 avril, Xebia a décidé d&rsquo;organiser une seconde session le 23 avril prochain.</p>
<h3>Description:</h3>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/03/nginx.gif" style="float:right; margin:0 0 10px 10px;" /></p>
<p>Facebook, GitHub, Dropbox et bien d&rsquo;autres arrivent à gérer des millions de connexions simultanées. Leur secret ? Le serveur http <a href="http://nginx.com/index.html" rel="nofollow">NginX</a> ! Xebia et <a href="http://www.enovance.com/" rel="nofollow">eNovance</a> s&rsquo;associent pour vous faire découvrir ce serveur conçu dans la lointaine Russie, dont le succès n&rsquo;est plus à faire. Que vous soyez ops ou devs, cet atelier s&rsquo;adresse à vous qui avez l&rsquo;habitude de travailler avec Apache en front de vos applications web.</p>
<p>Au cours de cette soirée, nous aborderons les différentes configurations possibles grâce à NginX comme la gestion du SSL, la configuration des logs et du monitoring, le reverse proxy et le load balancing. Cette session sera également l&rsquo;occasion de profiter d&rsquo;un retour d&rsquo;expérience de <a href="http://www.linkedin.com/pub/c%C3%A9dric-lecomte/16/896/234" rel="nofollow">Cédric Lecomte</a> qui est expert NginX chez eNovance.</p>
<p>Cet atelier, animé par <a href="http://blog.xebia.fr/author/slemesle/" rel="nofollow">Séven Le Mesle</a>, <a href="http://blog.xebia.fr/author/smoreau/" rel="nofollow">Stéphane Moreau</a>, <a href="https://twitter.com/GeromeEgron" rel="nofollow">Gérôme Egron</a><a href="https://intranet.xebia.com/confluence/display/~gegron" rel="nofollow"> et </a><a href="http://blog.xebia.fr/author/garnaud/" rel="nofollow">Guillaume Arnaud</a>, aura lieu le <strong>mardi 23 avril</strong> à <strong>19h</strong> dans les locaux de Xebia.</p>
<p>Vous pouvez dès maintenant vous inscrire sur <a href="http://xfr-nginx-workshop-redux.eventbrite.fr/" rel="nofollow">Eventbrite</a>.</p>
<p><strong>Adresse :</strong><br />156 Boulevard Haussmann à Paris<br /><span style="font-size: 10.0pt;line-height: 13.0pt;">Bâtiment A &#8211; 7ième </span><span style="font-size: 10.0pt;line-height: 13.0pt;">étage </span></p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/15/seconde-session-de-latelier-nginx-le-23-avril-chez-xebia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xebia accueille un handson du Paris Scala User Group</title>
		<link>http://blog.xebia.fr/2013/04/10/xebia-accueille-un-handson-du-paris-scala-user-group/</link>
		<comments>http://blog.xebia.fr/2013/04/10/xebia-accueille-un-handson-du-paris-scala-user-group/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 11:10:59 +0000</pubDate>
		<dc:creator>Jean Helou</dc:creator>
				<category><![CDATA[Java / JEE]]></category>
		<category><![CDATA[Paris Scala User Group]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13683</guid>
		<description><![CDATA[Le PSUG vous propose un rejeu du handson scala de Devoxx le 15 avril à 19:30 dans les locaux de Xebia. Vous n&#8217;avez pas pu aller à Devoxx ? Vous y étiez, mais la foule en délire vous a empêché de vous approcher de la salle du hands&#8217;on Scala avant que nous ne soyons contraints [...]]]></description>
				<content:encoded><![CDATA[
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/04/scala-logo.png" style="float:right; margin:0 0 10px 10px;" /></p>
<p>Le PSUG vous propose un rejeu du handson scala de Devoxx<strong> le 15 avril à 19:30 </strong>dans les locaux de Xebia.</p>
<p><span style="color: rgb(34,34,34);">Vous n&rsquo;avez pas pu aller à Devoxx ? Vous y étiez, mais la foule en délire vous a empêché de vous approcher de la salle du hands&rsquo;on Scala avant que nous ne soyons contraints de fermer les portes pour raisons de sécurité ? Vous aviez choisi de ne pas faire ce hands&rsquo;on mais la keynote de Martin Odersky vous a convaincu que Scala est l&rsquo;avenir ?</span>
<p/>
<p><span style="color: rgb(34,34,34);">Ne vous inquiétez pas, l&rsquo;équipe des flatmapDukes organise une scéance de repêchage pour le hands&rsquo;on ! </span><span style="color: rgb(34,34,34);font-size: 10.0pt;line-height: 13.0pt;">Ce hands&rsquo;on vous permettra de découvrir le langage Scala à travers la pratique d&rsquo;une série de tests unitaires commentés. Les animateurs sont là pour vous aider ou répondre aux questions.</span></p>
<p><span style="color: rgb(34,34,34);">Ca se passera le Lundi 15 avril chez Xebia a partir de 19h, <a href="http://dansscasla.eventbrite.com/" rel="nofollow">inscriptions sur l&rsquo;eventbrite</a>. </span></p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/10/xebia-accueille-un-handson-du-paris-scala-user-group/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Xebia est présent au Scrum Day 2013</title>
		<link>http://blog.xebia.fr/2013/04/10/xebia-est-present-au-scrum-day-2013/</link>
		<comments>http://blog.xebia.fr/2013/04/10/xebia-est-present-au-scrum-day-2013/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 09:18:17 +0000</pubDate>
		<dc:creator>Ludovic Pérot</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Scrum Day]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13674</guid>
		<description><![CDATA[Le Scrum Day a lieu ce jeudi 11 avril 2013 au centre de conférences IBM. Sponsor de l&#8217;évènement, Xebia y tiendra un stand où vous pourrez nous rencontrer à chaque pause. Venez discuter avec nous Agilité et Scrum ! Et nous partageons lors des différentes sessions : A 11h, amphithéâtre Pascal, &#8216;Product Ownership dans le [...]]]></description>
				<content:encoded><![CDATA[
<p><a href="http://blog.xebia.fr/wp-content/uploads/2013/04/scrum-day.png" target="_blank"><img width="300" src="http://blog.xebia.fr/wp-content/uploads/2013/04/scrum-day-300x123.png" style="float:right; margin:0 0 10px 10px;" /></a></p>
<p>Le Scrum Day a lieu ce jeudi 11 avril 2013 au centre de conférences IBM.</p>
<p>Sponsor de l&rsquo;évènement, Xebia y tiendra un stand où vous pourrez nous rencontrer à chaque pause. Venez discuter avec nous Agilité et Scrum !</p>
<p>Et nous partageons lors des différentes sessions :</p>
<ul>
<li>A 11h, amphithéâtre Pascal, &lsquo;<strong>Product Ownership dans le brouillard&rsquo;</strong>, un retour d&rsquo;expérience donné par <a href="/confluence/display/~apedro">Audrey Pedro</a>, <a href="/confluence/display/~gmantel">Gilles Mantel</a> et Luis Diaz, Product Manager chez Emailvision ;</li>
<li>A 14h, Salle Longchamp, le lightning talk <strong>&lsquo;Comment changer le monde&rsquo;</strong> de <a href="/confluence/display/~ygrenzinger">Yannick Grenzinger</a> ;</li>
<li>A 15h30, Salle Convention, <strong>&lsquo;Escapade au pays du backlog&rsquo;</strong>, un atelier animé par <a href="/confluence/display/~lperot">Ludovic Perot</a>.</li>
</ul>
<p> </p>
<p> </p>
<p> </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/10/xebia-est-present-au-scrum-day-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/</link>
		<comments>http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 07:27:36 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[AppDynamics]]></category>
		<category><![CDATA[Blink]]></category>
		<category><![CDATA[Chrole]]></category>
		<category><![CDATA[DeployIt]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13664</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Agilité 8 conseils pour réussir son logiciel (By Couthaïer Farfra) Le changement c&#8217;est simple comme une mélodie (By Couthaïer Farfra) Web AngularJS : Universal-irreversibility et quantum-manipulation (By Dmytro Podyachiy) Chrome devient blink, blink (By Mathieu Breton) Le coin de la technique Un build incassable [...]]]></description>
				<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" alt="Revue de Presse Xebia" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" /><br />
<em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Agilit%C3%A9">Agilité</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-8conseilspourr%C3%A9ussirsonlogiciel">8 conseils pour réussir son logiciel</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Lechangementc%27estsimplecommeunem%C3%A9lodie">Le changement c&rsquo;est simple comme une mélodie</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/cfarfra" target="_blank">Couthaïer Farfra</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-AngularJS%3AUniversal-irreversibilityetquantum-manipulation">AngularJS : Universal-irreversibility et quantum-manipulation</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/dpodyachiy" target="_blank">Dmytro Podyachiy</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Chromedevientblink%2Cblink">Chrome devient blink, blink</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/mbreton" target="_blank">Mathieu Breton</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Unbuildincassable%3F">Un build incassable ?</a> <span class="c2w-toc-author">(By <a href="http://blog.xebia.fr/author/jecouignoux" target="_blank">Jean-Eudes Couignoux</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-Ev%C3%A8nementsdenotrecommunaut%C3%A9enFranceet%C3%A0l%27%C3%A9tranger">Evènements de notre communauté en France et à l&rsquo;étranger</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/#RevuedePresseXebia-S%C3%A9minaire17avril2013%3AKaraveloptimisesesop%C3%A9rationsITavecDeployitetAppDynamics">Séminaire 17 avril 2013: Karavel optimise ses opérations IT avec Deployit et AppDynamics</a> <span class="c2w-toc-author">(By <a href="http://twitter.com/xebialabsfr" target="_blank">Aurélie Amet</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Agilité"><span style="font-size: 1.4em;">Agilité</span></h3>
<h4 id="RevuedePresseXebia-8conseilspourréussirsonlogiciel">8 conseils pour réussir son logiciel</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Couthaïer Farfra</a></span></div>
<p>Florent Lothon, du blog <a href="http://www.agiliste.fr/" rel="nofollow">L&rsquo;agiliste</a>, nous offre en avant première (petits veinards) un document dans lequel il décrit ses <a href="http://www.agiliste.fr/8-conseils-dami-pour-reussir-son-logiciel" rel="nofollow">8 conseils pour réussir son logiciel</a>. Rien de nouveau par rapport à ce que tout bon Agiliste se doit de connaitre, mais un petit rappel ne fait jamais de mal.</p>
<h4 id="RevuedePresseXebia-Lechangementc'estsimplecommeunemélodie">Le changement c&rsquo;est simple comme une mélodie</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/cfarfra' target='_blank'><img title='http://blog.xebia.fr/author/cfarfra' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/cfarfra' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/cfarfra' target='_blank'>Couthaïer Farfra</a></span></div>
<p>Sur son blog <a href="http://www.qualitystreet.fr/" rel="nofollow">Qualitystreet</a>, Jean-Claude Grosjean propose une vidéo intéressante sur l&rsquo;acceptation du changement par le jeu.</p>
<p>Ca se pase ici <a href="http://www.qualitystreet.fr/2013/04/08/le-changement-cest-simple-comme-une-melodie/" rel="nofollow">http://www.qualitystreet.fr/2013/04/08/le-changement-cest-simple-comme-une-melodie/</a></p>
<h3 id="RevuedePresseXebia-Web"><span style="font-size: 1.4em;">Web</span></h3>
<h4 id="RevuedePresseXebia-AngularJS:Universal-irreversibilityetquantum-manipulation"><strong>AngularJS : Universal-irreversibility et quantum-manipulation</strong></h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/dpodyachiy' target='_blank'><img title='http://blog.xebia.fr/author/dpodyachiy' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/dpodyachiy' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/dimapod79' target='_blank'><img title='http://twitter.com/dimapod79' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/dimapod79' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/dimapod' target='_blank'><img title='http://github.com/dimapod' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/dimapod' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/dpodyachiy' target='_blank'>Dmytro Podyachiy</a></span></div>
<p><span style="color: #000000;">L’équipe <a href="http://angularjs.org/" rel="nofollow">AngularJS</a> a annoncé jeudi dernier <a href="http://blog.angularjs.org/2013/04/angularjs-106-universal-irreversibility.html" rel="nofollow">deux releases</a> de leur célèbre framework web: </span><strong><span style="color: #000000;">1.0.6</span></strong><span style="color: #000000;"> (universal-irreversibility) et </span><strong><span style="color: #000000;">1.1.4</span></strong><span style="color: #000000;"> (quantum-manipulation).</span></p>
<p><span style="color: #000000;">La mise à jour de la branche stable vers <strong>1.0.6</strong> apporte principalement la correction de bugs et l’amélioration de la documentation.</span></p>
<p><span style="color: #000000;">La release <strong>1.1.4</strong> est beaucoup plus prolifique. Il s’agit de la branche dite instable (même si tous les tests passent) dans laquelle l’équipe ajoute des nouvelles fonctionnalités qui seront plus tard intégrées dans une future branche stable. </span><span style="color: #000000;">Cette version apporte l&rsquo;amelioration de la directive <strong>ngRepeat </strong>qui devient plus flexible et plus rapide</span><span style="color: #000000;">, les intercepteurs http basés sur les promises, le</span><strong><span style="font-size: 10.0pt; line-height: 13.0pt; color: #000000;"> “watch” sur les collections</span></strong><span style="color: #000000;"> ainsi que le support de la </span><strong><span style="font-size: 10.0pt; line-height: 13.0pt; color: #000000;">génération dynamique des templates</span></strong><span style="color: #000000;">.</span></p>
<p><span style="color: #000000;">Mais la nouveauté la plus importante est bien sûr le tant attendu <strong>support des </strong></span><strong><span style="color: #000000;">animations</span></strong><span style="color: #000000;"> (directive </span><span style="color: #000000;"><strong>ngAnimate</strong>)</span><span style="color: #000000;">, permettant de simplifier considérablement l’intégration des animations dans les applications Angular. </span>Le créateur de framework, <span style="color: #000000;">Miško</span><span style="color: #000000;"> Hevery,</span> a même fait une présentation à ce sujet : la vidéo est <a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=cF_JsA9KsDM" rel="nofollow">ici</a>.</p>
<h4 id="RevuedePresseXebia-Chromedevientblink,blink"><span style="color: #000000;">Chrome devient blink, blink</span></h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/mbreton' target='_blank'><img title='http://blog.xebia.fr/author/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/mbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/matbreton' target='_blank'><img title='http://twitter.com/matbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/matbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/mbreton' target='_blank'><img title='http://github.com/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/mbreton' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/mbreton' target='_blank'>Mathieu Breton</a></span></div>
<p><span style="color: #000000;">L’actu web de la semaine est très certainement l’annonce de Google qui va migrer le moteur de rendu de son butineur <span style="color: #000000;">dans sa version 28, </span>pour Blink. Le géant de la recherche sera suivi par Opera qui avait </span><a style="color: #000000;" href="http://blog.xebia.fr/2013/02/19/revue-de-presse-xebia-2013-08/#RevuedePresseXebia-OperapassesousWebKitetV8" rel="nofollow">changé dernièrement pour Webkit</a><span style="color: #000000;">.</span></p>
<p><span style="color: #000000;">Blink est un fork de Webkit, il est né de la volonté de l’équipe de Chromium de permettre au navigateur Open source d’accélérer ses évolutions futures. En effet, Webkit est basé sur une architecture multi-thread différente de celle utilisée par Chromium/Chrome, ce qui entraînait pour les développeurs du projet une charge de travail supplémentaire à chaque évolution de ce dernier.</span></p>
<p><span style="color: #000000;">La question qui vient tout de suite à l’esprit pour les gens qui font du web reste : Qui dit nouveau moteur de rendu, dit comportements différents !?</span></p>
<p><span style="color: #000000;">Eh bien non répond l’équipe, du moins pas pour l’instant, car dans les premiers mois ils seront occupés par un refactoring façon caterpilar, où ils vont supprimer pas loin de 7000 fichiers et 4,5 millions de lignes de code source “legacy”. Le navigateur va donc surtout gagner en performance. Toutefois, Google assure qu’il continuera à respecter les standards du web<strong> </strong>pour les prochaines évolutions.</span></p>
<p><span style="color: #000000;">Cette nouvelle pour moi, est une bonne chose au vu de la crainte que commençait à engendrer l’omniprésence de WebKit. Un nouveau moteur de rendu obligera les différentes implémentation à respecter les standards si elles veulent rester dans la course. Ceci dit, on peut légitiment se demander si Google commence à faire cavalier seul dans le but d’intégrer la VM Dart </span><a style="color: #000000;" href="https://lists.webkit.org/pipermail/webkit-dev/2011-December/018775.html" rel="nofollow">qui avait été refusé à l’époque par l’équipe de WebKit</a><span style="color: #000000;">, une manière pour eux d&rsquo;installer leur langage sur Chrome, Android, Chrome OS et Opera&#8230;</span></p>
<p><span style="color: #000000;">PS : Vous pouvez aussi connaitre les vraies/fausses raisons du fork <span style="color: #000000;">&lt;troll&gt;</span><a href="http://prng.net/blink-faq.html" rel="nofollow">ici</a>&lt;/troll&gt;</span></p>
<h3 id="RevuedePresseXebia-Lecoindelatechnique">Le coin de la technique</h3>
<h4 id="RevuedePresseXebia-Unbuildincassable?">Un build incassable ?</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://blog.xebia.fr/author/jecouignoux' target='_blank'><img title='http://blog.xebia.fr/author/jecouignoux' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/jecouignoux' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/jecouignoux' target='_blank'>Jean-Eudes Couignoux</a></span></div>
<p>La version 1.8.2 de git est arrivée courant Mars 2013. En plus des habituelles corrections de bug (<a href="https://raw.github.com/git/git/master/Documentation/RelNotes/1.8.2.txt" rel="nofollow">lien vers la release note</a>), cette version apporte un nouveau hook : le pre-push. Pour rappel, un hook est une fonctionnalité de git permettant d&rsquo;éxecuter un script shell avant ou après une action : par exemple un commit.</p>
<p>Ce nouveau hook va par exemple nous permettre de toujours lancer un build maven avant de faire un push, et donc d&rsquo;éviter l&rsquo;éternelle question : Mais qui a encore cassé le build ?</p>
<p>Pour créer un nouveau hook sur votre projet, Il faut :</p>
<ul>
<li>renommer le fichier pre-push.sample en pre-push</li>
<li>donner les droits d&rsquo;exécution à ce fichier</li>
<li>modifier le fichier en écrivant votre script shell.</li>
</ul>
<h3 id="RevuedePresseXebia-EvènementsdenotrecommunautéenFranceetàl'étranger">Evènements de notre communauté en France et à l&rsquo;étranger</h3>
<h4 id="RevuedePresseXebia-Séminaire17avril2013:KaraveloptimisesesopérationsITavecDeployitetAppDynamics">Séminaire 17 avril 2013: Karavel optimise ses opérations IT avec Deployit et AppDynamics</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon' href='http://twitter.com/xebialabsfr' target='_blank'><img title='http://twitter.com/xebialabsfr' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/xebialabsfr' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://twitter.com/xebialabsfr' target='_blank'>Aurélie Amet</a></span></div>
<p>Durant toute une après-midi, apprenez à o<span style="color: #3a3a3a;">ptimiser vos Opérations IT en Automatisant vos Déploiements et en Monitorant efficacement vos Applications en Production.</span></p>
<p>Encore des places disponibles</p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/09/revue-de-presse-xebia-2013-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour sur Devoxx France 2013</title>
		<link>http://blog.xebia.fr/2013/04/05/retour-sur-devoxx-france-2013/</link>
		<comments>http://blog.xebia.fr/2013/04/05/retour-sur-devoxx-france-2013/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 10:03:00 +0000</pubDate>
		<dc:creator>Benoît Lemoine</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[devoxxfr]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13645</guid>
		<description><![CDATA[Devoxx France 2013 s&#8217;est achevé en cette veille de week-end de Pâques 2013 et on peut dire que, pour cette deuxième édition française, l&#8217;essai a été transformé. Durant trois jours, les universités, conférences et autres quickies se sont enchainés à un rythme frénétique sur des sujets aussi variés que Java, les langages alternatifs, le web, [...]]]></description>
				<content:encoded><![CDATA[
<p><img src="http://blog.xebia.fr/wp-content/uploads/2013/03/devoxx-logo-2013.png" width="267"  height="80" style="float:right; margin:0 0 20px 20px;" /></p>
<p><a href="http://www.devoxx.com/display/FR13/Home" rel="nofollow">Devoxx France</a> 2013 s&rsquo;est achevé en cette veille de week-end de Pâques 2013 et on peut dire que, pour cette deuxième édition française, l&rsquo;essai a été transformé. Durant trois jours, les universités, conférences et autres quickies se sont enchainés à un rythme frénétique sur des sujets aussi variés que Java, les langages alternatifs, le web, Big Data ou encore l&rsquo;agilité. En effet, cette édition se voulait une ouverture du monde javaïste vers l&rsquo;écosystème dont il dépend.</p>
<p> Cet article se veut un compendium des impressions des Xebians au terme de ces trois jours.</p>
<h3 id="RetoursurDevoxxFrance2013-ProgrammationFonctionnelle">Programmation Fonctionnelle</h3>
<p>La keynote d&rsquo;ouverture du jeudi matin par Martin Odersky semble donner le ton de ce Devoxx : il va y avoir de la programmation fonctionnelle, beaucoup de programmation fonctionnelle. Cependant, M. Odersky se fait l&rsquo;avocat d&rsquo;une approche mixte objet/fonctionnel, afin de tenter de tirer le meilleur des deux mondes. Le programme ne dément pas ce ressenti, au cours de ces deux jours on entendra parler de foncteurs, de monades, de morphismes, mais surtout, et c&rsquo;est le plus important, on apprendra à utiliser ces objets aux noms barbares. Et, même si <a href="http://scala-lang.org/" rel="nofollow">Scala</a> se tient finalement sur le haut du podium comme langage de démonstration, on entendra aussi parler de <a href="http://clojure.org/" rel="nofollow">Clojure</a>, de Java 8 et même de <a href="http://www.typescriptlang.org/" rel="nofollow">Typescript</a> ! Et c&rsquo;est justement en parlant de programmation fonctionnelle coté client que M. Odersky lâche une bombe au cours du B.O.F du Paris Scala User Group : un compilateur Scala vers Javascript est en cours d&rsquo;écriture.</p>
<h3 id="RetoursurDevoxxFrance2013-Web">Web</h3>
<p>Les applications et architectures Web au sens large sont un autre des axes majeurs de cette édition de Devoxx. En effet, on entendra beaucoup parler de framework Web (coté serveur et coté client), de Javascript, de CSS et d&rsquo;architecture favorisant la distribution des composants sur le Web, sujet dont Habib Guergachi est un virulent avocat, comme il l&rsquo;a démontré au cours de sa keynote du vendredi matin. Plusieurs API Javascript peu connue sont présentées, tel que la <a href="https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html" rel="nofollow">gamepad API</a> permettant de communiquer avec une manette de jeu au sens large (une guitare de guitar Hero ou un tapis de danse étant des &quot;manettes de jeu&quot;) ou encore des API Web permettant la capture et l&rsquo;analyse vocale. Coté serveur, Matt Raible a mis à jour sa célèbre comparaison de framework Web et donne à l&rsquo;heure acutelle toujours <a href="http://grails.org/" rel="nofollow">Grails</a> gagnant, talonné de près par <a href="http://playframework.org/" rel="nofollow">Play</a>. Il fait malheureusement le choix de ne pas différencier les versions 1 et 2 de Play Framework.</p>
<h3 id="RetoursurDevoxxFrance2013-Divers">Divers</h3>
<p><span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">Les langages alternatifs étaient également à l&rsquo;honneur cette année puisque que nous avons eu le droit à des sessions sur </span><a href="http://ceylon-lang.org/" style="font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;" rel="nofollow">Ceylon</a>, <a href="http://groovy.codehaus.org/" rel="nofollow">Groovy</a>, <span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;"><a href="http://www.scala-lang.org/" rel="nofollow">Scala</a>, </span><a href="https://code.google.com/p/frege/" style="font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;" rel="nofollow">Fredge</a><span style="color: rgb(51,51,51);font-size: 10.0pt;font-weight: normal;line-height: 13.0pt;">, <a href="http://clojure.org/" rel="nofollow">Clojure</a> et <a href="http://golo-lang.org/" rel="nofollow">Golo</a>. Ce qui confirme la tendance à toujours miser sur la Java Virtual Machine tout en cherchant des alternatives plus productives que Java. Comme à la session précédente, Devoxx a été l&rsquo;occasion pour nous autres développeurs de <s>nous ré-</s></span><s>émerveiller</s><span style="font-size: small;"><span style="line-height: 13.0pt;"><s> de diodes qui clignotent</s> voir des systèmes embarqués avec les multiples démonstrations de </span></span><a href="http://www.raspberrypi.org/" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">Raspberry Pi</a>,<span style="font-size: 10.0pt;line-height: 13.0pt;">de </span><a href="http://beagleboard.org/bone" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">Beaglebone</a> et autre <a href="http://www.arduino.cc/" rel="nofollow">Arduino</a><span style="font-size: 10.0pt;line-height: 13.0pt;">, ces petites cartes permettant à tout bon geek de bricoler des solutions de domotique ou encore de faire tourner WebSphere 8.5 &#8230; si si c&rsquo;est possible </span><img src="/confluence/s/fr_FR/3391/c989735defd8798a9d5e69c058c254be2e5a762b.2/_/images/icons/emoticons/smile.png" alt="(sourire)" />.</p>
<p>Les GPU et les Intel Xeon Phi ont fait parler d&rsquo;eux pour le calcul distribué. <a href="http://www.murex.com/home.php" rel="nofollow">Murex</a> a par exemple fait un retour d&rsquo;expérience sur une implémentation GPU/CPU de <span style="font-size: 10.0pt;line-height: 13.0pt;">la </span><a href="http://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte-Carlo" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">Méthode de Monte-Carlo</a> <span style="font-size: 10.0pt;line-height: 13.0pt;">qui leur a permis de diminuer leur temps de calcul p</span><span style="font-size: 10.0pt;line-height: 13.0pt;">ar un facteur 100 par rapport à un calcul pure CPU. Cette transition à été effectué en trois mois grâce à </span><a href="http://fr.wikipedia.org/wiki/OpenCL" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">OpenCL</a><span style="font-size: 10.0pt;line-height: 13.0pt;">,</span></p>
<h3 id="RetoursurDevoxxFrance2013-Autres">Autres</h3>
<p>Certains sujets ne touchaient pas directement notre métier de développeur, mais n&rsquo;en restaient pas moins intéressants pour s&rsquo;ouvrir à d&rsquo;autres univers. Par exemple, la keynote d&rsquo;ouverture présentée par Clarisse Herrenschmidt, concernant l&rsquo;histoire des signes et de leur sens, était une présentation de sémiologie très intéressante, y compris pour un parterre de développeurs peu habitués à ce sujet. Dans la même veine, la conférence de Michaël De Smet au sujet du mécanisme de brevet logiciel européen était très enrichissante de par son objectivité sur un sujet qui est souvent, et pas complétement à tort, diabolisé. </p>
<h3 id="RetoursurDevoxxFrance2013-Conclusion">Conclusion</h3>
<p>Comme l&rsquo;année dernière, ces trois <span style="font-size: 10.0pt;line-height: 13.0pt;">jours très intenses intellectuellement ont été une occasion inouïe, pour nous français, de découvrir les tendances actuelles dans le monde du développement logiciel et d&rsquo;en tirer des enseignements souvent applicables directement sur nos projets. Et pour les malchanceux qui n&rsquo;ont pas pu être présents, sachez que le site </span><a href="http://parleys.com/" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">Parleys</a><span style="font-size: 10.0pt;line-height: 13.0pt;"> a été totalement refondu en HTML5 (et vaut sacrément le détour) et que l&rsquo;ensemble des sessions filmées à ce Devoxx France seront en accès gratuit, comme nous l&rsquo;a annoncé </span><a href="https://twitter.com/Stephan007" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">Stephan Janssen</a><span style="font-size: 10.0pt;line-height: 13.0pt;">, père de Devoxx, lors de sa keynote.</span></p>
<p>Un grand merci à l&rsquo;équipe d&rsquo;organisation de Devoxx et à l&rsquo;année prochaine ! </p>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/05/retour-sur-devoxx-france-2013/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/</link>
		<comments>http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 07:30:03 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[EmberJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jongo]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[unreal 3]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=13637</guid>
		<description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Web Sortie de Ember.js RC2 (Par Mathieu Breton) Jongo .4 est disponible (Par Yves Amsellem et Benoît Guérout) Mozilla et Epic porte le célèbre moteur de jeu Unreal 3 sur le navigateur (Par Yannick Grenzinger) Expérience utilisateur L&#39;expérience utilisateur est une communauté de pratiques [...]]]></description>
				<content:encoded><![CDATA[
</p>
<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
  <em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em>
</p>
</p>
<div class="c2w-toc">
<ul>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-Web">Web</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-SortiedeEmber.jsRC2">Sortie de Ember.js RC2</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/mbreton" target="_blank">Mathieu Breton</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-Jongo.4estdisponible">Jongo .4 est disponible</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/yamsellem" target="_blank">Yves Amsellem</a> et <a href="http://blog.xebia.fr/author/bguerout" target="_blank">Benoît Guérout</a>)</span></div>
</li>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-MozillaetEpicportelec%C3%A9l%C3%A8bremoteurdejeuUnreal3surlenavigateur">Mozilla et Epic porte le célèbre moteur de jeu Unreal 3 sur le navigateur</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
<li class="c2w-toc-item c2w-toc-level3">
<div><a class="c2w-toc-label c2w-toc-level3" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-Exp%C3%A9rienceutilisateur">Expérience utilisateur</a></div>
<ul>
<li class="c2w-toc-item c2w-toc-level4">
<div><a class="c2w-toc-label c2w-toc-level4" href="http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/#RevuedePresseXebia-L%27exp%C3%A9rienceutilisateurestunecommunaut%C3%A9depratiques">L&#39;expérience utilisateur est une communauté de pratiques</a> <span class="c2w-toc-author">(Par <a href="http://blog.xebia.fr/author/ygrenzinger" target="_blank">Yannick Grenzinger</a>)</span></div>
</li>
</ul>
</li>
</ul>
</div>
<h3 id="RevuedePresseXebia-Web">Web</h3>
<h4 id="RevuedePresseXebia-SortiedeEmber.jsRC2">Sortie de Ember.js RC2</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' target='_blank'><img title='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' src='https://secure.gravatar.com/avatar/edb702be0a60b6d21c9dc78d20b13fcf.jpg?s=24' alt='http://www.gravatar.com/edb702be0a60b6d21c9dc78d20b13fcf' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/mbreton' target='_blank'><img title='http://blog.xebia.fr/author/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/mbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/matbreton' target='_blank'><img title='http://twitter.com/matbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/matbreton' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/mbreton' target='_blank'><img title='http://github.com/mbreton' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/mbreton' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/mbreton' target='_blank'>Mathieu Breton</a></span></div>
<p>La nouvelle release candidate du framework MVC JavaScript Ember.Js, la 1.0-RC2, vient d&rsquo;apparaitre. Cette dernière mouture au delà de corriger des bugs, et compléter la documentation, apporte des améliorations comme :</p>
<ul>
<li>la possibilité d&rsquo;accéder a des controllers or du package &quot;App&quot; avec la syntaxe &quot;pacakage/controller&quot;. Ainsi pour accéder a un controller &quot;Blog.PostController&quot; dans le helper <em>render</em> vous pourrez faire <strong>{{render &lsquo;blog/posts&rsquo;}} ;</strong></li>
<li>la capacité d&rsquo;injecter un modèle différent de celui de base dans le helper render ;</li>
<li>l&rsquo;extraction automatique du model des ObjectController quand ceux-ci sont passer en paramètre d&rsquo;une <em>action</em> ou d&rsquo;un <em>linkTo ;</em></li>
<li>le support de JQuery 2.0. Pour rappelle JQuery 2.x ne supporte internet explorer qu&rsquo;a partir de la version 9 ;</li>
<li>l&rsquo;ajout d&rsquo;une nouvelle view <em>Ember.LinkView</em> pour l&rsquo;ajout de balise a avec un comportement de linkTo intégré ;</li>
<li>une propriété <em>ENV.LOG_VERSION</em> pour activer/désactiver les logs de version au démarrage ;</li>
<li>une amélioration de l&rsquo;initialisation de démarrage. Ce qui entraine la dépréciation de <em>App.initialize</em> au profit de <em>App.deferReadiness</em> et <em>App.advanceReadiness.</em></li>
</ul>
<p><a href="http://emberjs.com/blog/2013/03/30/ember-1-0-rc2.html" rel="nofollow">Annonce officielle</a></p>
<h4 id="RevuedePresseXebia-Jongo.4estdisponible">Jongo .4 est disponible</h4>
<p><div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/0a40a289089f2d262cc713c54cae7fa2' target='_blank'><img title='http://www.gravatar.com/0a40a289089f2d262cc713c54cae7fa2' src='https://secure.gravatar.com/avatar/0a40a289089f2d262cc713c54cae7fa2.jpg?s=24' alt='http://www.gravatar.com/0a40a289089f2d262cc713c54cae7fa2' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/bguerout' target='_blank'><img title='http://blog.xebia.fr/author/bguerout' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/bguerout' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/bguerout' target='_blank'><img title='http://twitter.com/bguerout' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/bguerout' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/bguerout' target='_blank'>Beno&#238;t Guérout</a></span></div><br />
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/20c8f85d9e53f50529f984a86fc011ae' target='_blank'><img title='http://www.gravatar.com/20c8f85d9e53f50529f984a86fc011ae' src='https://secure.gravatar.com/avatar/20c8f85d9e53f50529f984a86fc011ae.jpg?s=24' alt='http://www.gravatar.com/20c8f85d9e53f50529f984a86fc011ae' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/yamsellem' target='_blank'><img title='http://blog.xebia.fr/author/yamsellem' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/yamsellem' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/amsellemyves' target='_blank'><img title='http://twitter.com/amsellemyves' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/amsellemyves' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/yamsellem' target='_blank'>Yves Amsellem</a></span></div></p>
<p><a href="http://www.jongo.org/" rel="nofollow">Jongo</a> — pour requêter en Java comme dans le shell Mongo — fête le retour du printemps avec une release, la 0.4.<br />Au menu, de nombreuses pull requests et raffinements proposés par la communauté<span style="font-size: 10.0pt;line-height: 13.0pt;"> :</span></p>
<ul>
<li>Update et Insert acceptent des objets en paramètres — update.with(pojo), insert(pojo, pojo)</li>
<li>Les Command peuvent être jouées — runCommand(..).as(pojo)</li>
<li>@id est devenu un alias pour simplifier @JsonProperty(&quot;_id&quot;)</li>
<li>@ObjectId <span>permet de manipuler tous les ObjectId en String</span></li>
<li>Et <a href="http://www.jongo.org/#notes" rel="nofollow">de nombreuses autres surprises</a></li>
</ul>
<p>N’attendez plus pour <a href="http://search.maven.org/#search%7Cga%7C1%7Cjongo" rel="nofollow">le télécharger sur maven central</a> et commencer l’exploration de <a href="http://www.jongo.org/" rel="nofollow">sa documentation</a>.<br />Un fois n’est pas coutume, <a href="https://groups.google.com/forum/?fromgroups#!forum/jongo-user" rel="nofollow">laissez votre feedback sur la mailinglist</a>.</p>
<h4 id="RevuedePresseXebia-MozillaetEpicportelec%C3%A9l%C3%A8bremoteurdejeuUnreal3surlenavigateur">Mozilla et Epic porte le célèbre moteur de jeu Unreal 3 sur le navigateur</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p>En combinant WebGL, Emscripten (un outil permettant de compiler des applications C+ vers Javascript) et la toute nouvelle librairie asm.js, le portage d&rsquo;Unreal 3 peut, selon Mozilla, rivaliser avec les performances natives. C&rsquo;est une excellente nouvelle pour le futur du web et c&rsquo;est la preuve qu&rsquo;il est possible de faire des application de plus en plus riche sur un navigateur.</p>
<p>L&rsquo;annonce officielle est ici: <a href="https://blog.mozilla.org/blog/2013/03/27/mozilla-is-unlocking-the-power-of-the-web-as-a-platform-for-gaming/" rel="nofollow">https://blog.mozilla.org/blog/2013/03/27/mozilla-is-unlocking-the-power-of-the-web-as-a-platform-for-gaming/</a></p>
<h3 id="RevuedePresseXebia-Exp%C3%A9rienceutilisateur">Expérience utilisateur</h3>
<h4 id="RevuedePresseXebia-L%27exp%C3%A9rienceutilisateurestunecommunaut%C3%A9depratiques">L&rsquo;expérience utilisateur est une communauté de pratiques</h4>
<div class="c2w-author"><div class="c2w-author-icons"><a class='c2w-author-icon c2w-author-gravatar' href='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' target='_blank'><img title='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' src='https://secure.gravatar.com/avatar/94d0042d24a2eaf116efd4c69ac90541.jpg?s=24' alt='http://www.gravatar.com/94d0042d24a2eaf116efd4c69ac90541' width='24' height='24' /></a><a class='c2w-author-icon' href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'><img title='http://blog.xebia.fr/author/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-xebia.png' alt='http://blog.xebia.fr/author/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://twitter.com/ygrenzinger' target='_blank'><img title='http://twitter.com/ygrenzinger' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-twitter.png' alt='http://twitter.com/ygrenzinger' width='24' height='24' /></a><a class='c2w-author-icon' href='http://github.com/user' target='_blank'><img title='http://github.com/user' src='http://blog.xebia.fr/wp-content/plugins/confluence2wordpress/img/rkc-social-set/24x24/24x24-github.png' alt='http://github.com/user' width='24' height='24' /></a></div><span class='c2w-author-name'>Par <a href='http://blog.xebia.fr/author/ygrenzinger' target='_blank'>Yannick Grenzinger</a></span></div>
<p><span style="font-size: 10.0pt;line-height: 13.0pt;">Si les 25 premières minutes de cette conférence </span><a href="http://www.infoq.com/presentations/UX-Future" style="font-size: 10.0pt;line-height: 13.0pt;" rel="nofollow">http://www.infoq.com/presentations/UX-Future</a> s&rsquo;adresse directement à la communauté des spécialistes de l&rsquo;UX, les 10 dernières minutes nous parlent à tous.</p>
<div>Le présentateur <span style="color: rgb(0,0,0);">Adrian Howard</span> explique que:</div>
<ul>
<li>l&rsquo;UX prend une place de plus en plus importante avec l&rsquo;augmentation des devices et des utilisateurs (sans compter que même dans le SI l&rsquo;exigence a augmentée).</li>
<li>
<div>les acteurs de l&rsquo;UX ne sont pas assez nombreux pour répondre au besoin</div>
</li>
<li>
<div>que d&rsquo;autres personnes comme les développeurs peuvent apporter leur aide à créer de bonnes expériences utilisateurs</div>
</li>
<li>
<div>que l&rsquo;UX est en fait une communauté de pratiques, plus qu&rsquo;un regroupement de métiers</div>
</li>
<li>
<div>que des livres comme &quot;The 4 steps to epiphany&quot; et plus récemment &quot;Lean startup&quot; ont très bien su vendre au business des pratiques proches de l&rsquo;UX</div>
</li>
</ul>
<!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic -->
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2013/04/02/revue-de-presse-xebia-2013-14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
